Контактная информация в 1С может храниться либо в справочнике в табличной части «Контактная информация», либо в соответствующем регистре сведений. Все зависит от конфигурации 1С. В коннекторе версии ниже 5.5 для экспорта контактной информации в 1С в обоих случаях требовалось править XSLT-преобразование, что было нелегкой задачей. В новой версии решить эту задачу можно проще через ISBL-вычисление.
Пример синхронизации контактной информации с табличной частью можно посмотреть в стандартных шаблонах настроек обмена, поставляемых с коннектором.
В этой статье рассмотрим, как экспортировать контактную информацию в 1С в соответствующий регистр сведений, на примере передачи юридического адреса контрагента.
Поскольку контактная информация хранится в отдельном объекте (регистре сведений), а не в справочнике Контрагенты, то логичным вариантом будет создать еще одну настройку обмена.
В новой настройке обмена:
Наша задача – загрузить в регистр одну строку с полями Представление, Объект, Тип, Вид. В полях необходимо передать значения:
Значение для поля Представление задается визуально в настройке обмена. Значения полей Объект и Вид задается в событии «При выгрузке из DIRECTUM», так как они являются составными. Значение поля Тип можно указать и в визуальной настройке, и в событии, в примере мы укажем его в событии.
В вычислениях события воспользуйтесь функцией Connector1C8v2ConvertRequisiteToTable. С ее помощью дозаполните таблицу TableIntSys необходимыми строками.
Следует обратить внимание на заполнение поля Вид с типом СправочникСсылка.ВидыКонтактнойИнформации. Коннектору требуется, чтобы в этом поле записывался GUID соответствующей записи справочника Виды контактной информации. Узнать GUID записи непосредственно из справочника 1С нельзя, но можно воспользоваться различными обработками.
Получение GUID с помощью обработки Регистрация изменений для обмена:
В результате откроется окно с представлением записи в XML-формате. В узле Ref содержится искомый GUID:
Подставьте полученный GUID в текст события «При выгрузке из DIRECTUM».
В итоге текст вычисления примет вид:
// В событии можно использовать предопределенные переменные:
// IntegratedSystemCode – Код интегрированной системы;
// DIRECTUMObjectType – тип текущего объекта DIRECTUM;
// DIRECTUMObjectName – имя текущего объекта DIRECTUM;
// IntSysObjectType – тип текущего объекта 1С;
// IntSysObjectName – имя текущего объекта 1С;
// TableIntSys – имя временной таблицы с данными в формате 1С;
// Action – действие над текущей записью. Возможные значения: "Change" – создание или изменение записи, "Delete" – удаление записи;
// GUID – идентификатор текущей записи в 1С;
// RecordID – ИД текущей записи DIRECTUM;
// RecordCode – код текущей записи DIRECTUM. Если запись удалена, значение остается пустым;
// Для получения значений других реквизитов используйте функцию ReferenceRequisiteValue.
// Чтобы записать новые реквизиты в таблицу TableIntSys используйте функцию Connector1C8v2ConvertRequisiteToTable.
// Переменную Result заполнять не нужно.
// Юридический адрес.
KindUrAdress = "b910ecef-9cc8-44e8-b0df-bc705acb83ed"
Num = 1
GUIDOrg = IntegratedSystemsObjectLinksGet(IntegratedSystemCode;"Reference";"Контрагенты";;DIRECTUMObjectType;DIRECTUMObjectName;RecordID)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; IntSysObjectType; IntSysObjectName; RecordID; GUID; "Change"; "Главный"; "1"; "Объект"; "СправочникСсылка.Контрагенты"; GUIDOrg)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; IntSysObjectType; IntSysObjectName; RecordID; GUID; "Change"; "Главный"; "1"; "Тип"; "ПеречислениеСсылка.ТипыКонтактнойИнформации"; "Адрес")
Connector1C8v2ConvertRequisiteToTable(TableIntSys; IntSysObjectType; IntSysObjectName; RecordID; GUID; "Change"; "Главный"; "1"; "Вид"; "СправочникСсылка.ВидыКонтактнойИнформации"; KindUrAdress)
Чтобы передать другую контактную информацию, нужно в регистр сведений передать несколько строк и в каждой строке заполнить поля Представление, Вид, Тип, Объект. В этом случае реквизит Представление необходимо заполнить в событии «При выгрузке из DIRECTUM». Таким образом не потребуется создавать несколько настроек обмена.
В итоге текст вычисления в событии «При выгрузке в DIRECTUM» со всей контактной информацией примет вид:
// В событии можно использовать предопределенные переменные:
// IntegratedSystemCode – Код интегрированной системы;
// DIRECTUMObjectType – тип текущего объекта DIRECTUM;
// DIRECTUMObjectName – имя текущего объекта DIRECTUM;
// IntSysObjectType – тип текущего объекта 1С;
// IntSysObjectName – имя текущего объекта 1С;
// TableIntSys – имя временной таблицы с данными в формате 1С;
// Action – действие над текущей записью. Возможные значения: "Change" – создание или изменение записи, "Delete" – удаление записи;
// GUID – идентификатор текущей записи в 1С;
// RecordID – ИД текущей записи DIRECTUM;
// RecordCode – код текущей записи DIRECTUM. Если запись удалена, значение остается пустым;
// Для получения значений других реквизитов используйте функцию ReferenceRequisiteValue.
// Чтобы записать новые реквизиты в таблицу TableIntSys используйте функцию Connector1C8v2ConvertRequisiteToTable.
// Переменную Result заполнять не нужно.
// Добавить контактную информацию.
ObjType = "InformationRegister"
ObjName = "КонтактнаяИнформация"
// Юридический адрес.
UrAdressDIR = ReferenceRequisiteValue("ОРГ";RecordCode;"Содержание2";;;)
KindUrAdress = "b910ecef-9cc8-44e8-b0df-bc705acb83ed"
Num = 1
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Объект"; "СправочникСсылка.Контрагенты"; GUID)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Тип"; "ПеречислениеСсылка.ТипыКонтактнойИнформации"; "Адрес")
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Вид"; "СправочникСсылка.ВидыКонтактнойИнформации"; KindUrAdress)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Представление";; UrAdressDIR)
// Почтовый адрес
PostAddress = ReferenceRequisiteValue("ОРГ";RecordCode;"Дополнение2";;;)
Num = 2
KindPostAddress = "e921d2c4-0bd7-11df-aeeb-0019bbc830b4"
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Объект"; "СправочникСсылка.Контрагенты"; GUID)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Тип"; "ПеречислениеСсылка.ТипыКонтактнойИнформации"; "Адрес")
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Вид"; "СправочникСсылка.ВидыКонтактнойИнформации"; KindPostAddress)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Представление";; PostAddress)
// Телефон
Phone = ReferenceRequisiteValue("ОРГ";RecordCode;"Дополнение4";;;)
KindPhone = "c5bb357f-c3b0-48ba-8a12-a42cbf99a845"
Num = 3
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Объект"; "СправочникСсылка.Контрагенты"; GUID)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Тип"; "ПеречислениеСсылка.ТипыКонтактнойИнформации"; "Телефон")
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Вид"; "СправочникСсылка.ВидыКонтактнойИнформации"; KindPhone)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Представление";; Phone)
// E-mail
// Найти в ТЧ "Добавочные реквизиты".
Org = References.ОРГ.GetObjectByCode(RecordCode)
DS = Org.DetailDataSet(2)
DS.First
while not DS.EOF
if DS.Requisites("ВидДопРеквТ2").DisplayText == "E-mail"
Email = DS.Requisites("СодержаниеТ2").DisplayText
Num = 4
KindEmail = "52435d39-16df-44b9-8373-719f7e4b7e0b"
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Объект"; "СправочникСсылка.Контрагенты"; GUID)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Тип"; "ПеречислениеСсылка.ТипыКонтактнойИнформации"; "АдресЭлектроннойПочты")
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Вид"; "СправочникСсылка.ВидыКонтактнойИнформации"; KindEmail)
Connector1C8v2ConvertRequisiteToTable(TableIntSys; ObjType; ObjName; RecordID; Num; "Change"; "Главный";; "Представление";; Email)
endif
DS.Next
endwhile
В первом способе мы создали две настройки обмена: одну для экспорта контрагентов, другую для экспорта контактной информации.
Чтобы экспортировать данные через одну настройку обмена:
<Правило>
<Код>КонтактнаяИнформация</Код>
<Источник>РегистрСведенийЗапись.КонтактнаяИнформация</Источник>
<Приемник>РегистрСведенийЗапись.КонтактнаяИнформация</Приемник>
</Правило>
В итоге текст преобразования примет вид:
<ПравилаОбмена>
<ВерсияФормата>2.01</ВерсияФормата>
<Ид>{ИдПравил}</Ид>
<Наименование>DIRECTUM --> УПП 1.3</Наименование>
<ДатаВремяСоздания>{ДатаВремяСозданияПравил}</ДатаВремяСоздания>
<Источник>DIRECTUM</Источник>
<Приемник>UPP31 (Д000025)</Приемник>
<Параметры />
<Обработки />
<ПравилаКонвертацииОбъектов>
<Правило>
<Код>Контрагенты</Код>
<ПослеЗагрузки>
Если Метаданные.ПланыОбмена.Найти("{ExchangePlan}") = Неопределено Тогда
ВызватьИсключение "План обмена ""{ExchangePlan}"" не найден!";
КонецЕсли;
Узел = ПланыОбмена["{ExchangePlan}"].НайтиПоКоду("{NodeCode}");
Если Не ЗначениеЗаполнено(Узел) Тогда
ВызватьИсключение "Узел с кодом ""{NodeCode}"" не найден!";
КонецЕсли;
Объект.ОбменДанными.Отправитель = Узел;
</ПослеЗагрузки>
<ГенерироватьНовыйНомерИлиКодЕслиНеУказан>true</ГенерироватьНовыйНомерИлиКодЕслиНеУказан>
<Источник>СправочникСсылка.Контрагенты</Источник>
<Приемник>СправочникСсылка.Контрагенты</Приемник>
<СинхронизироватьПоИдентификатору>true</СинхронизироватьПоИдентификатору>
</Правило>
<Правило>
<Код>КонтактнаяИнформация</Код>
<Источник>РегистрСведенийЗапись.КонтактнаяИнформация</Источник>
<Приемник>РегистрСведенийЗапись.КонтактнаяИнформация</Приемник>
</Правило>
</ПравилаКонвертацииОбъектов>
<ПравилаОчисткиДанных />
<Алгоритмы />
<Запросы />
</ПравилаОбмена>
Таким же образом можно передавать контактную информацию и для других справочников 1С, например, Организации и Физические лица.
Авторизуйтесь, чтобы написать комментарий