Синхронизация данных между конфигурациями «Зарплата и управление персоналом» (ЗУП) и «Бухгалтерия предприятия» (БП) — один из ключевых процессов в ежедневной работе любой бухгалтерии. Однако при обновлении одного из релизов пользователи и программисты часто сталкиваются с техническими сбоями транспортного канала обмена. Одним из наиболее коварных сбоев является аварийное завершение процесса с ошибкой: Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ДокументыПередЗаписью().
В этой статье мы подробно разберем, почему возникает данная ошибка, как устроено прямое COM-подключение в платформе «1С:Предприятие 8.3», и рассмотрим два основных способа решения проблемы: быстрый (обходной путь через файлы) и капитальный (с исправлением программного кода).
---
Выясним причину этого технического сбоя на уровне платформы. Для этого сначала определимся со специфическими терминами.
Мутабельное (изменяемое) значение в системе 1С — это сложный тип данных, состояние которого может динамически меняться в процессе выполнения кода. К таким типам относятся, например, ДокументОбъект, СправочникОбъект, ТаблицаЗначений, СписокЗначений и другие. Эти объекты не могут быть сериализованы (превращены в простую строку или поток байтов) автоматически без потери связи с базой данных.
Когда мы настраиваем синхронизацию напрямую через прямое подключение (COM-соединение), база-источник (например, ЗУП) обращается к базе-приемнику (Бухгалтерия) и создает в ней внешнее соединение. С точки зрения клиент-серверной архитектуры 1С, это COM-соединение выступает в роли клиента.
Разберем детально процесс возникновения сбоя по шагам:
Отражение зарплаты в бухучете.ПередЗаписью (или соответствующая подписка на событие).ДокументыПередЗаписью(), расположенную в общем модуле.Источник, имеющая тип ДокументОбъект.ОтражениеЗарплатыВБухучете. Этот объект является мутабельным.---
Если вам необходимо срочно провести обмен данными, а времени на изменение конфигурации или ожидание официальных патчей от разработчиков 1С нет, лучшим решением будет временный отказ от прямого COM-подключения и переход на файловый обмен. Проанализируем, почему этот способ гарантированно работает.
При файловом обмене базы данных не взаимодействуют друг с другом напрямую в памяти компьютера. Процесс разделяется на два независимых этапа:
Как перенастроить синхронизацию на файловый обмен:
---
Если вы хотите сохранить удобство работы в «один клик» через COM-подключение, потребуется устранить причину сбоя в конфигураторе. Чаще всего виной становится некорректная настройка свойств общего модуля, обрабатывающего подписки на события записи документов.
Проанализируем шаги по исправлению свойств общего модуля:
ДокументыПередЗаписью (или аналогичный метод, указанный в начале стэка ошибки).Если конфигурация находится на поддержке без возможности изменения, рекомендуется проверить наличие официальных исправлений (патчей) от фирмы «1С». Для этого зайдем на портал поддержки 1С, найдем раздел обновлений вашей версии Бухгалтерии и скачаем патчи вида EF_ХХХХХХХХ, устраняющие ошибки COM-соединений в текущем релизе.
---
При попытке зайти в настройки синхронизации и выгрузить типовые правила конвертации пользователи часто видят сообщение: «Не удалось получить правила обмена». Выясним причину этой сопутствующей ошибки.
Эта проблема не является самостоятельной. Она возникает потому, что при попытке получить правила через сломанное COM-соединение база-приемник падает по той же самой причине (из-за мутабельности). Платформа не может завершить инициализирующий запрос, соединение аварийно рвется, и система выдает стандартное информационное сообщение о недоступности правил.
Если вам все же необходимо достать правила для анализа в конфигурации «Конвертация данных», выполните следующие действия в Конфигураторе:
ОбменЗарплата3Бухгалтерия3).ПравилаОбмена или ПравилаОбменаКорреспондента.Обратите внимание, что в современных версиях ЗУП 3.1 и БП 3.0 обмен все чаще строится на технологии EnterpriseData (универсальный формат). В этом случае классических правил конвертации в формате XML внутри планов обмена вы не найдете. Вся логика сопоставления объектов написана программным кодом внутри общего модуля МенеджерОбменаЧерезУниверсальныйФормат, а структура описывается XDTO-пакетами конфигурации.