1с план обмена как работает
Перейти к содержимому

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

  • автор:

Создание и регистрация плана обмена

1. Создание и регистрация, узлы плана обмена. 2. 1С Выгрузка планов обмена. 3. Порядок снятия с регистрации. В этой статье поговорим о планах обмена. Зачем они нужны? И если нужны, то можно ли сделать свой, не копируя типовую реализацию? Статья предназначена в основном для разработчиков, но будет полезна всем, кто интересуется подобной темой.
Итак, какие причины могут заставить задуматься о создании собственного плана обмена? План обмена помогает регистрировать изменения объектов. После чего получить список этих объектов, и выгрузить их в необходимый формат или обработать нужным образом. После обработки объектов 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. Порядок снятия с регистрации.

После того как объект будет получен приемником, он может отправить нам подтверждение получения. Опять-таки, это может быть сделано любым удобным способом, например, через файл. Мы его читаем, и теперь пришло время узнать порядок снятия с регистрации. Если от приемника мы получим объекты (гуиды, например), которые успешно были приняты, мы можем снять с регистрации только их. А если мы условились, что принимаем весь пакет, то можем снять с регистрации пакет по номеру. В коде это выглядит так:

После этого, регистрация изменений будет снята.
Если приемник не получил данные, то при следующей выборке все данные, для которых не снята регистрация будут выгружены повторно.
План обмена служит для хранения информации о данных, которые должны быть переданы в другую систему. Для каждого узла плана обмена (приемника) такая информация хранится отдельно, то есть можно четко разделить — кому, что и при каких условиях отправлять. Регистрацию изменений можно делать автоматически (все для всех) или вручную (сами решаем, кому, что отправить). Контроль того, что приемник получил данные осуществляется при помощи стандартного реквизита «НомерОтправленного». Когда узел плана обмена, получивший данные, обработает их, он может сообщить номер пакета, который успешно получен. По нему мы снимем регистрацию с объектов плана обмена.
В общем, повторюсь, план обмена помогает организовать обмен данными со сторонними системами. И в этой статье мы разобрали, как на самом деле просто с ним работать.
Специалист компании ООО «Кодерлайн» Вадим Хоменко.

Нетиповой обмен стандартными средствами

Антонова Мария Посмотреть все статьи >> Старший специалист по внедрению 1С франчайзинговой сети «ИнфоСофт».

Время прочтения — 4 мин.
Заказать консультацию

Предположим вам сделали нетиповые правила по советам от нашего эксперта Александра Ретунского (Лайфхаки конвертации данных 2.1 и Лайфхаки конвертации данных 2.1 (часть 2) и у вас возникает вопрос, что делать с ними дальше, если ваши нетиповые правила не ложатся на типовые обмены.

Поступила задача: «Разработка нетиповых правил с учетом требованиями клиента т.к. конфигурация «ДО ПРОФ» не предполагает обмена с конфигурацией БП версии «КОРП», а клиент очень сильно хотел их наладить. При разработке правил мы указали объекты для передачи:

  • Справочники: Договоры, Контрагенты
  • Документы: Акт сверки расчетов с контрагентом, Корректировка реализация, Реализация (акты, накладные), Счет-фактура выданный.

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

Порядок действий:

1. Добавляем новый план обмена. В примере – добавлен план обмена «ИС_ОбменБПДО».

Примечание: Имя плана обмена должно совпадать с обменивающейся базой, иначе обмен не заработает.

2. Созданный план обмена необходимо добавить план обмена в подсистему «ОбменДаннымиПрикладныеОбъекты»

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

3. В плане обмена на вкладке «Команды» указываем все те же самые общие команды, которые указаны в типовых обменах. Предварительно их необходимо поставить на поддержку с возможностью редактированием, либо добавить при помощи копирования в созданный план обмена, изменив «Тип параметра команды» каждой команды, указав, что они будут присутствовать в плане обмена.

1.png

4. Добавляем «Форму списка» и «Форму узла» при помощи копировании с типовых правил обмена.

5. Для того, чтобы добавленный план обмена появился в типовом списке выбора по настройке синхронизации, необходимо добавить в Общий модуль – «ОбменДаннымиПереопределяемый» в процедуру «ПолучитьПланыОбмена» строчку «ПланыОбменаПодсистемы.Добавить(Метаданные.ПланыОбмена.ИС_ОбменБПДО);»

2.png

6. На вкладке «Данные» — настраиваем состав обмена, указываем все объекты, которые будут учувствовать в синхронизации.

Примечание: В обязательном порядке необходимо добавить в состав: регистр сведений «СоответствияОбъектовИнформационныхБаз». (У всех объектов авто регистрация запрещена)

7. Создаем макеты плана «Правил обмена» и «Правил регистрации», можно загрузить в данные макеты разработанные правила, которые разрабатывались в конфигурации «Конвертация данных 2», либо можно через пользовательский режим загрузить собственные правила. Загружаем правила в формате .zip, в котором обязательно должны быть два файла:

  • CorrespondentExchangeRules.xml
  • ExchangeRules.xml

Аналогичные действия все проделываются в корреспондирующей конфигурации.

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

Рассказать друзьям
Предыдущая
Нестандартное закрытие месяца в Бухгалтерии 3.0
Неуплата налоговых авансов может обернуться арестом имущества

Комментарии ( 66,’PROPERTY_OBJECT_ID’ => $ElementID, ‘ACTIVE’=>’Y’,), array(), false, array(‘ID’, ‘NAME’) ); echo $cnt; ?>)

IncludeComponent( «scoder:scoder.comments», «coments», Array( «AJAX_MODE» => «Y», «AJAX_OPTION_ADDITIONAL» => «», «AJAX_OPTION_HISTORY» => «N», «AJAX_OPTION_JUMP» => «N», «AJAX_OPTION_STYLE» => «N», «CACHE_TIME» => «36000000», «CACHE_TYPE» => «A», «COMPOSITE_FRAME_MODE» => «A», «COMPOSITE_FRAME_TYPE» => «AUTO», «CUSTOM_TITLE_DATE_ACTIVE_FROM» => «», «CUSTOM_TITLE_DATE_ACTIVE_TO» => «», «CUSTOM_TITLE_DETAIL_PICTURE» => «», «CUSTOM_TITLE_DETAIL_TEXT» => «», «CUSTOM_TITLE_IBLOCK_SECTION» => «», «CUSTOM_TITLE_NAME» => «Ваше имя», «CUSTOM_TITLE_PREVIEW_PICTURE» => «», «CUSTOM_TITLE_PREVIEW_TEXT» => «», «CUSTOM_TITLE_TAGS» => «», «DEFAULT_INPUT_SIZE» => «30», «DETAIL_TEXT_USE_HTML_EDITOR» => «N», «DIF_LEVEL_COMMENTS_SPACE_PX» => «50», «DISPLAY_BOTTOM_PAGER» => «Y», «DISPLAY_TOP_PAGER» => «N», «ELEMENT_ASSOC» => «PROPERTY_ID», «ELEMENT_ASSOC_PROPERTY» => «300», «GROUPS» => array(«2»), «MAX_FILE_SIZE» => «0», «MAX_LEVELS» => «100000», «MAX_USER_ENTRIES» => «100000», «NEWS_COUNT» => «50», «OBJECT_ID» => $ElementID, «OBJECT_TYPE» => $arParams[«IBLOCK_ID»], «PAGER_BASE_LINK_ENABLE» => «N», «PAGER_DESC_NUMBERING» => «N», «PAGER_DESC_NUMBERING_CACHE_TIME» => «36000», «PAGER_SHOW_ALL» => «N», «PAGER_SHOW_ALWAYS» => «N», «PAGER_TEMPLATE» => «.default», «PAGER_TITLE» => «Комментарии», «PREVIEW_TEXT_USE_HTML_EDITOR» => «N», «PROPERTY_CODES» => array(«300″,»NAME»), «PROPERTY_CODES_ANSWERE» => array(«300″,»NAME»), «PROPERTY_CODES_ANSWERE_REQUIRED» => array(«300″,»NAME»), «PROPERTY_CODES_REQUIRED» => array(«300″,»NAME»), «RESIZE_IMAGES» => «N», «SC_HIDE_TREE» => «N», «STATUS_NEW» => «ANY», «USER_MESSAGE_ADD» => «Ваш комментарий отправлен», «USE_CAPTCHA» => «N», ) );?>

