Обмен данными между конфигурациями 1с 8.3. Внешний вид и особенности использования универсального обмена данными. Загрузка справочника из XML

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

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

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

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

Есть дописанная БД 1С Управление Торговлей (далее УТ) редакции 10.2 на платформе 8.1.
И есть стандартная БД 1С Бухгалтерия на платформе 8.3.

Задача:

Наладить обмен данными между базами.

Решение:

Установил 1С Конвертация данных, редакция 2.1.
Загрузил.
Запускаю "Стартовый помощник" (рис.1).

1. Далее.
2. Выбираю "Создать новые правила обмена данными (с нуля)". Далее.
3. На третьем шаге программа просит указать конфигурации источника и приемника.
Создаю конфигурацию источника (1С УТ):
- так как у меня 1С УТ на платформе 8.1, то с диска ИТС беру внешнюю обработку MD81Exp.epf (ее можно скачать) .
- открываю 1С УТ. Файл --> Открыть --> MD81Exp.epf .

Указываю файл, в который будет выгружаться информация о структуре метаданных. Он должен быть в формате XML.

Нажимаю кнопку "Выгрузить".

Аналогично проделываю все тоже самое с базой приемником. С 1С Бухгалтерией 8.3. Только для нее беру внешнюю обработку MD83Exp.epf (ее можно скачать) .

Перехожу обратно в 1С Конвертация данных.

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

4. На четвертом шаге выбираю пункт "Автоматически создать все возможные правила обмена данными".

Теперь перед нами открылось новое окно. Созданы правила конвертации объектов. Нужно создать правила выгрузки данных. Для этого перехожу на вторую вкладку "Правила выгрузки данных" и нажимаю кнопку "Создать правила выгрузки".

Что необходимо для автоматического обмена данными, без внесения изменений в конфигурацию:
1) Обработка "Универсальный обмен данными в формате XML" , которая входит в состав большинства типовых конфигураций. Если её там не оказалось, то её легко найти на диске ИТС или на просторах интернета. В конфигурации она обзывается "УниверсальныйОбменДаннымиXML"
2) Правила обмена данными. Создаются с помощью "Конвертации данных". Работу с которой вам придётся освоить. Есть и видеокурсы и учебные пособия. Например: http://programmist1s.ru/wp-content/uploads/2013/06/Konvertatsiya_dannyih._Metodika_rabotyi_i_primeryi.pdf
3) Внешняя обработка , содержащая процедуры загрузки/выгрузки. Займемся её созданием:
Создаётся внешняя обработка в модуле объекта которой будет нижеприведённый текст (подставляете свои данные по базам и пользователям). Желательно создать отдельного пользователя с полными правами для обмена данными. Назовём обработку, к примеру, "ОбменДанными.epf".

Если ПараметрЗапуска = "Выгрузка" Тогда Обработка=Обработки.УниверсальныйОбменДаннымиXML.Создать(); //Задаём необходимые для выгрузки параметры (необязательные для редактирования) Обработка.РежимОбмена="Выгрузка"; Обработка.ЗагружатьДанныеВРежимеОбмена=Истина; Обработка.ЗаписыватьРегистрыНаборамиЗаписей=Истина; Обработка.ЗапоминатьЗагруженныеОбъекты=Истина; Обработка.ИспользоватьОтборПоДатеДляВсехОбъектов=Истина; Обработка.ВыгружатьТолькоРазрешенные=Истина; //!Задали необходимые параметры для выгрузки //Данные параметры необходимо перезаполнить ОБЯЗАТЕЛЬНО //Устанавливаем ограничения на выгрузку по датам объектов Обработка.ДатаНачала = ТекущаяДата() - 60*60*24*2; Обработка.ДатаОкончания = "00010101"; //Если хотим выгружать данные в файл - ставим Ложь, Если Истина - будет произведена выгрузка в базу-приёмник Обработка.НепосредственноеЧтениеВИБПриемнике=Истина; //Если база-приёмник выгружаемых данных является серверной, то Ложь. Если файловая - Истина Обработка.ТипИнформационнойБазыДляПодключения=Истина; //!Обязательные параметры перезаполнили //Если выгружаем данные в файл Если Не Обработка.НепосредственноеЧтениеВИБПриемнике Тогда Обработка.ИмяФайлаОбмена = "C:\Inbox\ОлегА\Конвертация\выгрузка.xml"; //Если выгружаем даннные в базу Иначе Обработка.ПарольИнформационнойБазыДляПодключения="Админ"; Обработка.ПользовательИнформационнойБазыДляПодключения="суперкрутой"; Обработка.АутентификацияWindowsИнформационнойБазыДляПодключения=Ложь; //Если приёмник данных - серверная база Если Обработка.ТипИнформационнойБазыДляПодключения = Ложь Тогда Обработка.ИмяСервераИнформационнойБазыДляПодключения="MainServ"; Обработка.ИмяИнформационнойБазыНаСервереДляПодключения="Buhia"; //Если приёмник данных - файловая база Иначе Обработка.ВерсияПлатформыИнформационнойБазыДляПодключения="V82"; Обработка.КаталогИнформационнойБазыДляПодключения ="C:\Inbox\ОлегА\Клиенты\Зевс БП20\Зевс БП20"; КонецЕсли; КонецЕсли; //Действия над регистрацией при выгрузке по планам обмена Обработка.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки=0; // 0 - не снимать регистрацию, // 1 - снимать регистрацию Обработка.ЗагрузитьПравилаОбмена(); //ЕСЛИ НУЖНО ВЫГРУЖАТЬ ПО ПЛАНАМ ОБМЕНА, ТО ВКЛЮЧАЕМ ЭТОТ БЛОК И ПОДСТАВЛЯЕМ СВОЙ УЗЕЛ ПЛАНА ОБМЕНА //Для Каждого Стр Из Обработка.ТаблицаПравилВыгрузки.Строки Цикл // Стр.Включить=1; // Для Каждого Стр1 Из Стр.Строки Цикл // Стр1.Включить=1; // Стр1.СсылкаНаУзелОбмена=ПланыОбмена.Полный.НайтиПоКоду("БП20"); // КонецЦикла; //КонецЦикла; Обработка.ВыполнитьВыгрузку(); ЗавершитьРаботуСистемы(Ложь); ИначеЕсли ПараметрЗапуска = "Загрузка" Тогда ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать(); ОбработкаОбмена.ИмяФайлаОбмена = "C:\Inbox\ОлегА\Выгрузка.xml"; ОбработкаОбмена.РежимОбмена = "Загрузка"; ОбработкаОбмена.ОткрытьФайлЗагрузки(Истина); ОбработкаОбмена.АрхивироватьФайл = Ложь; ОбработкаОбмена.ВыполнитьЗагрузку(); ОбработкаОбмена = Неопределено; ЗавершитьРаботуСистемы(Ложь); КонецЕсли;

4) Bat файл выгрузки , который будет запускать 1с и внешнюю обработку с параметром запуска под пользователем, который предназначен для обмен данными. Файл необходимо создать к примеру в notepad++ с кодировкой OEM(MS-Dos), иначе работать не будет. Файл назовём, например "BatVygruz.bat". Текст будет следующим:

Если база файловая:
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /F"C:\Inbox\КБФ\1Cv8_Base_8.1\Зевс 83 БП3\Зевс 83 БП3" /N"РоботОбменаДанными" /P"pass" /DisableStartupMessages /RunModeManagedApplication /Execute"C:\Inbox\ОлегА\ОбменДанными.epf" /C"Выгрузка"
Пояснения:

