Почему аннулируются чеки в 1С:УПП 1.3.202.1 и как исправить ошибку с неверной суммой номенклатуры

Программист 1С v8.3 (Обычные формы) Промышленность, строительство и АПК
← На главную

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

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

Выясняем причину: почему касса аннулирует чек

Проанализируем ситуацию со стороны оборудования. Большинство современных онлайн-касс (например, популярные модели Атол 30Ф) выполняют жесткий логический контроль данных перед фискализацией. Если в чеке указано три позиции по 1000 рублей каждая, а итоговая сумма документа составляет те же 1000 рублей, касса зафиксирует математическое расхождение: Сумма строк (3000) != Итог чека (1000). В такой ситуации драйвер ККТ выдает ошибку, и операция аннулируется, чтобы не допустить нарушения правил ведения кассовых операций.

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

Технический анализ: проблемный модуль и процедуры

Рассмотрим изменения в общем модуле МенеджерОборудованияВызовСервера. Именно здесь сосредоточена логика подготовки данных перед их отправкой на драйвер подключаемого оборудования. Сравнение с предыдущими версиями показывает, что модификации подверглись следующие процедуры:

  1. ЗаполнитьПоНовому
  2. ЗаполнитьТоварнуюСтрокуЧека

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

Рассмотрим пример ошибочной логики (схематично), которая могла привести к подобному результату в МенеджерОборудованияВызовСервера:


// Фрагмент, где могла быть допущена ошибка распределения
Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
    // Ошибочный алгоритм присваивал СуммуДокумента напрямую
    СтруктураЧека.Сумма = ОбъектОснование.СуммаДокумента; 
    // Вместо пропорционального распределения:
    // СтруктураЧека.Сумма = (СтрокаТЧ.Сумма / ИтогТЧ) * СуммаОплаты;
КонецЦикла;

Способ 1: Официальное исправление (рекомендуется)

Самый надежный и правильный метод — это обновление конфигурации до актуального релиза. Фирма «1С» оперативно выпустила исправление в экстренном релизе 1.3.202.2. В данном обновлении содержимое модуля МенеджерОборудованияВызовСервера было приведено в порядок, а ошибки в распределении сумм устранены.

Проанализируем порядок действий при обновлении:

  1. Создаем архивную копию информационной базы (обязательно!).
  2. Запускаем конфигуратор и переходим в меню «Конфигурация» — «Поддержка» — «Обновить конфигурацию».
  3. Выбираем файл обновления версии 1.3.202.2.
  4. После обновления обязательно проверяем, что в общем модуле МенеджерОборудованияВызовСервера процедуры расчета сумм соответствуют эталонным.

Способ 2: Ручное исправление кода (если нельзя обновиться сразу)

Если ваша конфигурация сильно кастомизирована и быстрое обновление на новый релиз невозможно, можно прибегнуть к временному исправлению кода («хотфикс»). Для этого нам понадобится сравнить текущий модуль с модулем из стабильного релиза (например, 1.3.201.1).

Выполним следующие шаги:

  1. Откроем конфигуратор и найдем общий модуль МенеджерОборудованияВызовСервера.
  2. Используем механизм сравнения/объединения с файлом конфигурации (CF) предыдущей версии.
  3. Снимем все галочки и выберем только указанный общий модуль.
  4. В окне настройки объединения можно точечно вернуть старую логику процедур ЗаполнитьПоНовому и ЗаполнитьТоварнуюСтрокуЧека.

Пример корректного подхода к заполнению строки чека, который должен быть в исправленной версии:


Процедура ЗаполнитьТоварнуюСтрокуЧека(ПараметрыЧека, ТекущаяСтрока, СуммаВсего, ДоляОплаты)
    // Вычисляем корректную сумму для строки чека с учетом доли оплаты
    СуммаСтроки = Окр(ТекущаяСтрока.Сумма * ДоляОплаты, 2, 1);
    
    // Передаем данные в структуру для ККТ
    НоваяСтрока = ПараметрыЧека.ПозицииЧека.Добавить();
    НоваяСтрока.Наименование = ТекущаяСтрока.Номенклатура.Наименование;
    НоваяСтрока.Количество = ТекущаяСтрока.Количество;
    НоваяСтрока.Цена = СуммаСтроки / ТекущаяСтрока.Количество;
    НоваяСтрока.Сумма = СуммаСтроки;
КонецПроцедуры

Дополнительные рекомендации

При возникновении подобных ошибок также полезно проверить версию драйвера торгового оборудования. Хотя в данном случае проблема признана программной со стороны 1С, стабильная работа ФР часто зависит от связки «Релиз конфигурации — Версия обработки обслуживания — Драйвер». Для Атол рекомендуется использовать актуальные версии драйверов 10-й ветки (например, 10.10.x), так как они более информативно сообщают о причинах аннулирования чека, выводя текст ошибки «Сумма всех типов оплаты меньше итога чека».

Подведем итог: если вы столкнулись с аннулированием чеков в УПП 1.3.202.1, не спешите менять кассу или переустанавливать драйверы. Проверьте суммы в логе драйвера ККТ. Если вы видите, что по каждой строке идет полная сумма документа — немедленно обновляйтесь до 1.3.202.2 или откатывайте общий модуль управления оборудованием.

← На главную