Організація обміну з базою філії (роздрібного магазину) у мережі через XML (універсальний обмін). Обмін за розкладом типовими засобами Повний обмін в 1 8

Якщо у Вашій організації працює більше 5 осіб, то, швидше за все, Ви користуєтеся продукцією фірми «1С». Майже завжди в організаціях встановлюються кілька баз 1С, адже кожна з них вирішує певний спектр завдань. Наприклад, компанія займається роздрібними продажами та веде бухгалтерію, у такій ситуації клієнт зазвичай встановлює УТ (Управління торгівлею) та БП (Бухгалтерія підприємства). У ролі такої компанії може виступати навіть просте ІП з кількома працівниками!

Навіщо мені налаштовувати обмін даними?

Давайте продовжимо розглядати ситуацію з УТ та БП. Уявімо, що зараз у нас обмін не налаштований, які дії нам необхідно виконати, щоб відобразити операції з обліку в обох базах? Правильно, спочатку ми заповнимо дані в УТ, а потім ті самі дані нам доведеться заносити і в БП, адже ми не можемо наприклад занести прихід товарів в УТ, а в БП цього не зробити.

Навіть якщо Ви вирішили використовувати типовий обмін даними (налаштування типового обміну даними (синхронізації 1С)), це ще не означає, що його можна настроїти у Вас у базі. Проблеми виникають у тому випадку, якщо Ви, наприклад, давно не оновлювали базу (для підтримки типового обміну Ваші бази повинні бути актуальними) або об'єкти, які Ви збираєтеся перевантажувати з однієї бази в іншу, є доопрацьованими (у цьому випадку типовий обмін не буде працювати коректно), крім лише якщо версії платформи баз різняться (7.7 – 8.3), то обмін даними швидше за все також доведеться допрацьовувати чи розробляти з нуля.

Кому необхідно скористатися обміном даними між базами 1С?

Якщо твердження, наведені нижче для Вас, є актуальними, тоді Вам необхідно провести налаштування обміну між Вашими конфігураціями:

  • У вас більше 1 однієї бази 1С
  • Потрібне швидке перенесення інформації з однієї бази в іншу і навпаки
  • Потрібен автообмін або обмін в реальному часі

Розробка та налаштування обміну даними між конфігураціями 1С

Правильно розроблений обмін даними дозволить Вам:

  • Проводити вивантаження та завантаження об'єктів з однієї бази до іншої
  • Виконувати обмін між різними версіями 1С
  • Обмінюватися даними в реальному часі
  • Значно скоротити витрати на зарплату працівникам, адже тепер у них більше вільного часу.
  • Заощадити Ваш час та бюджет

Розробка правил обміну даними на прикладі доопрацьованих баз УТ та БП

У нас є дві бази, в яких документ «Надходження товарів та послуг» є доопрацьованим, зокрема в документах та табличних частинах додано нові реквізити, деякі типові реквізити видалено, внаслідок чого стандартний обмін даними не працює. Ми розробили нове правило обміну та записали його у файл.


Ключові слова: розподілена, УРБД, XML, реєстрація, вузол, вузла, автореєстрація, початковий, образ, POP3, SMTP, Поштове Повідомлення, периферійна, центральна, реплікація, обмін

Дисклеймер та умови використання

Усі випадково згадані у статті торгові маркиналежать своїм власникам.
Стаття опублікована під ліцензією Creative Commons Attribution-Share Alike 3.0 Unported License.
http://creativecommons.org/licenses/by-sa/3.0/

Відразу зауважу, що все нижченаведене відноситься до релізу платформи 8.0.7.36 і вище.

Крок 1. Створення плану обміну

Створюємо у конфігурації план обміну. Називаємо його, наприклад "Розподілена База". Обов'язково в
властивості плану обміну ставимо прапорець "Розподілена інформаційна база".

На закладці "Інше" по кнопці "Склад" визначаємо, які об'єкти включатимуться в обмін. за
замовчуванням можна ввімкнути всі об'єкти ("Дії"-"Увімкнути всі"). Важливим моментомє параметр
"Автореєстрація". Загалом її потрібно дозволити всім об'єктів.

Примітка: при додаванні нових об'єктів у конфігурацію вони не включаються до плану обміну. Тобто. після
додавання об'єкта його потрібно додати до складу плану обміну.

Якщо Ви хочете, щоб деякі об'єкти не брали участь в обміні, виключаєте їх зі складу
план обміну. Але тоді контроль цілісності залишається цілком на вашому совісті. Якщо, до
Наприклад, якийсь документ не включений до плану обміну, а регістр, за яким він робить рухи включений,
то в базі-приймачі цілком реально отримати рухи по регістру без документа-реєстратора, що
погодьтеся, немає добре.

У принципі цих дій достатньо, щоб РБД запрацювала в "ручному" режимі. Для цього запускаємо
Підприємство відкриваємо наш план обміну через меню "Операції". У плані обміну завжди є
зумовлений вузол "з точкою". Це опис поточного вузла. Його потрібно відкрити та заповнити. В нашому
у разі будуть доступні поля "Код" та "Найменування". Надамо нашому вузлу код "AA" і назвемо
"Центральна". Додамо до плану обміну один вузол. Надамо йому код "ВВ" і назвемо "Периферійна".

Тепер ми можемо створити образ периферійної бази. Робиться це натисканням кнопки Створити початковий
образ". У списку вузлів має бути обрана периферійна база. Образ бази створюється у вигляді готової ІБ
у каталозі або на сервері 1С:Підприємства. (на відміну від 7.7, де образ ІБ створювався як файл
вивантаження). Далі створену базу можна перенести в потрібне місце, просто скопіювавши файл 1CV8.1CD
(Для файлового варіанту), або через Конфігуратор через розвантаження-завантаження даних.

Якщо відкриєте план обміну в периферійної ІБ, то побачите, що вузлом " з точкою " , тобто. поточним
вузлом став вузол " Периферійна " , а іконка біля вузла " Центральна " стала червоного кольору, тобто. вузол
"Центральна" є головним вузлом по відношенню до поточного.

Обмін у "ручному" режимі можна здійснювати за допомогою кнопок "Записати зміни" та "Прочитати
зміни". У першому випадку буде запропоновано вибрати файл, куди зміни будуть записані, у другому
- файл, звідки зміни будуть прочитані. Обмін ведеться у форматі xml. Зміни записуються для
вибраного вузла.

Крок 2. Вивантаження змін до XML-файлу та надсилання електронною поштою

Отже, ми створили план обміну, створили периферійну ІБ і навіть навчилися переносити дані між
базами. Тепер наше завдання навчити бази обмінюватися електронній пошті.

Додаємо в план обміну два реквізити: Електронна адреса типу "рядок" і "виконувати обмін" типу
"Булево". У реквізиті Електронна Адреса будемо зберігати email вузла, тобто. та адреса, на яку будемо
надсилати повідомлення обміну. Реквізит Виконувати Обмін потрібен, щоб швидко вимкнути автоматичну
надсилання-відправлення повідомлень.

Процедуру роботи з електронною поштою зробимо універсальною, тобто. зробимо можливим
використання як MAPI (надсилання-отримання через поштового клієнта, наприклад, MS Outlook), так і
пряме звернення до SMTP/POP3 серверів.

Додамо до конфігурації кілька констант:

десь у загальній формі забезпечуємо редагування значень цих констант.

Додамо загальний модуль, назвемо його "РБРозподілена База". У ньому пишемо:

