Как исправить ошибку «Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов» при печати чека в 1С:УТ

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

При работе в программе «1С:Управление торговлей» (особенно в версиях 11.4 и 11.5) пользователи часто сталкиваются с критической ошибкой при попытке пробить чек через РМК или документ «Реализация товаров и услуг». Ошибка звучит следующим образом: «Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)». При этом диагностика оборудования показывает, что касса подключена корректно, смены открываются и закрываются, а тесты связи проходят успешно.

Разберем природу этой ошибки. В языке 1С попытка сравнить значение типа Дата со значением Неопределено или NULL приводит к немедленному аварийному завершению процедуры. Это происходит в тот момент, когда программный код ожидает получить конкретную дату (например, срок оплаты или дату окончания действия скидки), но из-за отсутствия данных в базе функция возвращает «пустоту» (что иногда случается при настройке двух систем налогообложения) — для этого подойдёт обработка разделения чеков по СНО в 1С:УТ. Рассмотрим подробнее причины возникновения этой ситуации и пошаговые методы её решения.

Основная причина: Незаполненный производственный календарь

Наиболее распространенная причина данной ошибки в 1С:УТ — это отсутствие данных в справочнике «Производственные календари» на текущий или будущий год. Проанализируем ситуацию: при формировании фискального чека система часто обращается к механизмам расчета дат. Например, если в чеке присутствует признак способа расчета «Передача в кредит» или частичная оплата, программа пытается вычислить крайний срок оплаты.

Для этого используется типовой метод:


Результат = ПроизводственныеКалендари.ДобавитьКДате(НачальнаяДата, КоличествоДней, Календарь);
Если Результат > КонецДня(ТекущаяДата()) Тогда
    // Выполнение логики
КонецЕсли;
Если производственный календарь на указанный период не заполнен, функция ДобавитьКДате() вернет значение Неопределено. В следующей строке при сравнении переменной Результат с текущей датой программа выдаст ту самую ошибку типов.

Как исправить:

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

Проверка специфических календарей и графиков работы

Если заполнение «Основного» календаря не помогло, проанализируем настройки конкретных объектов учета. В крупных торговых сетях может использоваться несколько календарей для разных регионов или специфические графики работы складов.

Выясним, не привязан ли к вашей организации или складу отдельный календарь:

Также стоит проверить Графики работы. Они строятся на основании производственных календарей. Если календарь был заполнен недавно, графики работы могли не обновиться автоматически. Перейдем в настройки графиков и убедимся, что они актуальны на текущий год.

Влияние расширений конфигурации

Часто ошибка возникает из-за некорректной работы расширений, которые модифицируют процедуру печати чека. Рассмотрим пример из практики, когда в расширении используется переменная СледующийРабочийДень. Если логика расширения не предусматривает проверку на пустое значение, это приведет к сбою.

Посмотрим на пример кода, который может вызывать проблему в расширении:


СледующийРабочийДень = КалендарныеГрафики.ПолучитьДатуСледующегоРабочегоДня(Склад.Календарь, ТекущаяДата());
// Ошибка произойдет здесь, если функция вернула Неопределено
Если СледующийРабочийДень >= Объект.Дата Тогда 
    // Логика печати
КонецЕсли;

Если вы столкнулись с такой проблемой после обновления конфигурации, попробуйте временно отключить расширения, связанные с подключаемым оборудованием или печатными формами. Если после отключения чек печатается корректно — проблему нужно искать в коде расширения, добавив проверку Если ЗначениеЗаполнено(СледующийРабочийДень) Тогда....

Расчет скидок и бонусных баллов

Еще одна область, где возникают ошибки сравнения типов — это автоматические скидки и бонусные программы лояльности. При печати чека 1С:УТ выполняет финальный пересчет скидок. Если в настройках скидки указано ограничение «по рабочим дням», а календарь пуст, система не может определить валидность скидки.

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

Диагностика через конфигуратор (для продвинутых пользователей)

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

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

  1. Запустим Конфигуратор.
  2. В главном меню выберем пункт ОтладкаОстановка по ошибке.
  3. В появившемся окне нажмем кнопку Добавить и установим флажок Останавливаться по ошибке.
  4. Запустим сеанс «1С:Предприятие» (клавиша F5) и повторим действие (печать чека), приводящее к ошибке.
  5. Программа автоматически переключит вас в Конфигуратор и подсветит строку кода, на которой произошел сбой.

В этот момент наведите курсор на переменные в выражении сравнения. Вы увидите, что одна из них имеет тип Дата, а другая — Неопределено. Исходя из контекста (названия функции или модуля), вы поймете, данные какого объекта (договора, склада или календаря) отсутствуют в системе.

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

Если вы продаете маркированный товар (Честный ЗНАК), система выполняет проверку кодов маркировки перед печатью. В некоторых случаях процедура проверки обращается к датам внутреннего контроля ИС МП. Если в константах или настройках интеграции с маркировкой указаны некорректные параметры сроков, это также может спровоцировать ошибку сравнения примитивных типов.

Подведем итог: в 90% случаев решение проблемы заключается в простом перезаполнении производственного календаря на текущий и следующий годы. Если это не помогает, следует проверить графики работы складов, настройки скидок и корректность установленных расширений с помощью режима отладки.

← На главную