Разработка и отладка механизмов печати чеков в среде 1С — задача, с которой сталкивается практически каждый программист при автоматизации розничной торговли. Главная дилемма этого процесса заключается в следующем: как проверить весь жизненный цикл чека, корректность заполнения реквизитов, отправку данных в ОФД и работу с маркировкой, не регистрируя при этом онлайн-кассу в Федеральной налоговой службе (ФНС) и не расходуя ресурс дорогостоящего фискального накопителя (ФН)?
В рамках данной статьи мы подробно проанализируем особенности поведения незарегистрированных кассовых аппаратов, рассмотрим архитектуру взаимодействия 1С с ККТ через Библиотеку подключаемого оборудования (БПО) и разберем все доступные инструменты для полноценного тестирования: от физических ККТ без ФН до современных программных эмуляторов с поддержкой ФФД 1.2.
Начинающие разработчики часто сталкиваются с тем, что физическая касса, подключенная к 1С, на этапе тестирования начинает вести себя некорректно. Например, при попытке выполнить операцию возвращаются системные ошибки вида «Метод объекта не обнаружен» или ККТ блокирует выполнение команд открытия и аннулирования чека. Выясним причину такого поведения.
Во-первых, необходимо понимать разницу между прямым обращением к драйверу производителя и работой через БПО 1С. Исторически старые версии БПО использовали дискретные низкоуровневые команды вроде ОткрытьЧек() или АннулироватьЧек(). В современных версиях БПО (начиная с линейки 3.x) архитектура принципиально изменилась. Вся информация по чеку упаковывается в единый XML-пакет и передается в метод СформироватьЧек(). Физический вызов открытия чека внутри драйвера ККТ происходит непосредственно в момент старта печати этого XML-пакета. Попытка вызывать устаревшие методы напрямую приводит к закономерным программным сбоям.
Во-вторых, на программном уровне незарегистрированная касса (без фискализации) находится в режиме «Готов к фискализации» (или в режиме выбора). Прошивка ККТ на аппаратном уровне блокирует выполнение фискальных операций. Если драйвер пытается инициировать команду открытия чека, касса возвращает ошибку некорректного режима работы, которую обертка драйвера 1С может ошибочно интерпретировать как отсутствие метода.
Если в вашем распоряжении есть боевой кассовый аппарат, поведение при тестировании без ФН будет напрямую зависеть от бренда производителя:
Важный нюанс: такие параметры, как номер смены и номер чека в смене, разработчик не может произвольно задавать из кода 1С. Эти счетчики ведутся на аппаратном уровне самой ККТ (и дублируются в ФН). Получить их актуальные значения можно с помощью методов БПО после успешной печати чека.
Для полноценной отладки, максимально приближенной к реальным условиям эксплуатации (особенно при работе с маркированным товаром и ФФД 1.2), незаменимым инструментом является МГМ (Массогабаритный макет фискального накопителя). Это специальное тестовое устройство, которое вставляется в ККТ вместо боевого ФН.
Рассмотрим ключевые преимущества и правила работы с МГМ:
test.okp.atlas-kard.ru:31101. Также практически у всех крупных ОФД (Яндекс.ОФД, Первый ОФД, Платформа ОФД) есть выделенные тестовые порты для приема пакетов от МГМ.Если физического оборудования под рукой нет, фирма 1С предоставляет мощную программную альтернативу. Современные релизы БПО включают в себя драйвер «1С:Эмулятор контрольно-кассовой техники нового образца» (библиотека FPEmulatorKKT1Cffd12.dll).
Проанализируем возможности этого эмулятора:
Многие современные кассовые аппараты (в частности, АТОЛ, функционирующие на платформе 5.0) поддерживают перевод физического устройства в «учебный режим» через сервисную утилиту драйвера. В данном режиме ККТ программно имитирует присутствие установленного и фискализированного ФН.
Это дает возможность разработчику тестировать весь пул методов БПО (включая открытие/закрытие смен, внесение и выемку денежных средств, печать чеков со сквозной нумерацией), не приобретая дорогостоящий МГМ. На распечатанных чеках при этом автоматически выводится признак недействительности операции.
Посмотрим на пример того, как должен выглядеть правильный алгоритм формирования и отправки чека на печать через механизмы БПО. Вместо пошагового вызова низкоуровневых команд драйвера мы подготавливаем XML-пакет и передаем его в унифицированную функцию.
Рассмотрим пример формирования XML-структуры чека и вызова печати:
// Подготавливаем структуру для формирования XML чека
ПараметрыЧека = Новый Структура;
ПараметрыЧека.Вставить("ТипРасчета", ПредопределенноеЗначение("Перечисление.ТипыРасчетаККТ.Приход"));
ПараметрыЧека.Вставить("ПозицииЧека", Новый Массив);
// Заполняем товарную позицию
Позиция = Новый Структура;
Позиция.Вставить("Наименование", "Тестовый товар для отладки БПО");
Позиция.Вставить("Количество", 1);
Позиция.Вставить("Цена", 100.00);
Позиция.Вставить("Сумма", 100.00);
Позиция.Вставить("СтавкаНДС", "БезНДС");
ПараметрыЧека.ПозицииЧека.Добавить(Позиция);
// Формируем XML-пакет по стандарту БПО
XMLПакет = МенеджерОборудованияВызовСервера.СформироватьXMLПакетЧека(ПараметрыЧека);
// Вызываем печать чека через БПО
ПараметрыВыходные = Новый Массив;
РезультатВыполнения = ПодключаемоеОборудованиеРТ.ВыполнитьОперациюПечати(
ИдентификаторУстройства,
"БПО_ПечатьЧека",
XMLПакет,
ПараметрыВыходные
);
Если НЕ РезультатВыполнения Тогда
ВызватьИсключение "Ошибка печати чека: " + ПараметрыВыходные[1];
КонецЕсли;
Использование этого унифицированного подхода гарантирует, что ваш код будет одинаково успешно отрабатывать как на программном эмуляторе БПО, так и на физической ККТ с установленным МГМ или боевым ФН, избавляя вас от ошибок совместимости интерфейсов драйвера.