Механизмы интеграции :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8

Статьи: HTML и CSS, PHP и MySQL, Python и Flask, Linux, 1С:Предприятие

Регистрация изменений всех данных для указанного узла

Для регистрации изменений всех данных для конкретного узла плана обмена необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные значение Неопределено.

Пример. Регистрация изменения всех данных для узла Узел:

Копировать в буфер обмена ПланыОбменаМенеджер.ЗарегистрироватьИзменения(Узел, Неопределено);

Настройки и свойства планов обмена в 1С

Как ранее было замечено, план обмена очень похож на обычный справочник в 1С, и поэтому мы рассмотрим только главные отличия обмена.

Как работать с планом обмена

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

  1. Изменяем данные (справочники, документы и т.д) в базе — план обмена запоминает изменения. Либо авторегистрацией, либо программным кодом (например метод ПланыОбмена.ЗарегистрироватьИзменения).
  2. Когда приходит время, получаем список измененных элементов — метод ПрочитатьИзменения(), выгружаем эти данные.
  3. При выгрузке/загрузке для исключения коллизий сверяем номера сообщений у плана обмена. Если они не совпадают, отменяем обмен данными, если совпадают, снимаем регистрацию изменений и увеличиваем номер сообщения.

Свойства плана обмена в 1С 8.2

Распределенная информационная база

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания – попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Если этот флаг установлен в настройках, то данный план обмена является распределенной информационной базой (РИБ).

Распределенная информационная база — территориально распределенная система на основе одинаковой конфигурации 1С 8.3. РИБ помимо изменений данных умеет передавать и изменений конфигурации, что очень удобно, например, при обновлении релиза конфигурации.

Состав плана обмена

Настройка, с помощью которой разработчик управляет набором объектов для обмена:

Состав объектов для регистрации

В составе плана обмена может быть 3 состояния объекта:

  1. Не включен в план обмена — соответственно, никаким образом для такого объекта Вы не сможете настроить обмен данными по этому плану обмена.
  2. Авторегистрация Запретить — это значит, что регистрировать изменения для данного узла необходимо только программным кодом по какому-то условию, как правило, подпиской на событие «При Записи». Используется метод ПланыОбмена.ЗарегистрироватьИзменения().
  3. Авторегистрация Разрешить — если установлена данная галка, то любые изменения элемента автоматически попадут в список изменений плана обмена.

Синхронизация данных

Конфигурация “1С:Документооборот” редакции КОРП содержит несколько встроенных планов обмена с другими типовыми конфигурациями на платформе “1С:Предприятие”.

Редакции ПРОФ и ДГУ не содержат таких планов обмена. Тем не менее, все редакции поддерживают обмен данными с помощью встроенной обработки УниверсальныйОбменДаннымиXML, использующей внешние правила обмена, загружаемые из файла. Собственные планы обмена можно добавить в любую из редакций.

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

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

Встроенные планы обмена используют подсистему Обмен данными “Библиотеки стандартных подсистем” (далее БСП) редакции 2. Это значит, что в составе каждого плана обмена есть макет с правилами регистрации, а также макеты правил обмена и правил обмена конфигурации-корреспондента:

1.png?_=000022FAA28FF414

  • Правила регистрации используются в “1С:Документообороте” для определения необходимости регистрации записываемого объекта к выгрузке в конфигурацию-корреспондент.
    • Типовые правила регистрации тривиальны (содержат только перечень регистрируемых объектов без дополнительных условий).
    • Автоматическая регистрация изменений в планах обмена выключена, для регистрации используется стандартная механика БСП, анализирующая изменения в выгружаемых полях перед регистрацией.
  • Правила обмена используются для выгрузки данных из “1С:Документооборота” в конфигурацию-корреспондент.
  • Правила обмена корреспондента используются в “1С:Документообороте” только в части кода обработчиков, выполняемых на стороне “1С:Документооборота” после загрузки.

При необходимости комплект правил может быть загружен из файла. Как правило, это делают:

  • после обновления конфигурации-корреспондента. В этом случае свежий комплект правил находится в составе дистрибутива обновления, в папке “Синхронизация данных”;
  • во время отладки правил обмена, разрабатываемых на основе типовых правил, если они требуют доработки на конкретном внедрении.

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

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

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

Правила обмена разрабатываются с помощью конфигурации “Конвертация данных” редакции 2.1. Конфигурация бесплатна и доступна по линии ИТС. Рекомендуется использовать типовые правила как основу для разработки, сохранив их в файлы и загрузив в информационную базу “Конвертации данных”.

“1С:Документооборот” не поддерживает обмен данными в формате EnterpriseData. Соответственно, для разработки правил обмена не следует использовать конфигурацию “Конвертация данных” редакции 3.

Расширение плана обмена

При включении новых объектов в существующий план обмена следует:

  1. Включить эти объекты в состав плана обмена, запретив автоматическую регистрацию изменений.
  2. Включить эти объекты в состав источников соответствующих подписок на события.
    • Для регистров подписка будет называться ОбменДанными<Краткое имя плана обмена>ПередЗаписьюРегистра. Возможно, в обработчик подписки потребуется внести дополнительные условия, если он не рассчитан на появление нового регистра.
    • Для ссылочных объектов будет две подписки: ОбменДанными<Краткое имя плана обмена>ПередЗаписьюРегистра и ОбменДанными<Краткое имя плана обмена>ПередУдалением. Как правило, обработчики этих событий не нуждаются в доработке, поскольку передают управление стандартным процедурам БСП.
    • Если регистрация не требует дополнительных условий, больше ничего делать не нужно. Если нужно регистрировать документы при изменении их состояния, например, выгружая только согласованные документы, следует внести доработки в модуль набора записей регистра сведений ТекущиеСостоянияДокументов по аналогии с уже имеющимся там кодом для обмена с конфигурациями “1С:Бухгалтерия предприятия” и “1С:Управление холдингом”. В последнем случае следует внести проверку на состояние также и в обработчик ПередВыгрузкой правила выгрузки данных с тем, чтобы избежать выгрузки документов, чье состояние изменилось уже после регистрации в плане обмена, либо предусмотреть передачу пометки на удаление в конфигурацию-корреспондент.
  3. С помощью конфигурации “Конвертация данных” создать для этих объектов соответствующие правила выгрузки данных и правила конвертации объектов.
  4. Загрузить измененные правила из файлов и после отладки подменить ими типовые макеты.

Добавление плана обмена

При разработке собственных планов обмена следует:

  1. Создать новый план обмена на стороне обеих конфигураций. Имя плана обмена должно быть одинаковым в обеих конфигурациях. Состав обязательных процедур модуля менеджера плана обмена приведен в документации к подсистеме Обмен данными “Библиотеки стандартных подсистем” соответствующей версии.
  2. Включить в состав планов обмена объекты, участвующие в обмене, а также регистр сведений СоответствиеОбъектовИнформационныхБаз, запретив авторегистрацию изменений. Использование собственного механизма регистрации БСП позволит избежать выгрузки объектов, изменившихся только в части не участвующих в обмене реквизитов.
  3. Создать подписки на события, аналогичные описанным выше, и обработчики для них. Лучше создать для этого отдельный общий модуль, не снимая с поддержки общий модуль ОбменДаннымиСобытияДокументооборот.
  4. Включить новый план обмена в тип параметра общих команд подсистемы Обмен данными. Проще всего найти нужные команды, выполнив в Конфигураторе поиск ссылок на типовой план обмена.
  5. Включить новый план обмена в код процедуры ПолучитьПланыОбмена общего модуля ОбменДаннымиПереопределяемый.
  6. При необходимости создать формы настройки плана обмена (см. документацию к “Библиотеке стандартных подсистем”, а также примеры в планах обмена с конфигурациями “1С:Бухгалтерия” предприятия и “1С:Управление производственным предприятием”).
  7. Сохранить описания обновленных конфигураций в файлы с помощью обработки MD8<NNN>Exp.epf, входящей в состав дистрибутива конфигурации “Конвертация данных”.
  8. Загрузить описания конфигураций в информационную базу “Конвертации данных”.
  9. Разработать два набора правил обмена и два набора правил регистрации для каждой из сторон обмена.
  10. Добавить оба набора правил обмена и по одному набору правил регистрации в каждую конфигурацию в качестве макетов плана обмена.
  11. Настроить синхронизацию данных и отладить ее.

Обратите внимание:
Правила обмена, зачитанные из макетов в составе конфигурации, кэшируются в регистре сведений ПравилаДляОбменаДанными. При отладке рекомендуется использовать загрузку правил обмена из файла. Для обновления правил из макета следует изменить номер версии конфигурации или выполнить загрузку вручную по команде Загрузить правила…, выбрав вариант Из конфигурации.

Шаг 1. Создание плана обмена

Создаем в конфигурации план обмена. Называем его, например “РаспределеннаяБаза”. Обязательно в свойствах плана обмена ставим флажок “Распределенная информационная база”.

plan_obmena.gif

На закладке “Прочее” по кнопке “Состав” определяем, какие объекты будут включаться в обмен. По умолчанию можно включить все объекты (“Действия”-“Включить все”). Важным моментом является параметр “Авторегистрация”. В общем случае ее нужно разрешить для всех объектов.

sostav_plana_obmena_autoreg.gif

Замечание: при добавлении новых объектов в конфигурацию, они не включаются в план обмена. Т.е. после добавления объекта его необходимо добавить в состав плана обмена.

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

