Как в ТОРГ-12 для УТ 11 исключить суммирование строк с одинаковой номенклатурой

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

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

В этой статье мы подробно разберем, почему система «сворачивает» строки, и изучим несколько способов решения этой задачи: от изменения внешней печатной формы до корректировки программного кода конфигурации.

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

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

Проанализируем цепочку формирования данных. В модуле менеджера документа или в общих модулях печати (например, МенеджерПечати или УправлениеЗапасами) подготавливаются временные таблицы. Основная группировка обычно происходит в процедурах типа ПоместитьВременнуюТаблицуТоваров. Поскольку во временных таблицах отсутствует поле НомерСтроки оригинального документа, запрос просто не может «различить» эти строки.

Решение 1: Модификация запроса во внешней печатной форме

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

Чтобы строки не объединялись, нам необходимо добавить в запрос уникальный идентификатор для каждой строки. Самый простой вариант — использовать поле НомерСтроки или скрытый реквизит ИдентификаторСтроки. Рассмотрим пример модификации сегмента запроса, где формируется временная таблица РеализацияТоваровУслугТаблицаТоваров:


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

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

Важный нюанс: Если вы добавите НомерСтроки только в итоговый запрос, но оставите СУММА(Количество) в промежуточных временных таблицах без группировки по номеру строки, данные все равно «схлопнутся» до того, как попадут в результат. Нужно проследить путь поля через все временные таблицы (ВременнаяТаблицаНаборы, ВременнаяТаблицаНаборыДополнительно и т.д.), которые присутствуют в типовом механизме печати УТ 11.

Решение 2: Группировка по дополнительному реквизиту (Серии, Содержание)

Иногда строки нужно разделять не просто «как в документе», а по конкретному признаку, например, по сериям (срокам годности) или по полю Содержание. В этом случае мы можем добавить это поле в условия связи и группировки.

Посмотрим на пример из практики, когда строки разделяются по реквизиту Содержание:


| ЛЕВОЕ СОЕДИНЕНИЕ СтрокиТоваров КАК СтрокиТоваров
| ПО ТаблицаДокумента.Ссылка = СтрокиТоваров.Ссылка
| И ТаблицаДокумента.АналитикаУчетаНоменклатуры = СтрокиТоваров.АналитикаУчетаНоменклатуры
| И ТаблицаДокумента.Упаковка = СтрокиТоваров.Упаковка
| И ТаблицаДокумента.Содержание = СтрокиТоваров.Содержание // Дополнительное условие связи

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

Решение 3: Комплексное исправление в конфигурации (для УТ 11.4)

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

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

Практические советы при разработке

Разберем основные трудности, с которыми можно столкнуться при реализации этих изменений:

1. Использование Конструктора запроса. Типовые запросы в УТ 11 очень объемные и часто содержат программно подставляемые условия (например, &ТекстЗапросаВесУпаковки). При попытке открыть такой запрос в Конструкторе он может выдать ошибку. В этом случае редактировать текст придется вручную, внимательно соблюдая синтаксис 1С.

2. Проблема ГТД. Если одна строка документа при проведении распределилась на два разных номера ГТД, система породит две строки в печатной форме. Если вы добавите жесткую группировку по НомерСтроки, вам нужно будет решить, какой номер ГТД выводить или как распределить количество. Обычно используется логика выбора первого доступного номера ГТД или вывод через запятую (что требует доработки кода формирования макета).

3. Поле «Содержание». Если вы используете поле Содержание для вывода наименования товара, отличного от справочника, обязательно добавьте его в группировку. Это самый простой способ «обмануть» систему группировки, так как разные значения в этом поле сделают строки уникальными для запроса.

Подводя итог, наиболее корректным и стабильным способом является создание внешней печатной формы, в запросе которой данные выбираются из табличной части Товары и соединяются с данными Видов запасов по Идентификатору строки. Это гарантирует полное соответствие печатной формы экранной части документа без риска нарушения логики учета в системе. В качестве исходных макетов и алгоритмов для доработки подойдёт комплект внешних печатных форм для Управления торговлей 11.

← На главную