Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

Щелкните для увеличения изображения

1. Считать из сообщения реквизиты переданного документа.

 

  DocumentData = DCIGetDataFromProcessMessage(ProcessMessage; "DocumentData")

 

  // Получить код типа карточки документа.

  TypeCode = DocumentData.ValueByName("TypeCode")

  // Определить код вида документа по переданному имени.

  KindName = DocumentData.ValueByName("KindName")

  KindCode = DCIGetReferenceRecordRequisiteValue(SYSREF_EDOCUMENT_KINDS;

    SYSREQ_NAME; KindName;

    LoadStringFmt('E_EDOC_KIND_NOT_FOUND'; 'DCIEXAMPLE'; KindName);

    SYSREQ_CODE; FALSE; TRUE)

2. Получить глобальный ИД документа.

 

  // Получить глобальный ИД документа.

  GlobalID = DocumentData.ValueByName("GUID")

3. Заполнить значения базовых реквизитов документов.

 

// Получить документ.

Document: IEDocument.DCICustomDocument = DCIGetDocumentForReceive(

   GlobalID; TypeCode; KindCode; DocumentData.ValueByName("LifeStageName"))

 

// Заполнить значения базовых реквизитов документа.

Document.SYSREQ_EDOC_NAME = DocumentData.ValueByName("Name")

Document.SYSREQ_EDOC_NOTE = DocumentData.ValueByName("Note")

// Найти приложение-редактор документа.

DocumentExtension = Trim(DocumentData.ValueByName("Extension"))

if DocumentExtension <<>> ''

  Document.SYSREQ_EDOC_EDITOR = DCIGetReferenceRecordRequisiteValue(

    SYSREF_EDITORS; "ТипПриложения"; DocumentExtension;

    Format('Для расширения "%s" приложение-редактор не зарегистрировано';

     DocumentExtension); SYSREQ_CODE; FALSE; TRUE)

  endif

  DocumentStateValue = DocumentData.FindItem("State")

  if Assigned(DocumentStateValue)  

    StateRequisite = Document.FindRequisite(SYSREQ_STATE)

    if Assigned(StateRequisite)

      StateRequisite.Value = DocumentStateValue

    endif

  endif

Щелкните для увеличения изображения

4. Заполнить дополнительные реквизиты документа переданными данными.

Например, заполните реквизит SpecNum – дополнительный номер, вынесенный на карточку документа:

 

  Document.DCISpecNum = DocumentData.ValueByName("SpecNum")

5. Сохранить документ.

После синхронизации реквизитов сохраните документ:

 

  // Сохранить документ.

  try

    IsNewDocument = Document.Inserted

    Document.Save

    if IsNewDocument

      LogMessage = "Создан новый документ"

    else

      LogMessage = "Документ обновлен"

    endif

    DCIWriteHandlerLog("DEBUG"; LogMessage; ProcessMessage;

      "ID документа: " & Document.ID)

  except

    Document.Cancel

    Raise(GetLastException())

  endexcept

 

  // Обновить версии документа.

  DCIImportDocumentVersions(ProcessMessage; Document)

 

  // Импортировать поставленные подписи.

  DCIImportSignaturesFromProcessMessage(ProcessMessage; Document)

 

  Document.Save

Пример

 

  // Получить ProcessMessage.

  ProcessMessage = DCIGetProcessMessage()

 

  DocumentData = DCIGetDataFromProcessMessage(ProcessMessage; "DocumentData")

 

  // Получить код типа карточки документа.

  TypeCode = DocumentData.ValueByName("TypeCode")

 

  // Определить код вида документа по переданному имени.

  KindName = DocumentData.ValueByName("KindName")

  KindCode = DCIGetReferenceRecordRequisiteValue(SYSREF_EDOCUMENT_KINDS;

    SYSREQ_NAME; KindName;

    LoadStringFmt('E_EDOC_KIND_NOT_FOUND'; 'DCIEXAMPLE'; KindName);

    SYSREQ_CODE; FALSE; TRUE)

  

  // Получить глобальный ИД документа.

  GlobalID = DocumentData.ValueByName("GUID")

  // Получить документ

  Document: IEDocument.DCICustomDocument = DCIGetDocumentForReceive(

    GlobalID; TypeCode; KindCode; DocumentData.ValueByName("LifeStageName"))

 

  // Заполнить значения базовых реквизитов документа.

  Document.SYSREQ_EDOC_NAME = DocumentData.ValueByName("Name")

  Document.SYSREQ_EDOC_NOTE = DocumentData.ValueByName("Note")

 

  // Найти приложение-редактор документа.

  DocumentExtension = Trim(DocumentData.ValueByName("Extension"))

  if DocumentExtension <<>> ''

    Document.SYSREQ_EDOC_EDITOR = DCIGetReferenceRecordRequisiteValue(

      SYSREF_EDITORS; "ТипПриложения"; DocumentExtension;

      Format('Для расширения "%s" приложение-редактор не зарегистрировано';

      DocumentExtension); SYSREQ_CODE; FALSE; TRUE)

  endif  

  DocumentStateValue = DocumentData.FindItem("State")

  if Assigned(DocumentStateValue)  

    StateRequisite = Document.FindRequisite(SYSREQ_STATE)

    if Assigned(StateRequisite)

      StateRequisite.Value = DocumentStateValue

    endif

  endif

 

  // Заполнить синхронизируемые поля:

  // 1. Заполнить карточку.

  Document.DCISpecNum = DocumentData.ValueByName("SpecNum")

  // 2. Заполнить детальный раздел 3.

  DDS3 = Document.DetailDataSet(3)

  ClearDataSet(DDS3)

  DDSList = DocumentData.ValueByName("Соглашения")

  I = 0

  while I < DDSList.Count

    DDSListItem = DDSList.GetValues(I)

    if not DDS3.Locate(SYSREQ_LINE_NUMBER; DDSListItem.ValueByName("НомерСтроки"))

      DDS3.Append()

    endif

    DDS3.SYSREQ_LINE_NUMBER = DDSListItem.ValueByName("НомерСтроки")

    DDS3.DCIStringT3 = DDSListItem.ValueByName("НомерСоглашения")

    if Assigned(DDSListItem.ValueByName("ДатаСоглашения"))

      DDS3.DCIDateT3 = DCIUTCToLocalTime(DCIStrToDateTime(

        DDSListItem.ValueByName("ДатаСоглашения")))

    endif

    I = I + 1

  endwhile

  

  // Сохранить документ.

  try

    IsNewDocument = Document.Inserted

    Document.Save

    if IsNewDocument

      LogMessage = "Создан новый документ"

    else

      LogMessage = "Документ обновлен"

    endif

    DCIWriteHandlerLog("DEBUG"; LogMessage; ProcessMessage;

      "ID документа: " & Document.ID)

  except

    Document.Cancel

    Raise(GetLastException())

  endexcept 

  

  // Обновить версии документа.

  DCIImportDocumentVersions(ProcessMessage; Document)

  

  // Импортировать поставленные подписи.

  DCIImportSignaturesFromProcessMessage(ProcessMessage; Document)

  

  Document.Save

© Компания Directum, 2020 Сообщество пользователей Directum
.navbar > a:hover { background: #FFD73B; }