Копировать ссылку на страницу

При приеме документов из системы обмена можно настроить получение реквизитов карточки определенного типа документа.

При получении документов из системы обмена происходит заполнение карточки документа значениями из XML-файла, набор полей зависит от типа документа.

1.Чтобы включить генерацию XML-файла и заполнение карточки документа для константы DISIUseXMLCardSynchronization укажите значение Да. Значение по умолчанию Нет.
2.Для каждого типа документа необходимо скопировать фрагмент кода в текст функции DISICreateXMLFromTypeCard и указать нужные значения.

 

DocumentНаименованиеТКЭДCardFields = CArrayElement(ArrayOf(

ArrayOf("Наименование реквизита в XML"; "Путь до узла

  (Пример://РеквизитыДокумента"); Наименование реквизита в системе);

ArrayOf("Наименование реквизита в XML"; "Путь до узла

  (Пример://РеквизитыДокумента"); Наименование реквизита в системе)))

DocumentCardTypeFieldsList.Add(КодТипаДокументаСОД; DocumentНаименованиеТКЭДCardFields)

3.Для каждого ТКЭД необходимо создать отдельный массив. В массив добавить все обязательные реквизиты ТКЭД, в том числе Вид, иначе при получении документа из системы обмена преобразование к нужному типу не произойдет.

Свернуть/развернуть пример Пример для ТКЭД «Договорные документы»:

 

DocumentContractsCardFields = CArrayElement(ArrayOf(

  ArrayOf("КатегорияДоговора"; "//РеквизитыДокумента"; "КатегорияДоговора");

  ArrayOf("Вид"; "//РеквизитыДокумента"; "ISBEDocKind");

  ArrayOf("ПредметДоговора"; "//РеквизитыДокумента"; "Дополнение2");

  ArrayOf("КонтрАгент"; "//РеквизитыДокумента"; "Организация")))

DocumentCardTypeFieldsList.Add('ДГД'; DocumentContractsCardFields)

Свернуть/развернуть пример Пример для ТКЭД «Макеты»:

 

DocumentMaketCardFields = CArrayElement(ArrayOf(

  ArrayOf("Автор"; "//РеквизитыДокумента"; "ISBEDocAuthor");

  ArrayOf("Вид"; "//РеквизитыДокумента"; "ISBEDocKind")))   

DocumentCardTypeFieldsList.Add('DocumentModels'; DocumentMaketCardFields)

4.Чтобы заполнить значения созданных полей XML-файла и преобразование прошло успешно, необходимо для каждого ТКЭД скопировать фрагмент кода в текст функции DISIUpdateDocumentTypeCard и заполнить нужными значениями:

 

DocumentНаименованиеТКЭДCardFieldsValues = CreateStringList()

DocumentНаименованиеТКЭДCardFieldsValues.Delimiter = '|'

DocumentНаименованиеТКЭДCardFieldsValues.DelimitedText = 'Наименование атрибута

  в XML;Путь до атрибута (Пример://РеквизитыДокумента[@ТипКарточки]);

  Наименование реквизита в базе|...'

DocumentНаименованиеТКЭДCardFields = CreateList()

foreach ElementStr in DocumentНаименованиеТКЭДCardFieldsValues

DocumentНаименованиеТКЭДCardFields.Add(SubString(ElementStr; ';'; 3);

  Format('%s;%s'; ArrayOf(SubString(ElementStr; ';'; 2); SubString(ElementStr;

  ';'; 1))))

endforeach

DocumentCardTypeFieldsList.Add('НаименованиеТКЭД';

  DocumentНаименованиеТКЭДCardFields)

5.Необходимо указать все обязательные реквизиты, либо заполнить для них значения по умолчанию:

 

RequiredНаименованиеТКЭДReqsStringList = CreateStringList()

RequiredНаименованиеТКЭДReqsStringList.Delimiter = '|' 

RequiredНаименованиеТКЭДReqsStringList.DelimitedText = 'Имя реквизита в системе;Значение по умолчанию|...'    

RequiredНаименованиеТКЭДReqsList = CreateList()

foreach Req in RequiredНаименованиеТКЭДReqsStringList

RequiredНаименованиеТКЭДReqsList.Add(SubString(Req; ';'; 1); SubString(Req; ';'; 2))

endforeach

RequiredReqsList.Add('НаименованиеТКЭД'; RequiredНаименованиеТКЭДReqsList)

Наименование атрибута в XML-файле, путь до атрибута и наименование реквизита должны совпадать с тем, которые были созданы в функции DISICreateXMLFromTypeCard.

Свернуть/развернуть пример Пример для ТКЭД «Договорные документы»:

 

DocumentContractsCardFieldsValues = CreateStringList()

DocumentContractsCardFieldsValues.Delimiter = '|'

DocumentContractsCardFieldsValues.DelimitedText = 'КатегорияДоговора;//РеквизитыДокумента[@ТипКарточки];КатегорияДоговора|Наименование;/Документ;ISBEDocName|ПредметДоговора;//РеквизитыДокумента[@ТипКарточки];Дополнение2|КонтрАгент;//РеквизитыДокумента[@ТипКарточки];Организация|Дата;/Документ;Date'

DocumentContractsCardFields = CreateList()  

foreach ElementStr in DocumentContractsCardFieldsValues

  DocumentContractsCardFields.Add(SubString(ElementStr; ';'; 3); Format('%s;%s'; ArrayOf(SubString(ElementStr; ';'; 2); SubString(ElementStr; ';'; 1))))    

endforeach

DocumentCardTypeFieldsList.Add('ДГД'; DocumentContractsCardFields)

Свернуть/развернуть пример Пример для ТКЭД «Макеты»:

 

DocumentMaketCardFieldsValues = CreateStringList()

DocumentMaketCardFieldsValues.Delimiter = '|'

DocumentMaketCardFieldsValues.DelimitedText = 'Автор;//РеквизитыДокумента[@ТипКарточки];ISBEDocAuthor'

DocumentMaketCardFields = CreateList()  

foreach ElementStr in DocumentMaketCardFieldsValues

  DocumentMaketCardFields.Add(SubString(ElementStr; ';'; 3); Format('%s;%s'; ArrayOf(SubString(ElementStr; ';'; 2); SubString(ElementStr; ';'; 1))))    

endforeach 

DocumentCardTypeFieldsList.Add('DocumentModels'; DocumentMaketCardFields)

6.Некоторые реквизиты для разных контрагентов могут не совпадать. Чтобы добавить значения для обязательных полей, добавьте фрагмент кода в текст функции DISIUpdateDocumentTypeCard и заполните нужными значениями:

 

RequiredReqsList = CreateList()

// Пример ТКЭД 'Договорные документы'

RequiredContactReqsStringList = CreateStringList()

RequiredContactReqsStringList.Delimiter = '|' 

RequiredContactReqsStringList.DelimitedText = 'КатегорияДоговора;Д000004|Дополнение5;007'    

RequiredContactReqsList = CreateList()      

foreach Req in RequiredContactReqsStringList

  RequiredContactReqsList.Add(SubString(Req; ';'; 1); SubString(Req; ';'; 2))    

endforeach  

RequiredReqsList.Add('ДГД'; RequiredContactReqsList)

В результате будет сформирован XML-файл, содержащий реквизиты карточки документа.

© 2016 Компания DIRECTUM Сообщество пользователей DIRECTUM