Почему документ в 1С помечается на удаление «сам собой» и отсутствуют записи в журнале регистрации?

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

В практике работы с распределенными базами данных и регулярной синхронизацией (например, между 1С:Управление торговлей 10.3 и 1С:Бухгалтерия предприятия 3.0) системные администраторы и программисты иногда сталкиваются с «мистическим» поведением системы. Типичная ситуация: документ в базе-приемнике внезапно оказывается помеченным на удаление, хотя в базе-источнике он проведен и актуален. При этом попытка разобраться через Журнал регистрации (ЖР) или Историю изменений (версионирование) не дает результатов — записей просто нет.

Рассмотрим подробнее причины этого явления, проанализируем механизмы работы платформы и выясним, как найти «виноватого» в этой ситуации.

Причина 1: Специфика режима «ОбменДанными.Загрузка = Истина»

Основная причина, по которой многие привычные механизмы контроля (подписки на события, проверки в модулях объектов) «молчат» при синхронизации — это использование свойства ОбменДанными.Загрузка. Проанализируем, как это работает:

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

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

Причина 2: Настройки версионирования объектов

Многие пользователи полагаются на подсистему «Версионирование объектов» из состава БСП (Библиотека стандартных подсистем). Однако здесь кроется ловушка. Разберем ситуацию:

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

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

Причина 3: Изменение фильтров и даты начала обмена

Выясним причину, связанную с логикой работы самой синхронизации. Оказывается, пометка на удаление может быть следствием изменения настроек обмена в базе-источнике (УТ 10.3).

Рассмотрим по шагам механизм «очистки» данных:

  1. Имеется проведенный и синхронизированный документ в обеих базах.
  2. В базе УТ 10.3 изменяется Дата начала выгрузки (ее переносят на более поздний период, после даты нашего документа).
  3. При следующей синхронизации механизм обмена понимает, что документ больше не входит в область миграции данных (он стал «слишком старым» для текущих настроек).
  4. В некоторых правилах обмена (особенно самописных или модифицированных) заложена логика: если объект пропал из выборки обмена, его нужно «убрать» из базы-приемника, чтобы обеспечить идентичность данных согласно фильтрам.

В результате в БП 3.0 документ получает команду на отмену проведения или пометку на удаление. Это происходит программно через COM-соединение под системной учетной записью, и если фильтры Журнала регистрации настроены слишком узко (например, только по Тонкому клиенту), вы не увидите этих событий.

Причина 4: Особенности регистрации событий в ЖР через COM

Проанализируем ситуацию с технической точки зрения работы платформы «1С:Предприятие 8.3». При подключении через COM-соединение создается отдельный сеанс. В Журнале регистрации такие события могут иметь следующие особенности:

Как диагностировать проблему?

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

1. Расширенный поиск в Журнале регистрации. Посмотрите события не за конкретный момент, а за весь период синхронизации, убрав фильтр по пользователю и приложению. Ищите события Данные.Изменение для этого конкретного объекта по его GUID или ссылке.

2. Проверка истории регистраций в УТ. В базе 1С:Управление торговлей откройте монитор обмена данными или обработку «Регистрация изменений для обмена». Проверьте, не зарегистрирован ли данный документ к удалению. Если в таблице регистрации изменений стоит пометка «Удаление объекта», значит, команда пришла именно оттуда.

3. Временная смена режима версионирования. Для проблемных документов установим режим «Версионировать всегда». Это позволит увидеть даже те изменения, которые не сопровождаются проведением документа.

4. Использование платформенного версионирования. В особо сложных случаях можно включить низкоуровневое версионирование на уровне платформы (через настройки conf.cfg), которое фиксирует обращения к СУБД, однако это требует значительных ресурсов сервера.

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


Процедура ПриЗаписиОбъекта(Источник, Отказ)
    Если Источник.ОбменДанными.Загрузка Тогда
        // Здесь можно добавить запись в отдельный лог или файл
        // чтобы убедиться, что объект пришел через обмен
        ЗаписьЖурналаРегистрации("ОбменДанными.Загрузка", УровеньЖурналаРегистрации.Предупреждение, , Источник, "Объект изменен через загрузку");
    КонецЕсли;
КонецПроцедуры

Резюме

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

← На главную