Как реализовать печать чека на нефискальном принтере чеков из документа Реализация товаров и услуг

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

При автоматизации розничных или мелкооптовых продаж часто возникает необходимость выдавать покупателю компактный товарный чек на чековой ленте (шириной 58 мм или 80 мм) напрямую из оптового документа Реализация товаров и услуг. В конфигурациях на обычных формах, таких как 1С:Управление торговлей 10.3, стандартные печатные формы накладных ориентированы на формат листа А4. Рассмотрим, как разработать удобный макет, правильно настроить параметры табличного документа, избавиться от лишних отступов и автоматизировать вывод чека на печать.

Проектирование структуры макета чека

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

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

Использование шаблонов ячеек для вывода цен и количества

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

Посмотрим на пример настройки ячейки в свойствах макета:

  1. Выделим ячейку макета, в которой должна выводиться строка расчета.
  2. В палитре свойств переключим параметр Заполнение со значения Текст или Параметр на Шаблон.
  3. В поле Текст укажем выражение, где имена параметров заключены в квадратные скобки: [Количество] x [Цена] = [Сумма].

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

Программная настройка параметров страницы и сброс полей

Выясним причину, почему при печати чеков на принтерах узкой ленты смещается текст или принтер отматывает пустую бумагу. По умолчанию табличный документ создается со стандартными полями (отступами) по 10 мм и включенными колонтитулами. Для чековой ленты шириной 58 мм такие поля оставляют слишком мало места под полезный текст.

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

Рассмотрим пример кода процедуры формирования табличного документа:


Функция ПечатьЧека(ДокументСсылка) Экспорт

    ТабДокумент = Новый ТабличныйДокумент;
    
    // Привязываем уникальный ключ параметров печати к документу
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ТоварныйЧек_Реализация";
    
    // Обнуляем поля страницы
    ТабДокумент.ПолеСлева   = 0;
    ТабДокумент.ПолеСправа  = 0;
    ТабДокумент.ПолеСверху  = 0;
    ТабДокумент.ПолеСнизу   = 0;
    
    // Обнуляем колонтитулы во избежание лишней протяжки ленты
    ТабДокумент.РазмерКолонтитулаСверху = 0;
    ТабДокумент.РазмерКолонтитулаСнизу  = 0;
    
    // Получаем макет обработки или документа
    Макет = ПолучитьМакет("МакетЧека");
    
    // Вывод шапки документа
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.Организация = ДокументСсылка.Организация;
    ОбластьШапка.Параметры.Номер       = ДокументСсылка.Номер;
    ОбластьШапка.Параметры.Дата        = Формат(ДокументСсылка.Дата, "ДФ=dd.MM.yyyy HH:mm");
    ОбластьШапка.Параметры.Контрагент  = ДокументСсылка.Контрагент;
    ТабДокумент.Вывести(ОбластьШапка);
    
    // Вывод строк табличной части
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовара");
    Для Каждого Стр Из ДокументСсылка.Товары Цикл
        ОбластьСтрока.Параметры.Номенклатура = Стр.Номенклатура.Наименование;
        ОбластьСтрока.Параметры.Количество   = Стр.Количество;
        ОбластьСтрока.Параметры.Цена         = Формат(Стр.Цена, "ЧДЦ=2");
        ОбластьСтрока.Параметры.Сумма        = Формат(Стр.Сумма, "ЧДЦ=2");
        ТабДокумент.Вывести(ОбластьСтрока);
    КонецЦикла;
    
    // Вывод подвала с итоговой суммой
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.СуммаДокумента = Формат(ДокументСсылка.СуммаДокумента, "ЧДЦ=2");
    ОбластьПодвал.Параметры.Ответственный  = ДокументСсылка.Ответственный;
    ТабДокумент.Вывести(ОбластьПодвал);
    
    Возврат ТабДокумент;

КонецФункции

Настройка ячеек под длинные наименования товаров

Рассмотрим подробнее поведение строк номенклатуры с длинными названиями. Чтобы текст не обрезался по ширине ленты:

  1. В макете выделим ячейку параметра Номенклатура.
  2. В палитре свойств ячейки в поле Размещение текста выберем значение Переносить.
  3. В свойствах строки макета убедимся, что флаг Автовысота строки включен.
  4. Ширину колонок макета подберем под физический размер ленты (для ленты 58 мм обычно подходит область шириной 30–34 символа стандартного шрифта). Не рекомендуется включать свойство АвтоМасштаб, так как платформа может избыточно уменьшить размер шрифта.

Прямая отправка на принтер без открытия диалога

Для ускорения работы кассира или менеджера можно настроить мгновенную отправку сформированного чека на печать, минуя предварительный просмотр и диалоговое окно Windows.

Посмотрим на пример реализации прямой печати:


// Непосредственная отправка на печать
ТабДокумент.ИмяПринтера = "XP-58"; // Имя принтера в системе Windows
ТабДокумент.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Формирование идентификационного штрихкода в чеке

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

  1. Через внешнюю компоненту 1С:Печать штрихкодов: формируется объект Рисунок табличного документа, в который программно загружается сгенерированное изображение штрихкода (Code 128 или EAN-13).
  2. Через специализированный шрифт (Barcode Font): на рабочий компьютер устанавливается шрифт штрихкода (например, Code 39), а в макете для ячейки со штрихкодом задается соответствующее семейство шрифтов. В саму ячейку передается сформированная строка с управляющими символами.

Оформление в виде внешней печатной формы

Чтобы не вносить изменения в типовую конфигурацию и не снимать объекты с поддержки, разработку товарного чека рекомендуется оформить как Внешнюю печатную форму (файл .epf). В модуль внешней обработки помещается функция Печать() с ключевым словом Экспорт, которая возвращает сформированный объект ТабличныйДокумент. Обработка регистрируется в справочнике Внешние обработки и становится доступной в меню «Печать» документа реализации.

← На главную