Как перенести номенклатуру с типом услуга из БП 3.0 в табличную часть товаров УТ 11 через КД 2.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При самостоятельной разработке правил переноса данных из конфигурации «Бухгалтерия предприятия 3.0» в «Управление торговлей 11» с использованием инструмента «Конвертация данных 2.0» часто возникает ситуация, когда документ «Реализация товаров и услуг» переносится не полностью: товарные позиции успешно попадают в документ-приемник, а строки с услугами бесследно исчезают. Разберем архитектурные причины такого поведения конфигураций и пошагово реализуем правильное объединение строк.

Выясним причину проблемы: различия в структуре метаданных

Проанализируем структуру табличных частей документа «Реализация товаров и услуг» в обеих конфигурациях:

  1. В «Бухгалтерии предприятия 3.0» для каждого вида сущностей выделена своя табличная часть: материальные ценности заносятся в табличную часть Товары, а нематериальные работы и услуги — в табличную часть Услуги. Также присутствуют отдельные части ВозвратнаяТара и АгентскиеУслуги.
  2. В «Управлении торговлей 11» реализован универсальный подход: все номенклатурные позиции (как материальные товары, так и услуги или работы) записываются в одну единую табличную часть Товары. Разделение поведения выполняется на уровне типа самой номенклатуры.

Если в правиле конвертации объектов (ПКО) сопоставить табличную часть источника Товары с приемником Товары по умолчанию, программа выгрузит только материальные строки. Строки из табличной части Услуги при этом просто игнорируются, так как для них не задан отдельный механизм выгрузки.

Способ 1. Объединение коллекций через запрос в обработчике «ПередОбработкой» (Рекомендуемый)

Наиболее надежный и производительный вариант решения — переопределить стандартную выборку данных в правиле конвертации группы свойств (ПКГС) табличной части с помощью специального параметра КоллекцияОбъектов.

Рассмотрим по шагам, как это настроить в «Конвертации данных 2.0»:

  1. Откроем ПКО документа РеализацияТоваровУслуг.
  2. Найдем группу свойств, отвечающую за табличную часть Товары. В качестве источника можно оставить Товары или снять выбор источника.
  3. Перейдем в обработчик «ПередОбработкой» этой группы свойств.
  4. Отключим стандартное чтение данных, установив флаг СтандартнаяОбработка = Ложь;.
  5. Сформируем единую таблицу значений запросом к объекту-источнику, объединив обе табличные части оператором ОБЪЕДИНИТЬ ВСЕ, и передадим результат в предопределенную переменную КоллекцияОбъектов.

Посмотрим на пример программного кода для обработчика «ПередОбработкой» группы свойств Товары:


СтандартнаяОбработка = Ложь;

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ТЧТовары.Номенклатура КАК Номенклатура,
|	ТЧТовары.Количество КАК Количество,
|	ТЧТовары.Цена КАК Цена,
|	ТЧТовары.Сумма КАК Сумма,
|	ТЧТовары.СтавкаНДС КАК СтавкаНДС,
|	ТЧТовары.СуммаНДС КАК СуммаНДС,
|	ТЧТовары.НомерСтроки КАК НомерСтроки
|ИЗ
|	Документ.РеализацияТоваровУслуг.Товары КАК ТЧТовары
|ГДЕ
|	ТЧТовары.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|	ТЧУслуги.Номенклатура КАК Номенклатура,
|	ТЧУслуги.Количество КАК Количество,
|	ТЧУслуги.Цена КАК Цена,
|	ТЧУслуги.Сумма КАК Сумма,
|	ТЧУслуги.СтавкаНДС КАК СтавкаНДС,
|	ТЧУслуги.СуммаНДС КАК СуммаНДС,
|	ТЧУслуги.НомерСтроки КАК НомерСтроки
|ИЗ
|	Документ.РеализацияТоваровУслуг.Услуги КАК ТЧУслуги
|ГДЕ
|	ТЧУслуги.Ссылка = &Ссылка
|
|УПОРЯДОЧИТЬ ПО
|	НомерСтроки";

Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();

В дочерних правилах конвертации свойств (ПКС), подчиненных данной группе, сопоставим колонки полученной таблицы (Номенклатура, Количество, Цена, Сумма и др.) с соответствующими реквизитами табличной части Товары документа в УТ 11.

Способ 2. Использование двух раздельных ПКГС

Альтернативный вариант заключается в создании двух независимых правил конвертации групп свойств в рамках одного ПКО документа:

  1. Первое ПКГС: Источник Товары — Приемник Товары.
  2. Второе ПКГС: Источник Услуги — Приемник Товары.

При использовании этого метода важно учитывать нюанс: при стандартной загрузке вторая группа свойств может очистить строки, добавленные первой группой. Чтобы избежать затирания данных, во втором правиле загрузки группы свойств необходимо программно отключать предварительную очистку табличной части приемника перед добавлением новых строк.

Критические нюансы заполнения реквизитов строк в УТ 11

При переносе данных в УТ 11 обязательно проконтролируем заполнение реквизитов, влияющих на корректное отображение строк с услугами:

  1. Упаковки и коэффициенты: В табличной части Товары конфигурации УТ 11 присутствуют реквизиты КоличествоУпаковок и Коэффициент. Для услуг они также являются обязательными. Если упаковка не используется, реквизит КоличествоУпаковок должен быть строго равен реквизиту Количество, а реквизит Коэффициент должен быть равен 1. При отсутствии этих значений форма документа может сбрасывать строки или обнулять суммы.
  2. Тип номенклатуры в базе-приемнике: Убедимся, что для выгружаемых услуг в справочнике Номенклатура базы УТ 11 реквизит ТипНоменклатуры принимает значение Услуга или Работа. Если позиция запишется как товар, конфигурация будет требовать резервирования остатков на складе при проведении.
  3. Реквизит «Содержание»: В БП 3.0 пользователи могут не указывать номенклатуру в табличной части услуг, заполняя только текстовое поле Содержание. В УТ 11 реквизит Номенклатура является обязательным для заполнения в каждой строке. Поэтому перед выгрузкой таких строк необходимо обеспечить подстановку предопределенной служебной номенклатуры-услуги.
  4. Особенности режима загрузки: Загрузка данных правилами конвертации происходит с включенным флагом ОбменДанными.Загрузка = Истина. Это отключает интерактивные пересчеты сумм, ставок НДС и коэффициентов. Все итоговые расчетные колонки должны быть явно выгружены из базы-источника либо дополнительно пересчитаны в обработчике «ПослеЗагрузки» объекта.
← На главную