Как вывести комментарий к товару на печать в ценнике 1С 7.7?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При оформлении витрин розничных магазинов часто возникает необходимость вывести на ценник дополнительную информацию о товаре, которая хранится в реквизите Комментарий карточки номенклатуры. В типовой конфигурации «1С:Торговля и Склад 9.2» на платформе 1С 7.7 стандартный ценник содержит лишь базовые реквизиты: наименование, артикул, цену и единицу измерения.

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

Способ 1. Быстрое объединение наименования и комментария в одной ячейке

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

Откроем нашу обработку печати ценников (обычно это внешний отчет с расширением .ert, например, PrPrice.ert) в режиме Конфигуратора. Перейдем во вкладку «Модуль» и найдем процедуру ДобавитьВтаблицу. Внутри этой процедуры найдем строку, отвечающую за присвоение наименования:


Табл.Товар = СокрЛП(Товар.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Товар.Артикул), "");

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


Табл.Товар = СокрЛП(Товар.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Товар.Артикул), "") + " " + СокрЛП(Товар.Комментарий);

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


Табл.Товар = СокрЛП(Товар.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Товар.Артикул), "") + РазделительСтрок + СокрЛП(Товар.Комментарий);

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

Способ 2. Вывод комментария в отдельную ячейку с независимым шрифтом

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

Шаг 1. Изменение структуры временной таблицы значений

В платформе 1С 7.7 перед выводом на печать список выбранных товаров компонуется в объект типа ТаблицаЗначений. Найдем в модуле формы процедуру ПриОткрытии. В ней происходит инициализация этой таблицы. Нам необходимо добавить новую колонку под комментарий:


ТабТоваров = СоздатьОбъект("ТаблицаЗначений");
ТабТоваров.НоваяКолонка("Товар");
ТабТоваров.НоваяКолонка("Цена","Число");
ТабТоваров.НоваяКолонка("Единица");
ТабТоваров.НоваяКолонка("Валюта");
// Добавляем новую колонку для хранения комментария номенклатуры:
ТабТоваров.НоваяКолонка("Комментарий");

Шаг 2. Заполнение колонки комментария при подборе товара

Теперь перейдем в процедуру ДобавитьВтаблицу, которая отвечает за непосредственное добавление строк в нашу таблицу значений. Нам нужно считать реквизит Комментарий из карточки товара и записать его в только что созданную колонку таблицы:


