Как исправить ошибку «Преобразование значения к типу Булево не может быть выполнено» при закрытии кассовой смены в 1С:Розница?

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

При выполнении операции закрытия кассовой смены в конфигурации 1С:Розница (особенно релиза 2.1.8 и смежных) пользователи могут столкнуться со сбоем процесса. Если база опубликована на веб-сервере, на клиенте часто выводится некорректная ошибка с искаженными символами. Однако при запуске системы непосредственно на сервере или через тонкий клиент в локальном режиме проявляется истинный стек ошибки:

{Обработка.ЗакрытиеКассовойСмены.Форма.Форма.Форма(1393)}: Преобразование значения к типу Булево не может быть выполнено Если Выборка.ИспользоватьСерийныеНомера Тогда

Рассмотрим подробно причинно-следственные связи этой проблемы и разберем по шагам проверенные способы ее решения.

Выясним причину возникновения ошибки

В встроенном языке платформы 1С:Предприятие 8.3 оператор Если требует, чтобы проверяемое условие строго возвращало тип Булево (значение Истина или Ложь). Автоматическое неявное приведение типов для значений NULL или Неопределено в платформе отсутствует. Если в результате выполнения запроса в поле ИспользоватьСерийныеНомера попадает значение NULL, исполнение кода немедленно прерывается с аварийным завершением.

Проанализируем основные ситуационные факторы, приводящие к выпаданию NULL в запросе закрытия смены:

  1. Ошибка в алгоритме запроса конфигурации: В некоторых релизах конфигурации «1С:Розница» в обработке закрытия кассовой смены при левом соединении таблиц номенклатуры и видов номенклатуры не использовалась функция ЕСТЬNULL.
  2. Некорректные данные в чеках ККМ: В течение смены в документ «Чек ККМ» могла попасть номенклатура с незаполненным или отвязанным реквизитом «Вид номенклатуры». Также причиной бывают «битые ссылки» (объекты с ненайденными данными), появившиеся вследствие сбоев при обмене данными с «1С:Управление торговлей».
  3. Сбой кэша функциональных опций: При повреждении кэша настроек платформа может некорректно определять признак использования серийного учета.

Особо отметим поведение системы при работе через веб-сервер: экстренное завершение сеанса на стороне сервера 1С приводит к формированию некорректного HTTP-ответа без заголовка длины тела, из-за чего браузер или веб-клиент отображает нечитаемые символы вместо понятного сообщения. Для получения точного текста ошибки всегда проверяйте выполнение операции в тонком клиенте напрямую на сервере базы данных.

Способ 1. Доработка запроса в обработке закрытия смены

Если нет возможности оперативно обновить конфигурацию, наилучшим решением для программиста является исправление текста запроса. Это можно сделать напрямую в конфигурации или через расширение.

Разберем пример изменения текста запроса в модуле формы обработки ЗакрытиеКассовойСмены. В месте соединения с таблицей видов номенклатуры необходимо обернуть поле серийных номеров функцией ЕСТЬNULL:


ВЫБРАТЬ
    Чеки.Номенклатура КАК Номенклатура,
    ЕСТЬNULL(ВидыНоменклатуры.ИспользоватьСерийныеНомера, ЛОЖЬ) КАК ИспользоватьСерийныеНомера
ИЗ
    Документ.ЧекККМ.Товары КАК Чеки
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
    ПО Чеки.Номенклатура.ВидНоменклатуры = ВидыНоменклатуры.Ссылка

В коде модуля перед вычислением условия также можно добавить явную проверку типа с помощью ЗначениеЗаполнено() или предварительное приведение к логическому типу:


ИспользоватьСерийники = Булево(Выборка.ИспользоватьСерийныеНомера);
Если ИспользоватьСерийники Тогда
    // Логика обработки товаров с серийными номерами
КонецЕсли;

Способ 2. Проверка и исправление чеков ККМ текущей смены

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

  1. Перейдем в раздел Продажи — Чеки ККМ.
  2. Отфильтруем чеки по текущей закрываемой кассовой смене.
  3. Проверим табличные части «Товары» во всех чеках за смену. Если в строках присутствуют позиции с пустым видом номенклатуры или надписью <Объект не найден>, необходимо перевыбрать номенклатуру и перепровести документ.

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

Так как данная проблема является зафиксированной ошибкой некоторых репродукций «1С:Розница 2.1», разработчики фирм 1С устранили отсутствие ЕСТЬNULL в последующих релизах. Рекомендуется выполнить обновление конфигурации на актуальный релиз ветки 2.2, 2.3 или 3.0.

Также целесообразно обновить платформу 1С:Предприятие до актуального рекомендованного релиза и очистить кэш клиентских приложений на рабочих станциях.

Способ 4. Тестирование и исправление информационной базы

Для удаления ссылочной нецелостности, возникшей после некорректных обменов между «1С:Розница» и «1С:Управление торговлей», выполним следующие шаги:

  1. Создадим резервную копию информационной базы.
  2. Запустим программу в режиме Конфигуратор.
  3. Откроем пункт меню Администрирование — Тестирование и исправление...
  4. Установим флаги Проверка логической целостности информационной базы и Реструктуризация таблиц информационной базы.
  5. Запустим процесс и по завершении проверим повторное закрытие кассовой смены.
← На главную