При приеме документов из системы обмена можно настроить получение реквизитов карточки определенного типа документа.
При получении документов из системы обмена происходит заполнение карточки документа значениями из 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 |