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