При автоматизации розничной торговли на базе 1С (особенно на классических версиях, таких как 7.7) часто возникает задача синхронизации номеров документов. Разработчики стремятся к тому, чтобы номер чека, напечатанный на ленте, полностью совпадал с номером документа в информационной базе (ИБ). Однако специфика работы современных онлайн-касс и требования 54-ФЗ накладывают определенные ограничения на этот процесс. Разберем подробно, почему нельзя просто заменить номер чека и какими методами можно добиться желаемого результата.
Проанализируем техническую составляющую вопроса. В любой онлайн-кассе, включая АТОЛ 30Ф, за нумерацию отвечает не внешняя программа, а внутреннее ПО кассы (прошивка) и Фискальный Накопитель (ФН). Существует системный реквизит — Тег 1042 (номер чека за смену). Этот реквизит генерируется автоматически: каждый новый фискальный документ получает номер на единицу больше предыдущего.
Важно понимать: разработчики прошивок намеренно закрыли возможность изменения этого поля извне, чтобы исключить махинации с отчетностью. Номер чека должен быть строго последовательным в рамках одной смены. Поэтому, как бы мы ни старались передать значение через обработку обслуживания, касса всё равно «впихнет» своё системное значение в поле Номер чека.
Тем не менее, существует несколько проверенных способов вывести нужный нам номер (например, номер документа из 1С без префиксов) на бумажный чек и даже передать его в ОФД. Рассмотрим их подробнее.
Это самый простой и распространенный метод. Мы не меняем системный номер, а просто дописываем свой текст в тело чека. Этот текст будет виден покупателю на бумаге, но он не является обязательным фискальным реквизитом.
Разберем, как это реализовать программно. Если вы используете драйвер АТОЛ версии 8 (ДТО 8), который часто встречается в связке с 1С 7.7, нам понадобятся свойства Caption и метод PrintString. Посмотрим на пример кода:
// Предположим, что объект драйвера уже инициализирован как 'driver'
// Получаем очищенный номер из 1С (например, "000045" -> "45")
НомерИз1С = СокрЛП(Число(ТекущийДокумент.НомерДок));
driver.Caption = "ДОКУМЕНТ ИБ: " + НомерИз1С;
driver.PrintString();
Этот блок кода нужно вставить в обработку обслуживания ККТ в момент формирования тела чека (обычно между открытием чека OpenCheck и его закрытием CloseCheck). В результате на чеке появится дополнительная строка, по которой будет легко найти документ в базе 1С при возврате товара.
Если вам необходимо, чтобы номер из 1С не просто печатался на бумаге, но и уходил в электронном виде в ОФД (Налоговую), следует использовать специализированные теги. Наиболее подходящим для этих целей является Тег 1192 (Дополнительный реквизит чека).
Рассмотрим преимущества этого метода:
Проанализируем реализацию для драйвера АТОЛ 10-й версии, так как в нем работа с тегами реализована наиболее прозрачно. Для передачи значения используется метод setParam:
// Устанавливаем значение для тега 1192
// Это нужно сделать ДО вызова метода закрытия чека
driver.setParam(1192, "1С-45");
driver.utilFormTlv();
driver.setParam(65562, driver.getParamByteArray(65571)); // Передаем сформированный атрибут
В ДТО 8 это делается через запись атрибута реквизита, что несколько сложнее в реализации на языке 1С 7.7, но также возможно через прямое обращение к методам драйвера согласно документации (Приложение 15 в Drivers8_FprnM_PM.pdf).
Выясним причину популярности этого «хитрого» метода. Поскольку поле «Кассир» (Тег 1021) является обязательным и передается в ОФД, некоторые разработчики добавляют номер документа 1С прямо к фамилии кассира.
Это выглядит примерно так: Кассир: Иванова И.И. (Док №45). Хотя этот способ технически рабочий, мы не рекомендуем использовать его как основной, так как он может вызвать вопросы у проверяющих органов из-за некорректного заполнения данных о сотруднике.
Для ККТ АТОЛ 30Ф существует специальная утилита — «Редактор шаблонов чеков». С её помощью мы можем изменить визуальное представление документа без правки кода в 1С.
Рассмотрим алгоритм действий:
Этот метод хорош тем, что позволяет выделить ваш номер крупным шрифтом или разместить его в «подвале» чека, сделав его максимально заметным для клиента и персонала.
Проанализировав ситуацию, мы приходим к следующим выводам:
PrintString (печать нефискальной строки).Помните, что онлайн-касса — это прежде всего инструмент государственного контроля, поэтому любая кастомизация должна в первую очередь соответствовать правилам формирования фискальных документов (ФФД).