При оформлении витрин и печати ценников в типовой конфигурации 1С:Торговля и склад 7.7 (редакция 9.2) часто возникает задача разделить вывод наименования товара и его артикула. По умолчанию система выводит артикул сразу после полного наименования через пробел, что делает ценник перегруженным и нечитаемым. Рассмотрим, почему простое редактирование кода не всегда дает результат и как правильно настроить перенос артикула на отдельную строку.
Разберем весь процесс последовательно: от программного формирования строки с разделителем до редактирования макета и поиска фактического файла обработки печати.
Главная причина, по которой изменения в конфигураторе не отражаются на печатной форме ценника, заключается в механизме подключения печатных форм в платформе 1С 7.7. Типовая конфигурация может вызывать печать из встроенных метаданных либо из внешних файлов обработок (с расширением .ert), расположенных в каталогах информационной базы.
Проанализируем, откуда именно вызывается печать ценников в вашей системе:
PRPRICE.ERT, расположенная в каталоге ExtForms информационной базы. Если править конфигурацию или другие файлы, результат печати из справочника не изменится.printcen.ert из подкаталога ExtForms\PrnForms либо встроенная обработка ПечатьЦенников.Чтобы изменения вступили в силу, откроем в конфигураторе через пункт меню Файл > Открыть именно тот файл .ert, который физически используется при печати.
В платформе 1С 7.7 для добавления переноса строки внутри текстового выражения используется предопределенная системная переменная РазделительСтрок (эквивалент комбинации символов Симв(13) + Симв(10) — CR/LF).
Найдем в модуле обработки процедуру формирования печатных данных (например, процедуру Печать или Сформировать). В типовом коде формирование наименования выглядит следующим образом:
ПечНаименованиеТМЦ = СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Докум.Номенклатура.Артикул), "");
Заменим пробел перед артикулом на системную переменную РазделительСтрок:
ПечНаименованиеТМЦ = СокрЛП(Докум.Номенклатура.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, РазделительСтрок + СокрЛП(Докум.Номенклатура.Артикул), "");
Разберем, как работает эта конструкция: если в базе включена константа ПоказыватьАртикул, то к полному наименованию товара добавляется символ перевода строки и затем артикул без лишних пробелов с помощью функции СокрЛП(). Если константа выключена, артикул к наименованию не добавляется.
Даже если в строку передан РазделительСтрок, табличный документ 1С 7.7 не перенесет текст визуально, если ячейка макета не настроена на многострочный вывод.
Выполним настройку макета (вкладка Таблица в открытой обработке):
ПечНаименованиеТМЦ (или ПечНаименование).Alt + Enter).Склеивание наименования и артикула в одну строку с разделителем имеет недостаток: невозможно задать для артикула отдельный размер шрифта, начертание или особое выравнивание. Более надежный и гибкий способ — разделить вывод на две независимые ячейки макета.
Рассмотрим, как реализовать этот вариант по шагам:
ПечАртикул.
ПечНаименование = СокрЛП(Докум.Номенклатура.ПолнНаименование);
ПечАртикул = ?(Константа.ПоказыватьАртикул = 1, "Арт: " + СокрЛП(Докум.Номенклатура.Артикул), "");
В процедуре вывода секции ценника (например, ДобавитьЦенник) обе переменные будут подставлены в свои ячейки. Это гарантирует аккуратный внешний вид ценника без риска смещения или обрезания текста при длинных наименованиях товаров.
Еще один удобный способ в 1С 7.7 — использование типа ячейки Шаблон прямо в макете без модификации кода конкатенации строк в модуле:
Ctrl + Enter:
[СокрЛП(Докум.Номенклатура.ПолнНаименование)]
[?(Константа.ПоказыватьАртикул = 1, "Арт. " + СокрЛП(Докум.Номенклатура.Артикул), "")]
Такой подход позволяет платформе автоматически подставлять значения реквизитов на разных строках ячейки, сохраняя простоту сопровождения печатной формы.