При переходе на новые онлайн-кассы и современные драйверы оборудования разработчики и администраторы старых конфигураций 1С (таких как «1С:Розница 1.0» или «1С:Управление торговлей 10.3» на обычных формах) часто сталкиваются с аппаратными ошибками. Одна из самых распространенных — ошибка «[17] Неверное количество» при открытии смены, когда конфигурация пытается напечатать так называемый «нулевой чек» с помощью процедуры ПечатьНулевогоЧека().
В этой статье мы подробно разберем, почему возникает эта ошибка при работе с драйвером АТОЛ ДТО 10 (10.5.1.3 и выше), проанализируем внутренние механизмы взаимодействия ККТ с платформой 1С и рассмотрим несколько способов решения этой проблемы — от быстрого исправления параметров чека до полной оптимизации кода под требования современного законодательства (ФФД 1.05 / 1.2).
---
Для начала разберемся в физике процесса. Драйвер АТОЛ 10-й версии (ДТО 10) осуществляет гораздо более жесткую валидацию данных, передаваемых в фискальный накопитель (ФН), нежели старый ДТО 8. Это связано с требованиями актуальных форматов фискальных документов (ФФД).
Когда 1С инициирует открытие смены, в устаревших конфигурациях запускается процедура печати нулевого чека. На уровне драйвера это выглядит как последовательность команд:
openReceipt().closeReceipt().Именно на этапе вызова метода closeReceipt() (или функции ЗакрытьЧек() в обработке обслуживания) ККТ возвращает ошибку «[17] Неверное количество» (код ошибки LIBFPTR_ERROR_INVALID_QUANTITY). Драйвер блокирует закрытие фискального документа, в котором нет корректно зарегистрированных товарных позиций с количеством больше нуля.
Важное замечание: если попытаться искусственно передать в процедуру регистрации позиций количество «1», то драйвер незамедлительно выдаст следующую ошибку — «[16] Неверная цена (сумма)» (код LIBFPTR_ERROR_INVALID_SUM). Современное кассовое ПО и фискальные накопители физически запрещают проводить фискальные операции с нулевой стоимостью товаров.
---
В старых версиях программных продуктов 1С печать нулевого чека при открытии смены решала вполне конкретные технические задачи:
Сегодня, согласно требованиям 54-ФЗ, смена на ККТ открывается автоматически при пробитии первого фискального документа (чека продажи) либо при передаче явной команды открытия смены из программы (которая не требует распечатки фискального чека с позициями). Необходимость в нулевых чеках полностью отпала.
---
Рассмотрим по шагам три основных способа устранения этой ошибки, начиная от самого простого исправления кода в обработке обслуживания до правильного рефакторинга конфигурации.
Если бизнес-логика вашего предприятия или особенности работы кассиров требуют обязательного выхода чековой ленты при открытии смены (например, для проверки печатающего механизма), мы можем сделать этот чек нефискальным (сервисным документом/слипом). В этом случае драйвер не будет отправлять данные в ФН и валидировать товарные позиции.
Рассмотрим, как изменить параметры вызова функций ККТ в кодовой базе 1С. Найдем в конфигурации или во внешней обработке обслуживания (например, ATOL_kkt.epf) вызов метода открытия чека. Обычно он выглядит следующим образом:
// Старый вариант вызова метода открытия чека
Результат = Объект.Драйвер.ОткрытьЧек(
Объект.ПараметрыПодключения.ИдущийПароль,
ЭтоВозврат,
НомерЧека,
НомерСмены,
Истина // Шестой параметр: ЭтоФискальный = Истина
);
Для нулевого чека нам необходимо принудительно передать признак фискальности как Ложь. Давайте проанализируем, где именно вызывается процедура ПечатьНулевогоЧека(), и скорректируем передаваемые параметры:
// Модифицированный вариант кода в модуле работы с торговым оборудованием
Процедура ПечатьНулевогоЧека(Объект, ПараметрыЧека) Экспорт
// Устанавливаем признак нефискального документа
ЭтоФискальныйЧек = Ложь;
ЭтоВозврат = Ложь;
// Инициализируем открытие нефискального документа в драйвере
Ответ = Объект.Драйвер.ОткрытьЧек(
Объект.Идентификатор,
ЭтоВозврат,
ЭтоФискальныйЧек
);
Если Не Ответ Тогда
ВызватьИсключение "Не удалось открыть нефискальный чек на ККТ!";
КонецЕсли;
// Печатаем произвольный текст (например, для проверки связи)
Объект.Драйвер.НапечататьТекст(Объект.Идентификатор, "--- ПРОВЕРКА СВЯЗИ ---");
Объект.Драйвер.НапечататьТекст(Объект.Идентификатор, "Смена открыта успешно");
// Закрываем нефискальный документ без регистрации позиций
Объект.Драйвер.ЗакрытьЧек(Объект.Идентификатор);
КонецПроцедуры
При таком подходе ККТ просто напечатает текстовые строки на чековой ленте. Драйвер АТОЛ 10 не будет требовать заполнения количества и цены, а вызов метода closeReceipt() завершится без ошибок.
Поскольку в современных реалиях нулевой чек не несет никакой смысловой нагрузки, наиболее правильным архитектурным решением будет полный отказ от его использования. Это позволит сэкономить чековую ленту и ресурс печатающей головки ККТ.
Давайте разберем по шагам, как отключить этот вызов в конфигурации:
ПолучениеОбъектаКассы или РаботаСТорговымОборудованием).ОткрытьСмену() или ДействиеОткрытьСмену()).ПечатьНулевогоЧека().
// Процедура обработки открытия смены ККМ в форме кассы
Процедура КомандаОткрытьСмену()
// Вызов штатной команды драйвера для открытия смены
РезультатОткрытия = ТорговоеОборудованиеВыполнитьКоманду("ОткрытьСмену");
Если РезультатОткрытия Тогда
// Раньше здесь вызывалась печать технического чека
// ПечатьНулевогоЧека(КассаККМ); // <-- Закомментируйте эту строку!
Предупреждение("Смена успешно открыта на фискальном регистраторе.", 5);
Иначе
ВызватьИсключение "Ошибка открытия смены на ККТ!";
КонецЕсли;
КонецПроцедуры
После внесения этих изменений смена будет открываться штатной командой ККТ (с распечаткой стандартного отчета об открытии смены, формируемого самой кассой), а лишние запросы к драйверу, вызывающие ошибку [17], полностью исключаются.
Если вы используете внешнюю обработку обслуживания для АТОЛ ДТО 10, скачанную из сторонних источников, убедитесь, что она адаптирована под требования ФФД 1.05/1.2.
В современных сертифицированных обработках интеграции (например, поставляемых в составе БСП современных конфигураций AtolKKT) логика работы со старыми методами ДТО 8 полностью переписана. Разработчики 1С уже давно убрали из этих обработок вызовы печати фискальных нулевых чеков. Если есть возможность, рекомендуется обновить вашу обработку обслуживания кассы до актуальной версии, совместимой с обычными формами вашей конфигурации.
---
Мы проанализировали проблему несовместимости механизмов старых версий 1С с новыми стандартами валидации драйвера АТОЛ 10. Появление ошибки «[17] Неверное количество» обусловлено строгим контролем состава фискального документа со стороны кассового ПО.
Для решения этой проблемы вы можете использовать один из рассмотренных нами путей:
ЭтоФискальный = Ложь (подходит для сохранения старых алгоритмов работы оборудования).