б) C:\Inbox\КБФ\1Cv8_Base_8.1\Зевс 83 БП3\Зевс 83 БП3 - ваш путь к файловой базе, из которой будем выгружать данные
в) РоботОбменаДанными - Имя пользователя, под которым запускам 1С для обмена данными
г) pass - пароль пользователя
д) /DisableStartupMessages - закрываем всплывающие окна при старте 1С
е) /RunModeOrdinaryApplication - запуск в обычном режиме толстый клиент
ж) C:\Inbox\ОлегА\ОбменДанными.epf - путь к нашей обработке, которая запустится при старте
з) Выгрузка - передаём параметр запуска 1С, сообщает, что надо выгружать данные

Если база серверная:
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /S"Server1C/DataBase" /N"РоботОбменаДанными" /P"pass" /DisableStartupMessages /RunModeManagedApplication /Execute"C:\Inbox\ОлегА\ОбменДанными.epf" /C"Выгрузка"
Пояснения:
а) C:\Program Files (x86)\1cv82\common\1cestart.exe - ваш путь к стартеру 1С
б) Server1C/DataBase - ваш сервер на котором находится база и имя самой базы из которой выгружаем данные.
Остальные параметры аналогичны файловому варианту bat файла

5) Bat файл загрузки (при необходимости). Если вы решили выгружать данные в файл, а не напрямую в базу. То этот пункт нам тоже понадобится (обычно необходим).
Создание Bat файла загрузки аналогично файлу выгрузки, но отличается лишь параметр запуска, вместо "Выгрузка", мы ставим "Загрузка"

6) Задать расписание запуска наших Bat файлов загрузки/выгрузки на сервере. Для этого надо зайти в администрирование панели управления на сервере и в планировщике заданий создать новое задание запуска файла выгрузки на 23 часа каждый день и задание на загрузку с указанием Bat файла загрузки(если надо) на 04 часа к примеру.

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

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

Для связи нескольких баз существует Обмен 1С. Как он работает?

Что такое Обмен 1С?

Есть сеть магазинов и центральный офис. В каждом магазине и в офисе есть склад. Товары перемещаются со склада на склад (в основном с центрального на склады магазинов), и в магазинах — продаются.

Используется база 1С Розница в офисе и эта же база в каждом магазине. Базы в магазинах – подчинены базе в офисе.

В офисе создают документы о перемещении товаров со склада на склад, назначаются цены. Документы заливаются в подчиненные базы и там «появляются» товары.

В магазинах создаются документы о совершенных продажа товаров. Документы заливаются в офисную базу и там «появляются» продажи.

Такая схема называется – распределенная информационная база (РИБ). Процедуры «заливки» документов – двусторонний обмен 1С. А настройка этой схемы – УРИБ или УРИБД (управление распределенными информационными базами данных).

Принципы Обмена справочниками в 1С

Справочники 1С (а набор всех справочников «в комплексе» называют НСИ – нормативно справочная информация) – в разных базах обычно должны быть едины. Это значит, что даже если баз несколько, то список товаров, складов, контрагентов – един в разных базах.

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

В ином случае, когда соединяются несколько изначально существующих баз, или когда справочники можно создавать в разных базах одновременно, их GUID будут разными. Для этого существует механизм сопоставления. В специальный регистр сведений при обмене 1С записывается информация, что элемент из базы №1 с GUID ххх равен элементу в этой базе с GUID yyy. Первоначально имеющиеся элементы, которые уже не равны, нужно сопоставить автоматически (по другим реквизитам, например по наименованию или по ИНН и КПП) или вручную.

Принципы Обмена документами в 1С

Документы в 1С проводятся по регистрам и после этого считаются «проведенными». Это рождает понятные сложности при переносе.

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

Другой вариант – перенос документов и регистров вместе. Как мы понимаем, сразу же появляется вопрос – или мы переносим все документы вообще и тогда весь регистр вообще или вынуждены выбирать для переноса только движения по переносимым документам.

Допустим, нам нужно перенести элемент справочника Номенклатура. У этого справочника есть 10 полей, из которых 5 являются строками и числами, а 5 – ссылками на другие справочники.