«1С:Предприятие 8»: механизмы обмена данными

Один из наиболее актуальных сегодня вопросов создания, поддержки и развития информационных систем организаций — задача интеграции их отдельных подсистем и компонентов. Платформа «1С:Предприятие 8» обладает значительным спектром функций и механизмов взаимодействия с внешними программами и оборудованием на основе общепризнанных открытых стандартов и протоколов.

механизмы обмена данными

Довольно большую группу среди них составляют средства обмена данными, которые мы и рассмотрим в этой статье.

Для начала нужно сказать о довольно простых, но в то же время эффективных и часто используемых на практике возможностях.

  • Работа с текстовыми документами. Встроенный язык платформы позволяет разработчику создавать, динамически формировать и записывать текстовые документы, в том числе на основе готовых шаблонов. Обмен данными с использованием текстовых документов может быть одним из самых простых способов взаимодействия с другими информационными системами.
  • Последовательное чтение текстовых файлов. Дело в том, что такие файлы могут быть очень большого объема, поэтому существуют специальные программные объекты, позволяющие читать и записывать их быстро (с использованием оптимизированных алгоритмов).
  • XML. Платформа позволяет организовывать интеграцию с прикладными системами с использованием XML-документов, являющихся на сегодня общепринятым средством представления данных. Поддержка XML выполнена на уровне встроенного языка.
  • DBF-файлы. Механизм работы с базами данных формата DBF предназначен для обеспечения возможности манипулирования ими непосредственно из языка системы через объект xBase. Можно как работать с существующими базами данных, так и создавать новые базы данных произвольной конфигурации.
  • Работа с файловой системой. Доступ к функциям работы с файловой системой реализован на уровне встроенного языка. Эта возможность может быть использована при организации взаимодействия с другими информационными системами через общие каталоги.

Базовые средства обмена данными

Платформа также содержит набор специализированных средств обмена данными для создания распределенных информационных систем на основе программ «1С:Предприятия» и решений других поставщиков.

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

  • объекты «обмена»,
  • средства сериализации,
  • средства документов.

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

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

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

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

С помощью объектов «план обмена» реализованы два важных внутренних механизма платформы.

  • Служба регистрации изменений. Позволяет получать информацию о том, какие элементы данных были изменены и в какой узел обмена их необходимо передать. Для каждого элемента данных, указанного в плане обмена, ведется своя таблица регистрации изменений. Они имеют разную структуру в зависимости от того, для каких элементов данных регистрируются изменения, но все-таки структуры таблиц подобны. Каждая запись указывает на некоторый элемент данных, некоторый узел и содержит номер сообщения, в котором это изменение передано в первый раз.
  • Инфраструктура сообщений. Перенос данных между узлами распределенной информационной базы выполняется с помощью сообщений, которые поддерживаются инфраструктурой сообщений. Каждое сообщение относится к определенному плану обмена, имеет определенный узел-отправитель, узел-получатель и целочисленный номер.

XML-сериализация — это процесс преобразования данных «1С:Предприятия» в последовательность данных формата XML и наоборот.

Средства чтения и записи XML-документов позволяют работать с данными формата XML на «базовом» уровне, без привязки к объектам «1С:Предприятия». В частности, они дают возможность открывать XML-документы для чтения, читать из них данные, создавать новые XML-документы и записывать в них данные. Все это активно используется при реализации различных схем обмена данными.

Универсальный механизм обмена данными

