(изменено: Дмитрий Гамий, 24 ноября 2013 20:47:01)

Тема: Добавление атрибутов документа

Существует такая проблема: изначально при настройке все необходимые атрибуты для какого-либо вида документа учесть и привязать зачастую невозможно, по прошествии времени список атрибутов для заданного вида расширяется, но у документов, созданных ранее этого момента (добавления новых атрибутов) новые атрибуты документов автоматически в старых документах не добавляются.

Приводимый ниже макрос позволяет добавить новые атрибуты в старые документы (в те, где данная операция выполнима с учётом прав и статусов).

Макрос работает из режима "Архив" (из главного меню "Документооборот" - "Архив"). Атрибуты документа добавляются для вида документа, на котором был установлен курсор.

Для ускорения работы перед запуском макроса желательно установить фильтр по виду документа, для которого необходимо обновить атрибуты.

Sub FormMacro_AddDocParameters(TCSActiveModule)'Добавление атрибутов документа 
    Dim DocTypeId ' As Integer Идентификатор вида документа
    Dim DocTypeName ' As String Наименование вида документа
    Dim DocTypeAttr ' As IGModule Атрибуты документа для заданного вида документа
    Dim CurDocAttr ' As IGModule Атрибуты текущего документа
    Dim S ' As String
    Dim T '     
        
    If Not TCSActiveModule.IsEmpty Then
        DocTypeId = TCSActiveModule.Properties("TYPE_ID").AsInteger
        DocTypeName = TCSActiveModule.Properties("TYPE_NOTE").DisplayText
        
        S = "Обновить список атрибутов для документов вида """ & DocTypeName & """?"
        
        If TCSApp.MessageBox(S, "Запрос", vbYesNo Or vbExclamation) = vbYes Then
            If TCSApp.DocTypes.Locate("ID", DocTypeId, 0) Then
                Set DocTypeAttr = TCSApp.DocTypes.Properties("DOC_PARAMS").AsIDispatch
                If Not DocTypeAttr Is Nothing Then
                    DocTypeAttr.Refresh
                    If Not DocTypeAttr.IsEmpty Then
                        Call TCSApp.ShowProgressMessage("Идёт обработка данных ...", "")
                        TCSActiveModule.First    
                        Do While Not TCSActiveModule.Eof
                            If TCSActiveModule.Properties("TYPE_ID").AsSafeInteger = DocTypeId Then
                                Set CurDocAttr = TCSActiveModule.Properties("DOCPARAMS").AsIDispatch                            
                                If Not CurDocAttr Is Nothing Then   
                                    CurDocAttr.Refresh
                                    DocTypeAttr.First
                                    
                                    If CurDocAttr.AppendAction.Enabled Then
                                        Do While Not DocTypeAttr.Eof
                                            If Not CurDocAttr.Locate("ID", DocTypeAttr.Properties("PAR_ID").AsInteger, 0) Then
                                                Call CurDocAttr.CreateNew
                                                CurDocAttr.Properties("ID").Value = DocTypeAttr.Properties("PAR_ID").AsInteger
                                                CurDocAttr.Properties("REQ").Value = DocTypeAttr.Properties("REQUIRED").AsBoolean 
                                                On Error Resume Next
                                                Call CurDocAttr.SaveChanges
                                                Call CurDocAttr.CancelChanges    
                                                On Error Goto 0
                                            End If
                                            DocTypeAttr.Next
                                        Loop ' Do While Not DocTypeAttr.Eof 
                                                                                
                                    Else
                                        ' Нет прав для добавления атрибутов
                                    End If ' If DocTypeAttr.AppendAction.Enabled
                                End If
                                Set CurDocAttr = Nothing 
                            End If ' If TCSActiveModule.Properties("TYPE_ID").AsSafeInteger = DocTypeId
                            TCSActiveModule.Next
                        Loop                                         
                        Call TCSApp.HideProgressMessage
                    Else
                        Call TCSApp.ShowErrorMessage("Нет привязки атрибутов к документу вида """ & DocTypeName & """!")                        
                    End If ' If Not DocTypeAttr.IsEmpty
                
                Else
                    ' Ошибка доступа к атрибутам вида документа !
                    Call TCSApp.ShowErrorMessage("Ошибка доступа к атрибутам документа для вида """ & DocTypeName & """!")                    
                End If ' If Not DocTypeAttr Is Nothing                  
            
            Else
                Call TCSApp.ShowErrorMessage("Ошибка поиска записи в справочнике ""Виды документов"" по идентификатору " & CStr(DocTypeId) & "!")                    
            End If ' If TCSApp.DocTypes.Locate("ID", DocTypeId, 0)
            
        End If ' If TCSApp.MessageBox(S, "Запрос", vbYesNo Or vbExclamation) = vbYes
        
    Else
        T = TCSApp.MessageBox("В текущем модуле нет записей!", "Внимание!", vbOkOnly Or vbExclamation) 
    End If ' If Not TCSActiveModule.IsEmpty                                    
End Sub
Post's attachments

FormMacro_AddDocParameters.txt 4.51 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

Re: Добавление атрибутов документа

На сегодняшний момент лучше пользоваться методом IPModule2.SaveChangesEx