Регистрация изменений в узле плана обмена данных независимых регистров сведений напрямую в 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. 

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4525    dsdred    53    

72

Как готовить и есть массивы

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

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

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6409    dsdred    36    

111

1С-ная магия

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

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

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8821    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

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

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

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