Внешняя обработка "Редактирование изменений для обмена" позволяет редактировать регистрацию изменений объектов обмена данными в режиме управляемого приложения. Обработка предназначена для разработчиков обмена данными, администраторов данных. Обработка позволяет выполнить следующие действия:
По выбранному узлу обмена:
- Просмотр списка метаданных, участвующих в обмене.
- Просмотр списка объектов, для которых зарегистрированы изменения.
- Удаление и регистрация изменений для объектов:
- изменение регистрации для объектов по одному.
- изменение регистрации для списка объектов как результата отбора.
- использование запросов для выбора данных для регистрации.
- изменение регистрация объектов указанием их типа с учетом флага авторегистрации.
По выбранному объекту:
- Редактирование текущей регистрации на различных узлах.
- Изменение номеров принятых, отправленных сообщений
В конфигурациях с интегрированной БСП возможна регистрация обработки в подсистеме дополнительных отчетов и обработок. При этом функционал обработки доступен через команды создания связных объектов.
Обработка РегистрацияИзмененийДляОбмена.epf для запуска в "1С:Предприятии" версии 8.2 находится в каталоге:
EXE/EXTREPS/UNIREPS82/RegistrationChangeForDataExchangeManaged
Внешняя обработка РегистрацияИзмененийДляОбмена .epf для запуска в "1С:Предприятии" версии 8.3 находится в каталоге EXE/EXTREPS/UNIREPS83/RegistrationChangeForDataExchangeManaged
Если в конфигурации используется Библиотека стандартных подсистем, то эти операции можно выполнить в подсистеме «Обмен данными».
В этой статье мы рассмотрим, как пользоваться обработкой Регистрация изменений для обмена, которая присутствует в большинстве типовых конфигураций и значительно упрощает устранение различных ошибок, связанных с обменом данных в 1С.
Для начала скажем пару слов о том, как происходит обмен данными в 1С.
Для описания процедуры обмена в конфигурации существует объект ПланОбмена. Для каждого варианта обмена данными создается свой план. Например, план обмена между конфигурациями Бухгалтерия предприятия и Управление торговлей.
Каждый план обмена данными содержит элементы (узлы). В этих узлах регистрируются объекты, которые должны быть переданы при следующем обмене данными. Передавать при каждом обмене все объекты (справочники, документы) нецелесообразно, т.к., во-первых, их может быть слишком много, и обмен затянется на сутки, а во-вторых, не все объекты изменялись пользователями, поэтому большинство из них уже есть в базе-приемнике в нужном виде.
Кроме того, узлы плана обмена имеют два специальных реквизита: Номер отправленного сообщения и Номер принятого сообщения. Каждый раз, когда выгружается пакет данных для обмена, ему присваивается порядковый номер. Он записывается в реквизит Номер отправленного сообщения. Аналогично, когда загружается пакет данных из другой информационной базы, он тоже имеет порядковый номер. В случае успешной загрузки данных этот номер записывается в реквизит Номер принятого сообщения.
Номера нужны для того, чтобы не возникло путаницы в передаваемых пакетах данных. Если в базу приходит пакет с номером, например, 152, а в базе уже зарегистрирован Номер принятого сообщения 169, то такой пакет будет проигнорирован. При этом будет показана ошибка:
Номер сообщения меньше либо равен ранее принятому
А если придет пакет с номером 170 или больше, то он будет загружен в базу и реквизиту Номер принятого сообщения будет присвоен его номер.
В ходе работы с обменом данными в 1С могут возникать и другие нестандартные ситуации, требующие работы с номерами сообщений, регистрацией или отменой регистрации объектов в узлах и т.д.
Итак, обработка Регистрация изменений для обмена позволяет вносить изменения в узлы обмена, т.е. принудительно регистрировать объекты и снимать их регистрацию, изменять номера принятых и отправленных сообщений, просматривать зарегистрированные объекты.
Примеры случаев, когда это может понадобиться:
- Сбилась нумерация сообщений обмена. Это может случиться, например, когда одну из баз восстановили из резервной копии.
- Необходимо заново передать уже переданные объекты. Например, если изменились правила обмена.
- Нужно отменить передачу отдельных объектов и т.д.
Порядок использования обработки Регистрация изменений для обмена:
- В верхнем поле выбрать узел обмена, для которого будут производиться действия. При этом большое поле внизу будет заполнено объектами, включенными в План обмена. В колонке Авторегистрация показано состояние авторегистрации изменений и количество зарегистрированных в данный момент объектов.
- Кнопка Зарегистрировать все… включает все предусмотренные планом обмена объекты в узел. Внимание! Действие необратимо.
- Кнопка Удалить всю регистрацию… очищает регистрацию узла плана обмена. Внимание! Действие необратимо.
- Кнопка Зарегистрировать поодному… удаляет всю существующую регистрацию и региструет по одному объекту каждого типа. Внимание! Действие необратимо.
- Кнопка Изменить номера сообщений… позволяет установить произвольные значения реквизитов Номер отправленного сообщения и Номер принятого сообщения.
- Кнопка с крестом позволяет удалить регистрацию произвольного объекта информационной базы. При этом можно составить запрос и удалить регистрацию всех объектов, полученных в результате его выполнения.
- Кнопка с плюсом позволяет добавить регистрацию произвольного объекта информационной базы. При этом можно составить запрос и добавить регистрацию всех объектов, полученных в результате его выполнения.
- Кнопка Показать изменения, зарегистрированные для данного типа показывает объекты информационной базы, зарегистрированные в узле обмена. Перед нажатием кнопки нужно выделить интересующий тип объектов.
- Кнопка Результат стандартной выгрузки показывает, как будет выглядеть объект информационной базы при выгрузке для обмена в формате XML. Перед нажатием нужно выделить интересующий объект.
Подробнее о механизме регистрации изменений для обмена читайте в отдельной статье.
Если у Вас возникли проблемы с обменом между информационными базами 1С и решить ее своими силами не получается, наши специалисты с радостью и в кратчайшие сроки помогут Вам в этом.
В этой статье поговорим о планах обмена. Зачем они нужны? И если нужны, то можно ли сделать свой, не копируя типовую реализацию? Статья предназначена в основном для разработчиков, но будет полезна всем, кто интересуется подобной темой.
Итак, какие причины могут заставить задуматься о создании собственного плана обмена? План обмена помогает регистрировать изменения объектов. После чего получить список этих объектов, и выгрузить их в необходимый формат или обработать нужным образом. После обработки объектов 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. Порядок снятия с регистрации.
После того как объект будет получен приемником, он может отправить нам подтверждение получения. Опять-таки, это может быть сделано любым удобным способом, например, через файл. Мы его читаем, и теперь пришло время узнать порядок снятия с регистрации. Если от приемника мы получим объекты (гуиды, например), которые успешно были приняты, мы можем снять с регистрации только их. А если мы условились, что принимаем весь пакет, то можем снять с регистрации пакет по номеру. В коде это выглядит так:
После этого, регистрация изменений будет снята.
Если приемник не получил данные, то при следующей выборке все данные, для которых не снята регистрация будут выгружены повторно.
План обмена служит для хранения информации о данных, которые должны быть переданы в другую систему. Для каждого узла плана обмена (приемника) такая информация хранится отдельно, то есть можно четко разделить — кому, что и при каких условиях отправлять. Регистрацию изменений можно делать автоматически (все для всех) или вручную (сами решаем, кому, что отправить). Контроль того, что приемник получил данные осуществляется при помощи стандартного реквизита «НомерОтправленного». Когда узел плана обмена, получивший данные, обработает их, он может сообщить номер пакета, который успешно получен. По нему мы снимем регистрацию с объектов плана обмена.
В общем, повторюсь, план обмена помогает организовать обмен данными со сторонними системами. И в этой статье мы разобрали, как на самом деле просто с ним работать.