Как исправить ошибку «[17] Неверное количество» при печати нулевого чека в 1С и драйвере АТОЛ 10

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

При переходе на новые онлайн-кассы и современные драйверы оборудования разработчики и администраторы старых конфигураций 1С (таких как «1С:Розница 1.0» или «1С:Управление торговлей 10.3» на обычных формах) часто сталкиваются с аппаратными ошибками. Одна из самых распространенных — ошибка «[17] Неверное количество» при открытии смены, когда конфигурация пытается напечатать так называемый «нулевой чек» с помощью процедуры ПечатьНулевогоЧека().

В этой статье мы подробно разберем, почему возникает эта ошибка при работе с драйвером АТОЛ ДТО 10 (10.5.1.3 и выше), проанализируем внутренние механизмы взаимодействия ККТ с платформой 1С и рассмотрим несколько способов решения этой проблемы — от быстрого исправления параметров чека до полной оптимизации кода под требования современного законодательства (ФФД 1.05 / 1.2).

---

Выясняем причину: почему возникает ошибка «[17] Неверное количество»?

Для начала разберемся в физике процесса. Драйвер АТОЛ 10-й версии (ДТО 10) осуществляет гораздо более жесткую валидацию данных, передаваемых в фискальный накопитель (ФН), нежели старый ДТО 8. Это связано с требованиями актуальных форматов фискальных документов (ФФД).

Когда 1С инициирует открытие смены, в устаревших конфигурациях запускается процедура печати нулевого чека. На уровне драйвера это выглядит как последовательность команд:

  1. Открытие чека: метод драйвера openReceipt().
  2. Регистрация позиций (в случае нулевого чека позиции не регистрируются вовсе или передаются с нулевой ценой/количеством).
  3. Закрытие чека: метод драйвера closeReceipt().

Именно на этапе вызова метода closeReceipt() (или функции ЗакрытьЧек() в обработке обслуживания) ККТ возвращает ошибку «[17] Неверное количество» (код ошибки LIBFPTR_ERROR_INVALID_QUANTITY). Драйвер блокирует закрытие фискального документа, в котором нет корректно зарегистрированных товарных позиций с количеством больше нуля.

Важное замечание: если попытаться искусственно передать в процедуру регистрации позиций количество «1», то драйвер незамедлительно выдаст следующую ошибку — «[16] Неверная цена (сумма)» (код LIBFPTR_ERROR_INVALID_SUM). Современное кассовое ПО и фискальные накопители физически запрещают проводить фискальные операции с нулевой стоимостью товаров.

---

Зачем вообще в 1С использовался нулевой чек?

В старых версиях программных продуктов 1С печать нулевого чека при открытии смены решала вполне конкретные технические задачи:

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

---

Варианты решения проблемы

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

Способ 1. Перевод технического чека в нефискальный режим (быстрое решение)

Если бизнес-логика вашего предприятия или особенности работы кассиров требуют обязательного выхода чековой ленты при открытии смены (например, для проверки печатающего механизма), мы можем сделать этот чек нефискальным (сервисным документом/слипом). В этом случае драйвер не будет отправлять данные в ФН и валидировать товарные позиции.

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


// Старый вариант вызова метода открытия чека
Результат = Объект.Драйвер.ОткрытьЧек(
    Объект.ПараметрыПодключения.ИдущийПароль, 
    ЭтоВозврат, 
    НомерЧека, 
    НомерСмены, 
    Истина // Шестой параметр: ЭтоФискальный = Истина
);

Для нулевого чека нам необходимо принудительно передать признак фискальности как Ложь. Давайте проанализируем, где именно вызывается процедура ПечатьНулевогоЧека(), и скорректируем передаваемые параметры:


