Как отключить сворачивание одинаковых строк в счете-фактуре или УПД при печати

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

В типовых конфигурациях 1С (таких как Управление торговлей 11, ERP 2 или Комплексная автоматизация) пользователи часто сталкиваются с ситуацией, когда при печати счета-фактуры или Универсального передаточного документа (УПД) несколько строк с одной и той же номенклатурой объединяются в одну. Это происходит даже в тех случаях, когда позиции разнесены по разным строкам в табличной части документа реализации. Разберем подробно, почему это происходит и как настроить систему так, чтобы позиции выводились раздельно.

Почему происходит свертка позиций?

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

Однако на практике крупные холдинги или государственные заказчики часто требуют строгого соответствия печатной формы и первичных документов (например, заказов или спецификаций), где позиции могут быть разделены по разным причинам (разные заказы, разные места хранения, использование дополнительных реквизитов и т.д.) — для этого подойдёт автоматическая подмена данных в печатных формах под требования заказчика. Технически "схлопывание" происходит на двух этапах: в самом запросе к базе данных (использование оператора СГРУППИРОВАТЬ ПО) и при постобработке таблицы значений в коде (метод Свернуть()).

Способ 1. Отключение свертки в коде модуля

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

Рассмотрим пример. В модуле отчета или менеджера документа найдите переменную, отвечающую за строки товаров (например, ВыборкаСтрокТовары), и найдите вызов метода Свернуть. Чтобы отключить группировку, этот участок кода нужно закомментировать:


// ВыборкаСтрокТовары.Свернуть("Товар, ТоварНаименование, ЕдиницаИзмерения, ЕдиницаИзмеренияКод, Цена, СтавкаНДС, 
// |НомерГТД, ПредставлениеГТД, СтранаПроисхождения, СтранаПроисхожденияКод, ПредставлениеСтраны", 
// "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаБезНДС");

После комментирования этого участка система перестанет объединять строки на этапе подготовки данных, и они будут выведены в том виде, в котором пришли из запроса.

Способ 2. Изменение текста запроса (Удаление группировки)

Если данные приходят уже "свернутыми" еще до выполнения программного кода, значит, виноват запрос. В современных конфигурациях данные для печати счета-фактуры часто собираются через функцию ТекстЗапросаДанныхТабличнойЧастиДляПечатиСчетаФактуры или процедуру ПоместитьВременнуюТаблицуТоваров.

Проанализируем типовой запрос. В нем часто встречается секция СГРУППИРОВАТЬ ПО. Чтобы строки не сворачивались, нам необходимо либо удалить эту секцию, либо добавить в нее уникальный идентификатор строки, например НомерСтроки или КлючСвязи.

Посмотрим на пример изменения запроса. Если исходный код выглядит так:


|СГРУППИРОВАТЬ ПО
|    ТаблицаВидыЗапасов.Ссылка,
|    ТаблицаВидыЗапасов.Номенклатура,
|    ТаблицаВидыЗапасов.Характеристика,
|    ТаблицаВидыЗапасов.СтавкаНДС,
|    ТаблицаВидыЗапасов.НомерГТД

То для получения детальных строк нам нужно добавить поле НомерСтроки:


|СГРУППИРОВАТЬ ПО
|    ТаблицаВидыЗапасов.Ссылка,
|    ТаблицаВидыЗапасов.НомерСтроки, // Добавляем для уникальности
|    ТаблицаВидыЗапасов.Номенклатура,
|    ТаблицаВидыЗапасов.Характеристика,
|    ТаблицаВидыЗапасов.СтавкаНДС,
|    ТаблицаВидыЗапасов.НомерГТД

Важный нюанс: В конфигурациях ERP и УТ 11 печать часто идет по таблице ВидыЗапасов. Если документ уже проведен, ВидыЗапасов могут быть свернуты сами по себе. В этом случае правка только печатной формы может не помочь, и потребуется анализ процедуры ЗаполнитьВидыЗапасов в модуле объекта. Для решения проблем с регистрами есть исправление ошибок в регистре Виды запасов для ERP и УТ 11.

Способ 3. Создание внешней печатной формы

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

  1. Создайте внешнюю обработку и добавьте в нее макет счета-фактуры (можно скопировать из типовой конфигурации) — поможет редактор печатных форм без программирования для 1С.
  2. В модуле обработки реализуйте логику получения данных, используя исправленный запрос без группировок.
  3. Добавьте на форму настройки галочку "Группировать одинаковые позиции".
  4. В зависимости от значения этой галочки, применяйте в коде метод Свернуть() или пропускайте его.

Решение проблемы с дублированием строк

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

Для корректного вывода в этом случае следует:

Выясним причину на конкретном примере запроса из модуля РеализацияТоваровУслугЛокализация. Если мы редактируем процедуру ПоместитьВременнуюТаблицуТоваров, необходимо следить за тем, чтобы КлючСвязи сохранялся на всех этапах формирования временных таблиц. Именно он гарантирует, что строка печатной формы будет соответствовать строке документа.

Резюме

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

← На главную