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

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

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

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

Разберем природу ошибки: почему возникает конфликт типов?

Ошибка Преобразование значения к типу Булево в контексте сохранения настроек означает, что программный код ожидает получить значение Истина или Ложь, но вместо этого натыкается на Неопределено, Null, пустую строку или, что еще хуже, на объект другого типа (например, ссылку на элемент справочника).

В ЗУП 3.1 настройки состава начислений тесно связаны с функциональными опциями и соответствующими им константами. Когда мы устанавливаем флаг в интерфейсе, программа пытается записать значение в константу и одновременно обновить записи в связанных планах видов расчета или регистрах сведений. Если в этих структурах данных после «кривого» переноса накопились ошибки, выполнение операции прерывается.

Шаг 1. Техническая диагностика с помощью отладчика

Прежде всего, нам необходимо локализовать конкретное место в коде, где происходит сбой — для этого подойдёт консоль кода и инструменты глубокой отладки 1С. Рассмотрим, как правильно настроить отладку в этой ситуации, учитывая, что запись настроек часто происходит в фоновом задании.

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

Проанализируем ситуацию в момент остановки. Программа подсветит строку кода. Скорее всего, это будет фрагмент, проверяющий значение какой-либо константы или реквизита. Например:


Если НаборПараметров.ИспользоватьВечерниеЧасы Тогда
    // Логика включения начисления
КонецЕсли;

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

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

Одной из наиболее частых причин ошибки является дублирование предопределенных элементов в плане видов расчета Начисления. При включении настройки «Вечерние часы» программа ищет в базе предопределенный элемент ДоплатаЗаРаботуВВечерниеЧасы.

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

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

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

Шаг 3. Анализ функциональных опций и констант через консоль

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


// Проверим тип значения константы
Значение = Константы.ИспользоватьВечерниеЧасы.Получить();
Сообщить("Тип значения: " + ТипЗнч(Значение));
Сообщить("Само значение: " + Значение);

// Если тип не Булево, принудительно исправим его
Если ТипЗнч(Значение) <> Тип("Булево") Тогда
    Константы.ИспользоватьВечерниеЧасы.Установить(Ложь);
    Сообщить("Тип константы был исправлен на Булево (Ложь)");
КонецЕсли;

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

Шаг 4. Тестирование и исправление (ТиИ)

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

  1. Сделаем архивную копию базы (обязательно!).
  2. В конфигураторе перейдем в меню Администрирование — Тестирование и исправление.
  3. Установим следующие флаги:
    • Реиндексация таблиц информационной базы.
    • Проверка логической целостности.
    • Проверка ссылочной целостности.
    • Пересчет итогов.
  4. В блоке «При наличии ссылок на несуществующие объекты» выберем «Очищать ссылки».
  5. В блоке «При частичной потере данных объектов» выберем «Удалять объект».

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

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

Иногда ошибка «приплывает» со стороны расширений. Даже если конфигурация считается типовой, в ней могут быть установлены расширения, корректирующие работу формы настроек. Рассмотрим этот аспект:

  1. Зайдем в меню Администрирование — Обслуживание — Расширения (или через конфигуратор).
  2. Попробуем временно отключить все расширения и повторить сохранение настроек.
  3. Если ошибка исчезла, значит, одно из расширений содержит устаревший программный код, который не соответствует текущему релизу ЗУП 3.1.15.96 и некорректно обрабатывает типы данных при записи параметров.

Шаг 6. Очистка серверного кэша

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

  1. Остановим службу сервера 1С:Предприятия.
  2. Очистим содержимое папки srvinfo (за исключением файлов лицензий и логов).
  3. Запустим службу снова.
  4. Удалим базу из списка в стартере 1С и добавим её заново (это очистит локальный кэш пользователя).

Итоги

Мы проанализировали ситуацию и выяснили, что ошибка преобразования к типу Булево при сохранении настроек в ЗУП 3.1 — это следствие нарушения структуры данных. Чаще всего это лечится либо программным сбросом константы через консоль кода, либо удалением дублей предопределенных начислений. Помните, что в «кривых» базах после переноса данных ручная проверка планов видов расчета является приоритетной задачей. Используя отладчик и ТиИ, вы сможете найти «битое» значение и вернуть программу в рабочее состояние — есть инструмент пошаговой отладки 1С в режиме Предприятие.

← На главную