// Модифицированный вариант кода в модуле работы с торговым оборудованием
Процедура ПечатьНулевогоЧека(Объект, ПараметрыЧека) Экспорт
    
    // Устанавливаем признак нефискального документа
    ЭтоФискальныйЧек = Ложь; 
    ЭтоВозврат = Ложь;
    
    // Инициализируем открытие нефискального документа в драйвере
    Ответ = Объект.Драйвер.ОткрытьЧек(
        Объект.Идентификатор, 
        ЭтоВозврат, 
        ЭтоФискальныйЧек
    );
    
    Если Не Ответ Тогда
        ВызватьИсключение "Не удалось открыть нефискальный чек на ККТ!";
    КонецЕсли;
    
    // Печатаем произвольный текст (например, для проверки связи)
    Объект.Драйвер.НапечататьТекст(Объект.Идентификатор, "--- ПРОВЕРКА СВЯЗИ ---");
    Объект.Драйвер.НапечататьТекст(Объект.Идентификатор, "Смена открыта успешно");
    
    // Закрываем нефискальный документ без регистрации позиций
    Объект.Драйвер.ЗакрытьЧек(Объект.Идентификатор);
    
КонецПроцедуры

При таком подходе ККТ просто напечатает текстовые строки на чековой ленте. Драйвер АТОЛ 10 не будет требовать заполнения количества и цены, а вызов метода closeReceipt() завершится без ошибок.

Способ 2. Полный отказ от вызова печати нулевого чека (рекомендуемый метод)

Поскольку в современных реалиях нулевой чек не несет никакой смысловой нагрузки, наиболее правильным архитектурным решением будет полный отказ от его использования. Это позволит сэкономить чековую ленту и ресурс печатающей головки ККТ.

Давайте разберем по шагам, как отключить этот вызов в конфигурации:

  1. Откройте конфигурацию 1С в режиме Конфигуратор.
  2. Найдите модуль формы обработки открытия смены (или общий модуль, отвечающий за работу с ККМ, например, ПолучениеОбъектаКассы или РаботаСТорговымОборудованием).
  3. Найдите процедуру, обрабатывающую команду открытия смены (обычно она называется ОткрытьСмену() или ДействиеОткрытьСмену()).
  4. Найдите внутри этой процедуры вызов функции ПечатьНулевогоЧека().
  5. Закомментируйте эту строку кода, как показано на примере ниже:

// Процедура обработки открытия смены ККМ в форме кассы
Процедура КомандаОткрытьСмену()
    
    // Вызов штатной команды драйвера для открытия смены
    РезультатОткрытия = ТорговоеОборудованиеВыполнитьКоманду("ОткрытьСмену");
    
    Если РезультатОткрытия Тогда
        // Раньше здесь вызывалась печать технического чека
        // ПечатьНулевогоЧека(КассаККМ); // <-- Закомментируйте эту строку!
        
        Предупреждение("Смена успешно открыта на фискальном регистраторе.", 5);
    Иначе
        ВызватьИсключение "Ошибка открытия смены на ККТ!";
    КонецЕсли;
    
КонецПроцедуры

После внесения этих изменений смена будет открываться штатной командой ККТ (с распечаткой стандартного отчета об открытии смены, формируемого самой кассой), а лишние запросы к драйверу, вызывающие ошибку [17], полностью исключаются.

Способ 3. Обновление интеграционной компоненты кассы

Если вы используете внешнюю обработку обслуживания для АТОЛ ДТО 10, скачанную из сторонних источников, убедитесь, что она адаптирована под требования ФФД 1.05/1.2.

В современных сертифицированных обработках интеграции (например, поставляемых в составе БСП современных конфигураций AtolKKT) логика работы со старыми методами ДТО 8 полностью переписана. Разработчики 1С уже давно убрали из этих обработок вызовы печати фискальных нулевых чеков. Если есть возможность, рекомендуется обновить вашу обработку обслуживания кассы до актуальной версии, совместимой с обычными формами вашей конфигурации.

---

Резюме

Мы проанализировали проблему несовместимости механизмов старых версий 1С с новыми стандартами валидации драйвера АТОЛ 10. Появление ошибки «[17] Неверное количество» обусловлено строгим контролем состава фискального документа со стороны кассового ПО.

Для решения этой проблемы вы можете использовать один из рассмотренных нами путей:

← На главную