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

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

При настройке синхронизации между конфигурациями «1С:Управление торговлей» (УТ) и «1С:Бухгалтерия предприятия» (БП) через универсальный формат EnterpriseData пользователи часто сталкиваются с критической ошибкой на этапе отправки данных. Текст ошибки указывает на общий модуль МенеджерОбменаЧерезУниверсальныйФормат и конкретную строку кода, где происходит проверка использования упаковок. В этой статье мы подробно разберем, почему возникает этот сбой, как локализовать проблемный объект и какие шаги необходимо предпринять для исправления ситуации.

Анализ технической причины ошибки

Рассмотрим природу возникновения исключения «Преобразование значения к типу Булево не может быть выполнено». В языке 1С логические операции (И, ИЛИ, НЕ) могут применяться только к значениям типа Булево (Истина или Ложь). Если в выражении Если Переменная Тогда переменная принимает значение Неопределено или Null, платформа аварийно завершает работу процесса выгрузки.

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


Если Строка.ВыгружатьУпаковки И ЗначениеЗаполнено(Строка.УпаковкаСсылка) Тогда
    // Алгоритм заполнения данных об упаковке
КонецЕсли;

Проблема заключается в том, что для определенных видов документов (например, «Внутреннее потребление товаров» с операцией «Списание на расходы») поле ВыгружатьУпаковки может не инициализироваться в запросе или получать значение Неопределено. Когда код пытается вычислить логическое «И», он натыкается на несовместимый тип данных, что и порождает ошибку.

Локализация проблемного объекта

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

  1. Откроем Журнал регистрации в базе-источнике (обычно это УТ).
  2. Найдем событие с уровнем «Ошибка», относящееся к категории «Обмен данными».
  3. В описании события ищем строку, указывающую на объект: Объект: Документ объект: Внутреннее потребление товаров....
  4. Копируем ссылку на документ (например, в формате e1cib/data/...) и открываем его в программе, чтобы проверить заполнение табличной части «Товары».

Чаще всего ошибка проявляется в документах, где используются номенклатурные позиции без упаковок или где в правилах обмена (ПОД) для конкретного типа операции забыли прописать инициализацию служебных полей структуры Строка.

Варианты решения проблемы

Рассмотрим несколько способов устранения ошибки, от самых простых до требующих вмешательства в программный код.

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

Фирма «1С» регулярно выпускает оперативные исправления для типовых конфигураций. Поскольку ошибка в модуле МенеджерОбменаЧерезУниверсальныйФормат часто носит массовый характер после очередного обновления, первым делом стоит проверить наличие патчей.

Выполним следующие действия:

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

Способ 2. Обновление конфигураций

Если версии УТ и БП существенно различаются по дате выпуска, может возникнуть конфликт форматов EnterpriseData (например, одна база пытается выгрузить данные в формате 1.10, а другая понимает только 1.8). Убедимся, что обе конфигурации обновлены до актуальных релизов. При обновлении правила обмена внутри МенеджераОбменаЧерезУниверсальныйФормат обновляются автоматически.

Способ 3. Программная корректировка модуля (для разработчиков)

Если патчей нет, а работать нужно срочно, мы можем самостоятельно внести изменения в код общего модуля. Рассмотрим, как сделать проверку более «отказоустойчивой». Нам необходимо найти процедуру ЗаполнитьУпаковкуСтрокиТЧ и изменить логическое условие.

Вместо проблемной строки:

Если Строка.ВыгружатьУпаковки И ЗначениеЗаполнено(Строка.УпаковкаСсылка) Тогда

Используем конструкцию с явным приведением к типу Булево или предварительной проверкой:


// Безопасная проверка значения
ВыгружатьУпаковки = Ложь;
Если Строка.Свойство("ВыгружатьУпаковки") И ТипЗнч(Строка.ВыгружатьУпаковки) = Тип("Булево") Тогда
    ВыгружатьУпаковки = Строка.ВыгружатьУпаковки;
КонецЕсли;

Если ВыгружатьУпаковки И ЗначениеЗаполнено(Строка.УпаковкаСсылка) Тогда
    // Тело условия
КонецЕсли;

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

Настройка отладки для поиска скрытых причин

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

Для серверных баз необходимо запустить службу 1С:Предприятия с параметром -debug. Если используются нестандартные порты (например, 2541), убедитесь, что они открыты в брандмауэре сервера.

После активации отладки выполним следующие шаги:

  1. В конфигураторе установим Точку останова в модуле МенеджерОбменаЧерезУниверсальныйФормат на строке с ошибкой.
  2. Запустим синхронизацию данных.
  3. При остановке системы вызовем окно Вычислить выражение (Shift+F9) и введем Строка.
  4. Раскроем структуру и посмотрим значение поля ВыгружатьУпаковки. Если его там нет — значит, запрос в соответствующем ПОД (Правиле Обработки Данных) не содержит этого поля.

Посмотрим на пример структуры, которая должна быть заполнена корректно в процедуре ПОД_Документ_ВнутреннееПотреблениеТоваров_Отправка_ПриОбработке. В ней должны быть инициализированы все свойства, включая УпаковкаНоменклатуры, УпаковкаСсылка и ВыгружатьУпаковки. Если вы обнаружили отсутствие этих полей, необходимо проверить текст запроса в схеме компоновки данных, которая используется этим правилом обмена.

Резюме

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

← На главную