К статье
Практический материал

Администрирование · 12 мин

Где 1С хранит изменения для обмена данными

Где 1С хранит зарегистрированные изменения для обмена: планы обмена, таблицы регистрации изменений в СУБД, сообщения обмена и способы просмотра и очистки.

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

Механизм устроен в два уровня. Первый уровень — регистрация изменений: при записи объекта, включённого в состав плана обмена, платформа автоматически записывает ссылку на него в таблицу изменений для каждого узла-получателя. Второй уровень — сами сообщения обмена: сформированные XML-файлы (или пакеты EnterpriseData), которые передаются в другую базу. Это разные хранилища, и путать их нельзя: очистка файлов не снимает регистрацию, а удаление регистрации не удаляет уже подготовленные файлы.

Как устроена регистрация изменений в планах обмена

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

Запись регистрации содержит минимум информации: ссылку на изменённый объект и номер сообщения, в котором изменение было отправлено. Пока изменение не выгружено, номер сообщения равен нулю. После успешной выгрузки платформа проставляет номер отправленного сообщения, а после подтверждения приёма от другой базы запись удаляется. Таким образом, таблица регистрации — это очередь «что ещё нужно передать» плюс журнал «что передано, но не подтверждено».

Важно, что регистрация выполняется на уровне платформы, а не прикладного кода. Даже если объект записан программно без вызова типовых процедур обмена, запись в таблицу изменений всё равно появится — при условии, что объект входит в состав плана обмена. Исключение — запись с отключённым механизмом регистрации, которая выполняется через специальные параметры или методы объекта «ПланыОбмена».

Где физически хранятся таблицы регистрации изменений

В файловом варианте работы вся информационная база, включая таблицы регистрации изменений, находится в одном файле 1Cv8.1CD в каталоге базы. Отдельно увидеть или скопировать только таблицы изменений нельзя — они внутри общего контейнера. Узнать, сколько места занимает регистрация, в файловом режиме напрямую невозможно, ориентироваться приходится на косвенные признаки: рост файла, замедление записи документов.

В клиент-серверном варианте (MS SQL Server, PostgreSQL, Oracle) платформа создаёт для каждого объекта конфигурации отдельные таблицы. Таблицы регистрации изменений имеют имена вида _ChngR с числовыми суффиксами, которые соответствуют внутренним идентификаторам объектов метаданных. Например, у плана обмена и у каждого типа объектов, входящего в его состав, есть своя таблица регистрации, связанная с конкретным узлом.

Сопоставить номер таблицы с конкретным объектом метаданных помогает функция «ПолучитьСтруктуруХраненияБазыДанных()» — она возвращает таблицу соответствия имён таблиц СУБД и объектов конфигурации. Работать с таблицами _ChngR напрямую через SQL следует крайне осторожно: платформа не гарантирует стабильность структуры, а некорректное изменение может нарушить целостность обмена.

Где посмотреть зарегистрированные изменения в интерфейсе

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

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

Программно список изменений получают методом «ПланыОбмена.ВыбратьИзменения(Узел, НомерСообщения, Фильтр)», который возвращает выборку зарегистрированных данных. Тот же метод используется внутри типовых процедур выгрузки, поэтому выборка всегда соответствует тому, что реально уйдёт в сообщение обмена.

Как посмотреть зарегистрированные изменения
  1. 1
    Откройте раздел настройки синхронизации данных и найдите нужный узел обмена
  2. 2
    Откройте команду «Состав отправляемых данных» или запустите обработку «Регистрация изменений для обмена данными»
  3. 3
    Выберите узел и тип объектов, посмотрите количество и список зарегистрированных элементов
  4. 4
    Проверьте номер последнего отправленного сообщения — он показывает, до какого момента изменения подтверждены
  5. 5
    При необходимости снимите лишнюю регистрацию или добавьте недостающие объекты вручную

Где хранятся сами сообщения обмена

Регистрация изменений — это только «очередь». Сами данные передаются в виде сообщений обмена: XML-файлов с заголовком, в котором указаны узел-отправитель, узел-получатель и номер сообщения. При обмене через каталог (файловый обмен, FTP, электронная почта) эти файлы складываются в настроенный каталог обмена — его путь задаётся в настройках транспорта сообщений для конкретного узла.

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

Накопление старых файлов в каталоге обмена — частая причина переполнения диска. Файлы с уже подтверждёнными номерами сообщений можно удалять вручную, но безопаснее периодически очищать каталог регламентным заданием или вручную после проверки, что обмен завершён успешно с обеих сторон.

