Почему при синхронизации ЗУП и БП документы не помечаются на удаление и остаются проведенными

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

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

Разбираем механизм регистрации изменений

Для начала проанализируем, как работает механизм обмена. Когда мы изменяем объект или помечаем его на удаление, платформа 1С фиксирует это событие в специальной таблице — Плане обмена. Эта запись называется «регистрацией изменений». Во время очередного сеанса синхронизации система считывает эти записи, упаковывает данные в XML-файл (или JSON в формате Enterprise Data) и отправляет в приемник.

Выясним причину, по которой пометка на удаление может «потеряться». Основная сложность заключается в том, что если объект был помечен на удаление некорректным способом (например, через внешнюю обработку, где установлен признак ОбменДанными.Загрузка = Истина), регистрация изменений в плане обмена просто не создается. В этом случае система «считает», что в ЗУП ничего не произошло, и не передает информацию о пометке в БП.

Способ 1: Принудительное обновление регистрации через интерфейс

Самый простой метод, который помогает в большинстве случаев, — это заставить систему заново «увидеть» изменения. Если вы заметили, что ведомость в БП не пометилась на удаление, выполните следующие действия в ЗУП:

  1. Откройте документ, который должен быть удален.
  2. Снимите пометку на удаление.
  3. Снова установите пометку на удаление штатными средствами (через меню «Еще» или нажатием клавиши Del в списке).

Эти действия принудительно создают запись в таблице регистрации изменений. Рассмотрим, как проверить, попал ли документ в состав отправляемых данных. Перейдем в раздел Администрирование — Синхронизация данных, выберем настройку обмена с БП и нажмем кнопку «Состав отправляемых данных» (иконка с монитором и карандашом). В открывшемся окне мы должны увидеть наш документ в списке объектов, подлежащих выгрузке.

Способ 2: Использование обработки «Регистрация изменений для обмена»

Если документов, которые не перенеслись, много (например, более 50 штук), ручное перещелкивание пометок становится неэффективным. В такой ситуации разберем профессиональный инструмент:

  1. Откройте окно «Состав отправляемых данных» через настройки синхронизации.
  2. Найдите в дереве объектов нужный вид документа (например, ВедомостьНаВыплатуЗарплатыВКассу).
  3. Нажмите правую кнопку мыши или воспользуйтесь кнопкой «Зарегистрировать изменения».
  4. Выберите пункт «Объекты выбранных типов».
  5. В окне подбора установите фильтр: ПометкаУдаления Равно Да.
  6. Добавьте все найденные документы в состав обмена.

После выполнения этих действий при следующем сеансе синхронизации система гарантированно попытается передать информацию о пометке удаления в Бухгалтерию.

Анализ причин в базе-приемнике (БП)

Бывают ситуации, когда данные успешно уходят из ЗУП, но БП отказывается их принимать. Проанализируем ситуацию на стороне приемника. Почему документ может игнорировать пометку на удаление?

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

2. Связанные документы. Если в БП на основании ведомости уже создан документ ВыдачаНаличных или СписаниеСРасчетногоСчета, и он проведен, то попытка пометить «Ведомость» на удаление программно может быть заблокирована механизмом контроля ссылочной целостности. Рассмотрим пример кода, который часто отрабатывает в подписках на события в БП:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимЗагрузки)
    Если РежимЗагрузки Тогда
        Возврат;
    КонецЕсли;
    // Логика проверки связанных документов, которая может вызвать Отказ = Истина
КонецПроцедуры

Важно помнить, что при синхронизации параметр РежимЗагрузки обычно установлен в значение Истина, что должно обходить проверки. Однако, если в базе настроены дополнительные расширения или нестандартные правила, они могут блокировать запись.

Технический нюанс: Свойство «Не перезаписывать существующие»

В некоторых старых правилах обмена (на базе КД 2.0) или при использовании специфических настроек может стоять признак «Не перезаписывать существующие объекты при загрузке». Если документ уже существует в БП и он проведен, загрузка просто проигнорирует любые изменения, включая смену признака ПометкаУдаления. В типовом обмене ЗУП — БП такое встречается редко, но при использовании доработанных правил это первая причина, которую стоит проверить.

Рекомендации по исправлению «зависших» документов

Если вы столкнулись с «волшебством», когда документ упорно не хочет удаляться, попробуйте следующий алгоритм совместной работы с данными:

  1. В базе БП удалите документ физически (через УдалениеОбъектов), предварительно убедившись, что на него нет ссылок в финансовых документах.
  2. В базе ЗУП зарегистрируйте этот документ к обмену заново через обработку регистрации изменений.
  3. Запустите синхронизацию. Документ будет создан в БП заново, но уже с пометкой на удаление (если в ЗУП она установлена).

Такой радикальный метод помогает сбросить «кэш» версий объекта в обеих базах и восстановить корректную связь между ними. Также обязательно заглядывайте в Журнал регистрации в Бухгалтерии под пользователем, от имени которого выполняется синхронизация. Там могут быть зафиксированы ошибки типа «Объект заблокирован» или «Ошибка при вызове метода Записать()», которые не выводятся в общий интерфейс обмена, но объясняют, почему пометка не была установлена.

← На главную