Работа с контрольно-кассовой техникой (ККТ) в среде «1С:Предприятие» — одна из самых частых задач при автоматизации торговой деятельности. У начинающих разработчиков и администраторов систем часто возникает вопрос: как именно формируется чек, насколько жестко зафиксирована его структура и можно ли кастомизировать выводимые данные (например, убрать стандартные реквизиты платежа и вывести вместо них детальное содержимое документа реализации из основания Приходного кассового ордера)?
В этой статье мы подробно разберем по шагам, как устроен процесс печати чеков в 1С, какие законодательные ограничения накладывает Федеральный закон № 54-ФЗ, а также какими техническими способами можно изменить структуру чека.
Прежде чем приступать к программированию или изменению макетов, проанализируем ситуацию с точки зрения законодательства РФ. Кассовый чек — это не просто бумажная квитанция для покупателя, а строгий фискальный документ. Согласно Федеральному закону № 54-ФЗ (статья 4.7), чек должен содержать обязательный перечень реквизитов.
В чеке в обязательном порядке должны присутствовать:
Важный вывод: убрать итоговую сумму расчета или цены отдельных позиций из чека невозможно ни технически, ни юридически. Фискальный накопитель и драйвер кассы просто заблокируют печать некорректного документа. Если же вам удастся обойти этот механизм (например, распечатав нефискальный документ), налоговые органы признают такую операцию нарушением применения ККТ, что повлечет за собой крупные штрафы.
Что касается данных покупателя (плательщика): при расчете с обычными физическими лицами указывать их ИНН или ФИО на бумажном чеке не требуется. Однако при расчете между юридическими лицами или ИП (B2B-сегмент) указание наименования и ИНН покупателя в чеке является обязательным по закону.
Для понимания принципов настройки чека разделим его структуру на две части:
Рассмотрим подробнее возможности современных конфигураций 1С (таких как «1С:Розница», «1С:УНФ» или «1С:Управление торговлей»), которые используют Библиотеку подключаемого оборудования (БПО). В них встроен удобный интерактивный механизм.
Выясним, как им воспользоваться:
В «1С:Бухгалтерии предприятия 3.0» (БП 3) возможности визуального редактора шаблонов сильно ограничены по сравнению с торговыми решениями, поэтому для решения задачи автора (вывод состава реализации из ПКО) потребуется привлечение программиста 1С.
Разберем по шагам, как программист 1С может решить задачу вывода состава реализации-основания в чек. Чтобы сохранить конфигурацию на поддержке и не препятствовать автоматическому обновлению, мы будем использовать механизм Расширений конфигурации.
Нам потребуется перехватить процедуру подготовки XML-пакета с данными чека, который 1С отправляет на ККТ. В современных версиях БПО за это отвечает интеграционный компонент и общие модули работы с подключаемым оборудованием.
Рассмотрим пример кода, который перехватывает формирование чека и добавляет в него произвольный текст (нефискальные строки) с информацией о документе-основании:
&ВОбходе
Процедура Перед_МенеджерОборудованияКлиентСервер_ПодготовитьДанныеДляПечати(ПараметрыЧека, ДанныеФискальногоУстройства) Экспорт
// Проверим, что документ-основание является Приходным кассовым ордером
Если ТипЗнч(ПараметрыЧека.ДокументОснование) = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
ПКО = ПараметрыЧека.ДокументОснование;
// Проверяем наличие заполненного документа-основания "Реализация товаров и услуг"
Если ЗначениеЗаполнено(ПКО.ДокументОснование) И ТипЗнч(ПКО.ДокументОснование) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
Реализация = ПКО.ДокументОснование;
// Создаем массив текстовых строк для нефискальной части
ТекстовыеСтроки = Новый Массив;
ТекстовыеСтроки.Добавить("--- Основание: " + Строка(Реализация) + " ---");
// Обходим табличную часть реализации для вывода состава
Для Каждого СтрокаТовара Из Реализация.Товары Цикл
ИмяНоменклатуры = СокрЛП(СтрокаТовара.Номенклатура.Наименование);
СтрокаДляПечати = Лев(ИмяНоменклатуры, 20) + " | Кол-во: " + Строка(СтрокаТовара.Количество);
ТекстовыеСтроки.Добавить(СтрокаДляПечати);
КонецЦикла;
ТекстовыеСтроки.Добавить("----------------------------------------");
// Добавляем подготовленный текст в структуру параметров чека (подвал)
ПараметрыЧека.Вставить("ДополнительныеТекстовыеСтроки", ТекстовыеСтроки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В данном примере мы программно обратились к реквизиту ДокументОснование нашего ПКО, получили ссылку на документ реализации, считали оттуда список товаров и добавили эти данные в структуру параметров чека в виде дополнительных строк. Кассовый аппарат распечатает эту информацию в нефискальном поле чека.
Проанализируем еще один способ изменения внешнего вида чека, который упоминался в обсуждении на форуме — настройку на уровне драйвера кассового аппарата.
Производители ККТ (например, компании АТОЛ или Штрих-М) поставляют вместе с физическим оборудованием и драйверами специализированные утилиты. У АТОЛ это «Редактор шаблонов чеков».
С помощью этого инструмента вы можете:
Однако этот способ подходит только для вывода статической информации. Динамические данные (такие как состав конкретной накладной реализации) передать таким образом не получится — для этого обязательно требуется доработка программного кода на стороне 1С, как было описано в предыдущем пункте.