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 |