Как отключить суммирование и свертку одинаковых строк в печатных формах 1С:УПП 1.3?

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

При работе в конфигурации 1С:Управление производственным предприятием (УПП) редакции 1.3 пользователи часто сталкиваются с неочевидным поведением системы при печати документов отгрузки. Если в табличной части документа Реализация товаров и услуг содержатся две или более строки с абсолютно одинаковым товаром, единицей измерения и ценой, то при выводе на печать (например, в формы ТОРГ-12, Счет-фактура или УПД) система автоматически объединяет их в одну строку, суммируя количество и стоимость.

С точки зрения методологии бухгалтерского учета это кажется логичным — зачем загромождать печатную форму дублирующимися позициями? Однако на практике возникает масса ситуаций, когда строки схлопывать категорически нельзя:

В этой статье мы подробно разберем, почему конфигурация 1С:УПП 1.3 сворачивает строки "под капотом", и детально рассмотрим три практических способа отключения этой группировки с примерами программного кода.

Почему происходит свертка строк в 1С:УПП: разбираемся в механизмах

Чтобы решить проблему, нам необходимо понять, в каких именно общих модулях и функциях происходит магия объединения строк. В 1С:УПП этот механизм реализован по-разному для торговых накладных и счетов-фактур.

1. Механизм группировки в ТОРГ-12 и М-15

Для печатных накладных (ТОРГ-12, М-15, Товарный сопутствующий документ) данные собираются с помощью запросов в модуле менеджера документа Реализация товаров и услуг. Например, за формирование данных отвечает экспортная функция ПолучитьТаблицуСведенийТОРГ12. Внутри этого метода написан тяжелый запрос к табличным частям документа. В самом конце этого запроса присутствует конструкция СГРУППИРОВАТЬ ПО, где перечисляются поля номенклатуры, цены, ставки НДС и единицы измерения. СУБД выполняет группировку еще на уровне выполнения запроса к базе данных, поэтому на выходе мы физически получаем свернутый результат.

2. Механизм группировки в Счет-фактуре и УПД

Для Счетов-фактур и Универсальных передаточных документов (УПД) разработчики фирмы "1С" использовали другой подход. Данные формируются через функции общего модуля УчетНДС (или УчетНДСПереопределяемый). Запрос выбирает детальные строки, но затем полученная таблица значений сворачивается программно с помощью стандартного метода платформы 1С:


ТаблицаСтрокТовары.Свернуть(КолонкиДляСвертки, "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС");

Переменная КолонкиДляСвертки содержит список измерений (Номенклатура, Цена, Ставка НДС, ГТД, Страна происхождения). Поскольку уникальный номер строки документа (НомерСтроки) в этот список не входит, строки с одинаковыми параметрами неизбежно объединяются в одну.

Давайте рассмотрим, как мы можем вмешаться в эти алгоритмы.

---

Способ 1. Создание внешней печатной формы (ВПФ) — самый безопасный путь

Поскольку конфигурация УПП 1.3 является крупной ERP-системой, крайне не рекомендуется вносить изменения в типовой код напрямую, чтобы не усложнять последующие обновления. Лучший способ решить задачу — разработать внешнюю печатную форму.

Рассмотрим по шагам, как модифицировать код в скопированной внешней печатной форме для ТОРГ-12:

  1. Создаем внешнюю обработку и подключаем ее к механизму дополнительных печатных форм.
  2. Переносим макет ТОРГ-12 и функции формирования печатной платы из модуля менеджера документа РеализацияТоваровУслуг во внешнюю обработку.
  3. Находим текст запроса, формирующий временную таблицу товаров для печати. Нам нужно добавить уникальный идентификатор в поля выборки и в группировку. Самый простой вариант — использовать системное поле НомерСтроки.
  4. Модифицируем секцию ВЫБРАТЬ и секцию СГРУППИРОВАТЬ ПО в запросе:

// Было в типовом запросе:
|ВЫБРАТЬ
|   Товары.Номенклатура КАК Номенклатура,
|   Товары.Цена КАК Цена,
|   Товары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
|   СУММА(Товары.Количество) КАК Количество,
|   СУММА(Товары.Сумма) КАК Сумма
|...
|СГРУППИРОВАТЬ ПО
|   Товары.Номенклатура,
|   Товары.Цена,
|   Товары.ЕдиницаИзмерения

// Стало после нашей доработки:
|ВЫБРАТЬ
|   Товары.НомерСтроки КАК НомерСтроки, // Добавили номер строки
|   Товары.Номенклатура КАК Номенклатура,
|   Товары.Цена КАК Цена,
|   Товары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
|   СУММА(Товары.Количество) КАК Количество,
|   СУММА(Товары.Сумма) КАК Сумма
|...
|СГРУППИРОВАТЬ ПО
|   Товары.НомерСтроки, // Добавили номер строки в группировку
|   Товары.Номенклатура,
|   Товары.Цена,
|   Товары.ЕдиницаИзмерения

