Как настроить разные правила регистрации объектов для разных узлов синхронизации, если они используют один и тот же план обмена?

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

Часто возникает ситуация, когда в рамках одной конфигурации 1С настроено несколько синхронизаций с разными базами, но все они используют один и тот же универсальный план обмена, например, СинхронизацияДанныхЧерезУниверсальныйФормат. Проблема заключается в том, что при изменении правил регистрации для одного узла обмена эти изменения автоматически применяются ко всем остальным. Это происходит потому, что они используют общий модуль менеджера регистрации.

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

Решение: Используем дополнительный реквизит в плане обмена для отбора

Основная идея заключается в том, чтобы "научить" правила регистрации различать, для какого именно узла они сейчас выполняются. Мы сделаем это, добавив специальный признак в сам узел плана обмена и настроив отбор по этому признаку в правилах конвертации. Разберем по шагам.

  1. Добавляем реквизит в план обмена

    Первым делом нам нужно создать тот самый признак, по которому мы будем различать узлы. Для этого в режиме конфигуратора откроем нужный план обмена (в нашем примере это СинхронизацияДанныхЧерезУниверсальныйФормат) и добавим ему новый реквизит. Назовем его, например, ВариантНастройки с типом "Строка". Этот реквизит будет служить идентификатором для применения особого набора правил.

  2. Настраиваем узлы обмена в пользовательском режиме

    Теперь, когда у планов обмена появился новый реквизит, нам нужно его заполнить для каждого узла, которому требуются особые правила. Запускаем 1С в режиме "Предприятие".

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

  3. Настраиваем отбор в правилах регистрации

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

    Например, мы хотим, чтобы некий документ не выгружался в базу "Бухгалтерия предприятия". Мы заходим в правило регистрации этого документа и настраиваем отбор. В отборе мы указываем, что правило применяется, если свойство плана обмена ВариантНастройки не равно значению "ОбменУПБП".

    В выгруженном XML-файле правил это будет выглядеть следующим образом. Посмотрим на пример:

    
    <ЭлементОтбора>
        <ЭтоСтрокаКонстанты>true
        <ТипСвойстваОбъекта>Строка
        <СвойствоПланаОбмена>ВариантНастройки
        <ВидСравнения>НеРавно
        <СвойствоОбъекта>ОбменУПБП
        <ТаблицаСвойствПланаОбмена>
            <Свойство>
                <Наименование>ВариантНастройки
                <Тип>Строка
                <Вид>Реквизит
            
        
    
    

    Рассмотрим подробнее, что здесь происходит. Этот блок кода говорит системе: "Применить это правило регистрации только в том случае, если у текущего узла плана обмена значение реквизита ВариантНастройки не равно строке 'ОбменУПБП'". Таким образом, для всех узлов, кроме нашего целевого, правило будет работать, а для узла с пометкой "ОбменУПБП" — нет. Это именно то, чего мы добивались.

Дополнительное пояснение: за что отвечает тег <ЭтоСтрокаКонстанты>?

В процессе анализа XML-файла правил может возникнуть вопрос о назначении тега <ЭтоСтрокаКонстанты>true</ЭтоСтрокаКонстанты>. Выясним причину его использования.

Этот тег является служебным и указывает обработчику правил, как именно интерпретировать значение, с которым происходит сравнение (в нашем примере это "ОбменУПБП").

В интерфейсе "Конвертации данных" это обычно настраивается выбором: сравнивать свойство с полем "Значение" (что соответствует <ЭтоСтрокаКонстанты>true</ЭтоСтрокаКонстанты>) или с другим "Свойством".

Таким образом, мы добились гибкой настройки правил регистрации для разных узлов обмена, не создавая лишних планов обмена и используя стандартный механизм отборов в "Конвертации данных".

← К списку