Робота з планами обміну в 1с

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

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

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

Розглянемо докладніше структуру плану обміну:

Об'єкт метаданих план обміну розташований в гілці «Загальні» конфігуратора.

Робота з планами обміну в 1с

Робота з планами обміну в 1с

Програмна реєстрація змін в конкретному вузлі плану обміну

Фрагмент коду програмної реєстрації змін в плані обміну

УзелОбмена = ПланиОбмена. prosto_ПланОбмена. НайтіПоКоду ( "001"); // шукаємо вузол плану обміну за кодом, в даному вузлі будуть реєструватися зміни

Якщо ТіпЗнч (Джерело) = Тип ( "Справочнік.Номенклатура") Тоді // в параметрі процедури Джерело передається Об'єкт який ми будемо реєструвати

ПланиОбмена. ЗарегістріроватьІзмененія (УзелОбмена. Джерело); // реєструємо об'єкт

Програмну реєстрацію змін можна проводити в модулі об'єкта в процедурі «ПріЗапісі», або ж можна створити окрему підписку на подію «ПріЗапісі» і реєструвати зміни в підписці (другий варіант краще тому що в подальшому не буде проблем з оновленням конфігурації).

Також зареєструвати елемент в плані обміну можна в режимі користувача за допомогою обробки «Реєстрація змін для обміну даними».

Робота з планами обміну в 1с

Відкриваємо обробку «Реєстрація змін для обміну даними», вибираємо в дереві об'єктів конфігурації об'єкт який хочемо зареєструвати і натискаємо кнопку «Зареєструвати зміни одиночного об'єкту». Також можна «Зареєструвати зміни всіх об'єктів обраних типів» або «Скасувати реєстрацію змін».

Читання зареєстрованих змін з вузла плану обміну

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

Фрагмент коду читання зареєстрованих змін у вузлі плану обміну

УзелОбмена = ПланиОбмена. prosto_ПланОбмена. НайтіПоКоду ( "001"); // шукаємо вузол плану обміну за кодом, з цього сайту будемо зчитувати зміни

ІмяВременногоФайла = ПолучітьІмяВременногоФайла ( "xml"); // отримуємо ім'я тимчасового файлу

Спроба // читання виробляємо в блоці спроба, у разі виникнення помилки, вона буде виведена через метод Повідомити у виключенні

ЗапісьСообщенія = ПланиОбмена. СоздатьЗапісьСообщенія (); // створюємо запис повідомлення, це необхідно для того щоб в подальшому створити вибірку змін плану обміну

ХМЛЗапісьВигрузк і = Новий ЗапісьXML; // створюємо XML запис

ХМЛЗапісьВигрузкі. ОткритьФайл (ІмяВременногоФайла. "Windows-1251"); // пишемо XML запис в файл

ЗапісьСообщенія. НачатьЗапісь (ХМЛЗапісьВигрузкі. УзелОбмена); // починаємо запис

МассівВигружаемихЕлементов = Новий Масив;

ВиборкаПлан = ПланиОбмена. ВибратьІзмененія (ЗапісьСообщенія. Одержувач. 0. Метадані. Довідники. Номенклатура); // створюємо вибірку змін, будуть обрані змінені елементи довідника Номенклатура з вузла обміну зазначеного вище

Поки ВиборкаПлан. Наступний () Цикл // цикл по вибірці

Об'ектВигрузк і = ВиборкаПлан. Отримати (); // отримуємо змінений об'єкт з вибірки

Якщо ТіпЗнч (Об'ектВигрузкі) = Тип ( "СправочнікОб'ект.Номенклатура") І НЕ Об'ектВигрузкі. ПометкаУдаленія Тоді // перевіряємо чи відповідає об'єкт умов вивантаження

МассівВигружаемихЕлементов. Додати (Об'ектВигрузкі); // заповнюємо масив елементів для вивантаження

ЗапісьСообщенія. ЗакончітьЗапісь (); // закінчимо запис

ХМЛЗапісьВигрузкі. Закрити (); // закриємо файл в який читали зміни

Повідомити (ОпісаніеОшібкі ()); // в разі невдалого читання змін випаде помилка з текстом

УдалітьФайли (ІмяВременногоФайла); // видалимо тимчасовий файл в який читали зміни

Звичайно метод «ПланиОбмена.ВибратьІзмененія ()» має право на існування і в деяких випадках без нього навіть не обійтися, але краще використовувати для читання зареєстрованих змін з вузла плану обміну віртуальну таблицю «Зміни». Віртуальна таблиця «Зміни» автоматично створюється у кожного об'єкта включеного до складу плану обміну.
Вся справа в тому, що при використанні методу «ПланиОбмена.ВибратьІзмененія ()» можуть виникати надлишкові блокування в базі даних. Метод «ПланиОбмена.ВибратьІзмененія ()» теоретично повинен тільки зчитувати зміни з вузла плану обміну, але насправді це не так. Якщо відкрити синтаксис-помічник, то ми побачимо, що в процесі вибірки змін до записів реєстрації змін проставляється номер повідомлення обміну даними, в якому повинні передаватися зміни. Ось коли цей номер повідомлення проставляється і здійснюється запис об'єкта (а на час запису об'єкт блокується). Саме тому краще використовувати віртуальну таблицю «Зміни», при використанні даної таблиці надлишкових блокувань не виникає. Нижче представлений запит вибірки з таблиці змін довідника «Номенклатура»:

Фрагмент коду читання зареєстрованих змін у вузлі плану обміну

Схожі статті