Почему документ в 1С помечен на удаление, но в журнале регистрации нет об этом записи?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

В практике работы с конфигурациями 1С, такими как Управление нашей фирмой (УНФ) и Бухгалтерия предприятия (БП), часто возникают ситуации-загадки. Одна из самых неприятных — внезапное появление пометки на удаление у важного документа, при этом стандартный Журнал регистрации (ЖР) молчит о том, кто и когда совершил это действие. Разберем детально, как такое возможно, и проанализируем неочевидные механизмы платформы 1С:Предприятие 8.3.

Выясняем причину: почему Журнал регистрации может «молчать»

Первым делом проанализируем ситуацию, описанную в теме. Пользователь видит запись от регламентного задания Удаление помеченных объектов с текстом «Данные. Удаление — Отменена». Это важный маркер: он означает, что система уже обнаружила объект с установленным признаком DeletionMark = True и попыталась его физически стереть из базы, но не смогла из-за наличия ссылок на этот документ. Значит, пометка была поставлена ранее. Почему же мы не видим событие «Данные. Изменение» с пометкой удаления?

Рассмотрим основные технические причины отсутствия записи:

  1. Синхронизация данных (Обмен данными): Это наиболее вероятная причина в связке УНФ — БП. Когда документ помечается на удаление в «базе-источнике» (например, в УНФ), информация об этом передается в «базу-приемник» (БП) через механизмы обмена. При загрузке данных программный код часто использует специальный режим.
  2. Флаг загрузки данных: Программисты часто используют свойство ОбменДанными.Загрузка = Истина. В этом режиме платформа отключает многие стандартные проверки и, что критично, может изменять логику записи в Журнал регистрации.
  3. Прямое изменение через SQL: Если база данных работает в клиент-серверном варианте, опытный администратор или некорректно работающий внешний скрипт могут изменить поле _Marked в таблице базы данных напрямую через SQL-запрос. В этом случае ЖР вообще ничего не зафиксирует, так как действие происходит в обход сервера 1С.
  4. Очистка или сокращение Журнала регистрации: Проверим настройки администрирования. Если кто-то выполнил процедуру «Сократить журнал регистрации», записи за определенный период могли быть просто удалены.

Проанализируем влияние флага ОбменДанными.Загрузка

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


// Пример программной установки пометки удаления
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокументОбъект.ОбменДанными.Загрузка = Истина; // Включаем режим загрузки
ДокументОбъект.УстановитьПометкуУдаления(Истина);
ДокументОбъект.Записать();

Когда установлен флаг ОбменДанными.Загрузка, событие в ЖР все равно должно создаться, но оно может быть помечено не как действие конкретного пользователя, а как системное событие сеанса связи. Если вы ищете по фильтру «Пользователь», а обмен идет под специально выделенной системной учетной записью (или под фоновым заданием), вы просто не увидите эту запись.

Поиск концов в распределенных системах (УНФ — БП)

Если у нас настроен односторонний обмен, нужно обязательно проверить Журнал регистрации в обеих базах. Посмотрим на ситуацию пошагово:

  1. Откроем Журнал регистрации в базе УНФ (откуда приходят данные).
  2. Установим фильтр по метаданным (тип документа) и конкретному номеру/дате.
  3. Ищем событие «Данные. Изменение». В представлении объекта должно быть добавлено слово «(удален)».

Если в УНФ запись есть, а в БП — нет, значит, пометка «прилетела» вместе с пакетом синхронизации. В БП в ЖР это событие может отображаться под именем пользователя, от имени которого запускается Фоновое задание обмена (например, «Администратор» или «System»).

Как проверить настройки Журнала регистрации

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

Перейдем в меню Администрирование — Настройка журнала регистрации. Убедимся, что выбран режим «Регистрировать ошибки, предупреждения, информацию и примечания». Если выбрано только «Ошибки», то успешные действия по изменению и удалению документов записываться не будут.

Использование «Версионирования объектов» как альтернативы

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

Важно: Если в вашей базе История изменений была выключена (как в случае автора темы), восстановить события задним числом через этот механизм невозможно. Это повод включить его прямо сейчас для наиболее критичных документов (Приходные накладные, Заказы покупателей).

Выясним причину «самопроизвольного» удаления в обмене

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

Проанализируем действия пользователей. Часто бухгалтер в БП случайно помечает документ на удаление, думая, что это «черновик», а так как настроен односторонний обмен, УНФ об этом «не знает». Но если обмен двусторонний, то пометка может «мигрировать» между базами, создавая иллюзию хаотичного поведения системы.

Заключение и рекомендации

Подведем итог нашего анализа. Если документ помечен на удаление, а в ЖР нет записи:

  1. Проверьте все узлы обмена: Ищите запись в той базе, которая является источником данных.
  2. Ищите по фоновым заданиям: В ЖР фильтруйте не по человеку, а по событию «Данные. Изменение» для конкретного типа документа.
  3. Проверьте режим загрузки: Помните, что программная запись с ОбменДанными.Загрузка = Истина может маскировать действия пользователя под системные процессы.
  4. Включите версионирование: Это единственный надежный способ всегда знать, кто и как изменил реквизиты объекта, независимо от настроек журнала регистрации.

Проблема «невидимых» удалений чаще всего кроется не в ошибке платформы, а в архитектуре распределенных систем, где действие в одной базе является лишь «отражением» события, произошедшего в другой.

← На главную