В конфигурации «1С:Управление торговлей» редакции 11.5 пользователи и разработчики нередко сталкиваются с необходимостью напечатать на кассовой ленте дополнительную сервисную информацию: серийный номер проданного товара (S/N) и срок его гарантийного обслуживания, заданный через дополнительные реквизиты. Однако встроенный визуальный редактор шаблонов фискальных чеков, привычный пользователям других решений (например, 1С:Розницы), в УТ 11 отсутствует. Разберем, как устроена печать чеков в УТ 11.5, какие ограничения накладывают требования законодательства и драйверы ККТ, а также какими способами можно реализовать требуемый вывод информации.
Проанализируем сначала причины, по которым в УТ 11.5 нельзя просто так настроить произвольный шаблон в пользовательском интерфейсе:
Рассмотрим основной программный подход, который позволяет отобразить сведения в чеке без снятия конфигурации с типовой поддержки. Реализуем доработку с помощью расширения.
Разберем по шагам логику решения:
ЧекККМ или общем модуле формирования фискального пакета БПО.Посмотрим на пример программной реализации модификации наименования позиции:
// Сформируем итоговую строку для фискального регистратора
НаименованиеБазовое = СтрокаТовара.Номенклатура.НаименованиеПолное;
Если ПустаяСтрока(НаименованиеБазовое) Тогда
НаименованиеБазовое = СтрокаТовара.Номенклатура.Наименование;
КонецЕсли;
ДополнительныеДанные = "";
// Проверяем заполнение серии
Если ЗначениеЗаполнено(СтрокаТовара.Серия) Тогда
ДополнительныеДанные = ДополнительныеДанные + " S/N: " + СокрЛП(СтрокаТовара.Серия.Наименование);
КонецЕсли;
// Считываем дополнительный реквизит гарантии
СрокГарантии = "";
СвойствоГарантия = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Срок гарантии");
Если ЗначениеЗаполнено(СвойствоГарантия) Тогда
СтрокаДопРеквизита = СтрокаТовара.Номенклатура.ДополнительныеРеквизиты.Найти(СвойствоГарантия, "Свойство");
Если СтрокаДопРеквизита <> Неопределено И ЗначениеЗаполнено(СтрокаДопРеквизита.Значение) Тогда
СрокГарантии = СокрЛП(СтрокаДопРеквизита.Значение);
ДополнительныеДанные = ДополнительныеДанные + " Гар.: " + СрокГарантии;
КонецЕсли;
КонецЕсли;
// Конкатенируем и жестко ограничиваем длину по формату ФФД (тег 1030)
ИтоговоеНаименование = СокрЛП(НаименованиеБазовое + ДополнительныеДанные);
СтрокаЧека.Наименование = Лев(ИтоговоеНаименование, 128);
Важно: При таком способе текст будет напечатан непосредственно в блоке наименования товара в чеке. Обязательно проверяйте длину наименования с помощью функции Лев(), чтобы не получить отказ фискализации на кассе из-за переполнения тега.
В подсистеме БПО данные чека преобразуются в XML-пакет перед передачей драйверу. Если модель кассового аппарата и версия драйвера поддерживают передачу текстовых параметров к позиции, можно добавить соответствующие теги через перехват формирования пакета XML.
Выясним причину, по которой этот метод требует предварительного тестирования: поведение сильно различается в зависимости от производителя кассы (АТОЛ, Штрих-М и др.). Некоторые кассы игнорируют вложенные текстовые строки, а другие выдают ошибку синтаксиса пакета. Рекомендуется протестировать этот вариант в демо-режиме ККТ перед запуском в рабочую базу.
Если серийные номера и гарантийные обязательства содержат большой объем текста, превышающий 128 символов, наименование в фискальном чеке обрезать не рекомендуется. В таком случае разберем два надежных альтернативных решения:
ЧекККМ или Реализация товаров и услуг. Документ выводится на формат А4 или термопринтер этикеток/документов, где указываются полные гарантийные обязательства, место подписи покупателя и отметки сервисного центра.