Процедура рбНадіслатиПовідомленняОбміну() Експорт ВикористатиSMTP = Константи.ВикористовуватиОбмінПоSMTP.Отримати(); //Спочатку створюємо об'єкт Пошта, який в залежності від налаштувань буде типу ІнтернетПошта, //якщо використовується пряме звернення до серверів, або якщо використовується MAPI.Якщо ВикористовуватиSMTP Тоді //Для об'єкта типу ІнтернетПошта створюємо та заповнюємо поштовий профіль.Поштовий Профіль = Новий Інтернет Поштовий Профіль; Поштовий Профіль.АдресаСервераSMTP = Константи.АдресаСервераSMTPОбмін.Отримати(); Поштовий Профіль.ПортSMTP = Константи.ПортСервераSMTPОбмін.Отримати(); ПоштовийПрофіль.КористувачSMTP = Константи.КористувачСервераSMTPОбмін.Отримати(); Поштовий Профіль.ПарольSMTP = Константи.ПарольКористувачаSMTPОбмін.Отримати(); Поштовий Профіль. Час очікування = Константи. Час очікування Сервера. Пошта = Новий ІнтернетПошта(); Спроба Пошта.Підключитися(Поштовий Профіль); Виняток Повідомити(" ОБМІН: Помилка під час підключення до поштового профілю! Обмін не виконано!" + ОписПомилки(), СтатусПовідомлення.ДужеВажливе); Повернення; КінецьСпроби; Інакше Пошта = Новий Пошта(); Спроба Пошта.Підключитися(); Виняток Повідомити("" + ОписПомилки(), СтатусПовідомлення.ДужеВажливе); Повернення; КінецьСпроби; КінецьЯкщо; //Далі вибираємо всі вузли з плану обміну, крім поточного, / / У яких встановлено реквізит Виконувати Обмін.ВибіркаВузлів = ПланиОбміну.РозподіленаБаза.Вибрати(); Поки Вибір Вузлів.Наступний() Цикл Якщо Не Вибір Вузлів.Виконувати Обмін Тоді Продовжити; КінецьЯкщо; Якщо ВибіркаВузлів.Посилання = ПланиОбміну.РозподіленаБаза. КінецьЯкщо; ЕлектроннийАдреса = СокрЛП(ВибіркаВузлів.ЕлектроннийАдреса); Якщо ЕлектроннаАдреса = "" Тоді Продовжити; КінецьЯкщо; //За допомогою об'єктів ЗаписXML і Запис Повідомлення виконуємо запис змін //для обраного вузла xml-файл.Вузол = ВибіркаВузлів.Посилання; ЗаписXML = Новий ЗаписXML(); Ім'яФайлаПовідомлення = Каталог ТимчасовихФайлів() + "Message_ " + СокрЛП(ПланиОбміну.РозподіленаБаза.ЦейВузол().Код) + "_ " + СокрЛП(Вузел.Код) + ".xml "; ЗаписXML.ВідкритиФайл(Ім'яФайлаПовідомлення); Запис Повідомлення = Плани Обміну.Створити Запис Повідомлення (); Запис Повідомлення. Почати Запис (Запис XML, Вузол); Плани Обміну. ​​Записати Зміни (Запис Повідомлення); Запис Повідомлення.Закінчити Запис (); ЗаписXML.Закрити(); // Потім створюємо новий лист, прикріплюємо до нього отриманий xml-файл і // Відправляємо за адресою, вказаною в реквізиті Електронна адреса вузла.Файл = Новий Файл (Ім'яФайла Повідомлення); ТемаПовідомлення = "1С: Обмін" + СокрЛП (Плани Обміну. Якщо Використовувати SMTP Тоді Поштове Повідомлення = Новий Інтернет Поштове Повідомлення; Поштове Повідомлення. Тема = Тема Повідомлення; Поштове Повідомлення.Вкладення.Додати(Ім'яФайлаПовідомлення, Файл.Ім'я); Поштове Повідомлення.Отримувачі.Додати(ЕлектроннаАдреса); Пошта. Надіслати (Поштове Повідомлення); Інакше Поштове Повідомлення = Новий Поштове Повідомлення; Поштове Повідомлення. Тема = Тема Повідомлення; Поштове Повідомлення.Вкладення.Додати(Ім'яФайлаПовідомлення); Поштове Повідомлення.Отримувачі.Додати(ЕлектроннаАдреса); Пошта.Послать(Поштове Повідомлення, Брехня); КінецьЯкщо; Якщо Константи.ВиводитиПовідомленняОбміну.Отримати() Тоді Повідомити(" ОБМІН: Повідомлення обміну для вузла"+ Вузол. Найменування +" надіслано! ", СтатусПовідомлення.Інформація); КінецьЯкщо; ВидалитиФайли(Ім'яФайлаПовідомлення);

Рекомендую додати в інтерфейс додаткову панель, на одну з кнопок якої повісити виклик цієї
процедури. Тепер залишилося запустити Підприємство, налаштувати електронна адресапериферійної ІБ,
поставити галку "Виконувати обмін", натиснути на кнопку процедури на панелі та бігти отримувати пошту для
вказаного ел. адреси. Повинно прийти лист із темою "1С:Обмін AA_BB" та вкладеним файлом
"Message_AA_BB.xml".

Отже, половина справи зроблена: ми навчили "вісімку" надсилати повідомлення обміну РБД електронною поштою
поштою.

Крок 3. Отримання оновлень електронною поштою та запис їх в ІБ

Тепер займемося зворотною процедурою: отримання оновлень електронною поштою та запис їх в ІБ.

У параметри сеансу додамо параметр "Іде Обмін Розподіленої Бази" типу Бульово. Нижче я поясню його
призначення.

Додамо в загальний модуль РБРозподіленаБаза таку процедуру:

Процедура рбОтриматиПовідомленняОбміну() Експорт ВикористатиSMTP = Константи.ВикористовуватиОбмінПоSMTP.Отримати(); / / Так само, як у процедурі роботи Відправити Повідомлення Обміну (), спочатку створюємо об'єктПошта Якщо Використовувати SMTP Тоді Поштовий Профіль = Новий Інтернет Поштовий Профіль; Поштовий Профіль.АдресаСервераPOP3 = Константи.АдресаСервераPOP3Обмін.Отримати(); Поштовий Профіль.ПортPOP3 = Константи.ПортСервераPOP3Обмін.Отримати(); Поштовий Профіль.Користувач = Константи.КористувачСервераPOP3Обміну.Отримати(); Поштовий Профіль.Пароль = Константи.ПарольКористувачаPOP3Обмін.Отримати(); Поштовий Профіль. Час очікування = Константи. Час очікування Сервера. Пошта = Новий ІнтернетПошта(); Спроба Пошта.Підключитися(Поштовий Профіль); Виняток Повідомити(" ОБМІН: Помилка під час підключення до поштового профілю! |Обмін не виконано!", СтатусПовідомлення.ДужеВажливе); Повернення; КінецьСпроби; Інакше Пошта = Нова Пошта(); Спроба Пошта.Підключитися(); Виняток Повідомити(" ОБМІН: Помилка під час підключення до поштового профілю користувача! |Обмін не виконано!", СтатусПовідомлення.ДужеВажливе); Повернення; КінецьСпроби; КінецьЯкщо; МасивПовідомлень = Новий Масив; Якщо ВикористовуватиSMTP Тоді ВсіПовідомлення = Пошта.Вибрати(Лехня); Інакше ВсіПовідомлення = Пошта. // Відбираємо серед усіх листів ті, що мають тему "1С: Обмін". //Маленьке, але важливе зауваження: //вважаємо, що всі отримані листи з темою "1С: Обмін" призначені //саме для поточного вузла, //Тобто. що у різних вузлів у плані обміну РІЗНІ електронні адреси.Для кожного Повідомлення З ВсіПовідомлення Цикл Якщо Лев(Повідомлення.Тема, 8 )<>"1С: Обмін" Тоді Продовжити; КінецьЯкщо; Спроба МасивПовідомлень.Додати(Повідомлення); //Вкладення листа зберігаємо на диску. //Акуратну перевірку вкладення залишимо поки "за кадром."Вкладення = Повідомлення. Ім'яФайла Повідомлення = Каталог ТимчасовихФайлів() + Вкладення.Name; ДаніОбміну = Вкладення.Дані; ДаніОбміну.Записати(Ім'яФайлаПовідомлення); //За допомогою об'єктів ЧитанняXML та ЧитанняПовідомлення читаємо дані //оновлення із збереженого файлу. Перед записом оновлень в ІБ //Встановлюємо параметр сеансу ІдеОбмінРозподіленоїБази в Істина. / / Потім читаємо зміни в ІБ: Плани Обміну. //Попутно зберігаємо повідомлення в масиві, щоб потім їх відразу видалити.Читання XML = Новий Читання XML(); ЧитанняXML.ВідкритиФайл(Ім'яФайлаПовідомлення); Читання Повідомлення = Плани Обміну. ​​Створити Читання Повідомлення (); Читання Повідомлення. Почати Читання (Читання XML); Параметри Сеансу. Іде Обмін Розподіленої Бази = Істина; ПланиОбміну.Прочитати Зміни (Читання Повідомлення); Читання Повідомлення. Закінчити Читання (); ЧитанняXML.Закрити(); Якщо Константи.ВиводитиПовідомленняОбміну.Отримати() Тоді Повідомити(" ОБМІН: Дані обміну прийняті",СтатусПовідомлення.Інформація); КінецьЯкщо; Виняток Повідомити(" ОБМІН: Помилка при отриманні даних обміну:" + ОписПомилки(), СтатусПовідомлення.ДужеВажливе); КінецьСпроби; //Після того, як читання даних обміну закінчено, повертаємо / / Параметру сеансу Іде Обмін Розподіленої Бази значення Брехня.Параметри Сеансу. Іде Обмін Розподіленої Бази = Брехня; Спроба ВидалитиФайли(Ім'яФайлаПовідомлення); Виняток //якщо не вийшло, ну і добреКінецьСпроби; КінецьЦикл; Якщо ВикористовуватиSMTP, тоді Пошта.ВидалитиПовідомлення(МасивПовідомлень); КінецьЯкщо; Пошта.Отключиться(); КінецьПроцедури

Тепер про те, для чого потрібен параметр сеансу Іде Обмін Розподіленої Бази.
Справа в тому, що при читанні даних методом Плани Обміну.
процедур-обробників події ПередЗаписом() об'єктів, що змінюються/додаються. І якщо під час запису
будь-якого об'єкта в процедурі обробника параметра Відмова буде встановлено в значення Істина, то
під час виконання ПланиОбмена.ПрочитатьИзменения() виникне виняток, і, відповідно, обмін
виконано нічого очікувати. Значення параметра сеансу Іде Обмін Розподіленої Бази може бути
проаналізовано у процедурах-оброблювачах, щоб уникнути подібної ситуації.
З виходом редакції 12 (хоча я можу помилятися у версіях), актуальність цього методу дещо
застаріла А, оскільки у об'єктів з'явилася властивість ПараметриОбміну, В якого, в свою . Ця властивість набуває значення Істина, коли йде
збереження даних через план обміну.

Тепер в інтерфейсі на нашій панелі додаємо ще одну кнопку, на яку вішаємо цю виклик
процедури. Запускаємо Підприємство та насолоджуємося.
Майже все зроблено, залишилася небагато: змусити наші процедури виконуватись у автоматичному режимі.
Крок 4. Налаштування автоматичного обміну

Отже, ми майже наблизилися до мети нашої розповіді. Залишився лише один крок: запустити
виконання процедур обміну у автоматичному режимі. Приступимо.

Додамо константу Інтервал Автообміну Розподіленої Бази типу Число (5,0).

У налаштування користувача додамо параметр Виконувати Обмін Розподілених Баз. Для конфігурації
"Управління торгівлею" це робиться так:

* У план видів характеристик "Налаштування Користувачів" додамо зумовлену
Характеристику Виконувати Обмін Розподілених Баз типу Бульово.
* У формі елемента довідника "Користувачі" налаштовуємо зміну цього параметра (як це
зробити можна подивитися в модулі форми, за аналогією з іншими параметрами).

В модуль рбРозподілена База додаємо процедуру:

Процедура рбВиконатиОбмін(прКористувач) Експорт Якщо нпОтриматиЗначенняЗа замовчуванням(прКористувач, "") Тоді рбОтриматиПовідомленняОбміну(); рбНадіслатиПовідомлення(); КінецьЯкщо; КінецьПроцедури

у модуль програми:

Процедура Перевірити ПідключенняАвтообміну() Експорт Якщо нпОтриматиЗначенняЗа замовчуванням(глПоточнийКористувач, " Виконувати Обмін Розподілених Баз") І Константи.ІнтервалАвтообмінуРозподіленоїБази.Отримати() > 0 Тоді ПідключитиОбробникОчікування(" ВиконатиАвтообмін", Константи.ІнтервалАвтообмінуРозподіленоїБази.Отримати()); Інакше ВимкнутиОбробникОчікування(" ВиконатиАвтообмін"); ВиконатиАвтообмін"); Якщо нпОтриматиЗначенняЗа замовчуванням(глПоточнийКористувач, " Виконувати Обмін Розподілених Баз") І Константи.ІнтервалАвтообмінуРозподіленоїБази.Отримати() > 0 Тоді ПідключитиОбробникОчікування(" ВиконатиАвтообмін", Константи.ІнтервалАвтообмінуРозподіленоїБази.Отримати()); КінецьЯкщо; ВиконатиАвтообмін"); КінецьПроцедури

в процедуру ПриНачалеРаботыСистемы() модуля додамо такі рядки:

(після підключення торговельного обладнання)
...
Параметри Сеансу. Іде Обмін Розподіленої Бази = Брехня; Перевірити ПідключенняАвтообміну();

Додамо на нашу панель ще пару кнопок для керування процесом: на одну вішаємо процедуру
Перевірити ПідключенняАвтообміну(), на іншу - ВимкнутиАвтообмін()

Запускаємо підприємство, налаштовуємо властивості користувача та інтервал автообміну та все!

Тепер при заході в базу під цим-налаштованим користувачем запускатиметься обробник
очікування Виконати Автообмін(). Природно, у периферійній базі також потрібно налаштувати користувача
для обміну.

Ще одне маленьке, але важливе зауваження:

У всій, створеній нами принади, є одна неприємність: зміна конфігурації. При
отриманні периферійної бази повідомлення, в якому будуть міститися зміни конфігурації, воно
буде прийнято, але виникне виняткова ситуація. При цьому змінена конфігурація буде
завантажено. Для оновлення конфігурації БД необхідно вигнати всіх користувачів, зайти
конфігуратор і оновлення конфігурації БД (перед цим непогано зробити вивантаження даних). До
на жаль, це неминуче зло. Можна трохи полегшити собі життя, написавши коротенький bat-файл
приблизно такого змісту:

1cv8.exe CONFIG /F<путь к ИБ>/N<Пользователь>/P<Пароль>/UpdateIBCfg

І ще одне зауваження:

