1с план обмена с сайтом
В статье описан порядок действий для подключения типовых документов к механизму «Синхронизация данных через универсальный формат» (технология КД 3.0).
Термин «типовой» здесь имеет два значения:
1) документ, который входит в состав типовой конфигурации 1С 8.3
2) документ описан в одном из типовых XDTO-пакетов (важно в контексте статьи).
Например, есть две типовые конфигурации 1С 8.3: 1С:ERP Управление предприятием 2 и 1С:Бухгалтерия 3.0 (конкретные номера релизов значения не имеют). Между этими конфигурациями посредством механизма «Синхронизация данных через универсальный формат» организована передача документа «Счет-фактура полученный» в 1С 8.3 из ERP в Бухгалтерию. А нужна передача данного документа в обратную сторону, из Бухгалтерии в ERP (в типовых такой возможности нет).
1. Подключаем документ в состав плана обмена 1С 8.3 в базе 1С:Бухгалтерия
В исходной типовой базе 1С:Бухгалтерия такого вида документа в списке регистрации изменений нет:
Чтобы его туда добавить, достаточно в конфигураторе этот документ включить в состав плана обмена 1С 8.3 «СинхронизацияДанныхЧерезУниверсальныйФормат».
Если вы отключаете «Авторегистрацию» изменений документа в плане обмена, тогда данный документ необходимо дополнительно включить в состав «Источник» подписок на событие:
Можно программную регистрацию изменений документа организовать самостоятельно.
Если подключение произведено верно, то «Счет-фактура полученный» в 1С 8.3 отобразится на форме регистрации изменений.
2. Настраиваем правила обмена для документа
«ПОД» - это правило обработки данных.
Все правильно: никаких «правил» мы еще не настраивали.
«Универсальный формат» подразумевает наличие двух комплектов правил:
· Из базы-источника в универсальный формат
· Из универсального формата в базу-приемник
В нашем случае типовая конфигурация ERP уже содержит в себе правила для приемки документа «Счет-фактура полученный» в 1С 8.3 из универсального формата. Поэтому нам достаточно настроить эти правила только в конфигурации Бухгалтерия 3.0 для отправки документа (в общем случае пришлось бы настраивать правила и для приемки документа в ERP).
Настроить правила обмена через универсальный формат можно:
· вручную, внося изменения в общий модуль МенеджерОбменаЧерезУниверсальныйФормат13
· с использованием конфигурации «Конвертация данных 3.0» (КД 3) и последующим переносом результатов настройки в общий модуль МенеджерОбменаЧерезУниверсальныйФормат13
В сети есть много информации о том, как выполнить настройку правил обмена КД 3.0, поэтому останавливаться на этом не будем.
Отмечу также, что настройку правил можно производить не в общем модуле, а во внешней обработке, которая подключается к механизму синхронизации. Описаний того, как это сделать в сети так же предостаточно.
Одним из признаков успешности настройки правил является присутствие нашего документа на ветке «AvailableObjectTypes» файла обмена:
Для сравнения посмотрите на документ «СчетФактураВыданный». В типовой конфигурации 1С 8.3 Бухгалтерия 3.0 его выгрузка также изначально не предусмотрена, и ветка «Sending» для него – пустая.
Если типовой документ описан в XDTO-пакете, то для его включения в обмен через механизм «Синхронизация данных через универсальный формат» необходимо выполнить две процедуры:
1. В конфигурации-источнике подключить документ в состав плана обмена «СинхронизацияДанныхЧерезУниверсальныйФормат» и настроить механизм регистрации изменений документа в этом плане обмена.
2. Настроить правила обмена (КД 3.0):
a. либо в общем модуле «МенеджерОбменаЧерезУниверсальныйФормат» (название модуля в разных конфигурациях может различаться – нужно уточнять),
b. либо во внешней обработке, которая подключается к механизму синхронизации.
Данный способ универсален и пригоден для любых конфигураций и любых видов объектов (Документов, Справочников и т.п.).
Планы обмена используются для организации обменов данными между различными системами. Это может быть как обмен между двумя базами на платформе 1С, так и обмен между базой на 1С и какой-нибудь внешней системой, например с сайтом.
В целом план обмена похож на справочник, он обладает почти теми же самыми свойствами и методами. Поэтому в данной статье будет рассмотрена только та функциональность, которая касается обмена данными.
В пользовательском режиме создаются элементы плана обмена, которые называются узлами обмена:
Каждый узел плана обмена описывает одного участника обмена. Один узел является предопределенным и описывает текущую базу, в списке он выделяется специальной пиктограммой с точкой в правом нижнем углу (узел Основная база). Данный узел всегда присутствует в плане обмена.
Для плана обмена нельзя установить нулевую длину кода или наименования, так как узлы идентифицируются по коду (в файл обмена записывается код узла).
Состав плана обмена
При создании нового плана обмена нужно определить состав данных, которыми будут обмениваться системы. Например, в текущей конфигурации может быть 20 справочников, 10 документов, 5 регистров сведений, но в другую базу нужно выгружать только 5 справочников и 2 документа.
Для настройки состава плана обмена на закладке Основные нужно нажать на кнопку Состав:
Будет открыто окно, в котором можно флажками отметить те объекты, которыми можно будет обмениваться с помощью данного плана обмена:
В состав плана обмена можно включить следующие объекты:
- Константы
- Справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, бизнес-процессы, задачи
- Все наборы записей: регистры сведений, регистры накопления, регистры бухгалтерии, регистры расчета, перерасчеты, последовательности.
Также у данных видов объектов метаданных есть закладка Обмен данными, где можно отметить те планы обмена, в состав которых будет входить данный объект метаданных:
При сохранении конфигурации базы данных для каждого из отмеченных объектов будет создана таблица с тремя колонками:
Состав данных таблиц можно посмотреть с помощью конструктора запросов. Для этого нужно нажать на кнопку Отображать таблицы изменений:
Если для разных узлов нужно обмениваться разными данными, то нужно создать несколько планов обмена. Потому что для всех узлов одного плана обмена состав объектов одинаковый.
Служба регистрации изменений
Служба регистрации изменений позволяет получить список измененных объектов для определенного узла плана обмена. В дальнейшем данный список объектов можно выгрузить в файл.
Алгоритм работы данной службы:
Для того чтобы изменения объектов автоматически регистрировались в таблицах изменений нужно при настройке состава плана обмена разрешить автоматическую регистрацию (по умолчанию она разрешена):
Рассмотрим данный алгоритм на примере.
В базе-источнике есть 3 узла плана обмена, один из которых является текущей базой (Основная база):
В состав плана обмена включен только один справочник Номенклатура и для него разрешена автоматическая регистрация:
На данный момент таблица регистрации изменений пустая:
Создадим новую номенклатуру Стул. В результате в таблицу будет добавлено 2 новые строки, по одной для каждого узла плана обмена (кроме узла текущей базы):
Создадим еще одну номенклатуру Шкаф:
В таблицу было добавлено 2 строки для шкафа.
Создадим еще одну номенклатуру Стол:
После этого была выполнена выгрузка сразу в оба узла:
Затем у стула был изменен артикул и он был перезаписан:
Из данного примера можно сделать следующие выводы:
- Объект будет выгружаться в файл обмена до тех пор, пока из приемника не придет ответ (квитанция) о том, что данный объект был успешно загружен.
- Если после выгрузки объекта он был изменен, то после загрузки квитанции изменения не будут потеряны.
- Для каждого объекта можно узнать выгружался он или нет, но только до загрузки квитанции. После загрузки квитанции история выгрузки не сохраняется.
В данном примере был рассмотрен пример двухстороннего обмена. При этом из второй базы может выгружаться только квитанция, а может квитанция + данные.
Основной отбор регистра сведений
У регистра сведений в свойствах измерения есть флаг Основной отбор:
А если регистр сведений периодический, то на закладке Основные есть флаг Основной отбор по периоду:
По умолчанию данные флаги установлены.
С помощью них определяется минимальная гранула для регистрации на узлах плана обмена.
Если оставить как есть, то при изменении одной записи регистра сведений будет регистрироваться только она.
Если снять данный флаг у одного из измерений, то оно перестанет входить в гранулу для регистрации, в результате при изменении одной записи может зарегистрироваться сразу несколько записей.
Лучше всего объяснить на примере. Пусть есть регистр сведений со следующей структурой:
И в нем содержатся следующие данные:
Если все измерения входят в основной отбор, то при изменении оптовой цены для шкафа в таблицу регистрации попадет только одна запись, она же будет выгружена в файл обмена:
Если снять флаг Основной отбор у измерения Вид цены, то из таблицы регистрации будет удалена соответствующая колонка. В результате при изменении оптовой цены для шкафа в таблицу регистрации будет записана только номенклатура и период:
Тогда при выгрузке в файл, из регистра будут отобраны все записи, где Номенклатура = Шкаф и Период = 05.10.21, то есть сразу 2 записи: с оптовой и розничной ценой.
То же самое касается периода. Если снять флаг Основной отбор по периоду, то колонка Период будет удалена из таблицы регистрации изменений. Тогда при выгрузке в файл будут выбрана вся история изменений цены для одной номенклатуры.
Удаление объекта
При непосредственном удалении объекта из базы данных в таблицу регистрации изменений записывается объект Удаление объекта.
При выгрузке он тоже выгружается в файл обмена, затем в базе приемнике по идентификатору (для объектных данных) будет найден соответствующий объект и удален.
ЭтотУзел
Один из узлов плана обмена должен указывать на текущую базу. В списке узлов он выделяется специальной пиктограммой:
Чтобы получить текущий узел можно воспользоваться методом ЭтотУзел. Данный метод вернет ссылку на узел плана обмена:
В этой статье поговорим о планах обмена. Зачем они нужны? И если нужны, то можно ли сделать свой, не копируя типовую реализацию? Статья предназначена в основном для разработчиков, но будет полезна всем, кто интересуется подобной темой.
Также в плане обмена есть несколько стандартных реквизитов. Например, «Номер принятого» и «Номер отправленного». Эти реквизиты удобно использовать для того, чтобы принимать только актуальную информацию, которая не была ранее принята. А теперь обо всем этом подробней и с примерами. Хоть планы обмена кому-то и кажутся чем-то страшным и необъяснимым, после прочтения статьи, думаю, все станет просто и понятно.
1. Создание и регистрация, узлы плана обмена.
Приведем пример, когда нам нужно выгружать измененные номенклатуры (для ТСД, мобильного устройства, промежуточной базы или пр.).
Ищем в дереве конфигурации ветку «Общие» -- «Планы обмена». Добавляем новый план обмена.
Назовем его «ОбменНоменклатурой_Тест». Включаем в состав нужные объекты. В этом примере справочник «Номенклатура».
//Здесь налаживаем отборы
//и сам код регистрации
Узел = ПланыОбмена.ОбменНоменклатурой_Тест.НайтиПоКоду("Тест");
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Источник);
В режиме предприятия создадим новый узел плана обмена. Это, по сути, элемент плана обмена, который будет использоваться только для одного приемника. Хотя, если не требуется подтверждение о приеме данных, то с одного узла можно рассылать данные всем, но здесь мы такой вариант не рассматриваем, так как он намного проще и будет понятен по ходу статьи.
Создадим новый элемент в справочнике «Номенклатура» в 1С. Переходим снова в обработку, нажимаем кнопку «Обновить» и видим, что у нас этот объект зарегистрировался автоматически.
2. 1С Выгрузка планов обмена.
Например, создадим кнопку в списке плана обмена и назначим на нее обработчик на сервере.
Есть возможность выбирать изменения объектной моделью, вот так:
Пока ВыборкаИзменений.Следующий() Цикл
КонецЦикла;
Также есть возможность выбора изменений запросом:
В процедуре на сервере давайте откроем конструктор запроса с обработкой результата и посмотрим, как выбрать изменения. В конструкторе есть кнопка «Отображать таблицы изменений». После нажатия на эту кнопку мы увидим таблицы, в которых хранятся наши изменения.
Накладывая отбор на узел, мы можем получить изменения только по определенному приемнику, а в ссылке хранится объект, то есть ссылка на номенклатуру. Но при выборе запросом, выгруженные изменения придется помечать вручную.
В итоге процедура будет выглядеть так:
После того как мы воспользуемся кнопкой в обработке регистрации изменений для обмена данными, мы увидим, что данные помечены, как выгруженные. И в колонке «Номер отправленного» мы видим номер пакета, в котором была произведена 1С выгрузка объекта.
3. Порядок снятия с регистрации.
После этого, регистрация изменений будет снята.
Если приемник не получил данные, то при следующей выборке все данные, для которых не снята регистрация будут выгружены повторно.
В общем, повторюсь, план обмена помогает организовать обмен данными со сторонними системами. И в этой статье мы разобрали, как на самом деле просто с ним работать.
В первую очередь приведенная ниже информация потребуется программистам 1С, когда перед ними встанет задача доработать типовой обмен между конфигурациями, который настроен через синхронизацию данных, т.е. по плану обмена.
Что же такое «План обмена»? План обмена в 1С – это объект, который входит в состав метаданных конфигурации и служит для синхронизации данных между информационными базами. В каждом плане есть определенный список элементов, информацию об изменении которых он может хранить. Этот список называется «Состав плана обмена». Состав можно расширять, но при этом поддержка конфигурации снимается. В «Макете плана» хранятся те самые правила, на основе которых работает синхронизация. Вот именно этот пакет конвертации (ПравилаРегистрации, ПравилаОбмена, ПравилаОбменаКорреспондента) нам и необходим для дальнейшего изучения.
Рассмотрим пример синхронизации данных между конфигурациями «1С:Зарплата и управление персоналом 3» (ЗУП) и «1С:Бухгалтерия предприятия 3» (БП). Отметим сразу, в данной задаче нам придется снять конфигурацию с поддержки. Данное потребуется по условию.
Живой пример потребности в доработке типовых правил обмена
Например, заказчик обратился к нам с такой проблемой: при синхронизации между ЗУП и БП нет возможности передать данные справочника «Регистрации в налоговом органе», которые необходимы для заполнения документа «Отражение зарплаты в бухучете». Сейчас табличная часть этого документа на стороне приемника БП содержит пустую «Регистрацию…» и пользователям приходится вручную создавать такие записи в справочнике. Согласитесь, это неудобно. Можем доработать этот момент.
Решение проблемы: доработаем пакет конвертации из плана обмена ОбменЗарплата3Бухгалтерия3. Добавим в типовые «Правила обмена 1С» новое «Правило конвертации объектов» (ПКО) для справочника «Регистрации в налоговом органе» и соответственно «Конвертацию свойств» этого справочника (ПКС). Обязательно доработаем типовые «Правила регистрации объектов», т.к. возникла необходимость зарегистрировать изменения справочника на узле обмена. И пересмотрим «Правила обмена 1С» базы корреспондента.
Где все это будем редактировать? для написания и изменения правил нам потребуется конфигурация «1С:Конвертация данных 2».
Доработка типовых правил конвертации из Плана обмена ЗУП – БП
Итак, доработку правил обмена 1С начнем с того, что в конфигураторе для плана обмена ОбменЗарплата3Бухгалтерия3 в состав добавим новый элемент – справочник РегистрацииВНалоговомОргане. Данное изменение сделаем в обоих конфигурациях «1С:Зарплата и управление предприятием 3» и «1С:Бухгалтерия предприятия 3».
Сохраним и обновим конфигурации.
В режиме предприятия для каждой базы выгрузим описание структуры метаданных с помощью обработки MD83Exp.epf для платформы «1С:Предприятие 8.3». Обработку можно найти в комплекте «1С:Конвертация данных».
На следующем этапе выгрузим пакет конвертации из ЗУП и БП. Пакет должен состоять из 3 файлов: ПравилаРегистрации, ПравилаОбмена, ПравилаОбменаКорреспондента.
В рамках данной статьи не будет описания как настраивается синхронизация данных, это можно прочитать на сайте компании «Кодерлайн» в разделе «Статьи экспертов» либо посмотреть записи вебинаров. Сейчас в базах уже настроена данная опция. Поэтому переходим в настройку синхронизации (Администрирование –> Синхронизация данных –> Настройка синхронизации данных), нажимаем кнопку «Загрузить правила». Перед нами откроется форма «Правил для синхронизации». По кнопке «Еще» выберем пункт «Сохранить правила в файл».
Вот такой пакет после выгрузки должен у нас получиться.
Аналогичные действия выполним и для другой информационной базы «1С:Бухгалтерия предприятия».
В итоге все подготовительные работы для редактирования правил готовы. У нас есть:
- описание структуры метаданных для загрузки в «1С:Конвертация данных 2» (для ЗУП и БП);
- пакет конвертации, который содержит правила обмена 1С и правила регистрации, необходимые для загрузки в «1С:Конвертация данных 2» (для ЗУП и БП).
Переходим в «1С:Конвертация данных 2» . Выполним следующие действия по порядку для обоих информационных баз:
- загружаем структуры метаданных наших конфигураций;
- создаем конвертации и загружаем правила обмена данными 1С из пакетов конвертации (файл правил называется ExchangeRules);
- создаем регистрации и загружаем правила регистрации из пакетов конвертации (файл правил называется RegistrationRules).
Переходим непосредственно к нашей доработке. В правила обмена 1С добавляем новое правило конвертации объектов (ПКО) – справочник «Регистрации в налоговом органе». Добавляем правило конвертации свойств (ПКС) для этого справочника и правило выгрузки данных (ПВД). Такого рода доработку необходимо выполнить как для правил из пакета ЗУП, так и для правил обмена из пакета БП. Выгружаем наши правила обмена в соответствующие файлы ExchangeRules.
Переходим к правилам регистрации нового элемента. Добавляем справочник «Регистрации в налоговом органе». Выгружаем правила регистрации в соответствующий файл из пакета RegistrationRules. Это действие также выполняем для обоих баз.
Доработанные правила обмена и правила регистрации готовы. Теперь в правила корреспондента (CorrespondentExchangeRules) из пакета ЗУП копируем содержимое правил обмена (ExchangeRules) из пакета БП. В правила корреспондента (CorrespondentExchangeRules) из пакета БП копируем содержимое правил обмена (ExchangeRules) из пакета ЗУП.
В итоге должно получиться следующее:
На этом работа в «1С:Конвертация данных 2» завершена. Доработанные пакеты правил конвертации готовы, осталось загрузить их обратно в информационные базы и проверить синхронизацию.
Архивируем файлы из пакетов в Архив ZIP и загружаем в ЗУП и БП свои пакеты конвертации.
Все готово. Осталось протестировать.
Вспомним условия задачи. Необходимо было зарегистрировать к выгрузке справочник «Регистрации в налоговом органе» и проверить, как заполняется ТЧ документа «Отражение зарплаты в бухучете» на стороне «1С:Бухгалтерия предприятия 3».
В источнике «1С:Зарплата и управление предприятием 3» регистрируем к выгрузке наш справочник. Выполняем синхронизацию. Переходим в базу приемник и тоже выполняем синхронизацию для получения данных. Обратим внимание, что теперь в плане обмена появился нужный справочник для регистрации изменений.
Проверяем на стороне «1С:Бухгалтерия предприятия 3»:
Подведем итог. Результат поставленной задачи выполнен успешно. Мы доработали план обмена ЗУП – БП, добавив новый элемент для регистрации изменений и дописали правила конвертации для синхронизации данных.
Надеюсь, данная статья поможет Вам в решении подобных задач. Но если Вы все же столкнетесь с проблемами, наша команда готова Вам помочь в решении любых вопросов в области 1С.
Читайте также: