При работе с торговым оборудованием в конфигурации 1С:Управление производственным предприятием (УПП) 1.3 пользователи часто сталкиваются с ситуацией, когда при печати чека на значительную сумму кассовый аппарат выдает ошибку «Неверная сумма (цена)», а на чековой ленте печатается надпись «Чек аннулирован». Особенно остро эта проблема проявляется при переходе на 10-ю версию драйверов АТОЛ (DTO 10). Рассмотрим подробнее, почему это происходит и как устранить данную неисправность.
Проанализируем механику взаимодействия 1С и ККТ. Основная причина ошибки заключается в том, что современные онлайн-кассы (особенно на платформе 5.0) проводят жесткую математическую проверку каждой строки чека перед его фискализацией. Касса проверяет выполнение равенства: Цена * Количество = Сумма. Если в результате расчетов на стороне 1С и на стороне прошивки кассы возникает расхождение даже в одну копейку, ККТ блокирует операцию и аннулирует чек.
При больших суммах (десятки и сотни тысяч рублей) погрешность округления становится более вероятной, так как алгоритмы распределения скидок и расчета НДС «обратным ходом» в старых релизах УПП 1.3 могут передавать в драйвер значения с избыточным количеством знаков после запятой или некорректно округленные итоговые показатели строки.
Посмотрим на настройки самого драйвера. В 10-й версии драйвера АТОЛ существуют специфические параметры, которые управляют логикой расчета итогов. Для исправления ошибки выполним следующие действия:
Также стоит обратить внимание на настройки налогов. Если 1С передает сумму налога отдельно, проверьте, чтобы в параметрах ККТ не стоял запрет на автоматический пересчет налогов самой кассой.
Разберем ситуацию со стороны кода 1С. В УПП 1.3 для работы с ККТ используется обработка торгового оборудования (например, ATOLKKT.epf или встроенная обработка версии 10.4.3). Проблема часто кроется в формировании XML-пакета, который отправляется драйверу.
Проанализируем модуль обработки, где вызывается метод Registration. Нам необходимо убедиться, что все передаваемые числовые значения (цена, количество, сумма, ставка НДС) принудительно округляются до нужного количества знаков.
// Пример корректировки данных перед отправкой в драйвер
Для Каждого СтрокаЧека Из ОбъектДрайвера.ТаблицаТоваров Цикл
СтрокаЧека.Цена = Окр(СтрокаЧека.Цена, 2);
СтрокаЧека.Количество = Окр(СтрокаЧека.Количество, 3);
СтрокаЧека.Сумма = Окр(СтрокаЧека.Цена * СтрокаЧека.Количество, 2);
КонецЦикла;
Важно помнить, что если вы используете скидки на чек, то в УПП они распределяются по строкам. В этом случае сумма строк может не совпасть с общим итогом из-за накопленной погрешности. Проверьте алгоритм в общем модуле МенеджерОборудованияКлиент. Если обнаружится расхождение, необходимо программно скорректировать сумму последней строки чека на разницу в копейках.
Рассмотрим технический аспект передачи данных через OLE или JSON. При работе с большими суммами (свыше нескольких сотен тысяч) может возникнуть проблема интерпретации типа данных. В некоторых случаях интерфейс ADO или COM ожидает тип Currency, который имеет свои границы. Однако современный драйвер 10.х чаще использует JSON-структуры.
Выясним, не передаются ли данные в формате, который касса воспринимает как некорректный. Например, если в региональных настройках Windows в качестве разделителя дробной части установлена запятая, а драйвер ожидает точку (или наоборот), на больших числах это может привести к неверному парсингу суммы. Убедитесь, что при формировании CheckPackage (пакета чека) используется универсальный формат преобразования числа в строку:
// Используйте Формат() для исключения неразрывных пробелов и неверных разделителей
ТекстоваяСумма = Формат(СуммаДляЧека, "ЧГ=0; ЧРД=.");
Иногда ошибка «Неверная сумма» возникает не из-за величины самой суммы, а из-за того, что чек слишком «длинный» или, наоборот, содержит одну позицию на огромную сумму. Проанализируем настройки ККТ в части максимальной суммы чека. В некоторых прошивках существуют лимиты, установленные для предотвращения случайного пробития чеков на миллиардные суммы. Если ваш бизнес предполагает легальные продажи на такие суммы, необходимо проверить настройки лимитов в таблицах ККТ через Тест драйвера.
Если же проблема возникает на коротком чеке (1 позиция), но на большую сумму, это явный признак конфликта между Цена * Количество и переданным значением Sum. В этом случае попробуйте в коде 1С не передавать параметр Сумма (Sum) для строки, позволяя драйверу рассчитать её самостоятельно на основе цены и количества, либо наоборот — передавать только сумму и количество, чтобы цена вычислилась автоматически.
Посмотрим на опыт использования 1С:Управление торговлей 10.3. В последних релизах УТ алгоритмы работы с ККТ обновляются чаще, чем в УПП. Если в УТ 10.3 чеки на аналогичные суммы печатаются без ошибок, имеет смысл сравнить содержимое общего модуля МенеджерОборудованияКлиент и логику формирования структуры CheckPackage. Скорее всего, в УПП используется устаревший подход к формированию XML, который не учитывает строгие проверки ФФД 1.05 или 1.2, заложенные в драйвер АТОЛ 10.
Подводя итог, для решения проблемы необходимо выполнить комплексную проверку:
PrintFiscalReceipt.Соблюдение этих шагов позволит избежать аннулирования чеков и обеспечит корректную работу торгового оборудования с большими суммами.