На жаль, XML-файли не відрізняються компактністю, але, на щастя, чудово стискаються. Можна в
процедури надсилання та отримання повідомлень додати упаковку-розпакування файлів. COLOR="#666666">Робити це можна або зовнішнім архіватором, або використовуючи ВК, наприклад Wheel.AddIn
(http://1c.proclub.ru/modules/mydownloads/personal.php?cid=81&lid=2714) .
З виходом 10 (здається) редакції, попередня пропозиція дещо застаріла, оскільки у платформу
були вбудовані засобистиснення файлів за алгоритмом ZIP. Тобто. тепер є можливість стискати файли
без використання ВК.

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

Початкове налаштування обміну при цьому може вимагати низки дій, не тільки в частині програмування, а й консалтингу, навіть якщо ми маємо справу з однорідними джерелами, як у випадку з продуктами на платформі «1С:Підприємство». Чому налаштування обміну 1С (або, як ще це називається - синхронізація даних у 1С 8.3) може стати найважчим і недешевим завданням проекту інтеграції, розглянемо в цій статті.

Обмін даними в середовищі 1С дозволяє:

  • Виключити подвійне введення документів;
  • Автоматизувати суміжні бізнес-процеси;
  • Оптимізувати взаємодію між розподіленими підрозділами;
  • Оперативно актуалізувати дані для роботи спеціалістів різних відділів;
  • «Розмежувати» різні види обліку.

*У разі, коли дані одного виду обліку суттєво відрізняються від іншого, необхідно забезпечити конфіденційність інформації та «розмежувати» інформаційні потоки. Наприклад, обмін даними між 1С УТ та 1С Бухгалтерія не вимагає вивантаження до бази регламентного обліку управлінських даних, тобто. синхронізація у 1С тут буде неповна.

Якщо уявляти стандартний процесреалізації первинного обміну даними, коли хоча б його об'єктів – продукт 1С, можна виділити такі этапы:

  • Узгодження складу обміну;
  • визначення транспорту (протоколів обміну);
  • встановлення правил;
  • Складання розкладу.

Виявлення складу обміну 1С

Об'єкти обміну можна умовно поділити на «джерело» та «приймач». При цьому вони можуть виконувати дві ролі одночасно, що називатиметься – двостороннім обміном. Визначення джерела та приймача відбувається логічним шляхом залежно від необхідності або від функціональних можливостейсистеми.

*Наприклад, при інтеграції «WA: Фінансист» – рішення для ведення фінансового обліку та управління процесами казначейства, розробленого на базі «1С:Підприємство», експерти WiseAdvice рекомендують саме його як майстер-систему. Це пов'язано з наявністю інструментів контролю за дотриманням правил заявочної політики, відповідно, й у забезпечення ефективності роботи рішення.

Далі на основі отриманих та зафіксованих вимог з боку користувачів створюється список даних для обміну, визначається їх обсяг, вимоги до частоти обміну, прописується процес роботи з помилками та опрацювання виняткових ситуацій (колізій).

На цьому ж етапі залежно від парку наявних систем та структури підприємства визначаються з форматом обміну:

Розподілена інформаційна база

  • РИБ має на увазі обмін між ідентичними конфігураціями баз даних 1С, з чіткою структурою управління «головний-підлеглий» для кожної пари обміну. Будучи елементом технологічної платформи, РИБ крім даних може передавати зміни у конфігурації та адміністративну інформацію БД (але з головного до підлеглого).

Універсальний обмін даними у 1С

  • Механізм, що дозволяє налаштувати обмін баз 1С, як із змінами на платформі «1С:Підприємство», і з системами сторонньої розробки. Обмін здійснюється за допомогою переведення даних в універсальний формат xml відповідно до «Планами обміну».

EnterpriseData

  • Нова розробка фірми 1С, призначена для реалізації обміну даними у форматі XML між продуктами, створеними на платформі «1С:Підприємство», з будь-якими системами автоматизації. Застосування EnterpriseData полегшує доопрацювання, пов'язані з обміном. Раніше при включенні в систему нової конфігурації була потрібна реалізація механізму імпорту та експорту даних, як для неї, так і для вже наявних систем. Тепер системи, що підтримують EnterpriseData, не потребують доопрацювань, маючи лише одну точку «входу-виходу».

Визначення транспорту (протоколів обміну)

Для системи на платформі «1С:Підприємство 8» передбачено широкий спектр можливостей для організації обміну з будь-якими інформаційними ресурсамиза допомогою загальноприйнятих універсальних стандартів (xml, текстові файли, Excel, ADO-з'єднання тощо). Тому щодо транспорту для даних обміну слід відштовхуватися від можливостей бази даних сторонньої системи.

Синхронізація довідників

Основним принципом ефективної синхронізації довідників є наявність однієї точки введення. Але якщо йдеться про роботу з довідниками, що історично заповнювалися за різними правилами, необхідно чітко визначити поля синхронізації для приведення обміну до загального знаменника.

*На цьому етапі може знадобитися проведення робіт з нормалізації НСІ на стороні джерела даних. Залежно від стану довідників та їх обсягу, процес зіставлення елементів, розпізнавання, виявлення помилок і дублів, а також заповнення полів, що відсутні, і призначення полів синхронізації, може вимагати роботи цілої групи експертів, як з боку інтегратора (власника методики нормалізації НСІ), так і з боку замовника.

Встановлення правил

Можливість відображення даних систем-джерел у приймачах залежить від правильно заданих правил обміну. Правила, представлені у форматі XML, регулюють відповідність ключових реквізитів об'єктів джерела-приймача. Рішення «1С:Конвертація даних» призначене для автоматизації створення правил реалізації як одноразового обміну, і постійного.

Гарантує відсутність втрат даних під час обміну План обміну. Це складова частина будь-якої конфігурації на платформі «1С:Підприємство», що повністю описує порядок обміну 1С: склад даних (документи з «розпізнавальними» реквізитами) та вузли (інформаційні бази приймачі-передавачі), а також активацію РІБ для обраних напрямків обміну.

Будь-яка зміна даних, занесених до Плану обміну, фіксується і отримує ознаку «зміненості». Доки змінені дані не будуть відповідати один одному у вузлах приймача-передавача, ознака скинутий не буде, і система розсилатиме контрольні повідомлення в обидва вузли. Після вивантаження даних та підтвердження їх повної відповідності в обох системах, ознака скидається.

Розклад обміну в 1С

Для автоматизації регулярного обміну встановлюється періодичність розвантаження даних. Частота обміну залежить від необхідності та технічних можливостей. Також конфігурації на платформі «1С:Підприємство» дозволяють налаштувати обмін даними при настанні якоїсь події.

Розглянувши стандартний процес реалізації обміну, звернемо увагу на фактори, які вимагатимуть доробок на різних етапах:

  • Чи не типові, сильно допрацьовані зміни БД;
  • Різні версії платформи "1С:Підприємство";
  • Давно не оновлювалися, актуальні версіїконфігурації;
  • Об'єкти обміну, що раніше зазнали доопрацювань;
  • Необхідність у нестандартних правилах обміну;
  • Набір і склад реквізитів у наявних довідниках.

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

У підменю «Сервіс» вибираємо «Обмін даними з продуктами на платформі…» (вибір прямого обміну з «Роздрібом» часто загрожує помилками на рівні COM-об'єктів). Звернімо увагу на службове повідомлення « Ця можливістьнедоступна».


Щоб вирішити цю проблему, необхідно вибрати "Налаштування обміну даними"


…і проставити галочку. Далі повідомлення про помилку ігноруємо.


У налаштуваннях синхронізації даних вибираємо «Створити обмін із «Роздріб»…



Перед налаштуванням параметрів підключення через локальний або мережевий каталог слід переконатися, що на диску під каталог є місце. Хоча, як правило, він не займає більше 30-50 Мб, у виняткових випадках під нього може знадобитися до 600 Мб. Створити потрібний каталог можна прямо з конфігуратора.



При підключенні через мережевий каталог пропозиції налаштувати підключення за допомогою FTP-адреси та електронною поштою ігноруємо, натискаючи «Далі».


У налаштуваннях вручну проставляємо префікси - умовні позначення баз (як правило, БП, УПП, РО), задаємо правила та початкову дату розвантаження даних. Префікс буде вказуватися в назві документів для позначення бази, в якій вони були створені. Якщо правила вивантаження не будуть редаговані, дані за промовчанням будуть вивантажуватись за всіма наявними параметрами.



Створюємо файл налаштування обміну для "Роздріб", щоб не повторювати свої дії. При необхідності негайного надсилання даних відразу після налаштування синхронізації – проставляємо галочку.


Для автоматизації процесу обміну необхідно настроїти розклад.


Меню "Роздріб".


Проставляємо галочку та вибираємо «Синхронізацію».


Виробляємо «зворотне» налаштування, вибираючи Управління виробничим підприємством.




Завантажуємо файл з налаштуваннями, створений в УПП.


Проставляємо галочку, адресу система підхоплює автоматично.





Діємо так само, як і в УПП.









Перевірочне зіставлення даних (Ручне зіставлення даних рекомендується зробити підготовчому етапі, оскільки це можуть стати найтрудомісткішими у реалізації обміну). Відкриття вікна зіставлення відбувається по подвійному клацанню миші.



У разі помилки у синхронізації «Докладно…» буде замінено на «Ніколи…».


"Докладно..." відкриває журнал реєстрації з уточненою інформацією щодо обміну.


Готово.

Можливі різні ситуації, коли потрібно додати типову конфігураціюновий план обміну. Наприклад:

  • Потрібно налаштувати обмін стандартними засобамиіз конфігурацією, з якою немає типового обміну.
  • Є кілька інформаційних баз з однаковими конфігураціями, необхідно налаштувати з ними обмін за різними правилами. Як відомо, обмін із продуктами на платформі 8.2 не дозволяє завантажувати різні правила для різних вузлів.

Як додати новий план обміну з продуктами на платформі 1С:Підприємство 8.2 (за допомогою бібліотеки стандартних підсистем 2.0/3.0)

Розглянемо цю процедуру на прикладі інтеграції кількох національних Бухгалтерій (російської, української та казахстанської) із конфігурацією «Фінансист», розробленою компанією WiseAdvise.

Додаванням нових планів обміну ми вирішуватимемо одразу 2 проблеми:

  1. У типових Бухгалтеріях взагалі немає плану обміну зміни Фінансист (добре, що це план обміну у самій поставці Фінансиста).
  2. Версії Бухгалтерій для Росії, України та Казахстану відрізняються досить суттєво, отже мають бути різні правила обміну під кожну з Бухгалтерій. Оскільки одному плану обміну можна поставити лише одні правила, то доведеться робити кілька планів обміну під кожну з національних Бухгалтерій. Можна, звичайно, змінити конфігурацію Фінансиста таким чином, щоб дати можливість завантажувати свої правила для кожного вузла в одному плані обміну, але це, на мій погляд, буде складніше саме по собі і, до того ж, ускладнить подальші оновлення конфігурації.

Отже, алгоритм дій:

Додавання плану обміну завершено. Під час переходу в режим 1С:Підприємство та налаштування обміну даними у списку доступних планів має з'явитися доданий план.

При необхідності в план обміну конфігураторі можна додати макети з правилами реєстрації та конвертації. Вони вважатимуться стандартними. А можна і завантажити ці правила із файлів вже в режимі 1С:Підприємство.

Виникла необхідність налаштувати обмін між базами 1С центральної компанії та торгових філій. РИБ не підійшов через чутливість до змін конфігурації, особливо до динамічних оновлень. А також через те, що потрібен обмін за певними правилами: вся інформація має йти в один бік – із центру до філії. Тобто. якщо хтось змінить у базі філії довідник номенклатури випадково, це має попадати у центральну базу.

З центральної бази у філію вивантажуються:

  • каталог товарів,
  • ціни лише за деякими видами цін,
  • замовлення із інтернет-магазину.

У центральній базі та у філії торгівля ведеться від різних юр. осіб, керування філією здійснюється незалежно.
Клієнтська база в центрі та у філії ведеться незалежно, загальними є лише ті клієнти, які пройшли через інтернет-магазин. Тобто. клієнти центральної бази не повинні потрапляти до філії, а також клієнти філії не повинні потрапляти до центральної бази. Але частина клієнтів, які проходять через інтернет-магазин, має проходити через центральну базу. Проблема виникає, якщо клієнт зареєструвався у базі філії, а потім вирішив щось замовити через інтернет-магазин. У цьому випадку при вивантаженні з центру у філію він не повинен задублюватися, а має підчепитися існуючий клієнт.

На основі цих вимог було вирішено спробувати обмін через формат EnterpriseData.

Коротка довідка щодо обміну у форматі EnterpriseData

Модуль менеджера обміну - це модуль конфігурації 1С, який реалізує правила конвертації для обміну. Розташовуватиметься у зовнішній обробці, яку ми підключатимемо до вузла плану обміну.

ПКС - правила конвертації властивостей

Створення плану обміну

Для зручності створимо підсистему "ECom_ОбмінСФіліями". Всі нові об'єкти будемо додавати до цієї підсистеми. Зміни в типові модулі виноситимемо в розширення (при підключенні розширення треба буде зняти галочки " безпечний режим", тому що будуть торкатися серверні модулі).

Копіюємо план обміну "СинхронізаціяДанихЧерезУніверсальнийФормат", називаємо новий план обміну "ECom_ОбмінСФіліями".

У налаштуваннях складу плану обміну робимо Дії - Вимкнути все, а потім додаємо довідники:

  • Види цін
  • Номенклатура

та документи:

  • ЗамовленняКлієнта
  • УстановкаЦенНоменклатури

Заходимо у модуль менеджера. У процедурі ОтриматиВерсіїФорматуОбміну необхідно змінити назву плану обміну в запиті.

Також зручно додати можливість налагодження модуля менеджера обміну (зовнішньої обробки), як це зробити, описано тут:

Процедура Визначити Установки визначає, як план обміну обміну відображатиметься в меню налаштування синхронізації.

Процедура ВизначитиНалаштування

Процедура ВизначитиНалаштування(Налаштування, ІдентифікаторНалаштування = "") Експорт Настройки.ПредупреждатьОнвідповідностіВерсійПравилОбміну = Істина; Налаштування.ШляхКФайлуКомплектуПравілНа КористувальницькомуСайті = "https://users.v8.1c.ru/distribution/project/Trade110"; Налаштування.ШляхКФайлуКомплектуПравілВКаталогуШаблонів = "\1c\trade"; Налаштування.Вставити("ЗаголовокКомандиДляСтворенняНовогоОбмінуДаними", НСтр("ru = "Обмін з філією"")); Налаштування.Вставити("ЗаголовокПомічникаСтворенняОбміну", НСТ("ru = "Обмін з філією"")); Налаштування.Вставити("ЗаголовокВузлаПланаОбміну", НСТ("ru = "Обмін з філіями"")); Налаштування.Вставити("ЦеПланОбмінXDTO", Істина); КінецьПроцедури

А також необхідно у загальному модулі ОбмінДанимиУТУП у процедурі СписокПланівОбміну додати наш план обміну

ПланиОбмінПідсистеми.Додати(Метадані.ПланиОбміну.ECom_ОбмінСФіліями);

В результаті з'явиться можливість настроювати обмін за нашим планом обміну:

Щоб запускати обмін типовими засобами, необхідно ще в загальних командах.

  • НалаштуватиПараметриТранспортуПовідомленьОбміну
  • Синхронізувати
  • Склад НадісланихДаних

В якості "Тип параметра" відзначити наш план обміну

Копіюємо типові підписки на події:

  • СинхронізаціяДанихЧерезУніверсальнийФорматРеєстрація
  • СинхронізаціяДанихЧерезУніверсальнийФорматРеєстраціяДокумента

Вказуємо наші об'єкти, що входять до нашого плану обміну.

Копіюємо типовий модуль ОбмінДаннимиПодіїУТ, в отриманому модулі в процедурах змінюємо ім'я плану обміну з СинхронізаціяДанихЧерезУніверсальнийФормат на наш ECom_ОбмінСФіліями.

У створених підписках вказуємо обробники – процедури з нашого нового модуля.

Також додамо в цей модуль функцію ЦеЦентральнаБаза(), яка нам знадобиться надалі. Ознакою центральної бази будемо вважати код вузла, що відповідає поточній базі ("цей вузол"), що дорівнює "ЦБ".

Функція ЦеЦентральнаБаза() Експорт

Функція ЦеЦентральнаБаза() Експорт Запит = Новий Запит; Запрос.Текст = "ВИБРАТИ | ВИБІР | КОЛИ ECom_ОбменСФилиалами.Код = ""ЦБ"" | ТОДИ ІСТИНА | Інакше брехня | Вибірка = Запит.Виконати().Вибрати(); Якщо Вибірка.Наступний() Тоді Повернення Вибірка.Це ЦентральнаБаза; Інакше Повернення Брехня; КінецьЯкщо; КінецьФункції // ЦеЦентральнаБаза()

Т.к. ця функція буде викликатись постійно, необхідно її закешувати за допомогою модуля повторного використання.

Створення правил реєстрації

Для створення правил реєстрації нам потрібна конфігурація конвертації даних v2.

Я для вивчення питання використав ось цю статтю:

За допомогою обробки MD83Exp.epf, що входить до складу постачання Конвертації 2, необхідно вивантажити структуру конфігурації в файл.

Потім необхідно завантажити отриману структуру конфігурації Конвертацію 2.

Створюємо правила реєстрації.

Вибираємо нашу конфігурацію та наш план обміну.

І заходимо у налаштування правил реєстрації.

Створюємо правила реєстрації для наших об'єктів:

Т.к. ми хочемо, щоб у нас був односторонній обмін (тільки з центру до філій), в налаштування правил по кожному об'єкту треба додати в обробник "Перед обробкою" наш фільтр:

Відмова = Не ECom_ОбмінДанимиПовтІсп.ЦентральнаБаза();

На "Замовлення клієнта" накладаємо додатковий фільтр по організації та за датою початку вивантаження:

Для документа "Встановлення цін номенклатури" також додаємо відбір за датою. Плюс до цього в обробник "Під час обробки" додаємо фільтр за видом цін.

ВикористовуватиКеш = Брехня; ВидиЦен = Об'єкт.ВидиЦен.ВивантажитиКолонку("ВідЦіни"); ПараметрыЗапроса.Вставить("ВидиЦен", ВидиЦен); ТекстЗапроса = "ВЫБРАТЬ | ECom_ОбменСФилиалами.Ссылка КАК Ссылка |ИЗ | ПланОбмена.ECom_ОбменСФилиалами.ВидыЦенНоменклатуры КАК ECom_ОбменСФилиаламиВидыЦенНоменклатуры | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ECom_ОбменСФилиалами КАК ECom_ОбменСФилиалами | ПО ECom_ОбменСФилиаламиВидыЦенНоменклатуры.Ссылка = ECom_ОбменСФилиалами.Ссылка | И (ECom_ОбменСФилиаламиВидыЦенНоменклатуры.ВидЦенНоменклатуры В (&СвойствоОбъекта_ВидыЦен)) | И (ECom_ОбменСФилиалами.ЭтотУзел = брехня)" ;

Цей обробник за допомогою запиту дозволяє визначити список вузлів, в яких буде здійснено реєстрацію об'єкта. Чомусь хоча наш параметр запиту називається "ВідіЦен", у запиті ми повинні писати "Властивість Об'єкта_ВідіЦен".

На довідник "Види цін" також накладаємо фільтр:

Зберігаємо правила реєстрації у зовнішній файл:

Отриманий XML-файл необхідно завантажити в макет "Правила реєстрації" нашого плану обміну:

Зазначимо, що при роботі зміни правила реєстрації беруться зовсім не з цього макета, а з правил, що зберігаються в регістрі відомостей "Правила для обміну даними". А цей регістр правила завантажуються саме з макета, зашитого в конфігурацію - при створенні налаштування синхронізації. Це призводить до того, якщо у нас вже створено налаштування синхронізації, а нам з якихось причин потрібно змінити правила реєстрації - після зміни правил у макеті конфігурації потрібно оновити їх також у цьому регістрі:

Правила конвертації

Для створення правил конвертації нам потрібна конфігурація конвертації даних v3. Найкраще користуватися чистою базою. Наприклад, розробляючи конвертацію для формату даних EnterpriseData 1.3, для деяких об'єктів чомусь потрібно задавати реквізити (ПКС), які не здавались би обов'язковими. Виявилося, що вони є обов'язковими у версії 1.2, і просте наявність у базі Конвертації завантаженого опису цього формату вже збивало логіку роботи програми. Тому беремо чисту базу і вантажимо в неї все "з нуля".

Дуже добре робота з конвертацією 3.0 описана тут:

Завантажуємо структуру конфігурації з файлу, вивантаженого раніше (конвертації 2).

Вивантажуємо з УТ 11 XDTO-пакет EnterpriseData_1_3_8 у файл

Завантажуємо отриманий файл у Конвертацію 3

Створюємо конвертацію

Версія формату менеджера обміну вказується залежно від конфігурації. Наприклад, для УТ 11.3 це "1", для УТ 11.4 - "2".

Що таке конвертація? Для вивантаження та завантаження об'єкта нам потрібно:

  1. Правило надсилання даних - тут ми можемо накладати фільтр на об'єкти та застосовувати різні правила конвертації (наприклад, для папок номенклатури та елементів вказуються різні правила конвертації через різний набір реквізитів)
  2. Правило конвертації "з 1С в XML" - тут дані 1С перетворюються на дані формату EnterpriseData (наприклад, можна документ "Реалізація" конвертувати в документ "Надходження")
  3. Правило конвертації "з XML в 1С"
  4. Правило отримання даних

Якщо об'єкт бере участь у плані обміну – для нього обов'язково необхідно створити правило надсилання даних. У нашому випадку це:

  • Види цін
  • Номенклатура
  • Замовлення клієнта
  • Встановлення цін номенклатури

Як поводитимуться реквізити цих об'єктів посилання типу? Наприклад, реквізит "Організація". У кожного "об'єктних" типів у форматі EnterpriseData (наприклад, Довідник.Контрагенти) є звані ключові властивості. Так ось, коли ми вивантажуємо замовлення, у правилах конвертації вказуємо реквізит "Організація". При розвантаженні цього реквізиту вивантажуються та її ключові характеристики. Ми не створюватимемо створювати правила відправки для довідника "Організації", тому що ці дані в працюючій системі змінюються вкрай рідко, ми просто пропишемо алгоритм, який при отриманні замовлення правильно підставить вже існуючу в базі філії організацію.

Отже, правила відправки ми пишемо для часто мінливих об'єктів, "статичні" об'єкти ми краще одноразово (і повторно при необхідності) вивантажимо через універсальне вивантаження-завантаження.

Створюємо правило конвертації для надсилання номенклатури.

Налаштовуємо "правила конвертації властивостей". Суть у чому. EnterpriseData - це структура даних, насправді та сама конфігурація 1С. Тільки скажемо так трохи спрощеніша й універсальна. Вона повинна підходити для різних конфігурацій 1С, тому склад та назва об'єктів відрізняється від УТ 11. Тому нам потрібно прописати відповідність – як реквізити називаються в УТ11, і як у EnterpriseData. Є так звані ключові властивості - це обов'язкові реквізити для даної версії формату. Їх можна подивитися у "Дереві об'єктів формату":

Отже, вказуємо правила конвертації властивостей для номенклатури:

Як бачимо, у нас з'явилося кілька реквізитів "складного" типу, для них також необхідно створити "Правила конвертації об'єктів", інакше при вивантаженні буде виходити таке повідомлення в помилках: "Структура об'єкта "/Одиниця Вимірювання" не відповідає типу".

Правила конвертації для перерахувань та інших визначених (у конфігураторі) даних створюються на вкладці:

Для цих (і деяких інших) даних зручно, щоб правило працювало одразу і відправлення, і отримання.

Вказуємо створені правила у ПКС для номенклатури:

Тепер створимо правило конвертації "Замовлення клієнта".

Додамо правила конвертації для табличної частини "Товари". Для початку вкажемо відповідність реквізитів ПКС. Необхідно проставити галочку "Використовується алгоритм", т.к. Значення табличної частини формуватимуться не "самі", потрібно ще написати невеликий алгоритм. З використанням алгоритму не обов'язково вказувати реквізити об'єкта з 1С, т.к. значення для вивантаження в файл XMLвсе одно формуватимуться алгоритмом. Необхідно також вказувати правило конвертації якості для "складних" типів.

Тепер потрібно додати алгоритм заповнення табличної частини в обробник "Під час відправки".

#Область Товари // Табличні частини Запит = Новий Запит; Запит.Текст = "ВИБРАТИ | Товари.НомерРядки ЯК НомерРядкиДокумента, | Товари.Номенклатура ЯК Номенклатура, | ВИБІР | НоменклатураДовідник.ЕдиницяВимірювання, ЗНАЧЕННЯ(Довідник.УпаковкиЕдиниціВимірення.ПустаПосилання)) ЯК ОдиницяВимірювання, | |Товари.СтавкаНДС, |Товары.СумаНДС |З |Документ.ЗамовленняКлієнта.Товари ЯК Товари |Ліве З'єднання Довідник.Номенклатура ЯК НоменклатураДовідник |ПО Товари.Номенклатура =НоменклатураДовідникСусилля | БРЕХНЯ" ; Запит.ВстановитиПараметр("Посилання", ДаніІБ.Посилання); ДаніXDTO.Вставити("Товари", Запит.Виконати().Вивантажити()); #КінецьОбласті

У правилах конвертації при отриманні замовлення слід прописати алгоритм, який виконує зворотну операцію

Алгоритм заповнює ОтриманіДані.ДодатковіВластивості.Товари, які потім автоматично записуються в табличну частину "Товари" об'єкта, що завантажується.

МасивСтрокТовари = Новий Масив; ПравилаЗаповнення = Новий Відповідність; ПравилаЗаполнения.Вставить("Номенклатура", "Номенклатура"); Правила Заповнення. Вставити ("Кількість", "Кількість"); Правила Заповнення. Вставити ("Сума", "Сума"); Правила Заповнення. Вставити ( "Ціна", "Ціна"); Правила Заповнення. Вставити ("Ставка ПДВ", "Ставка ПДВ"); Правила Заповнення. Вставити ("Сума ПДВ", "Сума ПДВ"); Правила Заповнення. Вставити ("Склад", "Склад"); Якщо даніXDTO.Властивість("Товари") І ЗначенняЗаповнено(ДаніXDTO.Товари) Тоді Для Кожного Рядка З ДаніXDTO.Товари Цикл СтруктураДанихРядки = Новий Структура; Для кожного ПравилоЗаповнення З ПравилаЗаповнення Цикл СтруктураДляПереносаЗначення = Новий Структура(ПравилоЗаповнення.Ключ, Невизначено); ЗаповнитиЗначенняВластивостей(СтруктураДляПереносуЗначення, Рядок); Значення = СтруктураДляПереносаЗначення[ПравилоЗаповнення.Ключ]; Якщо значення<>Невизначено Тоді СтруктураДанихРядки.Вставити(ПравилоЗаповнення.Значення, Значення); КінецьЯкщо; КінецьЦикл; СтруктураДанихРядки.Вставити("КількістьУпаковок", СтруктураДанихРядки.Кількість); Якщо даніXDTO.Властивість("Склад") Тоді СтруктураДанихРядки.Вставити("Склад", ДаніXDTO.Склад); КінецьЯкщо; МасивСтрокТовари.Додати(СтруктураДанихРядки); КінецьЦикл; КінецьЯкщо; Якщо МасивСтрокТовари.Кількість() > 0 Тоді ОтриманіДані.ДодатковіВластивості.Вставити("Товари", МасивСтрокТовари); КінецьЯкщо;

Тепер реалізуємо такий механізм обміну контрагентами (покупцями): при завантаженні замовлення в базу філії шукаємо існуючого клієнта по телефону (наприклад, клієнт щось купив у філії, зареєструвався, а потім вирішив придбати щось в інтернет-магазині, та замовлення потрапило у центральну основу). Якщо клієнт по телефону знайдений, то підставляємо його замовлення, якщо ж ні - створюємо нового. Для цього нам необхідно буде разом із замовленням передавати номер телефону клієнта. У типові поля замовлення у форматі EnterpriseData телефон не входить, щоб його передати, можна скористатися полем AdditionalInfo, куди можна записувати додаткову інформацію. Ми передаватимемо додаткову інформацію у вигляді структури з необхідними полями. Через AdditionalInfo можна передавати і структури, і таблиці значень. В обробник "При відправленні" в правила конвертації замовлення під час відправлення

додаємо код:

Текст обробника "Під час відправлення"

СтруктДопДані = Новий Структура; Запит = Новий Запит; Запит.Текст = "ВИБРАТИ | ПартнериКонтактнаІнформація.НомерТелефону |З | Довідник.Партнери.КонтактнаІнформація ЯК ПартнериКонтактнаІнформація |ДЕ | Запит.ВстановитиПараметр("Партнер", ДаніІБ.Партнер); Вибірка = Запит.Виконати().Вибрати(); Якщо Вибірка.Наступний() Тоді структДопДані.Вставити("НомерТелефону", Вибірка.НомерТелефону); КінецьЯкщо; ДаніXDTO.Вставити("Additionalinfo", структДопДані);

Відповідно, в обробник "При конвертації даних XDTO" в налаштування конвертації при отриманні

Додаємо код:

Текст обробника "При конвертації даних XDTO"

Якщо даніXDTO.Властивість("AdditionalInfo") Тоді Якщо даніXDTO.AdditionalInfo.Властивість("НомерТелефона") Тоді НомерТелефона = ДаніXDTO.AdditionalInfo.НомерТелефона; Запит = Новий Запит; Запит.Текст = "ВИБРАТИ | ПартнериКонтактнаІнформація.Посилання ЯК Партнер, | Контрагенти.Посилання ЯК Контрагент |З | Довідник.Партнери.КонтактнаІнформація ЯК ПартнериКонтактнаІнформація | .Вигляд = ЗНАЧЕННЯ(Довідник.ВидиКонтактноїІнформації.ТелефонПартнера)) |І (ПартнериКонтактнаІнформація.НомерТелефону = &НомерТелефона)" ; Запит.ВстановитиПараметр("НомерТелефона", НомерТелефона); Вибірка = Запит.Виконати().Вибрати(); Якщо Вибірка.Наступний() Тоді ОтриманіДані.Партнер = Вибірка.Партнер; ОтриманіДані.Контрагент = Вибірка.Контрагент; Інакше ПартнерОб'єкт = Довідники.Партнери.СтворитиЕлемент(); ПартнерОбъект.Наименование = ДаніXDTO.Контрагент.Найменування; ПартнерОбъект.НаименованиеПовне = ПартнерОбъект.Наименование; ПартнерОб'єкт.Клієнт = Істина; ПартнерОб'єкт.ЮрФізОбличчя = Перерахування.КомпаніяПриватнеОбличчя.ПриватнеОбличчя; НоваРядок = ПартнерОб'єкт.КонтактнаІнформація.Додати(); НоваРядок.Тип = Перерахування.ТипиКонтактноїІнформації.Телефон; НоваРядок.Вигляд = Довідники.ВидиКонтактноїІнформації.ТелефонПартнера; Новий Рядок.НомерТелефона = НомерТелефона; НоваРядок.Представлення = НомерТелефона; НоваРядок.ЗначенняПолів = УправлінняКонтактноюІнформацієюСлужбовийВикликСервера.КонтактнаІнформаціяXMLПо Представленню(НоваРядок.Представлення, Перерахування.ТипиКонтактноїІнформації.Телефон); ПартнерОбъект.ОбменДанными.Загрузка = Істина; ПартнерОбъект.Записать(); КонтрагентОб'єкт = Довідники.Контрагенти.СтворитиЕлемент(); КонтрагентОбъект.Наименование = ПартнерОбъект.Наименование; КонтрагентОбъект.НаименованиеПовне = КонтрагентОбъект.Наименование; КонтрагентОбъект.ЮрФизЛицо = Перерахування.ЮрФізЛіцо.ФізЛіцо; КонтрагентОб'єкт.Партнер = ПартнерОб'єкт.Посилання; КонтрагентОб'єкт.ОбмінДаними.Завантаження = Істина; КонтрагентОб'єкт. Записати (); ОтриманіДані.Партнер = ПартнерОб'єкт.Посилання; ОтриманіДані.Контрагент = КонтрагентОб'єкт.Посилання; КінецьЯкщо; КінецьЯкщо; КінецьЯкщо;

У розвантаженні цін номенклатури є кілька цікавих моментів:

  • документ установки цін може містити кілька видів цін, а нам потрібно вивантажувати лише ті, що підпадають під фільтр.
  • У EnterpriseData документ "Встановлення цін номенклатури" має тільки один тип цін. Тобто. один документ у 1С має вивантажуватися як кілька об'єктів EnterpriseData.

Для реалізації фільтра нам потрібно десь зберігати види цін, що вивантажуються, встановлені в налаштуваннях вузла обміну. Для цього нам потрібні "Параметри конвертації":

А також обробка події "Перед конвертацією":

У правилах обробки даних для документа "Встановлення цін номенклатури" нам необхідно відключити використання конвертації "у типовому" варіанті, а натомість генерувати об'єкт XDTO "на ходу":

Для цього ми звернемося безпосередньо до методу ОбмінДанимиXDTOСервер.ВивантаженняОб'єктаВибірки. Перетворимо документ на масив необхідних нам структур з одним типом цін, і вже кожну цю структуру окремо вивантажимо через правила конвертації. Виглядає, звісно, ​​заплутано.

Текст обробника "Під час обробки"

Якщо ТипЗнч(ДаніІБ) = Тип("Структура") Тоді Повернення; КінецьЯкщо; Запит = Новий Запит; Запит.Текст = "ВИБРАТИ | ЦіниНоменклатури.ВидиЦіни ЯК ТипЦен, | ЦіниНоменклатури.Номенклатура ЯК Номенклатура, | ЦіниНоменклатури.Ціна ЯК Ціна |З | Документ.<>0 | І ЦіниНоменклатури.ВидЦены В(&ВидыЦенНоменклатури) |ПІДСУМКИ ПО | ТипЦен "; .Колонки.Додати("Ціна"); ВибіркаВидЦіни = Запит.Виконати().Вибрати(ОбхідРезультатуЗапиту.Погрупуванням); .Наступний() Цикл Якщо НЕ ЗначенняЗаповнено(ВибіркаВидиЦіни.ТипЦен) Тоді Продовжити;КінецьЯкщо; (); Деталі); КінецьЦикл; ДаніІБСтруктура.Вставити("ТипЦен", ВибіркаВідЦени.ТіпЦен); ДаніІБСтруктура.Вставити("Товари", ТаблицяТоварів); ОбмінДанимиXDTOСервер.ВивантаженняОб'єктаВибірки(КомпонентиОбміну, ДаніІБСтруктура, ПравилоУстановкаЦенВідправка); КінецьЦикл; КінецьЯкщо; Використання ПКО.Документ_УстановкаЦенНоменклатури = Брехня;

В правило конвертації в ПКС необхідно додати властивість ТипЦен. При цьому треба вибирати спосіб вибору властивостей "Вручну".

Налаштування синхронізації

Необхідно задати значення константи "Префікс" інформаційної бази- "ЦБ":

Створюємо нове налаштуваннясинхронізації

Задамо в налаштуваннях фільтр за датою документів, організації, видом цін:

Щоб підключити нашу зовнішню обробку, що містить модуль менеджера обміну, необхідно в налаштуваннях форми вказати відображення вкладки "службова інформація":

Створимо другу чисту базу (для філії) із cf-ника центральної бази. Також не забуваймо підключити наше розширення. Під час створення бази автоматично створюються довідники "Валюта" та "Одиниці вимірювання". Щоб при завантаженні даних із центральної бази не відбулося завоювання цих даних, необхідно в конвертації за цими довідниками зробити ідентифікацію не за UID, а за кодом.

Префікс інформаційної бази задаємо "ФО" і налаштовуємо синхронізацію, аналогічно центральній базі.

Додаткові файли із наскрізним прикладом.

Склад файлів, доданих до цієї статті:

  • cf-файл "Додаткові об'єкти конфігурації.cf" для об'єднання з основною конфігурацією УТ 11, що містить розроблений план обміну
  • cfe-файл із розширенням конфігурації, для коригування модулів конфігурації
  • xml-файл "Правила реєстрації.xml"
  • epf-файл "МенеджерДемо.epf"

Порядок встановлення плану обміну. У конфігураторі запускаємо операцію порівняння та об'єднання з "Додаткові об'єкти конфігурації.cf". Знімаємо галочки з усіх об'єктів:

Вибираємо "Дії - відзначити за підсистемами файлу", відзначаємо тільки "ECom_ОбмінСФіліями"

Додаємо розширення з файлу "ECom_ОбмінДанимиСфіліями.cfe", знімаємо галочки про безпеку:

Для коригування правил реєстрації вкладений файл "Правила реєстрації.xml" можна завантажити в конвертацію 2. Попередньо необхідно завантажити структуру конфігурації, як описано .

Для коригування правил конвертації вкладений файл "МенеджерДемо.epf" можна завантажити в Конвертацію 3. Попередньо необхідно створити опис конвертації, як описано .