Универсальный механизм обмена данными предназначен для создания территориально распределенных систем на основе как «1С:Предприятия», так и решений других поставщиков. Однако этот механизм позволяет переносить только данные, перенос конфигурации и административной информации «1С:Предприятия» при его помощи невозможен. В качестве формата обмена используются XML-документы, при этом при обмене данными между информационными базами «1С:Предприятия» не накладывается ограничений на идентичность конфигурации и структуры конкретных объектов. В то же время в одной конфигурации может быть создано несколько независимых схем обмена с различными информационными системами. Важно также и то, что при организации схемы обмена не накладывается ограничений на структуру распределенной системы. Может быть организована как классическая структура типа «звезда», так и более сложные многоуровневые структуры типа «снежинка» и др.

Универсальный механизм обмена данными

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

Механизм управления распределенными информационными базами

Механизм управления распределенными информационными базами (УРИБ) играет ключевую роль в создании территориально распределенных систем на основе идентичных конфигураций «1С:Предприятия 8» (распределенная система должна иметь древовидную структуру, в которой существует корневой узел и определено отношение «главный—подчиненный» для каждой пары связанных узлов). Данная технология обеспечивает регистрацию изменений в базах данных, инфраструктуру сообщений и обмен информацией в формате XML. Централизованное управление конфигурацией системы осуществляется с помощью визуальных средств или программным образом. С ее помощью выполняется не только обмен данными, но и перенос программной конфигурации.

УРИБ реализует следующие основные возможности:

  • интерактивное создание распределенной системы и выполнение обмена данными без дополнительного программирования;
  • обеспечение идентичности конфигураций информационных баз, входящих в состав распределенной системы;
  • подключение новых и отключение существующих узлов;
  • создание начального образа информационной базы для нового узла;
  • различные способы разрешения коллизий при одновременном изменении данных в разных узлах распределенной системы;
  • в рамках одной распределенной информационной базы может быть создано несколько схем обмена;
  • распределенная информационная база может содержать схемы обмена с другими информационными системами, в том числе с информационными базами «1С:Предприятия», не являющимися распределенными информационными базами;
  • задание условий на передачу и прием изменений на уровне отдельных элементов данных;
  • восстановление обмена данными в таких случаях, как восстановление информационных баз из резервных копий и т. д.;
  • сжатие сообщений обмена в формате .ZIP и автоматическую распаковку сообщений обмена при приеме.

Различные способы управления обменом данными

Отличительная особенность механизма УРИБ заключается в том, что во всех узлах должны быть одинаковые конфигурации и между двумя связанными узлами должны быть установлены отношения главный—подчиненный. Благодаря этому процесс обмена можно формализовать и создавать распределенные информационные базы даже без программирования, так как система «знает», как обмениваться информацией. В отличие от этого, при использовании универсального механизма обмена данными в узлах может быть что угодно и взаимодействовать они могут как угодно, поэтому обязательно нужно писать код, описывающий правила такого взаимодействия. Таким образом, механизм УРИБ — это быстро и просто, но по определенным правилам, а универсальный механизм обмена данными — это «как угодно» и поэтому сложнее и требует написания всего кода вручную.

В целом же прикладное решение может содержать произвольное количество планов обмена как с использованием механизма УРИБ, так и без его использования. Например, одна и та же информационная база может входить в состав различных распределенных систем. Например, по одному плану обмена (с использованием УРИБ) она будет «общаться» с филиалами, а по другому плану обмена (с применением универсального механизма обмена данными) она может работать с корпоративной информационной системой (не «1С:Предприятие»), поставляя туда данные о работе филиалов для создания консолидированной отчетности по всему холдингу в целом.

Таким образом, программные средства и механизмы «1С:Предприятия» позволяют создавать различные по структуре однородные и неоднородные распределенные информационные системы.

  • Транспортный налог в 1с 8.3 – расчет и начисление в 2021 году
  • Способы учета НДС в 1С Бухгалтерия 8.3
  • Правильный учёт излишков товара в 1С Бухгалтерия 8.3
  • Как в 1С 8.3 оформить возврат товара поставщику?
  • Создание номенклатуры в 1С 8.3

ТОП ПРОДАЖ

  • 1С:Бухгалтерия 8
  • 1С:Управление нашей фирмой 8
  • 1С:Управление торговлей 8
  • 1С:Управление предприятием 2
  • 1С:ЗУП 8
  • 1C:Учет путевых листов и ГСМ
  • 1С:Учет в управляющих компаниях
  • Электронные поставки 1С