Соответственно при переносе одного элемента Номенклатуры мы вынуждены искать и переносить также 5 элементов других справочников.

Таким образом при переносе одного элемента справочника или одного документа, по ссылке может быть перенесено 100 и больше других объектов 1С.

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

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

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

Что делать? Провести снова полный обмен 1С? Долго и неэффективно! Гораздо лучше было бы вычислить что именно было добавлено или изменено пользователями в офис, чтобы в магазины попали только изменения.

Для этого существует – планы обмена 1С. Программист заранее создает план обмена 1С для проведения обменов 1С с какой-либо другой базой данных, например с нашими магазинами.

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

Создание УРИБ 1С

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

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

  • Обмен 1С с сайтом: обмен с сайтом 1С:Битрикс
  • Обмен 1С УПП-УТ или УТ-Розница: типовые обмены с конфигурациями-побратимами
  • Полный – обмен 1С с базой данных на базе такой же конфигурации.

РИБ – распределенная информационная база – можно сделать в том числе на базе плана обмена 1С «Полный». В конфигураторе в этом плане обмена 1С должна стоять галочка «Распределенная информационная база».

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

Зайдем в план обмена 1С (Операции/План обмена; также могут быть в другом меню, часто в меню Сервис/ХХХ).

В списке баз данных в плане обмена 1С есть одна с зеленым кружочком на картинке. Этот элемент обозначает ЭТУ БАЗУ. Остальные элементы обозначают ДРУГИЕ базы, с которыми идет обмен 1С.

Необходимо, чтобы было заполнено и наименование и код у всех элементов.

Чтобы создать подчиненную базу «магазина»:

  • Установите кусор в списке на элемент плана обмена 1С, который мы создали как «базу магазина»
  • Выберите пункт меню «Действия/Создать начальный образ».

В результате будет создана одна база, с выгруженными в нее начальными данными. Это нужно повторить для каждого элемента плана обмена 1С, кроме ТЕКУЩЕЙ БАЗЫ.

Теория проведения обменов 1С

Теория обмена 1С достаточно проста:

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

Существуют другие методы обмена 1С, не через файлы, а например, через прямое COM-соединение между двумя базами. Его плюсы:

  • Не требуется «место для хранения и передачи файлов»
  • Не требуется повторной загрузки подтверждения
  • Все происходит быстрее за счет первых двух пунктов.

Однако ограничение понятно – базы должны быть в такой доступности друг к другу, чтобы суметь инициировать COM соединение.

Настройка РИБ 1С

В константах типовых конфигураций (Операции/Константы; или Сервис/Настройки программы) — обычно есть общая настройка обменов 1С. Это – префикс в кодах элементов и номерах документов, чтобы легко определять в какой базе он создан. А также внутренний метод сохранения информации о месте создания справочников и документов.

Теперь необходимо настроить как будет происходить сам процесс периодического обмена 1С информацией между созданными базами.
Все настройки РИБ в 1С находятся в типовых конфигурациях обычно в меню Сервис/Распределенные информационные базы/Настроить узлы РИБ.

Для каждого ранее созданного элемента «удаленной базы магазина» необходимо добавить элемент настройки.

В настройке указывается способ обмена 1С: файл (шара), файл (FTP), файл (e-mail).

Создание и настройка распределенной информационная базы 1С в тонком клиенте

Посмотрим аналогичную настройку в типовой конфигурации на базе тонкого клиента – Управление торговлей редакция 11.
Настройки (и создание с нуля) находятся на закладке интерфейса Администрирование. Пункт «Обмен данными».

Выберем «Создать обмен в распределенной информационной базе».

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

Вот вариант настройки через файл на FTP.

Название нашей настройки обмена 1С.

И сразу же предложение создать «начальный образ» — то есть саму подчиненную базы данных с выгрузкой в нее первичной информации.

В отличии от конфигурации на толстом клиенте обе настройки обмена 1С находятся в одном месте.