Авторегистрация в плане обмена 1с что это
Планы обмена 1С 8.3
Планы обмена в 1С 8.3 — объект метаданных конфигурации, служащий для реализации синхронизации данных в системе 1С 8.
План обмена можно сравнить со справочником, где элементы — это узлы информационных баз. Однако в работе с планами обмена имеется множество нюансов, о них мы поговорим ниже.
Обычно обмен в 1С построен с использованием специальных правил обмена, которые формируются с помощью конфигурации Конвертация данных.
Настройки и свойства планов обмена в 1С
Как ранее было замечено, план обмена очень похож на обычный справочник в 1С, и поэтому мы рассмотрим только главные отличия обмена.
Как работать с планом обмена
План обмена умеет хранить информацию и изменения элементов из состава плана обмена, а так же хранит информацию о номере текущего сообщения. В общем случае схема работы такова:
Распределенная информационная база
Если этот флаг установлен в настройках, то данный план обмена является распределенной информационной базой (РИБ).
Распределенная информационная база — территориально распределенная система на основе одинаковой конфигурации 1С 8.3. РИБ помимо изменений данных умеет передавать и изменений конфигурации, что очень удобно, например, при обновлении релиза конфигурации.
Состав плана обмена
Настройка, с помощью которой разработчик управляет набором объектов для обмена:
В составе плана обмена может быть 3 состояния объекта:
Планы обмена и производительность 1С
Из-за системных особенностей реализации планов обмена не рекомендуется злоупотреблять выгрузкой изменений по планам обмена. Дело в том, что при чтении изменений блокируются все таблицы изменений. Т.е. при выгрузке план обмена не дает записать новые изменений, а следовательно, блокирует и сами элементы — справочники, документы и т.д.
Выгрузку рекомендуется производить в нерабочее время или совсем маленькими партиями данных, чтобы блокировки были на максимально короткий срок.
Другие статьи по 1С:
Видеолекции по технологии обмена в 1С 8.2:
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
План обмена в 1С 8.3
План обмена
Планы обмена используются для организации обменов данными между различными системами. Это может быть как обмен между двумя базами на платформе 1С, так и обмен между базой на 1С и какой-нибудь внешней системой, например с сайтом.
В целом план обмена похож на справочник, он обладает почти теми же самыми свойствами и методами. Поэтому в данной статье будет рассмотрена только та функциональность, которая касается обмена данными.
В дереве метаданных план обмена находится в ветке Общие — Планы обмена. В одной конфигурации может быть несколько планов обмена, например один для обмена с другой базой 1С, второй для обмена с сайтом, третий для обмена с мобильным приложением.
В пользовательском режиме создаются элементы плана обмена, которые называются узлами обмена:
Каждый узел плана обмена описывает одного участника обмена. Один узел является предопределенным и описывает текущую базу, в списке он выделяется специальной пиктограммой с точкой в правом нижнем углу (узел Основная база). Данный узел всегда присутствует в плане обмена.
Обмен между узлами выполняется с помощью сообщений обмена. В каждом сообщении указывается узел-отправитель и узел-получатель. Кроме этого у каждого сообщения есть свой номер. Как правило сообщение — это XML файл, хотя может быть и другой формат.
Для плана обмена нельзя установить нулевую длину кода или наименования, так как узлы идентифицируются по коду (в файл обмена записывается код узла).
Состав плана обмена
При создании нового плана обмена нужно определить состав данных, которыми будут обмениваться системы. Например, в текущей конфигурации может быть 20 справочников, 10 документов, 5 регистров сведений, но в другую базу нужно выгружать только 5 справочников и 2 документа.
Для настройки состава плана обмена на закладке Основные нужно нажать на кнопку Состав:
Будет открыто окно, в котором можно флажками отметить те объекты, которыми можно будет обмениваться с помощью данного плана обмена:
В состав плана обмена можно включить следующие объекты:
Также у данных видов объектов метаданных есть закладка Обмен данными, где можно отметить те планы обмена, в состав которых будет входить данный объект метаданных:
При сохранении конфигурации базы данных для каждого из отмеченных объектов будет создана таблица с тремя колонками:
Узел | Ссылка | Номер сообщения |
---|
В колонке Узел будет храниться ссылка на узел плана обмена, для которого зарегистрировано изменение данных. Если в конфигурации несколько планов обмена, то в колонке Узел может храниться ссылка на узел из любого плана обмена, в состав которого был включен объект.
В колонке Ссылка будет храниться ключ элемента, который должен быть выгружен для узла из колонки Узел. Для объектных данных — это ссылка. Для константы — идентификатор константы, при этом в конструкторе запросов данной колонки не будет, но физически она есть. Для наборов записей подчиненных регистратору — это регистратор. Для независимых регистров сведений будет столько колонок сколько есть измерений у регистра сведений, в каждой колонке будет храниться значение измерения. Если регистр сведений периодический, то будет еще одна колонка для периода.
В колонке Номер сообщения будет храниться номер сообщения, в котором данный объект был выгружен в первый раз. Тип число.
Состав данных таблиц можно посмотреть с помощью конструктора запросов. Для этого нужно нажать на кнопку Отображать таблицы изменений:
В результате в списке таблиц базы данных появятся таблицы с зарегистрированными изменениями. Данные таблицы будут доступны только для тех объектов, которые включены в состав хотя бы одного плана обмена.
Если для разных узлов нужно обмениваться разными данными, то нужно создать несколько планов обмена. Потому что для всех узлов одного плана обмена состав объектов одинаковый.
Служба регистрации изменений
Служба регистрации изменений позволяет получить список измененных объектов для определенного узла плана обмена. В дальнейшем данный список объектов можно выгрузить в файл.
Основное предназначение данной службы — это возможность выгружать только измененные объекты. Например, если в базе 10 000 элементов одного справочника, то достаточно один раз выгрузить его полностью, а в дальнейшем выгружать только измененные объекты.
Алгоритм работы данной службы:
Для того чтобы изменения объектов автоматически регистрировались в таблицах изменений нужно при настройке состава плана обмена разрешить автоматическую регистрацию (по умолчанию она разрешена):
Рассмотрим данный алгоритм на примере.
В базе-источнике есть 3 узла плана обмена, один из которых является текущей базой (Основная база):
В состав плана обмена включен только один справочник Номенклатура и для него разрешена автоматическая регистрация:
На данный момент таблица регистрации изменений пустая:
Узел | Ссылка | Номер сообщения |
---|
Создадим новую номенклатуру Стул. В результате в таблицу будет добавлено 2 новые строки, по одной для каждого узла плана обмена (кроме узла текущей базы):
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | NULL |
Сайт | Стул | NULL |
Так как выгрузка еще не выполнялась, то в колонке Номер сообщения NULL.
Создадим еще одну номенклатуру Шкаф:
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | NULL |
Сайт | Стул | NULL |
База Бухгалтерия | Шкаф | NULL |
Сайт | Шкаф | NULL |
В таблицу было добавлено 2 строки для шкафа.
После этого была выполнена выгрузка всех изменений для узла База Бухгалтерия. Был увеличен счетчик сообщения для данного узла, а также в таблице изменений была изменена колонка Номер сообщения:
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | 1 |
Сайт | Стул | NULL |
База Бухгалтерия | Шкаф | 1 |
Сайт | Шкаф | NULL |
Создадим еще одну номенклатуру Стол:
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | 1 |
Сайт | Стул | NULL |
База Бухгалтерия | Шкаф | 1 |
Сайт | Шкаф | NULL |
База Бухгалтерия | Стол | NULL |
Сайт | Стол | NULL |
Было добавлено еще 2 строки с NULL в колонке Номер сообщения.
После этого была выполнена выгрузка сразу в оба узла:
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | 1 |
Сайт | Стул | 1 |
База Бухгалтерия | Шкаф | 1 |
Сайт | Шкаф | 1 |
База Бухгалтерия | Стол | 2 |
Сайт | Стол | 1 |
Для узла Сайт в колонке Номер сообщения везде была проставлена единица. Для узла База Бухгалтерия это было уже второе сообщение, поэтому для номенклатуры Стол был записана двойка, а для стула и шкафа осталась без изменений. Напомню, в этой колонке хранится номер сообщения, в котором объект был выгружен в первый раз, а стул и шкаф уже выгружались в первом сообщении.
Затем у стула был изменен артикул и он был перезаписан:
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | NULL |
Сайт | Стул | NULL |
База Бухгалтерия | Шкаф | 1 |
Сайт | Шкаф | 1 |
База Бухгалтерия | Стол | 2 |
Сайт | Стол | 1 |
В результате для него в колонку Номер сообщения был записан NULL.
Только сейчас в узел База Бухгалтерия было загружено первое сообщение (напомню было две выгрузки). В результате был сформирован файл ответа (с квитанцией), в который был записан номер загруженного сообщения (номер 1).
При загрузке ответа в основную базу из сообщения был прочитан номер загруженного сообщения и в таблице регистрации были удалены строки, где Номер сообщения меньше или равен номеру загруженного сообщения.
Узел | Ссылка | Номер сообщения |
---|---|---|
База Бухгалтерия | Стул | NULL |
Сайт | Стул | NULL |
Сайт | Шкаф | 1 |
База Бухгалтерия | Стол | 2 |
Сайт | Стол | 1 |
В результате была удалена строка со шкафом. Строка со стулом не была удалена, потому что там NULL, а у строки со столом Номер сообщения = 2. Строки с сайтом вообще не рассматривались, потому что там не совпадает узел.
Из данного примера можно сделать следующие выводы:
В данном примере был рассмотрен пример двухстороннего обмена. При этом из второй базы может выгружаться только квитанция, а может квитанция + данные.
Если обмен односторонний, то есть подразумевается только выгрузка данных, то сразу после выгрузки можно программно очищать таблицы регистрации изменений. Но в этом случае нужно сторонними средствами гарантировать доставку каждого сообщения обмена в базу-приемник.
Основной отбор регистра сведений
У регистра сведений в свойствах измерения есть флаг Основной отбор:
А если регистр сведений периодический, то на закладке Основные есть флаг Основной отбор по периоду:
По умолчанию данные флаги установлены.
С помощью них определяется минимальная гранула для регистрации на узлах плана обмена.
Если оставить как есть, то при изменении одной записи регистра сведений будет регистрироваться только она.
Если снять данный флаг у одного из измерений, то оно перестанет входить в гранулу для регистрации, в результате при изменении одной записи может зарегистрироваться сразу несколько записей.
Лучше всего объяснить на примере. Пусть есть регистр сведений со следующей структурой:
И в нем содержатся следующие данные:
Если все измерения входят в основной отбор, то при изменении оптовой цены для шкафа в таблицу регистрации попадет только одна запись, она же будет выгружена в файл обмена:
Период | Номенклатура | Вид цен | Узел | Номер сообщения |
---|---|---|---|---|
05.10.21 | Шкаф | Оптовая | Ссылка на узел | NULL |
Если снять флаг Основной отбор у измерения Вид цены, то из таблицы регистрации будет удалена соответствующая колонка. В результате при изменении оптовой цены для шкафа в таблицу регистрации будет записана только номенклатура и период:
Период | Номенклатура | Узел | Номер сообщения |
---|---|---|---|
05.10.21 | Шкаф | Ссылка на узел | NULL |
Тогда при выгрузке в файл, из регистра будут отобраны все записи, где Номенклатура = Шкаф и Период = 05.10.21, то есть сразу 2 записи: с оптовой и розничной ценой.
То же самое касается периода. Если снять флаг Основной отбор по периоду, то колонка Период будет удалена из таблицы регистрации изменений. Тогда при выгрузке в файл будут выбрана вся история изменений цены для одной номенклатуры.
Удаление объекта
При непосредственном удалении объекта из базы данных в таблицу регистрации изменений записывается объект Удаление объекта.
При выгрузке он тоже выгружается в файл обмена, затем в базе приемнике по идентификатору (для объектных данных) будет найден соответствующий объект и удален.
ЭтотУзел
Один из узлов плана обмена должен указывать на текущую базу. В списке узлов он выделяется специальной пиктограммой:
Чтобы получить текущий узел можно воспользоваться методом ЭтотУзел. Данный метод вернет ссылку на узел плана обмена:
План обмена
План обмена содержит информацию об узлах, которые могут участвовать в обмене данными, определяет состав данных, которыми будет производиться обмен, и указывает, следует ли задействовать механизм распределенной информационной базы при обмене.
В одном прикладном решении может существовать несколько планов обмена, каждый из которых может описывать свой порядок обмена данными. Например, если выполняется обмен данными с удаленными складами и удаленными офисами, то, скорее всего, будет существовать два плана обмена (один для обмена со складами, другой — для офисов), поскольку состав данных, которыми производится обмен со складами, будет значительно «уже», чем состав данных, предназначенных для обмена с офисами.
Назначение
В плане обмена хранится список узлов, — участников обмена в распределенной информационной системе. В качестве узлов могут выступать информационные базы 1С:Предприятия 8, информационные базы 1С:Предприятия 7.7 или другие информационные системы, не основанные на 1С:Предприятии.
Для каждого узла можно задать код, наименование и необходимый перечень реквизитов, описывающих узел. Узел может иметь также несколько подчиненных табличных частей для хранения информации, связанной с этим узлом, несколько форм, для отображения информации, содержащейся в плане обмена, и т. д. Например, структура плана обмена МобильноеПриложениеТорговыйПредставитель может выглядеть следующим образом:
При создании плана обмена существует возможность указать, будет ли он задействовать механизмы распределенной информационной базы или нет.
Также в плане обмена указывается состав данных, которыми предполагается вести обмен:
Для каждого из объектов прикладного решения, которые могут участвовать в обмене, задается режим регистрации их изменений. Если разрешена авторегистрация, то система сама отслеживает выполняемые изменения, и формирует набор данных, которыми нужно обменяться. Если же разработчик запрещает авторегистрацию изменений, — он должен, средствами встроенного языка, самостоятельно выполнять регистрацию нужных ему изменений.
Механизмы, реализуемые планом обмена
План обмена. Авторегистрация изменений. Разрешить или запретить. Преимущества
Количество записей в планах обмена все растет и растет. Решил как-то разобраться. А может попробовать ручную регистрацию изменений. Может скорость обменов увеличится в десятки раз? Как ускорить обмены?
Итак. Долой всю справочную литературу со всеми помощниками…
Итак сравнение (на примере справочника или документа):
Авторегистрация. Кратко об этапах:
1) Регистрация ВСЕХ изменений (автоматическая естественно)
2) При обмене выборка этих самых зарегистрированных изменений (очень долго – 45% времени)
3) Функция проверки а нужно ли перегружать данные, если не нужно то выгружаем УдалениеОбъекта (долго)
Ручная регистрация.
1) Регистрация ВСЕХ изменений (ручками) при этом проверяются на нужные или не нужные все объекты (долго). Ненужные ведь тоже надо регистрировать как УдалениеОбъекта, иначе могут остаться скорректированные данные (часто бывает такое), т.е. в основной базе данные будут изменены, а в получателе навсегда останутся старые, которых вообще не должно быть.
2) При обмене выборка этих самых зарегистрированных изменений (очень долго)
Как ни крути везде одинаково долго. Что делать? Как ускорить обмены?
(1) не раз в год
(2) не нужные тоже ведь должны попадать как УдалениеОбъекта
часто бывает такое, что заказ приняли на одного клиента из Питера, и заказ по обменам улетел в Питер. Затем оказалось, что этот заказ не Питера а Москвы, тогда после его изменения, он улетает в Москву. Но, чтобы в Питере он УДАЛИЛСЯ НУЖНО ИМ ТОЖЕ СДЕЛАТЬ РЕГИСТРАЦИЮ УдалениеОбъекта.
(8) записи типа удаление объектов как раз и выполняются долго. Особенно заметно, когда нужных 1% данных а остальное УдалениеОбъекта.
Может в идеале никакие данные не должны меняться ни задним числом ни вчерашним днем и даже часом, но у нас такое не реально.
(26)
> При ручной регистрации изменений в таблицы регистрации изменений должны попадать только нужные записи для каждого узла. При обмене уже никаких проверок быть не должно. Так что, что-то ты там перемудрил.
Наверное, ты не внимательно читаешь
1) Я не говорил, что при обмене есть проверки в случае ручной регистрации.
2) нужные попадают. И не нужные тоже как УдалениеОбъекта читай (5)
Создание и регистрация плана обмена
В этой статье поговорим о планах обмена. Зачем они нужны? И если нужны, то можно ли сделать свой, не копируя типовую реализацию? Статья предназначена в основном для разработчиков, но будет полезна всем, кто интересуется подобной темой.
Итак, какие причины могут заставить задуматься о создании собственного плана обмена? План обмена помогает регистрировать изменения объектов. После чего получить список этих объектов, и выгрузить их в необходимый формат или обработать нужным образом. После обработки объектов 1С их можно пометить, как отправленные. Это не снятие с регистрации, а лишь пометка о том, что объекты уже были обработаны. Такой механизм удобен, когда необходимо контролировать прием получателем выгруженной информации. Когда информационная система-приемник получит пакет обмена и успешно его обработает, она может отправить подтверждение о приеме. После чего в нашем плане обмена можно снять с регистрации отправленные объекты.
Также в плане обмена есть несколько стандартных реквизитов. Например, «Номер принятого» и «Номер отправленного». Эти реквизиты удобно использовать для того, чтобы принимать только актуальную информацию, которая не была ранее принята. А теперь обо всем этом подробней и с примерами. Хоть планы обмена кому-то и кажутся чем-то страшным и необъяснимым, после прочтения статьи, думаю, все станет просто и понятно.
1. Создание и регистрация, узлы плана обмена.
Приведем пример, когда нам нужно выгружать измененные номенклатуры (для ТСД, мобильного устройства, промежуточной базы или пр.).
Назовем его «ОбменНоменклатурой_Тест». Включаем в состав нужные объекты. В этом примере справочник «Номенклатура».
Авторегистрацию устанавливаем в значение «Разрешить». Смысл авторегистрации в том, что если объект был изменен, он будет автоматически зарегистрирован к обмену, и никаких дополнительных манипуляций для регистрации делать больше не нужно.
Если же выбрать значение для авторегистрации «Запретить», тогда придется вручную регистрировать объекты к обмену. Это нужно, когда есть необходимость в дополнительных отборах; когда, например, у каждого узла плана обмена (приемника) будет свой набор номенклатуры, и разделятся он будет в настройках плана обмена, где каждому узлу будет закреплен свой список номенклатуры.
Чтобы зарегистрировать вручную объект к обмену, можно создать подписку на событие «При записи» справочника. И в обработчике после наложенных отборов указать следующее:
Процедура РегистрацияИзмененийДляВыгрузки(Источник,Отказ) Экспорт
//Здесь налаживаем отборы
//и сам код регистрации
Узел = ПланыОбмена.ОбменНоменклатурой_Тест.НайтиПоКоду(«Тест»);
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Источник);
Сохраним изменения и откроем конфигурацию в режиме предприятия.
Так как конфигурация в данном случае пустая, дополнительно будут использоваться две обработки «РегистрацияИзмененийДляОбмена82 (управляемое приложение).epf» (its.1c.ru/db/metod8dev/content/5013/hdoc) и консоль запросов (its.1c.ru/db/metod8dev/content/4500/hdoc). Обе обработки доступны для свободного скачивания.
В режиме предприятия создадим новый узел плана обмена. Это, по сути, элемент плана обмена, который будет использоваться только для одного приемника. Хотя, если не требуется подтверждение о приеме данных, то с одного узла можно рассылать данные всем, но здесь мы такой вариант не рассматриваем, так как он намного проще и будет понятен по ходу статьи.
Переходим через все «Все функции» в наш план обмена, добавляем новый узел плана обмена. Имя назначим «Тест», а код 1. Код в дальнейшем будет очень важен, если требуется идентификация. То есть в сообщение обмена можно вкладывать код отправителя и код получателя. Тогда получатель всегда будет знать, что пакет обмена предназначен именно ему, и от кого он пришел.
Для предопределенного узла можно задать код «ЦБ», так как это наша база.
Откроем обработку «Регистрация изменений для обмена», выберем наш узел «Тест». И видим, что пока не зарегистрировано ни одного объекта.
Создадим новый элемент в справочнике «Номенклатура» в 1С. Переходим снова в обработку, нажимаем кнопку «Обновить» и видим, что у нас этот объект зарегистрировался автоматически.
2. 1С Выгрузка планов обмена.
Здесь мы рассматриваем именно планы обмена, поэтому метод передачи данных нам неважен. Будь то прямое подключение к базе-приемнику, формирование файла или текста, который будет передан в двоичном виде через 1С http сервисы, выборка изменений при этом будет идти одинаково.
Например, создадим кнопку в списке плана обмена и назначим на нее обработчик на сервере.
Есть возможность выбирать изменения объектной моделью, вот так:
Пока ВыборкаИзменений.Следующий() Цикл
КонецЦикла;
«НомерСообщения» – это стандартный реквизит плана обмена «НомерОтправленного». Его необходимо прочитать из узла и самостоятельно увеличить после отправки данных.
Также есть возможность выбора изменений запросом:
В процедуре на сервере давайте откроем конструктор запроса с обработкой результата и посмотрим, как выбрать изменения. В конструкторе есть кнопка «Отображать таблицы изменений». После нажатия на эту кнопку мы увидим таблицы, в которых хранятся наши изменения.
Накладывая отбор на узел, мы можем получить изменения только по определенному приемнику, а в ссылке хранится объект, то есть ссылка на номенклатуру. Но при выборе запросом, выгруженные изменения придется помечать вручную.
В итоге процедура будет выглядеть так:
После того как мы воспользуемся кнопкой в обработке регистрации изменений для обмена данными, мы увидим, что данные помечены, как выгруженные. И в колонке «Номер отправленного» мы видим номер пакета, в котором была произведена 1С выгрузка объекта.
3. Порядок снятия с регистрации.
После того как объект будет получен приемником, он может отправить нам подтверждение получения. Опять-таки, это может быть сделано любым удобным способом, например, через файл. Мы его читаем, и теперь пришло время узнать порядок снятия с регистрации. Если от приемника мы получим объекты (гуиды, например), которые успешно были приняты, мы можем снять с регистрации только их. А если мы условились, что принимаем весь пакет, то можем снять с регистрации пакет по номеру. В коде это выглядит так:
После этого, регистрация изменений будет снята.
Если приемник не получил данные, то при следующей выборке все данные, для которых не снята регистрация будут выгружены повторно.
В общем, повторюсь, план обмена помогает организовать обмен данными со сторонними системами. И в этой статье мы разобрали, как на самом деле просто с ним работать.