Облачные сервисы

  • 1С:Фреш
  • 1С:Готовое рабочее место
  • 1С:ЭДО
  • Маркировка товаров
  • 1С:Отчетность
  • 1C:Товары
  • 1C-Ритейл Чекер

План обмена в 1С

План обмена в 1С — объект метаданных конфигурации, служащий для реализации синхронизации данных между информационными базами 1С (а также для обмена с другими системами).

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

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

  • 1 Настройка и структура плана обмена 1С
  • 2 Регистрация изменений в плане обмена 1С
    • 2.1 Зарегистрировать изменения в плане обмена 1С программно в конкретном узле
    • 2.2 Чтение зарегистрированных изменений из узла плана обмена
    • 2.3 Удаление зарегистрированных изменений из узла плана обмена

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

    Рассмотрим подробнее структуру плана обмена:

    Объект метаданных план обмена расположен в ветке «Общие» конфигуратора.

    1с настройка плана обмена

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

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

    В таблице «Выбранные объекты» отображается текущий состав плана обмена.

    Регистрация изменений в плане обмена 1С

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

    Зарегистрировать изменения в плане обмена 1С программно в конкретном узле

    УзелОбмена = ПланыОбмена.prosto_ПланОбмена.НайтиПоКоду("001"); //ищем узел плана обмена по коду, в данном узле будут регистрироваться изменения Если ТипЗнч(Источник) = Тип("Справочник.Номенклатура") Тогда //в параметре процедуры Источник передаётся Объект который мы будем регистрировать Если УзелОбмена <> ПланыОбмена.prosto_ПланОбмена.ПустаяСсылка() Тогда //если узел обмена найден тогда регистрируем Объект ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Источник); //регистрируем объект КонецЕсли; КонецЕсли;

    Программно зарегистрировать изменения в плане обмена 1С можно в модуле объекта объекта в процедуре «ПриЗаписи», или же можно создать отдельную подписку на событие «ПриЗаписи» и регистрировать изменения в подписке(второй вариант предпочтительней т.к. в дальнейшем не будет проблем с обновлением конфигурации).

    Также зарегистрировать изменения в плане обмена 1С можно в пользовательском режиме при помощи обработки «Регистрация изменений для обмена данными».

    зарегистрировать изменения в плане обмена 1с программно

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

    Чтение зарегистрированных изменений из узла плана обмена

    После регистрации изменений мы можем выполнить чтение зарегистрированных изменений для дальнейшей выгрузки изменений в файл формата XML или передачи в другую информационную систему посредством Web-сервисов.

    УзелОбмена = ПланыОбмена.prosto_ПланОбмена.НайтиПоКоду("001"); //ищем узел плана обмена по коду, из данного узла будем считывать изменения Если УзелОбмена <> ПланыОбмена.prosto_ПланОбмена.ПустаяСсылка() Тогда //если узел обмена найден тогда считываем изменения ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml"); //получаем имя временного файла Попытка //чтение производим в блоке Попытка, в случае возникновения ошибки, она будет выведена через метод Сообщить в исключении ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); //создаём запись сообщения, это необходимо для того чтобы в дальнейшем создать выборку изменений плана обмена ХМЛЗаписьВыгрузки = Новый ЗаписьXML; //создаем XML запись ХМЛЗаписьВыгрузки.ОткрытьФайл(ИмяВременногоФайла, "windows-1251"); // пишем XML запись в файл ЗаписьСообщения.НачатьЗапись(ХМЛЗаписьВыгрузки, УзелОбмена); //начинаем запись МассивВыгружаемыхЭлементов = Новый Массив; ВыборкаПлан = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, 0, Метаданные.Справочники.Номенклатура); //создаём выборку изменений, будут выбраны измененные элементы справочника Номенклатура из узла обмена указанного выше Пока ВыборкаПлан.Следующий() Цикл //цикл по выборке ОбъектВыгрузки = ВыборкаПлан.Получить(); //получаем изменённый объект из выборки Если ТипЗнч(ОбъектВыгрузки) = Тип("СправочникОбъект.Номенклатура") И НЕ ОбъектВыгрузки.ПометкаУдаления Тогда //проверяем соответствует ли объект условиям выгрузки МассивВыгружаемыхЭлементов.Добавить(ОбъектВыгрузки); //заполняем массив элементов для выгрузки КонецЕсли; КонецЦикла; ЗаписьСообщения.ЗакончитьЗапись(); //закончим запись ХМЛЗаписьВыгрузки.Закрыть(); //закроем файл в который читали изменения Исключение Сообщить(ОписаниеОшибки()); //в случае неудачного чтения изменений вывалится ошибка с текстом КонецПопытки; УдалитьФайлы(ИмяВременногоФайла); //удалим временный файл в который читали изменения КонецЕсли;

    Конечно метод «ПланыОбмена.ВыбратьИзменения()» имеет право на существование и в некоторых случаях без него даже не обойтись, но предпочтительней использовать для чтения зарегистрированных изменений из узла плана обмена виртуальную таблицу «Изменения». Виртуальная таблица «Изменения» автоматически создаётся у каждого объекта включенного в состав плана обмена.
    Всё дело в том, что при использовании метода «ПланыОбмена.ВыбратьИзменения()» могут возникать избыточные блокировки в базе данных. Метод «ПланыОбмена.ВыбратьИзменения()» теоретически должен только считывать изменения из узла плана обмена, но на самом деле это не так. Если открыть синтаксис-помощник, то мы увидим, что в процессе выборки изменений в записи регистрации изменений проставляется номер сообщения обмена данными, в котором должны передаваться изменения. Вот когда этот номер сообщения проставляется и осуществляется запись объекта(а на время записи объект блокируется). Именно поэтому лучше использовать виртуальную таблицу «Изменения», при использовании данной таблицы избыточных блокировок не возникает. Ниже представлен запрос выборки из таблицы изменений справочника «Номенклатура»:

    УзелОбмена = ПланыОбмена.prosto_ПланОбмена.НайтиПоКоду("001"); //ищем узел плана обмена по коду, из данного узла будем считывать изменения Если УзелОбмена <> ПланыОбмена.prosto_ПланОбмена.ПустаяСсылка() Тогда //если узел обмена найден тогда считываем изменения МассивВыгружаемыхЭлементов = Новый Массив; ЗапросПланОбмена = Новый Запрос; //запросом выберем изменения справочника Номенклатура ЗапросПланОбмена.Текст = "ВЫБРАТЬ | НоменклатураИзменения.Узел, | НоменклатураИзменения.НомерСообщения, | НоменклатураИзменения.Ссылка КАК ЭлементВыгрузки |ИЗ | Справочник.Номенклатура.Изменения КАК НоменклатураИзменения |ГДЕ | НоменклатураИзменения.Узел = &УзелОбмена"; ЗапросПланОбмена.УстановитьПараметр("УзелОбмена", УзелОбмена); РезультатПланОбмена = ЗапросПланОбмена.Выполнить(); Если НЕ РезультатПланОбмена.Пустой() Тогда ВыборкаПланОбмена = РезультатПланОбмена.Выбрать(); //создаём выборку изменений, будут выбраны измененные элементы справочника Номенклатура из узла обмена указанного выше Пока ВыборкаПланОбмена.Следующий() Цикл //цикл по выборке МассивВыгружаемыхЭлементов.Добавить(ВыборкаПланОбмена.ЭлементВыгрузки); //заполняем массив элементов для выгрузки КонецЦикла; КонецЕсли; КонецЕсли;

    1с план обмена зарегистрировать изменения

    Виртуальная таблица изменений доступна в конструкторе запросов в следующем виде:

    Удаление зарегистрированных изменений из узла плана обмена

    После передачи зарегистрированных изменений в XML-файл или другую информационную систему их необходимо снять с регистрации чтобы они не считывались из узла плана обмена повторно.

    ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Элемент); //удаляем изменения, УзелОбмена - узел из которого удаляем изменения, Элемент - это объект, который снимаем с регистрации в узле

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *