С переходом на стандарты 54-ФЗ и форматы фискальных документов разработчики и системные администраторы столкнулись с изменением логики взаимодействия учетных систем 1С с контрольно-кассовой техникой (ККТ). Драйверы оборудования «Штрих-М» при вызове фискализации чека или открытии кассовой смены начали принудительно обращаться к внутренним таблицам аппарата, перезаписывая данные кассиров и налоговых ставок. В связи с этим возникают два ключевых вопроса: не приведет ли интенсивная нагрузка (тысячи чеков в день) к быстрому выходу из строя микросхемы памяти кассы и как избавиться от регулярной ошибки $33 / 33h (Некорректные параметры в команде) при открытии смены или регистрации продажи. Разберем эти вопросы подробно с технической и программной стороны.
Проанализируем физическое устройство фискальных регистраторов семейства «Штрих-М». Опасения пользователей обычно связаны с тем, что постоянная запись данных приведет к исчерпанию лимита циклов перезаписи flash-памяти микроконтроллера ККТ.
Однако таблицы настроек ККТ (Таблица 1 — тип и режим, Таблица 2 — пароли и имена кассиров, Таблица 6 — налоговые ставки) физически располагаются не во flash-памяти программного кода. В зависимости от ревизии системной платы регистратора для хранения динамических настроек применяются следующие типы памяти:
Таким образом, перезапись Таблицы 2 при каждом чеке не несет угрозы аппаратного износа памяти. Тем не менее здесь существует критический аппаратный нюанс: при сильном разряде или деградации батарейки CR2032 во время пиковых токовых нагрузок (например, при включении привода протяжки чековой ленты или нагреве термоголовки) напряжение питания SRAM может кратковременно проседать. Это приводит к спонтанному сбросу содержимого таблиц к заводским значениям, что провоцирует программные сбои в 1С.
Выясним причину ошибки 33h (Некорректные параметры в команде). Согласно требованиям 54-ФЗ, чек должен содержать обязательный реквизит кассира (тег 1021). Исторически в протоколе «Штрих-М» печать имени кассира жестко связывалась с полями Таблицы 2 («Пароли кассиров и администраторов»).
В типовых конфигурациях 1С (особенно в «1С:Управление торговлей 10.3» и ранних версиях «1С:Розница 2.2» на базе старых версий Библиотеки подключаемого оборудования — БПО) механизм фискализации передает имя пользователя в драйвер через низкоуровневую запись в Таблицу 2. Ошибка прошивки 33h генерируется кассовым аппаратом в следующих случаях:
Если сбой происходит в конфигурации «1С:Управление торговлей 10.3» при работе в режиме рабочего места кассира (РМК) или при ручном создании документов «Чек ККМ», выполним настройку учетных данных пользователя по шагам:
Наименование заполнен корректно и содержит ФИО кассира.ФизЛицо. В карточке физического лица обязательно должно быть заполнено наименование (ФИО), так как именно оно извлекается механизмом формирования фискальных тегов.Сервис -> Настройки пользователя. Развернем ветку Основные значения для подстановки в документы и проверим параметры Основной ответственный и Пароль кассира фискального регистратора. При пустом значении ответственного реквизит Ответственный в чеке не заполняется, в результате чего драйвер отправляет в ККТ пустоту.В ситуациях, когда типовой код обработки обслуживания торгового оборудования затирает имя кассира при открытии смены, рассмотрим программную доработку процедуры фискализации в модуле интеграции с торговым оборудованием. Найдем участок формирования данных кассира перед передачей в драйвер и добавим валидацию:
// Проверяем заполнение имени кассира во избежание передачи пустой строки в Таблицу 2
Если ПустаяСтрока(ОбщиеПараметры.Кассир) Тогда
ОбщиеПараметры.Кассир = "Кассир";
КонецЕсли;
// Обрезаем длину строки до лимита таблицы ККТ Штрих-М (не более 28 символов)
ОбщиеПараметры.Кассир = Лев(СокрЛП(ОбщиеПараметры.Кассир), 28);
Аналогичную проверку выполним в процедуре ОткрытьСмену(). Если метод БПО вызывает низкоуровневую запись кассира без передачи имени текущего пользователя сеанса, принудительно подставим имя пользователя 1С:
ИмяТекущегоПользователя = СокрЛП(ПараметрыСеанса.ТекущийПользователь.Наименование);
Если ПустаяСтрока(ИмяТекущегоПользователя) Тогда
ИмяТекущегоПользователя = "Администратор";
КонецЕсли;
ОбщиеПараметры.Кассир = Лев(ИмяТекущегоПользователя, 28);
Разберем регламент ручной проверки таблиц ККТ для исключения аппаратных блокировок со стороны прошивки:
Применение актуальных релизов БПО и корректная настройка реквизитов пользователей в 1С полностью исключают появление ошибки 33h и обеспечивают стабильную печать фискальных чеков без риска для памяти кассового аппарата.