Регистрация изменений в плане обмена 1С: почему правка не встала в очередь
Иван Недомолков · Chop etilgan:
Если правка справочника не доехала до другой базы, начинать стоит с одного вопроса: встала ли она в очередь узла. Между записью объекта и строкой в таблице изменений библиотека стандартных подсистем проводит изменение через пять ступеней, и на любой из них механизм может молча выйти: ошибки нет, объект записан, очередь пуста. Ниже все пять по порядку, по коду типовой УТ 11.5.22.67, с замером на стенде.
Сначала факт: есть ли изменение в очереди узла
Очередь узла хранится в таблицах изменений, и их можно прочитать обычным запросом. Для справочника контрагентов:
ВЫБРАТЬ
Изм.Ссылка КАК Объект,
Изм.НомерСообщения КАК НомерСообщения
ИЗ
Справочник.Контрагенты.Изменения КАК Изм
ГДЕ
Изм.Узел = &Узел
Один объект проверяется одной строкой: ПланыОбмена.ИзменениеЗарегистрировано(Узел, Ссылка). Посмотреть и поправить очередь без кода можно штатной обработкой БСП “Регистрация изменений для обмена данными”.
Пустой номер сообщения значит, что изменение ждёт выгрузки. Заполненный говорит, что оно уже ушло в сообщение обмена: запись удалится, когда приёмник подтвердит приём.
Пустая очередь бывает и у изменения, которое давно уехало: после подтверждения приёма запись удаляется. Поэтому надёжнее сделать свежую правку и сразу посмотреть очередь. Записи нет и после неё, значит дело в регистрации, и дальше ступени по порядку. Запись есть, а на той стороне по-прежнему старое, значит смотреть надо выгрузку и загрузку, про них предпоследний раздел.
Пять ступеней от записи объекта до очереди
| Ступень | Что решает | Где смотреть |
|---|---|---|
| 1. Подписка на событие | вызывается ли механизм для этого типа | источник подписки в конфигурации |
| 2. Синхронизация данных | работает ли регистрация в базе вообще | функциональная опция и узлы плана |
| 3. Выборочная регистрация | считается ли эта запись изменением | режим плана обмена |
| 4. Авторегистрация | кто регистрирует: платформа или правила | состав плана обмена |
| 5. Правила регистрации | на какие узлы уйдёт изменение | загруженные правила плана |
1. Подписка на событие
Механизм запускается из подписки на событие “Перед записью”. В УТ 11.5 для плана обмена с Розницей это подписка ОбменДаннымиОбменУправлениеТорговлейРозницаЗарегистрироватьИзменение. Если тип объекта не входит в её источник, остальные ступени не проверяются вовсе. Какие подписки висят на нужном типе, выводит короткий код по метаданным из разбора о том, кто записывает реквизит.
2. Синхронизация данных
Регистрация работает, только когда включена функциональная опция ИспользоватьСинхронизациюДанных и в плане есть хотя бы один узел, кроме своего, помеченных на удаление и самого отправителя изменения. Проверяется это вызовом ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюДанных"). В базе, где синхронизацию ни разу не настраивали мастером, опция выключена, и механизм не регистрирует ничего, есть у объекта правила или нет.
3. Выборочная регистрация
Даже при работающей регистрации не каждая запись объекта считается изменением. Решает режим выборочной регистрации в настройках плана обмена:
- “Отключен”: изменением считается любая запись;
- “Модифицированность”: смотрят на признак модифицированности объекта; этот режим БСП подставляет сама, если план настройку не описал;
- “Согласно правилам XML”: сравнивают значения реквизитов до и после записи, а список реквизитов берут из правил конвертации свойств. Правка реквизита, которого в этом списке нет, изменением не считается. Если строк объекта в правилах нет вовсе, фильтра нет, и изменением считается любая запись.
При любом режиме регистрируются новые объекты, наборы записей регистров, физическое удаление и объекты, записанные самим обменом. У документа изменением считается и смена признака проведения.
4. Авторегистрация
У каждого элемента состава плана обмена стоит признак авторегистрации. Разрешена, и объект регистрирует платформа. Запрещена, и механизм выполняет правила регистрации. В типовых правилах УТ - Розница авторегистрация выключена у всех 75 элементов состава: регистрацией там управляют правила.
5. Правила регистрации
Есть у объекта свои правила, и узлы отбираются по их условиям: по свойствам объекта и по реквизитам узла. Правил нет, и в коде БСП срабатывает отдельная ветка с комментарием “Правила регистрации не заданы”: объект регистрируется на всех узлах плана, кроме предопределённого. В типовых правилах УТ - Розница своего правила нет у 21 объекта из 75, среди них контрагенты, характеристики номенклатуры, штрихкоды и пользователи.
Что показал стенд
Типовая УТ 11.5.22.67, план обмена с Розницей, правила регистрации загружены из макета, один узел, синхронизация включена, режим выборочной регистрации “Модифицированность”. Очередь узла перед замером очистили, в каждом объекте правили одно строковое поле.
| Объект | Своё правило регистрации | Строк в очереди узла после правки |
|---|---|---|
| Контрагенты | нет | 1 |
| Номенклатура | есть | 0 |
Контрагента без правила механизм поставил в очередь, как и написано в коде. Номенклатуру в очередь пустого узла не пустило её собственное правило; почему именно, мы не разбирали. У объекта со своим правилом отказ ищут в условиях отбора.
Что видно по файлу правил, а что нет
По файлу правил регистрации видно состав плана, признак авторегистрации, сами правила и их условия отбора, в том числе условия, заданные кодом. Подписки, функциональной опции и режима выборочной регистрации в файле нет: они живут в конфигурации и в данных базы, и проверять их приходится там.
Если изменение в очереди есть, а в приёмнике старое, смотрят правила конвертации: выключенное правило выгрузки (объекты вида не уходят вовсе), правило без способа поиска (объект может создаваться заново), признак “не замещать” (исправление не перезапишет найденный объект) и обработчики, которые могут отменить выгрузку или подменить значение.
Прочитать это в файле на пару мегабайт без Конвертации данных помогает разбор правил обмена: он понимает правила конвертации и правила регистрации и выносит отдельным списком объекты состава без своего правила регистрации. Сама обработка лежит на Инфостарте, 10 SM.
Если отбор всё-таки нужен
Объект без своего правила уходит на все узлы плана. При двух-трёх узлах разницы не видно, а в сети на десятки магазинов правка одного контрагента поедет в каждый, и условие вроде “только своя организация” на неё не действует: отбирать нечем. Отбор появляется вместе со своим правилом регистрации, и заводить его лучше до того, как узлов станет много.