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