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