Регистрация изменений в узле плана обмена данных независимых регистров сведений напрямую в sql

29.04.15

Разработка - Механизмы платформы 1С

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

Конструкция "ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, НаборДляРегистрации);" замечательно работает на небольших объемах данных. Что делать, если ежедневно есть потребность в регистрации на обмен миллионов строк регистра, а ключ основного отбора исключает возможность использования стандартного механизма в силу временных ограничений? Выход зачастую один - писать в sql "руками".

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

Для начала нам необходимо найти имя таблицы, где хранятся изменения регистра.

Это можно сделать следующей конструкцией:

МассивИменМетаданных = Новый Массив(); 
МассивИменМетаданных.Добавить("РегистрСведений.ИмяРегистраСведений"); 
СтрТЗИзменений = ТЗСтруктура.Найти("РегистрацияИзменений","Назначение");
ИмяТаблицыИзменений =СтрТЗИзменений.ИмяТаблицыХранения;

Пусть найденная таблица имеет имя "_InfoRgChngR14199".

Посмотрим, что эта таблица представляет из себя в Management Studio:

MS SQL

 

Аналогичную информацию можно получить при помощи многочисленных обработок по структуре хранения баз данных, например, этой //infostart.ru/public/147147/

Таблица регистрации изменений


Поля _Fld14038RRef, _Fld14111RRef, _Fld14085RRef это измерения регистра сведений, у которых стоит флаг "Основной отбор".

 Основной отбор

 

Поле _MessageNo это номер сообщения обмена данными, в которое было выгружено это изменение, или NULL, если оно еще не было выгружено.

 

Посмотрим таблицу плана обмена. Поле _NodeTRef это ссылка на таблицу плана обмена, тип данных этого поля binary(4). Таблица плана обмена

Рассмотрим, как получить преобразованную в binary(4) ссылку.

В примере имя таблицы _Node7079. Из этого имени необходимо взять постфикс "7079" и привести

МассивИменМетаданных = Новый Массив(); 
МассивИменМетаданных.Добавить("ПланОбмена.ОбменСКПК"); 
ТЗСтруктура = ПолучитьСтруктуруХраненияБазыДанных(МассивИменМетаданных, Истина);
СтрТЗСтруктура = ТЗСтруктура.Найти("ПланОбмена.ИмяПланаОбмена","ИмяТаблицы");
ИмяТаблицыПланОбмена = СтрТЗСтруктура.ИмяТаблицыХранения;
Строка_NodeTRef = " cast ("+СтрЗаменить(ИмяТаблицыПланОбмена,"_Node","")+" as binary(4))";

Переменную Строка_NodeTRef далее можно использовать в прямых запросах sql.

Поле таблицы изменений _NodeRRef соответствует полю _IDRRef таблицы плана обмена. 

Таким образом, разобрав структуру передаваемых данных, не составляет труда передать готовую таблицу с изменениями в sql. 

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

23.06.2024    7525    bayselonarrend    20    

154

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    5975    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    17845    YA_418728146    26    

71

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23791    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14794    YA_418728146    7    

166
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DitriX 2102 30.04.15 11:44 Сейчас в теме
Отлично. Только вы бы еще построили график, где видно будет - начиная с какого момента будет идти прирост.
Видь зарегестрировать 1000 000 записей в один узел - это одно, а в сто узлов - уже немного другая задача.
Это раз, и два - какая разница в скорости между тем, что бы делать отбор в момент чтения данных из узла, т.е. в узел мы регистрируем все данные, без отбора, а вот при формировании выгрузки - делаем отбор.
5. AlexKo 102 30.04.15 13:19 Сейчас в теме
(1) DitriX,
Если появится время, постараюсь подготовить графики и сравнение, будет наглядно.
6. DitriX 2102 01.05.15 17:02 Сейчас в теме
(5) спасибо, а то никогда не бывает решения на все случаи жизни,100% где то есть минус такого подхода, и я не про очевидные минуса говорю
2. Bazin 5 30.04.15 12:38 Сейчас в теме
Писал я выгрузку из планов обмена. Алгоритм простенький:

Объект = ВыбратьИзменения(...)
[тут выгрузка это объекта]
УдалитьРегистрациюИзменений(Объект)

И если пользователь изменял объект в это промежутке, то эти изменения не выгружаются.
3. kasper076 110 30.04.15 13:06 Сейчас в теме
4. AlexKo 102 30.04.15 13:18 Сейчас в теме
Оставьте свое сообщение