В принципе, этих действий достаточно, чтобы РБД заработала в “ручном” режиме. Для этого запускаем Предприятие, открываем наш план обмена через меню “Операции”. В плане обмена всегда присутствует предопределенный узел “с точкой”. Это описание текущего узла. Его нужно открыть и заполнить. В нашем случае будут доступны поля “Код” и “Наименование”. Присвоим нашему узлу код “AA” и назовем “Центральная”. Добавим в план обмена один узел. Присвоим ему код “ВВ” и назовем “Периферийная”.

plan_obmena_uzel.gif

Теперь мы можем создать образ периферийной базы. Делается это нажатием кнопки “Создать начальный образ”. В списке узлов должна быть выбрана периферийная база. Образ базы создается в виде готовой ИБ в каталоге или на сервере 1С:Предприятия. (в отличие от 7.7, где образ ИБ создавался как файл выгрузки). Далее созданную базу можно перенести в нужное место, просто скопировав файлик 1CV8.1CD (для файлового варианта), либо через Конфигуратор через выгрузку-загрузку данных. Если Вы откроете план обмена в периферийной ИБ, то Вы увидите, что узлом “с точкой”, т.е. текущим узлом стал узел “Периферийная”, а иконка у узла “Центральная” стала красного цвета, т.е. узел “Центральная” является главным узлом по отношению к текущему.

plan_obmena_uzel2.gif

Обмен в “ручном” режиме можно производить при помощи кнопок “Записать изменения” и “Прочитать изменения”. В первом случае будет предложено выбрать файл, куда изменения будут записаны, во втором – файл, откуда изменения будут считаны. Обмен ведется в формате xml. Изменения записываются для выбранного узла.

Пример сформированного XML-файла обмена приведен здесь

http://www.kb.mista.ru/files/7/Message_%C0%C0_BB.xml

Планы обмена и производительность 1С

Из-за системных особенностей реализации планов обмена не рекомендуется  злоупотреблять выгрузкой изменений по планам обмена. Дело в том, что при чтении изменений блокируются все таблицы изменений. Т.е. при выгрузке план обмена не дает записать новые изменений, а следовательно, блокирует и сами элементы — справочники, документы и т.д.

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

Другие статьи по 1С:

  • Администрирование
  • Программирование 1С
  • Обучение 1С

Видеолекции по технологии обмена в 1С 8.2:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Добавление плана обмена

Раскроем ветвь «Общие» дерева объектов конфигурации и добавим новый объект конфигурации План обмена с именем Филиалы, представление объекта – Филиал. На закладке «Данные» создадим реквизит плана обмена Главный, имеющий тип Булево.

Этот реквизит понадобится нам для того, чтобы разрешать коллизии при обмене данными. Под коллизией понимается ситуация, когда один и тот же объект обмена данными был изменен одновременно в двух узлах. В этом случае мы будем анализировать значение реквизита Главный и принимать изменения только в том случае, если они сделаны в главном узле. В случае коллизии изменения, произведенные не в главном узле, мы будем отвергать.

Теперь определим состав объектов, участвующих в обмене. Для этого на закладке «Основные» нажмем кнопку «Состав».

Создадим основную форму узла и добавим обработчик события формы ПриСозданииНаСервере. Этот обработчик понадобится нам для того, чтобы запретить установку реквизита Главный для предопределенного узла, соответствующего данной информационной базе.

&НаСервереПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Объект.Ссылка = ПланыОбмена.Филиалы.ЭтотУзел() Тогда Элементы.Главный.Доступность = Ложь; КонецЕсли;КонецПроцедуры

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

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

Для этого на закладке «Команды» создадим команду ЗарегистрироватьИзменения.

&НаСервереБезКонтекстаПроцедура ЗарегистрироватьИзмененияНаСервере(Узел) // Регистрация изменений всех данных для узла ПланыОбмена.ЗарегистрироватьИзменения(Узел);КонецПроцедуры&НаКлиентеПроцедура ЗарегистрироватьИзменения(Команда) ЗарегистрироватьИзмененияНаСервере(Элементы.Список.ТекущаяСтрока);КонецПроцедуры

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

&НаСервереБезКонтекстаФункция ПредопределенныйУзел(Узел) Возврат Узел = ПланыОбмена.Филиалы.ЭтотУзел();КонецФункции

Затем в окне элементов формы выделим элемент Список, вызовем его палитру свойств и создадим обработчик события ПриАктивизацииСтроки.

&НаКлиентеПроцедура СписокПриАктивизацииСтроки(Элемент) Если ПредопределенныйУзел(Элемент.ТекущаяСтрока) Тогда Элементы.ФормаЗарегистрироватьИзменения.Доступность = Ложь; Иначе Элементы.ФормаЗарегистрироватьИзменения.Доступность = Истина; КонецЕсли;КонецПроцедуры

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...