Как изменить порядок сортировки при печати этикеток и ценников в 1С:Розница 2.3?

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

Многие технические специалисты и администраторы систем 1С сталкиваются с неочевидным поведением конфигурации «1С:Розница 2.3» при выводе ценников на печать. Типовой механизм обработки ПечатьЭтикетокИЦенников зачастую игнорирует тот порядок товаров, который пользователь сформировал в табличной части или при подборе. Система принудительно сортирует позиции по алфавиту, что доставляет массу неудобств, особенно когда необходимо напечатать ленту этикеток строго в порядке следования товаров на полке или в документе поступления.

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

Почему стандартная сортировка работает именно так?

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

Более того, разработчики заложили механизм «свертки» одинаковых позиций. Если в табличную часть добавлены две одинаковые позиции, система объединит их в одну строку печати с суммированием количества. При такой логике понятие «номер строки» исходного документа теряется, и платформа выбирает самый простой путь — сортировку по наименованию.

Способ 1: Модификация макета СКД и обновление шаблонов

Этот метод подходит, если вы готовы вносить изменения в структуру макета. Рассмотрим его пошагово.

Шаг 1. Работа в конфигураторе. Нам необходимо найти обработку ПечатьЭтикетокИЦенников и ее макет ПоляШаблона. В схеме компоновки данных нужно изменить запрос. Перейдем к набору данных и найдем пакет запроса, отвечающий за итоговую выборку (часто это Запрос пакета 7 или аналогичный в зависимости от конкретного релиза).

Нам нужно добавить поле НомерСтроки в выборку. Рассмотрим пример внесения изменений в запрос:


// В одном из первых пакетов, где выбираются исходные данные
ВЫБРАТЬ
    ИсходныеДанные.Номенклатура КАК Номенклатура,
    ИсходныеДанные.Характеристика КАК Характеристика,
    ИсходныеДанные.НомерСтроки КАК НомерСтроки, // Добавляем это поле
    ...
ПОМЕСТИТЬ ВТ_ИсходныеДанные

Шаг 2. Настройка группировок. Важно помнить, что если вы добавили НомерСтроки, его необходимо включить в секцию СГРУППИРОВАТЬ ПО, иначе запрос выдаст ошибку. Однако помните: если вы сгруппируете по номеру строки, товары с одинаковым артикулом, но из разных строк документа, перестанут «схлопываться». Для большинства задач это именно то, что нужно пользователю.

Шаг 3. Установка порядка. Перейдите на закладку «Настройки» в СКД, выберите детальные записи и на вкладке «Порядок» замените сортировку по Номенклатура.Наименование на созданное поле НомерСтроки.

Шаг 4. Критически важный нюанс — обновление пользовательских шаблонов. Проанализируем, почему после изменений в конфигураторе порядок часто остается старым. Система 1С:Розница при создании каждого конкретного шаблона (ценника или этикетки) копирует текущую схему СКД из конфигурации в справочник ШаблоныЭтикетокИЦенников (в реквизит типа ХранилищеЗначения).

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

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

Способ 2: Сохранение порядка через расширение (для продвинутых)

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

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


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

Затем в макете СКД, который вы также можете переопределить в расширении, вы используете это поле НомерСтроки для настройки сортировки. Этот метод более гибкий, так как позволяет программно управлять индексом сортировки даже в тех случаях, когда данные подбираются из разных источников (сканером, из документа или вручную).

Особенности работы с характеристиками

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

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

Резюме и рекомендации

Для успешного решения задачи «правильной» печати в Рознице 2.3 выполните следующие шаги:

  1. Проверьте макет: Добавьте индексное поле (НомерСтроки или аналогичное) в запрос СКД ПоляШаблона.
  2. Настройте СКД: Установите сортировку по этому полю в настройках компоновки.
  3. Обновите данные: В пользовательском режиме обязательно обновите каждый шаблон ценника, иначе он будет работать по старой логике, зашитой в его внутреннее хранилище.
  4. Используйте расширения: Это позволит сохранить конфигурацию на поддержке и более гибко управлять порядком вывода данных на печать.

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

← На главную