Где искать данные обмена

Таблицы регистрации изменений

Внутри информационной базы (1Cv8.1CD или _ChngR* в СУБД). Показывают, что ещё предстоит отправить. Очищаются автоматически после подтверждения приёма.

Файлы сообщений обмена

В каталоге обмена, заданном в настройках транспорта. Содержат сами выгруженные данные. Очищаются вручную или регламентно.

Журнал регистрации и история синхронизации

В базе и в типовом журнале «Результаты обмена данными». Показывают факты, ошибки и даты обменов, но не сами данные.

Как очистить или скорректировать регистрацию изменений

Штатная очистка выполняется методом «ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Метаданные)» или через обработку регистрации изменений. Типовой сценарий: после первоначальной выгрузки и подтверждения приёма регистрация старых объектов снимается автоматически, но если обмен долго не выполнялся, очередь разрастается и её приходится чистить вручную.

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

Частая ошибка — снятие регистрации без понимания последствий. Если удалить регистрацию изменений, которые ещё не были отправлены, эти данные никогда не попадут в базу-приёмник, и узлы разойдутся. Перед массовой очисткой убедитесь, что последнее сообщение успешно загружено на принимающей стороне: сверьте номера отправленных и принятых сообщений в настройках узла.

Типичные ошибки
01
Удаление файлов из каталога обмена до подтверждения загрузки — сообщение теряется, а регистрация уже снята, данные не доходят до приёмника
02
Прямая чистка таблиц _ChngR через SQL — нарушается нумерация сообщений, узлы приходится пересоздавать
03
Игнорирование роста таблиц регистрации при неработающем обмене — база раздувается, замедляется запись документов
04
Изменение состава плана обмена без повторной начальной выгрузки — часть объектов перестаёт регистрироваться, узлы расходятся

Как диагностировать проблемы через места хранения изменений

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

Второй шаг — сверить номера сообщений. В настройках узла хранятся номер последнего отправленного и номер последнего принятого сообщения. Если отправленный номер растёт, а принятый стоит на месте, проблема на стороне приёмника: сообщения доходят, но не загружаются, либо файлы копятся в каталоге. Если оба номера замерли — проблема на стороне отправителя или транспорта.

Третий признак — монотонный рост количества зарегистрированных изменений при регулярно работающем обмене. Это указывает на то, что подтверждения приёма не возвращаются (например, обмен настроен только в одну сторону без ответных квитанций) или сообщения формируются, но не отправляются. В такой ситуации таблицы регистрации будут расти бесконечно, и базу придётся чистить.

Контрольные точки

Как проверить результат

Количество зарегистрированных изменений после обмена
Норма

Стремится к нулю или к небольшому остатку свежих изменений

Тревожный признак

Постоянно растёт от обмена к обмену

Номера отправленных и принятых сообщений
Норма

Оба номера увеличиваются синхронно

Тревожный признак

Отправленный растёт, принятый не меняется

Каталог обмена
Норма

Содержит только свежие файлы текущего сеанса

Тревожный признак

Накоплены десятки старых файлов сообщений

Ограничения и особенности механизма

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

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

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

Итог

Что важно запомнить

Изменения для обмена хранятся в таблицах регистрации изменений внутри базы (в СУБД — _ChngR*), а сформированные сообщения — в каталоге обмена. Просмотр и корректировку выполняйте штатными средствами: обработкой регистрации изменений и методами «ПланыОбмена». Контролируйте номера сообщений и рост очереди — это главные индикаторы здоровья обмена.

Частые вопросы

Можно ли посмотреть содержимое таблиц _ChngR обычным SQL-запросом?

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

Почему таблица регистрации изменений не очищается, хотя обмен выполняется?

Записи удаляются только после получения подтверждения приёма от другого узла. Если обмен односторонний или ответная квитанция не доходит, регистрация копится. Проверьте номера принятых сообщений на обеих сторонах и настройки транспорта обратного канала.

Как повторно отправить объект, который не попал в базу-приёмник?

Зарегистрируйте его принудительно для нужного узла: через обработку «Регистрация изменений для обмена данными» или методом «ПланыОбмена.ЗарегистрироватьИзменения». При следующем сеансе обмена объект уйдёт повторно. Убедитесь, что он не отсекается правилами фильтрации по дате или организации.

Где лежат файлы обмена, если используется обмен через веб-сервис?

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

Опасно ли удалять старые файлы из каталога обмена?

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