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

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

В розничной торговле одеждой и обувью часто возникает необходимость отображать на одном ценнике весь доступный размерный ряд конкретной модели, который есть в наличии на складе магазина. Стандартный функционал 1С:Розница 2.3 работает по принципу «одна строка — один ценник», где каждая характеристика (размер) печатается на отдельном бланке. В этой статье мы разберем, как изменить этот подход и вывести перечисление всех размеров (например, 42, 44, 48, S, M, L) на единую этикетку.

Анализ проблемы и стандартного механизма

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

Способ 1: Изменение запроса в схеме компоновки данных (СКД)

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

В запросе нам нужно обратиться к виртуальной таблице остатков ТоварыНаСкладах.Остатки. Разберем пример логики запроса, который должен быть добавлен в качестве вложенного или левого соединения к основной номенклатуре:


ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.Характеристика.Наименование КАК РазмерНаименование
ПОМЕСТИТЬ ВТ_ОстаткиХарактеристик
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК ТоварыНаСкладахОстатки
ГДЕ
    ТоварыНаСкладахОстатки.КоличествоОстаток > 0
;

После получения списка всех характеристик с остатками, нам нужно передать эти данные в ресурсы СКД для агрегации в одну строку.

Способ 2: Группировка размеров через функции СКД

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

Выполним следующие шаги в редакторе СКД:

  1. Перейдем на вкладку «Ресурсы».
  2. Добавим новое поле, например, СписокДоступныхРазмеров.
  3. В колонке «Выражение» пропишем следующую конструкцию:

СтрСоединить(Массив(Различные Представление(Характеристика)), ", ")

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

Способ 3: Работа с дополнительными реквизитами характеристик

Зачастую в Наименование характеристики включена лишняя информация (например, цвет или артикул), а на ценнике нам нужны только цифры размера. Проанализируем ситуацию, когда размер хранится в дополнительном реквизите характеристики.

В этом случае в запросе СКД нам нужно обращаться не к Характеристика.Наименование, а к значению этого реквизита. Рассмотрим, как это выглядит в коде:


ВЫБРАТЬ
    ДополнительныеСведения.Значение КАК РазмерноеЗначение
ИЗ
    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ГДЕ
    ДополнительныеСведения.Объект = &СсылкаНаХарактеристику
    И ДополнительныеСведения.Свойство = &СвойствоРазмер

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

Настройка шаблона ценника

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

  1. Откроем редактор шаблона этикеток и ценников в разделе «Продажи».
  2. В списке доступных полей найдем наше новое поле СписокДоступныхРазмеров.
  3. Перетащим его в нужное место на макете.
  4. Важный нюанс: поскольку строка размеров может быть длинной (например, если в наличии 10 разных размеров), обязательно установим в свойствах ячейки параметр Размещение текста в значение Переносить.
  5. Отрегулируем высоту области, чтобы текст не обрезался при печати.

Реализация через расширение (практический совет)

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


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

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

Выясним причины возможных ошибок

При внедрении данного функционала вы можете столкнуться со следующими проблемами:

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

← На главную