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