Как объединить разную номенклатуру в табличной части документа в одну позицию?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

В практике работы с 1С часто возникает задача упрощения или агрегации данных. Например, когда в учетной системе товары ведутся детально, а в печатных формах или при выгрузке в другие конфигурации (например, из розничной точки в бухгалтерию, для контроля которой может применяться сравнение оборотов товаров между базами) требуется представить несколько разных позиций как одну общую. Рассмотрим детально, какими способами можно объединить разного вида номенклатуру табличной части документа и как корректно реализовать связь между ними.

Анализируем постановку задачи

Прежде чем приступать к реализации, проанализируем ситуацию. Нам необходимо взять список из нескольких разных элементов справочника Номенклатура, находящихся в табличной части документа (например, Реализация товаров и услуг), и «превратить» их в одну строку. При этом важно сохранить логическую связь: эта «объединенная» единица должна ссылаться на основную номенклатуру или наоборот. Выясним причину такой необходимости — чаще всего это нужно для сводной отчетности, упрощения обмена данными или специфических требований заказчика по оформлению документов.

Способ 1. Использование механизма «Наборы»

Разберем наиболее правильный с точки зрения типовых конфигураций (УТ 11, ERP, КА 2) метод. Если мы хотим продавать группу товаров под одним наименованием, не списывая их со склада как отдельное изделие, воспользуемся функционалом «Наборы».

Алгоритм действий:

  1. Создадим в справочнике Номенклатура новую карточку с типом «Набор».
  2. В настройках набора укажем его состав (те самые «разные» позиции номенклатуры).
  3. В документе выберем этот набор. Система позволит настроить печатную форму так, чтобы выводилась только одна строка набора, в то время как в регистры могут списываться комплектующие.

Этот метод решает задачу «помещения в реквизит», так как состав набора жестко привязан к основной карточке набора через подчиненный справочник или регистр сведений.

Способ 2. Программная группировка через дополнительные реквизиты

Посмотрим на ситуацию, когда нам нужно программно свернуть уже заполненную табличную часть. Допустим, у нас есть позиции «Номенклатура 1» и «Номенклатура 2», которые мы хотим видеть как «Товар общий».

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


// Пример запроса для объединения номенклатуры по дополнительному реквизиту
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ВЫБОР
    |		КОГДА ТЧ.Номенклатура.СсылкаНаОбщуюНоменклатуру <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    |			ТОГДА ТЧ.Номенклатура.СсылкаНаОбщуюНоменклатуру
    |		ИНАЧЕ ТЧ.Номенклатура
    |	КОНЕЦ КАК НоменклатураОбъединенная,
    |	СУММА(ТЧ.Количество) КАК Количество,
    |	СУММА(ТЧ.Сумма) КАК Сумма
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК ТЧ
    |ГДЕ
    |	ТЧ.Ссылка = &Ссылка
    |СГРУППИРОВАТЬ ПО
    |	ВЫБОР
    |		КОГДА ТЧ.Номенклатура.СсылкаНаОбщуюНоменклатуру <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    |			ТОГДА ТЧ.Номенклатура.СсылкаНаОбщуюНоменклатуру
    |		ИНАЧЕ ТЧ.Номенклатура
    |	КОНЕЦ";

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

В данном примере мы используем конструкцию ВЫБОР КОГДА, которая проверяет наличие заполненного реквизита. Если он заполнен, система «подменяет» исходную номенклатуру на общую и суммирует показатели. Это позволяет объединить даже разного вида номенклатуру, если у них указан один и тот же «родитель» в доп. реквизите (в смежных задачах также могут применяться универсальные аналоги номенклатуры).

Способ 3. Документ «Комплектация номенклатуры»

Рассмотрим вариант, когда объединение должно отразиться на складских остатках. Если нам нужно превратить физические остатки разных товаров в один новый объект, следует использовать документ Комплектация номенклатуры.

Выясним преимущества этого метода:

  1. Списываются комплектующие (разная номенклатура).
  2. Приходуется новый элемент (объединенная номенклатура).
  3. Корректно рассчитывается себестоимость новой единицы.

После проведения комплектации в любых документах (продажи, перемещения) мы выбираем уже одну позицию, что полностью соответствует требованию автора вопроса представить разную номенклатуру как одну.

Способ 4. Свертка табличной части при выгрузке (интеграция)

Проанализируем ситуацию, упомянутую в обсуждении: выгрузка данных из фронт-офиса в бухгалтерию. Часто бухгалтеру не нужна детальная номенклатура (например, 10 видов хлеба), а достаточно одной позиции «Хлебобулочные изделия». В этом случае в целевой базе (БП 3.0) создается одна карточка номенклатуры. При загрузке данных алгоритм должен «схлопнуть» все строки табличной части в одну, суммируя количество и суммы.

Пример упрощенного алгоритма на языке 1С:


// Очищаем ТЧ и заменяем на одну строку
ОбщаяНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию("Товар общий");
ВсегоСумма = Объект.Товары.Итог("Сумма");
ВсегоКол = Объект.Товары.Итог("Количество");

Объект.Товары.Очистить();
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ОбщаяНоменклатура;
НоваяСтрока.Количество = 1; // Или общее количество, зависит от методологии
НоваяСтрока.Цена = ВсегоСумма;
НоваяСтрока.Сумма = ВсегоСумма;

Важные замечания по архитектуре

Нужно учитывать, что «помещение объединенной номенклатуры в реквизит справочника», о котором шла речь в исходном вопросе, может быть реализовано через создание реквизита с типом СправочникСсылка.Номенклатура прямо в форме справочника Номенклатура. Это создает иерархию связей. Однако, как верно заметили участники обсуждения, это может потребовать переписки типовых алгоритмов проведения, так как система «из коробки» не знает, что при выборе одной позиции она должна учитывать данные другой.

Подведем итог: для простого визуального объединения в отчетах используйте группировку в запросе по дополнительному реквизиту. Для официального складского учета используйте Комплектацию. Для удобства продаж наборами — механизм Наборов/Комплектов. Выбор метода зависит от того, нужно ли вам сохранять детальные остатки по каждой позиции (и проводить сравнение остатков и цен товаров между базами) или достаточно агрегированного показателя.

← На главную