Как заставить фискальный регистратор печатать чек ККМ по пользовательскому шаблону из 1С:Розница?

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

При работе с программными продуктами 1С, в частности с 1С:Розница, пользователи часто сталкиваются с необходимостью изменения внешнего вида кассового чека. Например, клиент может попросить добавить в информативную часть чека артикул товара или удалить ненужные, на его взгляд, строки, чтобы чек не был слишком «километровым». Мы сталкиваемся с ситуацией, когда, несмотря на все внесенные изменения в шаблон чека ККМ в конфигурации 1С и его привязку к кассе, фискальный регистратор (ФР) упорно печатает свой стандартный чек по умолчанию, игнорируя наши усилия. Эмулятор в 1С при этом может показывать желаемый результат, что только усиливает недоумение. Давайте разберемся, почему так происходит и как мы можем обойти эти ограничения.

Ограничения фискальных регистраторов и Федеральный закон 54-ФЗ

Первоочередной причиной, по которой фискальный регистратор игнорирует изменения в шаблонах 1С, является строгое регулирование фискальной части чека в соответствии с Федеральным законом № 54-ФЗ «О применении контрольно-кассовой техники при осуществлении расчетов в Российской Федерации». Современные контрольно-кассовые машины (ККТ), к которым относятся и фискальные регистраторы, являются онлайн-кассами и должны передавать определенный набор обязательных реквизитов в Федеральную налоговую службу (ФНС) через Оператора Фискальных Данных (ОФД).

  1. Обязательные реквизиты: Фискальная часть чека, которая включает в себя наименование товара, его количество, цену за единицу, итоговую стоимость и ставку НДС, является строго регламентированной. Эти поля содержатся в шаблоне по умолчанию, заложенном в прошивку самого фискального регистратора, и не подлежат редактированию через внешние программы, такие как 1С.
  2. Принцип работы онлайн-кассы: Когда 1С отправляет команду на печать чека, она передает фискальному регистратору не готовый макет для печати, а структурированные данные (JSON или иной формат) для каждой строки:

    Наименование, ИтоговаяЦена, Налог, Количество и так далее. Фискальный регистратор принимает эти данные, фискализирует их (то есть, записывает в фискальный накопитель и подписывает фискальным признаком), а затем форматирует их для печати согласно своей внутренней логике и прошивке. Именно поэтому он печатает свой «стандартный» шаблон для фискальной части.

  3. Последствия нарушения: Любые попытки изменить обязательные реквизиты или их отсутствие могут привести к тому, что чек будет признан недействительным налоговыми органами, что чревато штрафами для организации.

Таким образом, мы видим, что напрямую изменить порядок вывода или содержимое обязательных фискальных строк (например, вместо «Номенклатура» вывести «Артикул + Номенклатура») в рамках фискальной части чека, как правило, невозможно из-за законодательных требований и устройства современных ККТ.

Зачем тогда шаблоны чеков в конфигурации 1С:Розница?

Возникает логичный вопрос: если нельзя изменить фискальную часть, то зачем в 1С:Розница (и других конфигурациях, таких как 1С:Управление нашей фирмой) существует функционал для создания и редактирования шаблонов чеков ККМ? Мы разберем, что эти шаблоны все же очень полезны и предназначены для настройки нефискальных частей документа.

В 1С:Розница мы находим эти настройки в разделе «Администрирование» → «Печатные формы, отчеты и обработки» → «Шаблоны этикеток, ценников и чеков ККМ». Здесь пользователи могут создавать новые шаблоны или редактировать существующие. Этот механизм позволяет нам добавлять в чек:

Главное понимание заключается в том, что 1С позволяет настраивать так называемые «шапку» (блок до обязательных фискальных реквизитов) и «подвал» (блок после фискальных итогов) чека. Именно эти нефискальные блоки мы можем изменять, добавляя туда произвольный текст или информацию, которая будет напечатана фискальным регистратором, но не будет являться частью фискальных данных, передаваемых в ОФД.

Возможные решения и обходные пути

Теперь, когда мы понимаем ограничения, мы можем рассмотреть жизнеспособные подходы к решению нашей задачи по кастомизации информационной части чека.

1. Кастомизация нефискальных блоков чека («шапка» и «подвал»)

Самый простой способ добавить дополнительную информацию – это использовать настраиваемые нефискальные блоки в шаблоне чека. Мы можем отредактировать шаблон таким образом, чтобы нужная нам информация выводилась либо до фискальных строк, либо после них. Это могут быть рекламные сообщения, информация о программе лояльности, контактные данные магазина или, например, режим работы.

Шаги по настройке:

  1. Откройте 1С:Розница.
  2. Перейдите в раздел «Администрирование» → «Печатные формы, отчеты и обработки».
  3. Выберите пункт «Шаблоны этикеток, ценников и чеков ККМ».
  4. Откройте существующий шаблон чека ККМ или создайте новый, если это необходимо.
  5. В редакторе шаблона вы найдете области, предназначенные для «шапки» и «подвала» чека. В эти области мы можем добавлять текстовые поля, поля с реквизитами из документа (например, имя кассира, номер чека, если они не выводятся автоматически и не являются фискальными).
  6. Сохраните изменения в шаблоне и убедитесь, что он привязан к используемой кассе ККМ.

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

2. Печать отдельного нефискального документа (слипа)

Это наиболее гибкое и часто используемое решение, когда нам требуется вывести информацию, которая не может быть частью фискального чека или должна быть сгруппирована по товарам, как в нашем случае с «Артикул + Номенклатура».

Мы можем настроить печать отдельного нефискального документа, который будет выводиться фискальным регистратором после основного фискального чека. Такой документ называется «слип» или «товарный чек» (в контексте нефискальной печати). Этот слип полностью настраивается в 1С и позволяет нам вывести любую нужную информацию, не нарушая требований к фискальному чеку.

Как это работает для вывода «Артикул + Номенклатура»:

  1. Создание нового шаблона: Мы создадим в 1С новый шаблон для нефискального документа (слипа). В этом шаблоне мы сможем свободно размещать данные, в том числе и артикул вместе с наименованием товара.
  2. Формирование данных для слипа: В процессе печати чека, после того как основной фискальный чек уже отправлен на ФР, мы программно формируем данные для нашего слипа. Мы получаем список товаров из текущего чека и для каждого товара формируем строку, содержащую артикул и наименование.
  3. Отправка на печать: Затем мы отправляем эти сформированные данные на фискальный регистратор для печати как обычный нефискальный текст. Большинство современных фискальных регистраторов поддерживают режим печати текстовых документов.

Для реализации этого метода, как правило, требуется небольшое программное допиливание в конфигурации 1С. Мы рассмотрим это подробнее в следующем пункте.

3. Программное вмешательство и модификация логики печати

Для более глубокой кастомизации или для реализации печати отдельного нефискального слипа с динамическим содержимым, как в случае с выводом «Артикул + Номенклатура», нам может потребоваться внести изменения непосредственно в код 1С.

Мы будем работать с общими модулями, отвечающими за взаимодействие с оборудованием. В 1С:Розница ключевую роль в этом процессе играет общий модуль МенеджерОборудованияКлиентСервер и связанные с ним процедуры и функции, которые обрабатывают команды печати для ККТ.

Принцип действий:

  1. Идентификация точки печати: Мы находим место в коде, где происходит отправка фискального чека на печать (обычно это в модулях формы рабочего места кассира или в документах, связанных с продажами).
  2. Добавление логики для слипа: Сразу после успешной печати фискального чека мы добавляем свою логику. Эта логика будет:
    • Получать данные о товарах из текущего документа (например, из табличной части ТаблицаТоваров).
    • Для каждого товара формировать нужную строку, например: "[Артикул товара] [Наименование товара]".
    • Собирать эти строки в единый текстовый блок.
    • Отправлять этот текстовый блок на фискальный регистратор для печати как нефискальный документ. Обычно это делается с помощью вызова соответствующих методов объекта драйвера ККТ, например, ДрайверККТ.НапечататьТекст(ТекстДляСлипа).
  3. Использование шаблона 1С для слипа: Вместо формирования текста вручную, мы можем программно использовать наш заранее созданный шаблон 1С для нефискального слипа. Мы передаем в него необходимые данные, и 1С самостоятельно сгенерирует печатную форму, которую затем можно отправить на ФР. Это более надежный и гибкий подход, так как изменения в форматировании можно делать через шаблон, а не через код.

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


