В процессе работы с конфигурацией 1С:Бухгалтерия предприятия 3.0 (особенно в версиях линейки 3.0.143) пользователи могут столкнуться с внезапным прекращением работы механизма загрузки банковских выписок. Ошибка сопровождается системным сообщением: «Преобразование значения к типу булево не может быть выполнено». Это критическая ошибка, которая полностью блокирует импорт данных из банковских файлов или через системы прямого обмена.
В данной статье мы подробно разберем, почему возникает эта проблема, проанализируем программный код, вызывающий сбой, и определим шаги по ее устранению.
Проанализируем ситуацию: ошибка чаще всего возникает в фоновом задании при использовании стандартной обработки КлиентБанк. Когда программа считывает файл выписки или получает данные из банка, она пытается определить параметры банковского счета, по которому идет загрузка. В этот момент происходит обращение к функции получения реквизитов, которая возвращает некорректный тип данных.
Основная причина заключается в том, что переменная, которая должна содержать логическое значение (Истина или Ложь), неожиданно принимает значение Неопределено или NULL. В языке 1С попытка использовать такое значение в условии Если ... Тогда приводит к аварийному завершению процедуры.
Разберем конкретный участок кода в модуле менеджера обработки КлиентБанк, где происходит сбой:
// Фрагмент кода из Обработка.КлиентБанк.МодульМенеджера
СвойстваСчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(БанковскийСчет, "Валютный, Банк.Код");
ВозможнаЗагрузкаВалютнойВыписки = Ложь;
Если СвойстваСчета.Валютный Тогда
// Здесь происходит ошибка, если СвойстваСчета.Валютный не является Булево
ВозможнаЗагрузкаВалютнойВыписки = ОбменСБанками.ВозможенПрямойОбменСБанком(СвойстваСчета.БанкКод, "3")
Или РаботаСБанкамиБП.ВозможнаЗагрузкаВалютнойВыписки(СвойстваСчета.БанкКод);
КонецЕсли;
Рассмотрим подробнее факторы, влияющие на получение этого значения. Выясним причину, по которой стандартная функция ОбщегоНазначения.ЗначенияРеквизитовОбъекта может вернуть «пустую» структуру вместо ожидаемых данных:
БанковскийСчет, которая отсутствует в базе данных или помечена на удаление. Если объект не найден, функция возвращает структуру, заполненную значениями Неопределено.Валютный у банковского счета часто вычисляется или зависит от связанных данных. Если в справочнике Банки для данного счета не заполнен БИК или само поле Банк пустое, обращение через точку Банк.Код в запросе может привести к сбою получения всей структуры свойств.Для исправления ситуации выполним последовательность действий по диагностике и исправлению данных.
В первую очередь проверим корректность заполнения данных в информационной базе:
Если визуальная проверка не помогла, воспользуемся отладчиком. Поскольку ошибка часто возникает в фоне, необходимо включить «Отладку фоновых заданий» в параметрах конфигуратора.
Рассмотрим, где именно нужно установить точку останова:
Обработка.КлиентБанк.МодульМенеджера.Если СвойстваСчета.Валютный Тогда (примерно строка 97 или 105 в зависимости от релиза).СвойстваСчета. Если мы видим Неопределено в поле Валютный, необходимо проверить значение переменной БанковскийСчет — скорее всего, она содержит битую ссылку или Объект не найден.Часто проблема «решается сама собой» через сутки, так как ночью отрабатывают регламентные задания по обновлению классификаторов банков и полнотекстового поиска. Чтобы не ждать, выполним это вручную:
Если фоновая загрузка продолжает выдавать ошибку, воспользуемся методом, описанным в практическом опыте пользователей: загрузим выписку через стандартную обработку «Обмен с банком» (кнопка «Загрузить» в журнале банковских выписок, а не автоматическое получение). Ручной режим часто обходит ошибки фонового контекста, позволяя завершить работу сегодня.
Для предотвращения подобных ошибок в будущем, если конфигурация находится на поддержке с возможностью изменения, рекомендуется модифицировать код, сделав его более «отказоустойчивым». Рассмотрим пример безопасного получения свойства:
СвойстваСчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(БанковскийСчет, "Валютный, Банк.Код");
// Проверяем, что значение действительно является булевым
ЗначениеВалютный = Ложь;
Если ТипЗнч(СвойстваСчета.Валютный) = Тип("Булево") Тогда
ЗначениеВалютный = СвойстваСчета.Валютный;
КонецЕсли;
ВозможнаЗагрузкаВалютнойВыписки = Ложь;
Если ЗначениеВалютный Тогда
// Дальнейшая логика
КонецЕсли;
Такой подход исключает падение системы, даже если данные в справочнике будут повреждены.
Подведем итог: ошибка «Преобразование значения к типу булево» при загрузке выписок в БП 3.0 является следствием несогласованности данных в справочнике банковских счетов или проблем с доступом в фоновом режиме. Для решения достаточно проверить корректность привязки счетов к банкам, обновить классификатор БИК или обновить конфигурацию до последних патчей, где 1С внедрила более безопасные проверки типов.