1С: конвертация данных
Алгоритмы и запросы в «1С: конвертация данных»
Используемые сокращения:
ПКО - правило конвертации объектов
Алгоритмы
Наверняка многие из вас сталкивались с ситуацией, когда один и тот же код нужно прописывать при выгрузке разных объектов. Если в этом коде будет обнаружена ошибка, то нужно снова открыть кучу правил и исправить код в каждом месте.
В «1С: Конвертация данных 2.*» есть такой аналог процедур и функций - алгоритмы. Их можно вызывать из любого обработчика, поэтому и они позволяют решать вышеописанные проблемы.
На форме настройки правил обмена данными есть Вкладка "Алгоритмы/запросы".

Рассмотрим алгоритмы.
Рис. 1
Сами алгоритмы хранятся в одноименном справочнике "Алгоритмы". Элемент справочника алгоритма вкл. в себя:

  • Имя алгоритма. Имя выполняемого алгоритма.
  • Параметры. Используются для явного задания параметров алгоритмов при формировании отладочных модулей и модулей с кодом обработчиков. При включенном режиме совместимости в правилах заполнение не обязательно. В алгоритмах могут использоваться любые параметры обработчиков событий, определенные для данных событий.
  • Используется при загрузке. Эта настройка определяет, что данный алгоритм применяется в обработчиках событий загрузки данных.

Поле ввода алгоритма. Сюда прописывается текст кода алгоритма.
Описание работы алгоритмов так же доступно в справке

Синтаксис вызова алгоритма из любого обработчика события: Выполнить(Алгоритмы.<ИмяАлгоритма>)
Пример использования алгоритмов 1С: Конвертация данных
Задача: определить в алгоритме тип номенклатуры.
Создадим новый элемент справочника "Алгоритмы" с именем ОпределитьТипНоменклатуры и скопируем в него следующий код:
Если Параметры.ЗнТипНоменклауры = 1 Тогда
ИскомоеЗначение = Перечисления.ТипыНоменклатуры.Товар;
ИначеЕсли Параметры.ЗнТипНоменклауры = 2 Тогда
ИскомоеЗначение = Перечисления.ТипыНоменклатуры.Услуга;
ИначеЕсли Параметры.ЗнТипНоменклауры = 3 Тогда
ИскомоеЗначение = Перечисления.ТипыНоменклатуры.Набор;
Иначе
ИскомоеЗначение = Неопределено;
КонецЕсли;
В качестве исходной переменной используем переменную из параметров.
Рис. 2
В данном случае галочка "Использовать при загрузке" не стоит, следовательно, алгоритм можно вызывать из любого обработчика выгрузки. Например, в обработчике "При выгрузке" ПКО "РеализацияТоваровУслуг" можно написать след. код:
ИскомоеЗначение = Неопределено;
Выполнить(Алгоритмы.ОпределитьТипНоменклатуры);
Если ИскомоеЗначение = Неопределено тогда
Отказ = Истина;
КонецЕсли;
Правило конвертации объекта будет выглядеть след. образом:
Рис. 3
Аналогичным образом данный алгоритм можно вызывать и из любого другого обработчика выгрузки.
При установленной галочке "Используется при загрузке" принцип работы алгоритмов аналогичен, только вызывать его нужно из обработчиков загрузки.
Запросы
Запросы (как и алгоритмы) решают подобную проблему, когда один и тот же код нужно прописывать при обработчиках различных объектов. Только у запросов в качестве кода выступает текст запроса. И если разные ПКО используют абсолютно одинаковые по структуре выборки данных, только с разными параметрами, то можно создать такой запрос, а затем использовать его во всех обработчиках, где нужно.
Рис. 4
Запросы хранятся в одноименном справочнике "Запросы". Элемент справочника запроса вкл. в себя:
    1
    Имя запроса. Имя выполняемого запроса.
    2
    Используется при загрузке. Аналогично алгоритмам эта настройка определяет, что данный запрос применяется в обработчиках событий загрузки данных. В этом случае текст запроса должен быть составлен согласно метаданным базы-приемника.
    3
    Поле ввода текста запроса. Сюда прописывается текст запроса.
    Описание работы запросов так же доступно в справке.
    Синтаксис вызова запроса из любого обработчика события:

    Запрос = Запросы.<Имя запроса>

    Пример работы запросов
    Задача: Получить с помощью запроса остатки товаров на складах по определенному складу и на определенную дату.
    Создадим новый элемент справочника "Запрос" с именем "ОстаткиТоваровНаСкладах" и скопируем в него след. текст запроса:

    ВЫБРАТЬ

    ТоварыНаСкладахОстатки.Склад КАК Склад,

    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток

    ИЗ

    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК ТоварыНаСкладахОстатки

    Рис. 5
    Далее в обработчике "При выгрузке" ПКО все того же объекта РеализацияТоваровУслуг пишем след. код:

    Запрос = Запросы.ОстаткиТоваровНаСкладах;

    Запрос.УстановитьПараметр("Дата", Параметры.Дата);

    Запрос.УстановитьПараметр("Склад", Источник.Склад);

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();
    ПКО будет выглядеть след. образом:
    Рис. 6
    Поскольку в качестве регистратора регистра накопления "ТоварыНаСкладах" обычно выступают несколько документов (например, документ Поступление товаров и услуг), то и вызов нашего запроса возможен в ПКО этих объектов.
    При установленной галочке "Используется при загрузке" принцип работы запросов аналогичен, только вызывать его нужно из обработчиков загрузки.
    Читайте наши статьи и следите за обновлениями.

    Еще больше статей в блоге