В событиях задаются вычисления, которые выполняются в определенный момент синхронизации. Фильтры используются для ограничения загрузки некоторых записей.
Вычисления для событий и фильтров указываются на соответствующей закладке справочника Настройки обмена данными с интегрированными системами.
В стандартной поставке коннектора к 1С для загрузки в DIRECTUM можно использовать:
Выполняется при выгрузке данных из 1С в XML-файл. Фильтр применяется для каждой записи, зарегистрированной в плане обмена. Позволяет ограничить список записей, выгружаемых из 1С. Фильтр заполняется на языке 1С. Представляет собой условие для подстановки в оператор Если … КонецЕсли. В системе DIRECTUM текст вычисления фильтра заносится в текст преобразования в момент сохранения настройки обмена. Для фильтра доступна предопределенная переменная Данные – ссылка на объект текущей записи 1С. Пример: При синхронизации выгружаются только записи справочников без групп.
Не Данные.ЭтоГруппа |
Выполняется сразу после выполнения 1С-фильтра, т.е. при выгрузке данных из 1С в xml-файл. Фильтр применяется для каждой записи, зарегистрированной в плане обмена. Событие заполняется на языке разметки XML. В событии задаются вычисляемые реквизиты 1С. В системе DIRECTUM текст вычисления события заносится в текст преобразования в момент сохранения записи справочника Настройки обмена данными с интегрированными системами. Для события доступны предопределенные переменные:
Пример: Через событие выгружается контактная информация из справочника 1С Контрагенты для конфигурации «1С: Бухгалтерия предприятия» редакции 3.0.
<Свойства> |
Фильтр используется:
Выполняется отдельно для каждой записи после добавления данных во временную таблицу со структурой 1С и перед их загрузкой в DIRECTUM. Фильтр заполняется на языке ISBL. В вычислениях фильтра должна быть заполнена переменная Result одним из значений:
В момент вызова фильтра данные еще не преобразованы из формата 1С в формат DIRECTUM. Для фильтра доступны только предопределенные переменные:
Чтобы получить значения реквизитов записи 1С, используйте функцию Connector1C8v2GetRequisiteFromTable. Пример: При синхронизации данных из справочника 1С Валюты выгружается только запись Российский рубль.
NameRecord = Connector1C8v2GetRequisiteFromTable(TableIntSys; GUID;;; "Наименование") if NameRecord == "RUB" Result = TRUE else Result = FALSE Endif |
Событие «Перед загрузкой в DIRECTUM»
Выполняется отдельно для каждой записи после выполнения ISBL-фильтра и перед загрузкой данных в DIRECTUM. Событие заполняется на языке ISBL. Событие позволяет переопределить стандартный механизм поиска записей DIRECTUM. В событии задается произвольный алгоритм поиска ИД записи DIRECTUM, в которую нужно синхронизировать запись 1С. Чтобы использовать собственный алгоритм поиска записей DIRECTUM, напишите его в вычислении события и в переменной Result укажите ИД записи DIRECTUM. Если в переменной Result оставить пустое значение, то всегда будет создаваться новая запись. Для найденной записи DIRECTUM в таблице IntegratedSystemsObjectLinks устанавливается связь с загруженной записью 1С. Если загружаемая запись 1С ранее уже была синхронизирована с другой записью этого же справочника DIRECTUM, то новая связь не создастся. Чтобы принудительно создать связь с новой записью, перед сеансом обмена удалите текущую связь с помощью функции IntegratedSystemsObjectLinksDelete. В момент вызова события данные уже преобразованы из формата 1С в формат DIRECTUM. Для события доступен полный состав предопределенных переменных:
Для получения значений других реквизитов записи 1С используйте функцию Connector1C8v2GetRequisiteFromTable. Пример: Перед загрузкой записей 1С из справочника Контрагенты в DIRECTUM найти нужную запись справочника Организации по ИНН, КПП или Наименованию.
// Получить существующую связь записи 1С и DIRECTUM из таблицы. IDRecord = IntegratedSystemsObjectLinksGet (IntegratedSystemCode;IntSysObjectType; DIRECTUMObjectName;GUID;DIRECTUMObjectType;IntSysObjectName;) if Assigned(IDRecord) Result = IDRecord else // Найти организацию в DIRECTUM по ИНН + КПП. INN = Connector1C8v2GetRequisiteFromTable(TableDIR; GUID;;; "ИНН") KPP = Connector1C8v2GetRequisiteFromTable(TableDIR; GUID;;; "КПП")
// <Поиск организации по ИНН + КПП ...>.
if Assigned(IDRecord) Result = IDRecord else // Если по ИНН + КПП не удалось найти, то искать по Наименованию. Name = Connector1C8v2GetRequisiteFromTable(TableDIR; GUID;;; "Наименование")
//<Поиск организации по Наименованию ...> if Assigned(IDRecord) Result = IDRecord endif endif endif |
Событие «После загрузки в DIRECTUM»
Выполняется для каждой записи после ее загрузки и сохранения в DIRECTUM. Событие заполняется на языке ISBL. В событии задаются действия над записью, например, отправить запись по типовому маршруту или создать на ее основе запись в другом справочнике. В вычислениях события переменную Result заполнять не нужно. Для события доступны предопределенные переменные:
Чтобы получить значения реквизитов, используйте функцию Connector1C8v2GetRequisiteFromTable. Переменную Result заполнять не нужно. Пример: Проверить, что синхронизируемые записи справочника содержат в табличной части «Добавочные реквизиты» реквизит E-mail. Если реквизит есть, то его значение обновляется. Если реквизит отсутствует, он создается и заполняется значением из 1С.
Email = Connector1C8v2GetRequisiteFromTable(TableIntSys; GUID;;; "Email")
// Найти "E-mail" в табличной части "Добавочные реквизиты". NotFound = TRUE DS = Record.DetailDataSet(2) DS.First while not DS.EOF and NotFound if DS.Requisites("ВидДопРеквТ2").DisplayText == "E-mail" NotFound = FALSE DS.Requisites("СодержаниеТ2").Value = Email endif DS.Next endwhile if NotFound ExtendedRequisiteKinds = CreateReference("ВДР") ExtendedRequisiteKinds.Open ExtendedRequisiteKinds.Filter = "[Наименование] = 'E-mail'" ExtendedRequisiteKinds.Filtered = TRUE ExtendedRequisiteKind = ExtendedRequisiteKinds.SYSREQ_CODE ExtendedRequisiteKinds.Close DS.Append DS.Requisites("ВидДопРеквТ2").Value = ExtendedRequisiteKind DS.Requisites("СодержаниеТ2").Value = Email endif |
© Компания DIRECTUM, 2018 | Сообщество пользователей DIRECTUM |