Содержание
Продолжение тьюториала для начинающих программистов 1С про конвертацию данных: настройка правил обмена.
В первой части статьи Стас Ганиев, разработчика 1С и автора ТГ-канала OneSCast | 1С Предприятие, рассмотрел подготовительные шаги. Во второй части поговорим о настройках правил обмена.
Настройка правил обмена
Все готово для перехода на следующий шаг. Настраивая новые правила, решим задачу переноса сведений о номенклатуре из источника в приемник. При этом в выгрузку должны попасть только не помеченные на удаление элементы.
Отталкиваемся от базового алгоритма, отдельные его части будут представлять следующие инструменты.
Выборка элементов для выгрузки
Этот этап определяют два показателя: «Правило выгрузки данных» (вторая вкладка главного окна) и «Правило конвертации объектов» (первая вкладка).
Правило выгрузки данных (ПВД) отвечает на вопрос «Что выгружаем?». Глядя на список ПВД, мы отвечаем на вопрос, какие данные выгружаются с помощью этих правил обмена. Для создания простого ПВД из нашего примера достаточно использовать элементы этого объекта (рис. 6):
- объект выборки — собственно объект метаданных, за который отвечает правило;
- правило конвертации — здесь будет указано, как следует обрабатывать каждый элемент номенклатуры;
- обработчики «Перед обработкой» и «Перед выгрузкой» — их рассмотрим чуть позже.
Правило конвертации объекта (ПКО) отвечает на вопрос «Как выгружаем?» и решает две основные задачи.
Во-первых, в ПКО указываются фильтры отбора, если нужно выгружать только некоторые элементы справочника. Делается это в обработчике события «Перед выгрузкой» путем написания скрипта на языке программирования 1С.
Во-вторых, описывается поведение объекта при выгрузке и загрузке. То есть мы непосредственно вмешиваемся в порядок выборки, чтобы показать системе, как синхронизировать данные. Делается это на вкладке «Настройки».
Говоря в привычных терминах, мы взяли справочник «Номенклатура» (ПВД) и собираемся выгрузить определенные элементы (ПКО) по заданным правилам (ПВД + ПКО).
Применение на практике
В реальной практике создание ПВД и ПКО чаще всего выполняется в следующем порядке:
- Сначала создаем ПКО для нашего объекта;
- Затем на его основании создаем ПВД. В большинстве случаев заполнения по умолчанию оказывается достаточным, и донастройка не требуется.
Для того чтобы создать правила обмена для номенклатуры, на вкладке «Правила конвертации объектов» кликаем «Добавить» и в открывшемся окне заполняем поля:
- Объект-источник — выбираем справочник «Номенклатура»;
- Объект-приемник — после выбора объекта-источника система попытается подобрать похожий элемент в конфигурации-приемнике. В нашем случае справочник «Номенклатура» будет заполнен автоматически;
- Обработчик «Перед выгрузкой» — программный код, который будет выполняться перед выгрузкой каждого элемента справочника. Пропишем здесь проверку пометки на удаление.
Здесь источник и отказ — это локальные переменные контекста исполнения кода обработчика. Подробнее узнать о возможных переменных среды и как их использовать можно, нажав на кнопку «Информация по обработчикам» в окне настройки «Правила». При этом справка будет открыта на разделе обработчика, активного в момент вызова справки.
Теперь нажимаем «ОК», чтобы записать новое ПКО. На запрос об автоматическом создании правил конвертации свойств отвечаем отрицательно, их мы создадим позже. Ответ на следующий вопрос о создании ПВД в данном случае не будет иметь значения. Правило выгрузки данных не будет создано, это ошибка «Конвертации данных».
ПВД создадим на основании нашего ПКО. Для этого в подменю «Ввести на основании» выберем пункт «Правила выгрузки данных».
В подавляющем большинстве случаев просто кликаем «ОК», поскольку все требуемые данные заполняются автоматически. То немногое, что может понадобиться, — это прописать код обработчиков «Перед обработкой» и «Перед выгрузкой».
Обработчик «Перед выгрузкой» выполнятся перед выгрузкой каждого элемента справочника, точно так же, как обработчик «Перед выгрузкой» объекта ПКО. Они равноправны и выполняются в одном контексте друг за другом. Поэтому код вполне можно вписать сюда — результат будет идентичным.
Обработчик «Перед обработкой» выполняется перед началом работы со справочником в целом. Здесь можно принять решение о необходимости его обработки, например, если номенклатура должна выгружаться только при включении определенной функциональной опции.
Обработка реквизитов объекта
Более тонкая наладка выгрузки элемента данных производится при описании каждого его реквизита, за это отвечают сразу три объекта «Конвертации»:
- Правило конвертации свойств (ПКС) описывает, как выгружать и загружать конкретный реквизит;
- Правило конвертации группы свойств (ПКГС) описывает, как выгружать группу свойств. Это может быть табличная часть объекта либо произвольное объединение ПКС для описания единых для всех принципов;
- Правило конвертации значений (ПКЗ) — указывается сопоставление предопределенных значений или значений перечислений между источником и приемником.
Управление всеми тремя объектами конвертации находится на первой вкладке главного окна редактора, в его нижней половине.
На этом уровне производится наиболее гибкое управление обменом. Настройки позволяют указать условия выгрузки реквизита и нормы его преобразования как на стороне источника, так и на стороне приемника. В общем случае именно с помощью ПКС описывается обмен сложными свойствами либо свойствами, которые существуют только в приемнике.
Применение на практике
Для создания правил конвертации свойств (ПКС) номенклатуры воспользуемся конструктором синхронизации. Для этого нажимаем «Синхронизация свойств», предварительно установив курсор на ПКО «Номенклатура».
При открытии конструктора реквизиты с совпадающими именами будут сопоставлены автоматически. Оставим все без изменений и нажмем «ОК».
Список ПКС будет заполнен автоматически созданными правилами выгрузки реквизитов. Остается доделать пару вещей.
Сначала установите флажок «Поиск» для свойств «Родитель» и «ЭтоГруппа». Об этом не написано в документации, но примите: если у справочника есть одно (или оба) свойства, обязательно установите флажок «Поиск». Так выгрузка будет выполняться корректно и без сюрпризов.
Второй момент — это установка дополнительных правил для реквизитов непримитивных типов. При их наличии следует описать, как обрабатывать каждый такой объект данных. У нас это реквизит «СтавкаНДС».
Откроем это ПКС и справа от поля «Правило» нажмем кнопку «Новое правило». Будет создано новое ПКО с заполненными объектами источника и приемника. Здесь нажимаем «ОК» и на запрос о создании подчиненных ПКС отвечаем «Да».
В итоге получим второе ПКО «СтавкаНДС», для которого будут заполнены ПКЗ на каждое значение перечисления. Те значения, которые не сопоставились автоматически, можно добавить самостоятельно, воспользовавшись кнопкой «Добавить» или конструктором синхронизации значений.
Таким образом мы создали собственные правила для обмена элементами справочника «Номенклатура» между двумя базами.
Сохранение файла правил обмена
Для завершения работы в окне настроек нажмем «Сохранить правила» (во внешний файл).
При первом сохранении система попросит указать папку для выгрузки и имя файла. Далее выгрузка в эту папку будет происходить автоматически, если в настройках конвертации (см. рис. 3) установлен флажок «Выгружать правила обмена при открытии формы настройки». В противном случае будет открыта данная форма выгрузки с ранее настроенным путем к файлу, в котором достаточно кликнуть «Сохранить».
Полученный файл в формате XML используется при настройке обмена между целевыми конфигурациями, в каждой из которых он либо встраивается в макет плана обмена в конфигураторе, либо загружается как внешний файл правил в пользовательском режиме.
Готово. Вы великолепны.
Остались вопросы?
Проконсультируйтесь с нашими специалистами