Копировать ссылку на страницу Перейти в предыдущий раздел Перейти в следующий раздел

В событиях задаются вычисления, которые выполняются в определенный момент синхронизации. Фильтры используются для ограничения загрузки некоторых записей.

Вычисления для событий и фильтров указываются на соответствующей закладке справочника Настройки обмена данными с интегрированными системами.

В стандартной поставке коннектора к 1С для загрузки в DIRECTUM можно использовать:

Подробнее 1С-фильтр

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

Фильтр заполняется на языке 1С. Представляет собой условие для подстановки в оператор Если … КонецЕсли. В системе DIRECTUM текст вычисления фильтра заносится в текст преобразования в момент сохранения настройки обмена.

Для фильтра доступна предопределенная переменная Данные – ссылка на объект текущей записи 1С.

Пример:

При синхронизации выгружаются только записи справочников без групп.

 

Не Данные.ЭтоГруппа

Подробнее Событие «При выгрузке из 1С»

Выполняется сразу после выполнения 1С-фильтра, т.е. при выгрузке данных из 1С в xml-файл. Фильтр применяется для каждой записи, зарегистрированной в плане обмена.

Событие заполняется на языке разметки XML. В событии задаются вычисляемые реквизиты 1С. В системе DIRECTUM текст вычисления события заносится в текст преобразования в момент сохранения записи справочника Настройки обмена данными с интегрированными системами.

Для события доступны предопределенные переменные:

Источник – ссылка на объект текущей записи 1С. Переменная используется для доступа к реквизитам карточки записи 1С;
ОбъектКоллекции – ссылка на строку в табличной части текущей записи 1С. Переменная используется для доступа к реквизитам табличной части записи 1С;
Значение – содержит значение вычисления, которое задано в узле ПриВыгрузке.

Пример:

Через событие выгружается контактная информация из справочника 1С Контрагенты для конфигурации «1С: Бухгалтерия предприятия» редакции 3.0.

 

<Свойства>
<Свойство>
  <Код>8</Код>
  <Наименование>ЮридическийАдрес</Наименование>
  <Порядок>50</Порядок>
  <Источник/>
  <Приемник Имя="ЮридическийАдрес" Вид="Реквизит" Тип="Строка"/>
  <ПриВыгрузке>
     Значение = "";
     СтрокиАдрес = Источник.КонтактнаяИнформация.НайтиСтроки(НовыйСтруктура
        ("Тип,Вид",Перечисления.ТипыКонтактнойИнформации.Адрес,
           Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента));
     Если СтрокиАдрес.Количество() > 0 Тогда
       Значение = СтрокиАдрес[0].Представление;
     КонецЕсли;
  </ПриВыгрузке>
</Свойство>
<Свойство>
  <Код>9</Код>
  <Наименование>ПочтовыйАдрес</Наименование>
  <Порядок>50</Порядок>
  <Источник/>
  <Приемник Имя="ПочтовыйАдрес" Вид="Реквизит" Тип="Строка"/>
  <ПриВыгрузке>
     Значение = "";
     СтрокиАдрес = Источник.КонтактнаяИнформация.НайтиСтроки(НовыйСтруктура
        ("Тип,Вид", Перечисления.ТипыКонтактнойИнформации.Адрес,
           Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресКонтрагента));
     Если СтрокиАдрес.Количество() > 0 Тогда
       Значение = СтрокиАдрес[0].Представление;
     КонецЕсли;
  </ПриВыгрузке>
</Свойство>
<Свойство>
  <Код>10</Код>
  <Наименование>Телефоны</Наименование>
  <Порядок>50</Порядок>
  <Источник/>
  <Приемник Имя="Телефоны" Вид="Реквизит" Тип="Строка"/>
  <ПриВыгрузке>
     Значение = "";
     СтрокиТелефоны = Источник.КонтактнаяИнформация.НайтиСтроки(НовыйСтруктура
       ("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон));
     Для Каждого СтрокаТелефон Из СтрокиТелефоны Цикл
       Значение = Значение + ?(Значение = "", "", ", ") + СтрокаТелефон.Представление;
     КонецЦикла;
  </ПриВыгрузке>
</Свойство>
<Свойство>
  <Код>11</Код>
  <Наименование>Email</Наименование>
  <Порядок>50</Порядок>
  <Источник/>
  <Приемник Имя="Email" Вид="Реквизит" Тип="Строка"/>
  <ПриВыгрузке>
     Значение = "";
     СтрокиEmail = Источник.КонтактнаяИнформация.НайтиСтроки(НовыйСтруктура
        ("Тип,Вид", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты,
           Справочники.ВидыКонтактнойИнформации.EmailКонтрагенты));
     Если СтрокиEmail.Количество() > 0 Тогда
       Значение = СтрокиEmail[0].Представление;
     КонецЕсли;
  </ПриВыгрузке>
</Свойство>
</Свойства>

Подробнее ISBL-фильтр

Фильтр используется:

если не хватает возможностей 1С-фильтра;
если вычисления должны выполниться в системе DIRECTUM.

Выполняется отдельно для каждой записи после добавления данных во временную таблицу со структурой 1С и перед их загрузкой в DIRECTUM.

Фильтр заполняется на языке ISBL. В вычислениях фильтра должна быть заполнена переменная Result одним из значений:

TRUE – запись загрузится;
FALSE – запись не загрузится.

В момент вызова фильтра данные еще не преобразованы из формата 1С в формат DIRECTUM.

Для фильтра доступны только предопределенные переменные:

IntegratedSystemCode – код интегрированной системы;
DIRECTUMObjectType – тип объекта DIRECTUM;
DIRECTUMObjectName – имя объекта DIRECTUM;
IntSysObjectType – тип объекта 1С;
IntSysObjectName – имя объекта 1С;
TableIntSys – имя временной таблицы с данными 1С;
Action – действие над текущей записью. Возможные значения: Change – создание или изменение записи; Delete – удаление записи;
GUID – идентификатор текущей записи 1С.

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

Для события доступен полный состав предопределенных переменных:

IntegratedSystemCode – код интегрированной системы;
TableIntSys – имя временной таблицы с данными 1С;
TableDIR – имя временной таблицы с данными DIRECTUM;
DIRECTUMObjectType – тип объекта DIRECTUM;
DIRECTUMObjectName – имя объекта DIRECTUM;
IntSysObjectType – тип объекта 1С;
IntSysObjectName – имя объекта 1С;
Action – действие над текущей записью. Возможные значения: Change – создание или изменение записи; Delete – удаление записи;
GUID – идентификатор записи 1С.

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

Для события доступны предопределенные переменные:

IntegratedSystemCode – код интегрированной системы;
DIRECTUMObjectType – тип объекта DIRECTUM;
DIRECTUMObjectName – имя объекта DIRECTUM;
IntSysObjectType – тип объекта 1С;
IntSysObjectName – имя объекта 1С;
TableIntSys – имя временной таблицы с данными в формате 1С;
TableDIR – имя временной таблицы с данными в формате DIRECTUM;
Action – действие над текущей записью. Возможные значения: Change – создание или изменение записи; Delete – удаление записи;
GUID – идентификатор записи 1С;
Record – ссылка на объект текущей записи DIRECTUM;
RecordID – ИД записи DIRECTUM;
RecordCode – код записи DIRECTUM. Если запись удалена, значение остается пустым.

Чтобы получить значения реквизитов, используйте функцию 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
.navbar > a:hover { background: #FFD73B; }