Содержание:
Данное описание потребовалось, в качестве приложения к тех. заданию по интеграции 1С УПП 1.3 со сторонней программой через формат КД 2.0. На начальном этапе не удалось найти официальную документацию, было составлено собственное описание.
Официальная документация все же есть – формат файла сообщения обмена данными
Предполагается что 1С-УПП и внешняя программа будут обмениваться данными, через XML файлы (сообщения) в обе стороны. Файлы могут быть расположены на FTP-сервере. Имя файла имеет вид «Message_001_002.xml». Где 001 – имя базы (узла) источника, а 002 – имя базы (узла) приемника. Соответственно имя файла ответа имеет вид «Message_002_001.xml». При создании нового файла, старый файл замещается. В 1С это стандартный механизм обмена данными основанный на БСП.
Файл обмена имеет следующую структуру:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <ФайлОбмена> <!-- Загаловок --> <ПравилаОбмена>…</ПравилаОбмена> <ИнформацияОТипахДанных>… </ИнформацияОТипахДанных> <ДанныеПоОбмену>…</ДанныеПоОбмену> <!-- Данные сопоставления --> <ИнформацияОРегистрацииОбъекта>…</ИнформацияОРегистрацииОбъекта><!-- не обязательный --> <КорректировкаИнформацииОРегистрацииОбъекта>…</КорректировкаИнформацииОРегистрацииОбъекта><!-- не обязательный --> <!-- Данные --> <Объект>…</Объект><!-- не обязательный --> <УдалениеОбъекта>…</УдалениеОбъекта><!-- не обязательный --> </ФайлОбмена> |
Тэг <ДанныеПоОбмену> содержит свойства:
- «ПланОбмена» – имя плана обмена (фиксировано в 1С).
- «Кому» – код базы (узла) приемника.
- «ОтКого» – код базы (узла) источника.
- «НомерИсходящегоСообщения» – если сообщение повторяется номер не изменяется.
- «НомерВходящегоСообщения» – последнее удачно принятое сообщение (квитанция успешной загрузки, т.е. все изменения к обмену накапливаться и отправляться до тех пор пока не будет получена квитанция).
1 |
<ДанныеПоОбмену ПланОбмена="ОбменУППУПП" Кому="002" ОтКого="001" НомерИсходящегоСообщения="3" НомерВходящегоСообщения="2" /> |
Тэг <Объект> содержит описание передаваемых объектов и имеет структуру:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<Объект Нпп="" Тип="" ИмяПравила=""> <Ссылка Нпп=""><!-- содержит свойств и значения для ссылки--></ Ссылка> <ТабличнаяЧасть Имя=""> <Запись><!-- содержит свойств и значения для записи--></Запись> </ТаблячнаяЧасть> <ТабличнаяЧасть Имя="" /> <!-- Пустая для примера --> <Свойство Имя=""> <Значение>…</Значение> </Свойство> <Свойство Имя=""> <Ссылка>…</Ссылка > </Свойство> </Объект> |
Объект состоит из ссылок, свойств и табличных частей. Их состав, имена, имена правил определенны в 1С для каждого типа объекта (описаны в плане обмена). «Нпп» – порядковый номер. Если объект уже был описан ранее (выше по тексту), то его можно заменить конструкцией “<Нпп>5</Нпп>”
Примеры обмена сообщениями:
1. Message_001_002.xml. Создали новую номенклатуру в базе «001»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?xml version="1.0" encoding="UTF-8"?> <ФайлОбмена> <ДанныеПоОбмену ПланОбмена="ОбменУППУПП" Кому="002" ОтКого="001" НомерИсходящегоСообщения="7" НомерВходящегоСообщения="5"/> … <Объект Нпп="1" Тип="СправочникСсылка.Номенклатура" ИмяПравила="НоменклатураКонтрагентов00001"> <Ссылка Нпп="1"> <Свойство Имя="{КлючПоискаВИБИсточнике}"> <Значение>{"#",dd0e8719-5e55-43a0-944a-8321d4c46843,168:847c00155d00241511eaf7e7afcb7f69}</Значение> </Свойство> <Свойство Имя="{ИмяТипаВИБИсточнике}"> <Значение>СправочникСсылка.Номенклатура</Значение> </Свойство> <Свойство Имя="{УникальныйИдентификатор}"> <Значение>afcb7f69-f7e7-11ea-847c-00155d002415</Значение> </Свойство> <Свойство Имя="Код"><Значение>00000117970</Значение></Свойство> <Свойство Имя="ЭтоГруппа"><Значение>false</Значение></Свойство> </Ссылка> <Свойство Имя="ПометкаУдаления"> <Значение>false</Значение> </Свойство> <Свойство Имя="Наименование"> <Значение>НоваяНоменклатура2</Значение> </Свойство> <Свойство Имя="Родитель"/> <Свойство Имя="Артикул"/> <Свойство Имя="БазоваяЕдиницаИзмерения">…</Свойство> <Свойство Имя="ВидНоменклатуры">…</Свойство> </Объект> … </ФайлОбмена> |
{КлючПоискаВИБИсточнике} – Ключ для сопоставления, который потом будет использовать база 002 ссылаясь на объект в базе 001. В 1С имеет вид «{“#”,dd0e8719-5e55-43a0-944a-8321d4c46843,168:847c00155d00241511eaf7e7afcb7f69}», в сторонней программе может выглядеть по другому.
{ИмяТипаВИБИсточнике} – Значение содержит «тип» передаваемого объекта.
{УникальныйИдентификатор} – GUID объекта (В формате XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. Например он может иметь такое значение “bd9782f5-36b2-11e5-80f7-00155d002400”.
2. Message_002_001.xml Файл ответа базы «002» с квитанцией о получении (так же может содержать объекты).
1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="UTF-8"?> <ФайлОбмена> … <ДанныеПоОбмену ПланОбмена="ОбменУППУПП" Кому="001" ОтКого="002" НомерИсходящегоСообщения="7" НомерВходящегоСообщения="7"/> <ИнформацияОРегистрицииОбъекта СсылкаВДругойИБ="{"#",dd0e8719-5e55-43a0-944a-8321d4c46843,168:847c00155d00241511eaf7e7afcb7f69}" СобственнаяСсылка="{КлючСопоставленияСтороннейПрограммы}" ИмяТипаПриемника="СправочникСсылка.Номенклатура"/> … </ФайлОбмена> |
В тэге <ИнформацияОРегистрицииОбъекта> передается информация о сопоставлении ключей.
3. Message_001_002.xml. Повторная передача данных по номенклатуре из базы 001 (данные уже сопоставлены).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?xml version="1.0" encoding="UTF-8"?> <ФайлОбмена> <ДанныеПоОбмену ПланОбмена="ОбменУППУПП" Кому="002" ОтКого="001" НомерИсходящегоСообщения="9" НомерВходящегоСообщения="7"/> … <Объект Нпп="1" Тип="СправочникСсылка.Номенклатура" ИмяПравила="НоменклатураКонтрагентов00001"> <Ссылка Нпп="1"> <Свойство Имя="{КлючПоискаВИБПриемнике}"> <Значение>{КлючСопоставленияСтороннейПрограммы}</Значение> </Свойство> <Свойство Имя="{КлючПоискаВИБИсточнике}"> <Значение>{"#",dd0e8719-5e55-43a0-944a-8321d4c46843,168:847c00155d00241511eaf7e7afcb7f69}</Значение> </Свойство> <Свойство Имя="{ИмяТипаВИБИсточнике}"> <Значение>СправочникСсылка.Номенклатура</Значение> </Свойство> <Свойство Имя="{УникальныйИдентификатор}"> <Значение>afcb7f69-f7e7-11ea-847c-00155d002415</Значение> </Свойство> <Свойство Имя="Код"><Значение>00000117970</Значение></Свойство> <Свойство Имя="ЭтоГруппа"><Значение>false</Значение></Свойство> </Ссылка> <Свойство Имя="ПометкаУдаления"> <Значение>false</Значение> </Свойство> <Свойство Имя="Наименование"> <Значение>НоваяНоменклатура2</Значение> </Свойство> … </Объект> … </ФайлОбмена> |
Для сопоставленных данных появляется {КлючПоискаВИБПриемнике} – содержит ключ объекта в базе получателя (взят из квитанции на прошлом шаге и обычно хранится в регистре сведений “Соответствия объектов для обмена”).
Так же, в файле обмена может отсутствовать подробное описание объекта, если он был синхронизирован ранее, в зависимости от настроек выгрузки плана обмена: “Только по ссылке” или “Выгружать”.