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

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

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

В наличии

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

Категория:

Описание

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

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

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

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

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

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

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

MS SQL

 

Аналогичную информацию можно получить при помощи многочисленных обработок по структуре хранения баз данных, например, этой //sale.itcity.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. 

has been added to your cart:
Оформление заказа