Процедура ДобавитьВтаблицу(Табл, Товар, Тип)
    Перем ВремЦена, ВремЕдиница, ВремВалюта;
    Если глВернутьЦену(Товар, Тип, РабочаяДата, ВремЦена, ВремЕдиница, ВремВалюта) = 1 Тогда
        Табл.НоваяСтрока();
        Табл.Товар = СокрЛП(Товар.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Товар.Артикул), "");
        Табл.Цена = ВремЦена;
        Табл.Валюта = ВремВалюта;
        Табл.Единица = ВремЕдиница;
        // Заполняем комментарий, очищая его от лишних пробелов:
        Табл.Комментарий = СокрЛП(Товар.Комментарий);
    Иначе
        Сообщить("У товара """ + Товар.ПолнНаименование + """ отсутствует цена """ + Тип + """");
    КонецЕсли;
КонецПроцедуры

Шаг 3. Модификация параметров процедуры формирования ценника

За вывод каждой отдельной этикетки отвечает процедура ДобавитьЦенник. Нам нужно передать в нее новое значение. Найдем заголовок этой процедуры и добавим параметр ПечКомментарий:


Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, ПечКомментарий, Столбик, Ряд)

Обратите внимание, что порядок передачи параметров очень важен! Если мы добавим параметр в середину списка, то при вызове процедуры возникнет путаница в переменных. Рекомендуется добавлять новые переменные ближе к концу списка, перед системными координатами Столбик и Ряд.

Шаг 4. Изменение вызова процедуры в главном цикле печати

Теперь найдем процедуру Сформировать. В ней происходит обход заполненной таблицы товаров в цикле и вызов печати для каждой строки. Нам нужно передать значение из новой колонки Комментарий в процедуру ДобавитьЦенник. Модернизируем этот участок кода:


Процедура Сформировать(ТаблицаТоваров, ПечФирма)
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Столбик = 1;
    Ряд = 0;
    ТаблицаТоваров.ВыбратьСтроки();
    Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
        ПечРозн = глФРМ(ТаблицаТоваров.Price, ТаблицаТоваров.Валюта); // Форматируем цену
        // Передаем параметр ТаблицаТоваров.Комментарий на шестую позицию вызова:
        ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, ТаблицаТоваров.Комментарий, Столбик, Ряд);
        глОживить(1);
    КонецЦикла;
    Таб.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Товарные ценники","");
КонецПроцедуры

Важно: если при запуске отчета вы получаете ошибку {...}: Недостаточно фактических параметров, это означает, что вы обновили объявление процедуры ДобавитьЦенник в шаге 3, но забыли обновить её вызов в шаге 4 (или наоборот). Количество переменных в объявлении и вызове должно строго совпадать.

Шаг 5. Работа с визуальным макетом в Конфигураторе

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

  1. В окне Конфигуратора откроем вкладку «Таблица» нашей обработки (если макет встроен в обработку) или откроем внешний файл макета.
  2. Найдем секцию, которая выводится на печать (обычно это пересечение строк и колонок под названием Товар|Ценник).
  3. Выберем подходящее место под наименованием товара. При необходимости раздвинем границы ячеек по высоте.
  4. Выделим нужную область ячеек и объединим их для создания новой отдельной строки внутри ценника.
  5. Нажмем правой кнопкой мыши на созданную ячейку и выберем пункт «Свойства».
  6. В открывшемся окне на вкладке «Общие» в поле «Текст» введем точное название нашей переменной: ПечКомментарий.
  7. В поле «Тип значения» обязательно установим переключатель в положение «Шаблон» или «Выражение» (для вывода значения переменной рекомендуется использовать «Выражение»).
  8. Перейдем на вкладку «Шрифт» и настроим индивидуальное оформление: выберем меньший кегль (размер), например, 8-й или 7-й шрифт, сделаем его наклонным (курсив) или выберем другой цвет текста.
  9. На вкладке «Положение» установим свойство размещения текста в значение «Переносить», чтобы длинный комментарий автоматически разбивался на несколько строк и не обрезался по ширине ценника.

Сохраним изменения в обработке и проверим результат в режиме «1С:Предприятие». Теперь комментарий выводится в собственной ячейке с заданным нами стилем оформления.

Устранение проблем: Что делать, если не работает кнопка «Печать» при выборе галочками?

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

Проблема с привязкой идентификаторов колонок

Интерфейс подбора в 1С 7.7 устроен так, что визуальная таблица на форме связана с программным объектом ТаблицаЗначений. Если при добавлении колонки Комментарий в процедуре ПриОткрытии вы случайно удалили или переставили местами системные колонки, связь формы и модуля нарушается.

Проверим наличие и правильность объявления колонки флага (печати). В начале процедуры ПриОткрытии инициализация таблицы должна выглядеть следующим образом:


ТабТоваров.НоваяКолонка("Печать", "Число", 1); // Колонка для хранения отметки (галочки)

Дважды кликнем по табличной части на форме обработки в режиме дизайна. Убедимся, что у колонки с галочками в свойствах указан правильный идентификатор связи, совпадающий с именем колонки в коде (например, Печать или Флаг).

Проверка условия отбора в цикле печати

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


ТаблицаТоваров.ВыбратьСтроки();
Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
    // Проверяем, отмечена ли строка галочкой (значение должно быть равно 1)
    Если ТаблицаТоваров.Печать = 1 Тогда 
        ПечРозн = глФРМ(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);
        ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, ТаблицаТоваров.Комментарий, Столбик, Ряд);
    КонецЕсли;
КонецЦикла;

Если условие Если ТаблицаТоваров.Печать = 1 Тогда отсутствует, программа попытается распечатать вообще все строки из таблицы, включая те, по которым не установлена цена, что может привести к аварийной остановке выполнения кода. Если же имя колонки в условии не совпадает с реальным именем колонки отметки на форме, то условие всегда будет ложным, и ни один ценник не отправится на печать.

Используя приведенные инструкции, мы сможем гибко управлять внешним видом ценников в системе 1С 7.7, адаптируя печатные формы под любые требования розничной торговли.

← На главную