// ... код печати фискального чека
Если ОбъектыДрайверовОборудования.ФискальныйРегистратор.НапечататьЧек(ДанныеЧека) Тогда
    // Фискальный чек напечатан успешно, теперь печатаем нефискальный слип

    // 1. Формируем данные для слипа (например, таблица значений с Артикулом и Номенклатурой)
    ТаблицаДанныхДляСлипа = Новый ТаблицаЗначений;
    ТаблицаДанныхДляСлипа.Колонки.Добавить("Артикул");
    ТаблицаДанныхДляСлипа.Колонки.Добавить("Наименование");

    Для Каждого СтрокаТовара Из ДанныеЧека.Товары Цикл
        НоваяСтрока = ТаблицаДанныхДляСлипа.Добавить();
        НоваяСтрока.Артикул = СтрокаТовара.Номенклатура.Артикул; // Предполагаем, что Артикул доступен
        НоваяСтрока.Наименование = СтрокаТовара.Номенклатура.Наименование;
    КонецЦикла;

    // 2. Генерируем печатную форму на основе шаблона 1С
    МакетСлипа = ПолучитьМакет("МойНефискальныйСлип"); // Имя нашего шаблона в конфигурации
    ОбластьМакета = МакетСлипа.ПолучитьОбласть("ОбластьСлипа");
    ОбластьМакета.Параметры.Заполнить(ТаблицаДанныхДляСлипа); // Передаем данные в макет

    // 3. Отправляем текст из макета на печать как нефискальный документ
    ТекстДляПечати = "";
    Для Каждого СтрокаСлипа Из ОбластьМакета.Вывести() Цикл // Итерация по строкам макета
        ТекстДляПечати = ТекстДляПечати + СтрокаСлипа;
    КонецЦикла;

    ОбъектыДрайверовОборудования.ФискальныйРегистратор.НапечататьТекст(ТекстДляПечати);

Иначе
    // Обработка ошибки печати фискального чека
КонецЕсли;

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

4. Проверка версии конфигурации 1С:Розница

В одном из сообщений форума упоминалось, что на определенном релизе 1С:Розница существовала подобная проблема с печатью, которая впоследствии была устранена. Мы рекомендуем проверить актуальность вашей версии 1С:Розница.

Действия:

  1. Уточните текущую версию вашей конфигурации 1С:Розница. Например, в обсуждении упоминалась версия 2.2.7.15, где проблема сохранялась.
  2. Проверьте наличие более новых релизов конфигурации на портале 1С и изучите список изменений: возможно, в одном из обновлений была исправлена ошибка, касающаяся печати чеков по шаблону.
  3. Если вы используете устаревшую версию, рассмотрите возможность обновления до последней стабильной версии. Перед обновлением всегда делайте резервную копию базы данных.

Хотя этот пункт может не решить проблему напрямую, он исключает потенциальные ошибки платформы или конфигурации, которые могли бы влиять на процесс печати.

Резюме и рекомендации

Мы выяснили, что прямая модификация фискальных строк чека ККМ через шаблоны 1С невозможна из-за требований 54-ФЗ и внутренней логики фискальных регистраторов. Однако мы имеем несколько эффективных способов для вывода дополнительной информации:

  1. Использование нефискальных блоков (шапки и подвала) чека: Это самый простой способ для статической информации или данных, не привязанных к каждой позиции товара.
  2. Печать отдельного нефискального слипа: Это наиболее гибкое решение для вывода динамической информации, такой как «Артикул + Номенклатура» для каждого товара. Этот подход часто требует небольшой доработки кода 1С для формирования и отправки слипа на печать.
  3. Программное вмешательство: Для сложных сценариев или автоматизации печати слипов мы можем использовать программные методы 1С, например, через общий модуль МенеджерОборудованияКлиентСервер, чтобы генерировать и отправлять произвольный текст на печать.

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

← На главную