При работе в программе «1С:Управление торговлей» (особенно в версиях 11.4 и 11.5) пользователи часто сталкиваются с критической ошибкой при попытке пробить чек через РМК или документ «Реализация товаров и услуг». Ошибка звучит следующим образом: «Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)». При этом диагностика оборудования показывает, что касса подключена корректно, смены открываются и закрываются, а тесты связи проходят успешно.
Разберем природу этой ошибки. В языке 1С попытка сравнить значение типа Дата со значением Неопределено или NULL приводит к немедленному аварийному завершению процедуры. Это происходит в тот момент, когда программный код ожидает получить конкретную дату (например, срок оплаты или дату окончания действия скидки), но из-за отсутствия данных в базе функция возвращает «пустоту» (что иногда случается при настройке двух систем налогообложения) — для этого подойдёт обработка разделения чеков по СНО в 1С:УТ. Рассмотрим подробнее причины возникновения этой ситуации и пошаговые методы её решения.
Наиболее распространенная причина данной ошибки в 1С:УТ — это отсутствие данных в справочнике «Производственные календари» на текущий или будущий год. Проанализируем ситуацию: при формировании фискального чека система часто обращается к механизмам расчета дат. Например, если в чеке присутствует признак способа расчета «Передача в кредит» или частичная оплата, программа пытается вычислить крайний срок оплаты.
Для этого используется типовой метод:
Результат = ПроизводственныеКалендари.ДобавитьКДате(НачальнаяДата, КоличествоДней, Календарь);
Если Результат > КонецДня(ТекущаяДата()) Тогда
// Выполнение логики
КонецЕсли;
ДобавитьКДате() вернет значение Неопределено. В следующей строке при сравнении переменной Результат с текущей датой программа выдаст ту самую ошибку типов.
Как исправить:
Если заполнение «Основного» календаря не помогло, проанализируем настройки конкретных объектов учета. В крупных торговых сетях может использоваться несколько календарей для разных регионов или специфические графики работы складов.
Выясним, не привязан ли к вашей организации или складу отдельный календарь:
Также стоит проверить Графики работы. Они строятся на основании производственных календарей. Если календарь был заполнен недавно, графики работы могли не обновиться автоматически. Перейдем в настройки графиков и убедимся, что они актуальны на текущий год.
Часто ошибка возникает из-за некорректной работы расширений, которые модифицируют процедуру печати чека. Рассмотрим пример из практики, когда в расширении используется переменная СледующийРабочийДень. Если логика расширения не предусматривает проверку на пустое значение, это приведет к сбою.
Посмотрим на пример кода, который может вызывать проблему в расширении:
СледующийРабочийДень = КалендарныеГрафики.ПолучитьДатуСледующегоРабочегоДня(Склад.Календарь, ТекущаяДата());
// Ошибка произойдет здесь, если функция вернула Неопределено
Если СледующийРабочийДень >= Объект.Дата Тогда
// Логика печати
КонецЕсли;
Если вы столкнулись с такой проблемой после обновления конфигурации, попробуйте временно отключить расширения, связанные с подключаемым оборудованием или печатными формами. Если после отключения чек печатается корректно — проблему нужно искать в коде расширения, добавив проверку Если ЗначениеЗаполнено(СледующийРабочийДень) Тогда....
Еще одна область, где возникают ошибки сравнения типов — это автоматические скидки и бонусные программы лояльности. При печати чека 1С:УТ выполняет финальный пересчет скидок. Если в настройках скидки указано ограничение «по рабочим дням», а календарь пуст, система не может определить валидность скидки.
Проанализируем маркетинговые настройки: если ошибка появляется только на определенные товары или при применении конкретной карты лояльности, значит, корень проблемы в правилах расчета цен, которые опираются на временные интервалы и календари.
Чтобы точно определить, в какой строке кода происходит сбой и какая именно переменная принимает значение Неопределено, воспользуемся режимом отладки — для этого есть инструмент пошаговой отладки в режиме Предприятия. Это позволит не гадать, а увидеть «виновника» воочию.
Выполним следующие шаги:
В этот момент наведите курсор на переменные в выражении сравнения. Вы увидите, что одна из них имеет тип Дата, а другая — Неопределено. Исходя из контекста (названия функции или модуля), вы поймете, данные какого объекта (договора, склада или календаря) отсутствуют в системе.
Если вы продаете маркированный товар (Честный ЗНАК), система выполняет проверку кодов маркировки перед печатью. В некоторых случаях процедура проверки обращается к датам внутреннего контроля ИС МП. Если в константах или настройках интеграции с маркировкой указаны некорректные параметры сроков, это также может спровоцировать ошибку сравнения примитивных типов.
Подведем итог: в 90% случаев решение проблемы заключается в простом перезаполнении производственного календаря на текущий и следующий годы. Если это не помогает, следует проверить графики работы складов, настройки скидок и корректность установленных расширений с помощью режима отладки.