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

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

При работе в программе 1С:Зарплата и управление персоналом (ЗУП) 3.1 пользователи нередко сталкиваются с критическим сбоем при заполнении или расчете документа НачислениеЗарплаты. Проблема проявляется в виде системного сообщения: «Преобразование значения к типу Булево не может быть выполнено». В этой ситуации расчет прерывается, и документ остается незаполненным. Давайте подробно разберем причины этой ошибки, способы ее локализации с помощью отладчика и методы окончательного решения.

Анализируем причины возникновения ошибки

Для начала проанализируем ситуацию. Ошибка «Преобразование значения к типу Булево...» в среде 1С:Предприятие практически всегда означает, что в коде программы используется логическая операция (например, Если...Тогда, И, ИЛИ, НЕ), но переменная, участвующая в этой операции, содержит не логическое значение Истина или Ложь, а что-то иное — чаще всего Неопределено или NULL.

В контексте последних релизов ЗУП (начиная с 3.1.30.х и 3.1.31.х) данная ошибка приобрела массовый характер. Рассмотрим подробнее техническую сторону. Ошибка локализуется в общем модуле УчетНДФЛ. Проанализируем конкретную строку кода, на которую указывает стек вызовов:


СтрокаДоход.ДоходДругойРасчет = Не СтрокаДоход.ДоходТекущегоРасчета Или СтрокаДоход.ДоходАванса;

В этой конструкции программа пытается вычислить значение для поля ДоходДругойРасчет. Если в данных сотрудника поле ДоходТекущегоРасчета или ДоходАванса не было инициализировано (равно NULL), платформа не может применить к нему оператор Не или Или, что и приводит к аварийному завершению работы.

Шаг 1. Локализация ошибки через отладчик и стек вызова

Выясним причину, почему стандартное сообщение об ошибке иногда выглядит «укороченным» и не дает понимания, где именно произошел сбой. В современных конфигурациях расчет зарплаты часто выполняется в фоновом задании (длительная операция). Чтобы увидеть полный стек вызовов, выполним следующие действия:

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

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


{ОбщийМодуль.УчетНДФЛ.Модуль(7783)}:СтрокаДоход.ДоходДругойРасчет = Не СтрокаДоход.ДоходТекущегоРасчета Или СтрокаДоход.ДоходАванса;
{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(14411)}:НДФЛ = УчетНДФЛ.РассчитатьНалогПоОсновнойСтавке(...);
{ОбщийМодуль.РасчетЗарплатыРасширенный.Модуль(2247)}:МенеджерРасчета.РассчитатьЗарплату;

Если мы видим в стеке упоминание УчетНДФЛ.Модуль и операцию преобразования к Булево — мы нашли корень проблемы.

Шаг 2. Проверка данных и перерасчетов

Часто техническая ошибка в коде провоцируется «грязными» данными в информационной базе. Разберем, какие именно данные могут приводить к возникновению NULL в таблицах НДФЛ:

Шаг 3. Способы решения проблемы

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

Вариант А. Установка официальных патчей (исправлений)

Фирма «1С» признала данную ошибку (код ошибки 70081395). Самый правильный и безопасный способ — проверить наличие патчей. Пройдем по шагам:

  1. Зайдем в раздел Администрирование — Обслуживание — Обновление программы.
  2. Выберем пункт Установленные исправления (патчи).
  3. Нажмем Поиск и установка исправлений.
  4. Ищем патч с номером EF_70081395 (или аналогичный для вашего релиза). После его установки ошибка в модуле УчетНДФЛ будет устранена путем добавления проверки на пустые значения.

Вариант Б. Обходной путь через редактирование данных

Если конфигурация «на замке», а патч по какой-то причине недоступен, попробуем метод исключения:

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

Вариант В. Исправление в конфигураторе (для нетиповых конфигураций)

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

Вместо оригинальной строки:


СтрокаДоход.ДоходДругойРасчет = Не СтрокаДоход.ДоходТекущегоРасчета Или СтрокаДоход.ДоходАванса;

Напишем более отказоустойчивый вариант с использованием функции Булево() или явной проверкой на Истина:


ТекущийРасчет = ?(ТипЗнч(СтрокаДоход.ДоходТекущегоРасчета) = Тип("Булево"), СтрокаДоход.ДоходТекущегоРасчета, Ложь);
ДоходАванса = ?(ТипЗнч(СтрокаДоход.ДоходАванса) = Тип("Булево"), СтрокаДоход.ДоходАванса, Ложь);

СтрокаДоход.ДоходДругойРасчет = Не ТекущийРасчет Или ДоходАванса;

Этот код гарантирует, что даже если в данных окажется NULL, программа воспримет его как Ложь и продолжит выполнение без критической ошибки.

Особенности платформы 8.3.17 и выше

В процессе анализа темы вы могли заметить обсуждение функции КраткоеПредставлениеОшибки. Начиная с версии платформы 8.3.17, глобальный контекст рекомендует использовать объект ОбработкаОшибок. Однако, как показала практика (и сообщения на форумах), замена КраткоеПредставлениеОшибки(ИнформацияОбОшибке) на ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке) никак не влияет на саму ошибку преобразования к Булево. Это лишь изменение способа вывода текста сообщения. Сама проблема лежит глубже — в логике обработки данных НДФЛ, и исправлять нужно именно инициализацию переменных в модулях расчета.

Подведем итог: если вы столкнулись с этой ошибкой в ЗУП 3.1.30/31, первым делом проверьте наличие патча EF_70081395. Это решит проблему в 99% случаев без необходимости ручного вмешательства в код или мучительного поиска «битого» сотрудника.

← На главную