Благодаря этому изменению СУБД определит строку с номером 1 и строку с номером 2 как абсолютно разные сущности, даже если в них указан один и тот же товар по одной цене. Группировка не произойдет, и строки выведутся раздельно.

Теперь разберем модификацию кода для внешней печатной формы Счета-фактуры / УПД. Нам нужно найти место, где таблица значений подготавливается к выводу на печать, и скорректировать программную свертку:


// Находим в скопированном коде заполнение колонок для свертки:
КолонкиДляСвертки = "Товар, ТоварНаименование, Цена, СтавкаНДС, НомерГТД, СтранаПроисхождения";

// Изменяем эту строку, добавляя НомерСтроки в список измерений:
КолонкиДляСвертки = "НомерСтроки, Товар, ТоварНаименование, Цена, СтавкаНДС, НомерГТД, СтранаПроисхождения";

// Метод Свернуть теперь сохранит строки раздельно:
ТаблицаСтрокТовары.Свернуть(КолонкиДляСвертки, "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС");

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

---

Способ 2. Использование расширения конфигурации (для баз на платформе 8.3)

Если ваша база данных 1С:УПП 1.3 работает под управлением современной платформы 1С:Предприятие 8.3 и режим совместимости конфигурации позволяет использовать механизм расширений, мы можем переопределить поведение функций без создания внешних файлов.

Для этого выполним следующие действия:

  1. Создаем новое расширение в конфигураторе.
  2. Добавляем в расширение общий модуль УчетНДС (или модуль менеджера документа РеализацияТоваровУслуг в зависимости от формы).
  3. Используем аннотацию &Вместо для переопределения целевой функции или &ИзменениеИКонтроля для точечного изменения кода.

Рассмотрим пример использования механизма &Вместо для переопределения логики заполнения параметров свертки табличной части в расширении общего модуля:


&Вместо("ПодготовитьТабличнуюЧастьСчетаФактуры")
Функция Расш1_ПодготовитьТабличнуюЧастьСчетаФактуры(ДокументСсылка, СтруктураПараметров)
    // Вызываем оригинальный алгоритм для получения базовой таблицы
    ТаблицаДанных = ПродолжитьВызов(ДокументСсылка, СтруктураПараметров);
    
    // Вносим изменения в логику свертки, если это необходимо, 
    // либо переписываем формирование таблицы без вызова метода Свернуть().
    
    Возврат ТаблицаДанных;
КонецФункции

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

---

Способ 3. Прямая правка конфигурации (для баз, снятых с поддержки)

Если ваша база УПП 1.3 уже сильно кастомизирована, снята с поддержки или находится на замке ("Изменения разрешены"), вы можете внести правки напрямую в типовой код.

Проанализируем риски: при прямом изменении общего модуля УчетНДС вы измените логику печати счетов-фактур для абсолютно всех документов в системе. Это может затронуть не только "Реализацию товаров и услуг", но и "Авансовые отчеты", "Отражение начисления НДС" и другие документы. Поэтому при прямой правке общего модуля обязательно делайте проверку на тип обрабатываемого документа:


Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
    // Применяем уникальную свертку с учетом номера строки
    КолонкиДляСвертки = "НомерСтроки, " + КолонкиДляСвертки;
КонецЕсли;

---

Альтернативные обходные пути (без программирования)

Если у вас нет возможности привлечь программиста прямо сейчас, но накладную без объединения строк нужно распечатать срочно, можно воспользоваться логическими лазейками в системе:

  1. Различие в характеристиках или сериях. Если включен учет по характеристикам или сериям номенклатуры, укажите для одинаковых товаров разные (пусть даже фиктивные) характеристики. Система посчитает их разными товарными позициями и не станет сворачивать при печати.
  2. Корректировка цены на копейку. Если уменьшить цену одной из позиций на 1 копейку (и соответственно уменьшить или увеличить количество, чтобы сохранить общую сумму), алгоритм группировки не сработает из-за разницы в цене. Метод грубый, но рабочий для разовых экстренных случаев.
  3. Разделение по заказам. Если строки привязаны к разным заказам покупателей, и эта аналитика выводится в печатную форму, группировка также будет обойдена автоматически.

Подводя итог, отметим: штатной "галочки" или константы в настройках параметров учета 1С:УПП для отключения свертки строк не существует. Оптимальным техническим решением является создание Внешней печатной формы с добавлением поля НомерСтроки в группировку запроса ТОРГ-12 и в параметры метода Свернуть() для Счета-фактуры.

← На главную