Как настроить алфавитную сортировку товаров в печатной форме «Реализация товаров» в 1С:УТ 11?

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

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

В этой статье мы подробно разберем (инструкция актуальна и для УПД в ERP, КА и УТ 11.5), почему штатная сортировка в документе не влияет на печать, и как с помощью программных правок добиться нужного результата в конфигурации 1С:Управление торговлей 11.5 (на базе БСП).

Почему товары в печатной форме не сортируются автоматически?

Проанализируем причину такого поведения системы. В современных конфигурациях на платформе 1С:Предприятие 8.3 (УТ 11, ERP, КА) печатные формы формируются не простым перебором строк из табличной части документа, который мы видим на экране. Вместо этого система выполняет сложный запрос к базе данных.

Когда вы нажимаете кнопку «Сортировать» в документе, вы меняете только визуальное представление данных в текущем сеансе или, в некоторых случаях, реквизит НомерСтроки. Однако программный код печати обращается напрямую к таблицам базы данных. Если в тексте запроса явно не указана конструкция УПОРЯДОЧИТЬ ПО, СУБД (SQL Server или PostgreSQL) возвращает данные в произвольном порядке — чаще всего в порядке физической записи строк в таблицу или по внутреннему идентификатору ссылки. Поэтому единственный надежный способ зафиксировать порядок — изменить текст запроса в модуле менеджера документа.

Поиск места внесения изменений

Для начала выясним, где именно формируются данные для печати. В документе РеализацияТоваровУслуг за вывод расходной накладной отвечает функция СформироватьПечатнуюФормуРасходнаяНакладная, расположенная в Модуле менеджера.

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

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

Решение 1: Изменение запроса для товаров без серий

Разберем ситуацию, когда серии не используются. В этом случае запрос формируется в блоке Иначе функции. Нам нужно найти текст запроса ТекстЗапросаПоТоварам и добавить в него условие сортировки. Посмотрим на пример модификации:


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

Важный нюанс: Конструкция УПОРЯДОЧИТЬ ПО должна обязательно стоять перед оператором ИТОГИ ПО. В качестве поля для сортировки мы используем ПредставлениеНоменклатуры, так как именно оно содержит полное наименование, которое видит пользователь в печатной форме (если не используется рабочее наименование номенклатуры).

Решение 2: Изменение запроса для товаров с сериями

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


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

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

Рекомендуемый метод: использование расширения конфигурации

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

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

Этот метод позволит сохранить «чистоту» основной конфигурации и корректно работать при обновлениях 1С.

Тонкости сортировки по разным полям

Выясним, какие еще варианты сортировки могут потребоваться пользователям:

Подводя итог, отметим, что редактирование печатных форм в УТ 11 требует понимания работы с объектом Запрос и механизмом пакетных запросов. Использование конструкции УПОРЯДОЧИТЬ ПО в правильном месте текста запроса — это единственный программный способ гарантировать верный порядок строк в выходном документе.

← На главную