При самостоятельной разработке правил переноса данных из конфигурации «Бухгалтерия предприятия 3.0» в «Управление торговлей 11» с использованием инструмента «Конвертация данных 2.0» часто возникает ситуация, когда документ «Реализация товаров и услуг» переносится не полностью: товарные позиции успешно попадают в документ-приемник, а строки с услугами бесследно исчезают. Разберем архитектурные причины такого поведения конфигураций и пошагово реализуем правильное объединение строк.
Проанализируем структуру табличных частей документа «Реализация товаров и услуг» в обеих конфигурациях:
Товары, а нематериальные работы и услуги — в табличную часть Услуги. Также присутствуют отдельные части ВозвратнаяТара и АгентскиеУслуги.Товары. Разделение поведения выполняется на уровне типа самой номенклатуры.Если в правиле конвертации объектов (ПКО) сопоставить табличную часть источника Товары с приемником Товары по умолчанию, программа выгрузит только материальные строки. Строки из табличной части Услуги при этом просто игнорируются, так как для них не задан отдельный механизм выгрузки.
Наиболее надежный и производительный вариант решения — переопределить стандартную выборку данных в правиле конвертации группы свойств (ПКГС) табличной части с помощью специального параметра КоллекцияОбъектов.
Рассмотрим по шагам, как это настроить в «Конвертации данных 2.0»:
РеализацияТоваровУслуг.Товары. В качестве источника можно оставить Товары или снять выбор источника.СтандартнаяОбработка = Ложь;.ОБЪЕДИНИТЬ ВСЕ, и передадим результат в предопределенную переменную КоллекцияОбъектов.Посмотрим на пример программного кода для обработчика «ПередОбработкой» группы свойств Товары:
СтандартнаяОбработка = Ложь;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТЧТовары.Номенклатура КАК Номенклатура,
| ТЧТовары.Количество КАК Количество,
| ТЧТовары.Цена КАК Цена,
| ТЧТовары.Сумма КАК Сумма,
| ТЧТовары.СтавкаНДС КАК СтавкаНДС,
| ТЧТовары.СуммаНДС КАК СуммаНДС,
| ТЧТовары.НомерСтроки КАК НомерСтроки
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК ТЧТовары
|ГДЕ
| ТЧТовары.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТЧУслуги.Номенклатура КАК Номенклатура,
| ТЧУслуги.Количество КАК Количество,
| ТЧУслуги.Цена КАК Цена,
| ТЧУслуги.Сумма КАК Сумма,
| ТЧУслуги.СтавкаНДС КАК СтавкаНДС,
| ТЧУслуги.СуммаНДС КАК СуммаНДС,
| ТЧУслуги.НомерСтроки КАК НомерСтроки
|ИЗ
| Документ.РеализацияТоваровУслуг.Услуги КАК ТЧУслуги
|ГДЕ
| ТЧУслуги.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();
В дочерних правилах конвертации свойств (ПКС), подчиненных данной группе, сопоставим колонки полученной таблицы (Номенклатура, Количество, Цена, Сумма и др.) с соответствующими реквизитами табличной части Товары документа в УТ 11.
Альтернативный вариант заключается в создании двух независимых правил конвертации групп свойств в рамках одного ПКО документа:
Товары — Приемник Товары.Услуги — Приемник Товары.При использовании этого метода важно учитывать нюанс: при стандартной загрузке вторая группа свойств может очистить строки, добавленные первой группой. Чтобы избежать затирания данных, во втором правиле загрузки группы свойств необходимо программно отключать предварительную очистку табличной части приемника перед добавлением новых строк.
При переносе данных в УТ 11 обязательно проконтролируем заполнение реквизитов, влияющих на корректное отображение строк с услугами:
Товары конфигурации УТ 11 присутствуют реквизиты КоличествоУпаковок и Коэффициент. Для услуг они также являются обязательными. Если упаковка не используется, реквизит КоличествоУпаковок должен быть строго равен реквизиту Количество, а реквизит Коэффициент должен быть равен 1. При отсутствии этих значений форма документа может сбрасывать строки или обнулять суммы.Номенклатура базы УТ 11 реквизит ТипНоменклатуры принимает значение Услуга или Работа. Если позиция запишется как товар, конфигурация будет требовать резервирования остатков на складе при проведении.Содержание. В УТ 11 реквизит Номенклатура является обязательным для заполнения в каждой строке. Поэтому перед выгрузкой таких строк необходимо обеспечить подстановку предопределенной служебной номенклатуры-услуги.ОбменДанными.Загрузка = Истина. Это отключает интерактивные пересчеты сумм, ставок НДС и коэффициентов. Все итоговые расчетные колонки должны быть явно выгружены из базы-источника либо дополнительно пересчитаны в обработчике «ПослеЗагрузки» объекта.