При выполнении обмена данными между конфигурациями «Управление торговлей», редакция 10.3 и «Бухгалтерия предприятия», редакция 2.0 (особенно базовых версий), пользователи часто сталкиваются с критической ошибкой. Проблема обычно проявляется после обновления конфигурации-приемника (БП 2.0) или перехода на новую версию технологической платформы. В логах обмена это выглядит как исключительная ситуация: {Перечисление.СтавкиНДС.МодульМенеджера(3,2)}: Ожидается оператор препроцессора.
Рассмотрим детально, почему это происходит и какими способами мы можем восстановить работоспособность обмена. Проанализируем техническую сторону вопроса: ошибка возникает из-за того, что в новых релизах «Бухгалтерии предприятия» разработчики начали использовать синтаксические конструкции, которые были введены в платформе 8.3 (например, директива #Область или #Region). Если база-источник пытается подключиться к базе-приемнику через COM-соединение, используя компоненты старой платформы (8.2), она попросту «не понимает» этот код и обрывает процесс.
Разберем самый простой и правильный метод, который подходит даже для базовых версий, где внесение изменений в конфигурацию невозможно. Проблема часто кроется в том, что в узле обмена жестко прописана или автоматически выбирается старая версия платформы для COM-соединения.
Выполним следующие шаги в информационной базе «Управление торговлей 10.3»:
8.2.Указание версии 8.3 заставляет систему использовать актуальный COM-соединитель (comcntr.dll), который корректно обрабатывает современные операторы препроцессора.
Если смена настроек в самой программе не помогла, проанализируем состояние системных библиотек. Бывают ситуации, когда в Windows в качестве основного обработчика COM-запросов 1С зарегистрирована библиотека от старой версии платформы. Выясним, как принудительно зарегистрировать нужную версию.
Для этого нам потребуется запустить командную строку (cmd) от имени администратора и выполнить регистрацию библиотеки comcntr.dll, находящейся в папке с актуальной платформой 8.3. Пример команды:
regsvr32 "C:\Program Files\1cv8\8.3.XX.XXXX\bin\comcntr.dll"
Где 8.3.XX.XXXX — это полный номер версии вашей установленной платформы (например, 8.3.10.2561). После успешного выполнения команды система выдаст сообщение: «Успешное выполнение DllRegisterServer». Это гарантирует, что при вызове метода V83.COMConnector будет задействован движок версии 8.3.
Посмотрим на ситуацию со стороны конфигуратора. Если вы используете версию ПРОФ и конфигурация снята с поддержки (или находится на поддержке с возможностью изменения), мы можем вручную адаптировать код под старую платформу. Ошибка возникает в Модуле менеджера перечисления СтавкиНДС.
Проанализируем фрагмент кода, вызывающий сбой:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция СтавкиПоОперациямОтражаемымВКнигеПродаж(ВерсияПостановленияНДС1137) Экспорт
// Код функции...
КонецФункции
#КонецОбласти
#КонецЕсли
Для решения проблемы нам нужно закомментировать строки, содержащие символы #Область и #КонецОбласти. Важно понимать: эти директивы носят чисто декоративный характер (группировка кода в конфигураторе) и никак не влияют на логику работы алгоритмов. После правки код должен выглядеть следующим образом:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
// #Область ПрограммныйИнтерфейс
Функция СтавкиПоОперациямОтражаемымВКнигеПродаж(ВерсияПостановленияНДС1137) Экспорт
МассивСтавок = Новый Массив;
МассивСтавок.Добавить(Перечисления.СтавкиНДС.НДС0);
// ... остальной код без изменений
Возврат МассивСтавок;
КонецФункции
// #КонецОбласти
#КонецЕсли
Внимание: данный метод категорически не подходит для Базовых версий конфигураций, так как изменение кода в них заблокировано на уровне платформы.
Рассмотрим альтернативный вариант, если прямое подключение (COM) по каким-то причинам настроить не удается. Ошибка «Ожидается оператор препроцессора» возникает только при прямом подключении одной базы к другой, так как в этот момент происходит компиляция модулей базы-приемника силами базы-источника.
Выполним настройку обмена через промежуточный файл:
Message_УТ_БП.xml).При такой схеме каждая база работает в своем собственном контексте под своей версией платформы, и конфликта синтаксиса не возникает.
Проанализируем еще один важный момент, упомянутый в обсуждении: актуальность правил конвертации. После значительных обновлений БП 2.0 правила, встроенные в старую УТ 10.3, могут некорректно сопоставлять данные (особенно в части учета НДС).
Рекомендуем проверить папку с установленным шаблоном обновления БП 2.0 (путь обычно выглядит так: .../1c/Accounting/2_0_66_XX/Обмены данными/). Часто разработчики вкладывают туда свежие файлы правил ExchangeRules.xml специально для обмена с УТ 10.3. Загрузите эти правила в настройку обмена в УТ через кнопку «Загрузить правила».
Подведем итог: наиболее эффективным и быстрым способом лечения данной ошибки является принудительное указание платформы 8.3 в настройках COM-соединения. Это позволяет сохранить удобство «обмена одной кнопкой» без необходимости переписывать код или переходить на ручную выгрузку файлов.