Где хранится информация о результате обмена между базами и почему система «помнит» удаленные документы

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

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

Механизм регистрации изменений в планах обмена

Первое, что нам необходимо проанализировать — это работа планов обмена. Когда в одной из баз происходит любое действие с объектом (создание, изменение или удаление), это событие фиксируется в таблице регистрации изменений. Рассмотрим подробнее, как это устроено.

Если вы удаляете документ, в плане обмена создается запись специального типа — УдалениеОбъекта. Эта запись содержит только уникальный идентификатор (GUID) удаленного объекта. Проблема часто заключается в следующем: если вы удалили документ вручную в обеих базах «в обход» штатного механизма синхронизации, базы могут «потерять» информацию о том, что это удаление было согласованным.

Разберем ситуацию по шагам:

  1. Вы удаляете документ в ЗУП. В плане обмена ЗУП регистрируется УдалениеОбъекта для отправки в БУХ.
  2. Вы тут же удаляете этот же документ в БУХ. В плане обмена БУХ регистрируется УдалениеОбъекта для отправки в ЗУП.
  3. При следующем обмене ЗУП пытается сообщить БУХ: «Я удалил документ!», а БУХ отвечает: «И я удалила!».

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

Регистр сведений «Соответствия объектов информационных баз»

Это «сердце» синхронизации. Именно здесь хранится связка между УникальнымИдентификатором (GUID) документа в ЗУП и его GUID в БУХ. Даже если сам документ удален, запись в этом регистре может остаться «висеть».

Проанализируем структуру этого регистра:

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

Остаточные записи в регистрах накопления и сведений (ЗУП)

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

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

Для проверки этой гипотезы выполните следующие действия:

  1. Откройте «Все функции» (или «Функции для технического специалиста»).
  2. Найдите указанные выше регистры накопления.
  3. Установите отбор по периоду и организации.
  4. Если вы видите записи, в поле Регистратор которых написано <Объект не найден>, — это и есть причина вашей проблемы.

Особенности универсального формата обмена (EnterpriseData)

В современных версиях ЗУП 3 и БУХ 3 используется формат EnterpriseData. Здесь задействован еще один механизм — Публичные идентификаторы объектов.

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

Программный поиск и исправление проблемы

Для программиста 1С решением будет написание небольшой обработки, которая проверит целостность данных. Разберем пример логики поиска «зависших» соответствий:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Соответствия.СобственныйОбъект,
    |	Соответствия.УникальныйИдентификаторИсточника,
    |	Соответствия.УникальныйИдентификаторПриемника
    |ИЗ
    |	РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК Соответствия
    |ГДЕ
    |	Соответствия.ТипИсточника = &ТипДокумента";

Запрос.УстановитьПараметр("ТипДокумента", "ДокументОбъект.НачислениеОценочныхОбязательств");
Результат = Запрос.Выполнить().Выгрузить();

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

Алгоритм действий для восстановления корректной работы

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

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

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

← На главную