Версионирование объектов 1С сторонними средствами

Публикация № 1176254

Разработка - Инструментарий разработчика - Прочие инструменты разработчика

версия объекта ms sql

В больших информационных системах встает острая необходимость хранения ИСТОРИИ изменений объектов. Она предоставляет материал как для проведения следственных действий, так и для инкрементарного сбора данных в data ware house из 1С конфигураций. Настоящая статья описывает способ версионирования объектов 1С, таких как Документы и Справочники средствами СУБД. Применение такого метода не вызывает рост и фрагментацию основной (рабочей) базы данных (1С) и позволяет сохранять информацию обо всех изменениях, сделанные пользователями.

Хранение версий объектов осуществляется в БД ObjectVersion, расположенной на сервере, желательно (но не обязательно) на том-же, где расположена основная БД.

Строка подключения :

Provider=SQLNCLI11;Server=lpc:(local)\MyINSTANCE;Database=ObjectVersion;Uid=1Cv8Log2;Pwd=Pa$$w0rd;

 

!Внимание. В исходных текстах модулей, приводимых в статье строка подключения загружается из регистра сведений  ВС_ПредопределенныеЭлементы. Такое поведение можно скорректировать следующим образом.

 


//пСтрока_Подключения = РегистрыСведений.ВС_ПредопределенныеЭлементы.ПолучитьЗначениеПоИмени("ObjVersion.ConnectionString");

пСтрока_Подключения = Константы.СтрокаПодключенияКСУБДХраненияВерсииОбъекта.Получить();

 

В конфигурацию 1С встраивается три модуля и подписка на событие хх_ПриЗаписиОбъектаДляВерсионирования.ПриЗаписи. Источником события подписки является СправочникОбъект, ДокументОбъект.  Обработчик расположен в модуле xx_УправлениеВерсионированиемОбъектовСервер. 

 

Процедура ЗафиксироватьВерсиюОбъекта(хОбъект,хСсылка) ЭКСПОРТ
    Перем рез;
    УстановитьПривилегированныйРежим(Истина);
    
    Попытка
        пСтрока_Подключения = РегистрыСведений.ВС_ПредопределенныеЭлементы.ПолучитьЗначениеПоИмени("ObjVersion.ConnectionString");
        Если НЕ ЗначениеЗаполнено(пСтрока_Подключения) ТОгда
            Возврат;
        КонецЕсли;    
        соединение = ВС_УправлениеВерсионированиемОбъектовПовтИсп.м_ADO_Подключить(пСтрока_Подключения);
        Если (соединение <> Неопределено) И (соединение.State = 1) Тогда
            xmlобъект  = СтрЗаменить(хОбъект,"'","''");
            xmlссылка  = хСсылка;
            пользователь = ПараметрыСеанса.ТекущийПользователь;
            пк = ПолучитьТекущийСеансИнформационнойБазы().ИмяКомпьютера;
            бд = ПолучитьИдентификаторБД();
            бдUUID = бд.ХешСумма;
            бдNAME = бд.СтрокаСоединения;
            комманда = "            
            |DECLARE @dbuuid varchar(36);
            |DECLARE @dbname varchar(50);
            |DECLARE @username nvarchar(50);
            |DECLARE @hostname nvarchar(50);
            |DECLARE @ref xml;
            |DECLARE @curobj xml;
            |
            |SELECT 
            |@dbuuid='"+бдUUID+"',
            |@dbname='"+бдNAME+"',
            |@username='"+пользователь+"',
            |@hostname='"+пк+"',
            |@ref='"+xmlссылка+"',
            |@curobj='"+xmlобъект+"'
            |;
            |
            |EXECUTE [DWHSchema].[addObjVersion] 
            |   @dbuuid
            |  ,@dbname
            |  ,@username
            |  ,@ref
            |  ,@curobj
            |  ,@hostname
            |";

            м_ADO_Запрос_Выполнить(соединение,комманда,рез);
            
        КонецЕсли;
    Исключение
        ВыполнитьЗаписьСобытияВЖурналРегистрации(ОписаниеОшибки(),,,пСтрока_Подключения);
    КонецПопытки;
    
КонецПроцедуры    


Как видно из кода, для записи осуществляется вызов хранимой процедуры [DWHSchema].[addObjVersion], расположенной в одной из схем базы данных [ObjectVersion]. 

База данных представляет из себя  хранилище, состоящее из трех файловых групп которые оптимизируются под хранение данных, хранение BLOB и хранения временных данных для предварительной обработки.  В таблицу [DWHSchema].[Versions] попадают первичные данные. С периодичностью настроенной в расписании задания ObjectVersionDiffCalculate (например 1 час) на шаге 1 вызывается хранимая процедура [DWHSchema].[DoBulkDifferent].

 

Эта хранимая процедура осуществляет окончательную обработку данных которая включает сохранение версии объекта в таблицах

[DWHSchema].[VersionsObjectStorage] и [DWHSchema].[VersionsCompress].

 А так же происходит выделение отличий объекта от его предыдущий версии. Эта информация сохраняется в таблице [DWHSchema].[Differents].

Общение с БД ObjectVersion осуществляется через набор встроенных функций и процедур.

 

[DWHSchema].[addObjVersion]

Процедура, регистрирующая версию объекта. Вызывается из подписки 1С ПриЗаписи.

 

 

[DWHSchema].[GetObjVersions]

Функция возвращает список версий объекта. Ей необходимо передать GUID объекта в качестве параметра. Например:

USE [ObjectVersion]

GO

DECLARE @r nvarchar(36) ='e3488ea5-ce4f-11e9-80c4-a4bf01016d51';

SELECT * FROM [DWHSchema].[GetObjVersions] ( @r ,'')

[DWHSchema].[GetObjectDifferents]

Функция возвращает список различий между версиями объекта. Различия рассчитываются по расписанию задания ObjectVersionDiffCalculate.

DECLARE @r nvarchar(36) ='e3488ea5-ce4f-11e9-80c4-a4bf01016d51';

SELECT * FROM [DWHSchema].[GetObjectDifferents] ( @r)

[DWHSchema].[GetDiffObjOnLine]

Функция возвращает различия между двумя версиями одного объекта. Различия рассчитываются налету. В качестве параметров необходимо передать ID версий объекта. Сначала младшую, затем старшую.

SELECT * FROM [DWHSchema].[GetDiffObjOnLine] (12854,32354)

 

Вызовы процедур и функций встроены в конфигурацию в модуле xx_УправлениеВерсионированиемОбъектовСервер. (ЗафиксироватьВерсиюОбъекта, ПолучитьИсториюИзмененийПоССылке, ПолучитьСписокИзмененийТекущейВерсии, ПолучитьСписокИзмененийТекущейВерсииРасчетная).

Для повышения селективности регистрации событий в БД ObjectVersion находится таблица [DWHSchema].[BlackObjectList] и [DWHSchema].[DBCodes]. В таблице [DWHSchema].[BlackObjectList] содержатся записи об объектах 1С, которые необходимо исключить из трассы версий (поле [dont_save_version] = 1).

В таблице [DWHSchema].[DBCodes] перечислены все варианты подключения к 1С. Регистрируются изменения клиентов, у которых строка подключения записана в таблицу и поле [enable] = 0x01. Заполнение таблицы [DWHSchema].[DBCodes] осуществляется автоматически.

 

Изучить историю изменения объекта можно с помощью внешней обработки. Обработка получает данные из выше перечисленных функций модуля и выводит их на форму как показано на рисунке.

 

В настоящий момент система контроля версий используется в конфигурациях 1С:УПП 1.4, 1С:КА 2.3,  1С:Бух 3.0 (Платформа 1C 8.3.10 и выше).  MS SQL 2016 Standart.

Скачать файлы

Наименование Файл Версия Размер
Исходный код модулей конфигурации 1С (3 шт)

.7z 3,98Kb
06.01.20
0
.7z 2.1 3,98Kb Скачать
СУБД: скрипт развертывания базы ObjectVersion

.7z 6,00Kb
06.01.20
0
.7z 2.1 6,00Kb Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Шаблонизатор

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Создание программного кода для заполнения документа по указанному шаблону.

1 стартмани

вчера в 13:20    270    0    Salimbek    0    

Консоль выполнения кода в 1С (обычные и управляемые формы)

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Иногда возникает необходимость выполнить некоторые действия в 1С, ради которых не хочется писать внешнюю обработку на пару строк кода. Для таких действия предназначена "Консоль выполнения кода в 1С".

1 стартмани

19.06.2020    5657    47    Denr83    0    

Отчёт по содержимому КД 2.0

Обмен данными 1С Обмен через XML Перенос данных из 1C8 в 1C8 Конфигурирование 1С Прочие инструменты разработчика v8 КД Абонемент ($m)

Просто отчёт по правилам конвертации - всё, что в них есть.

1 стартмани

05.06.2020    1162    2    Yashazz    4    

Тестирование отчетов

Прочие инструменты разработчика v8 1cv8.cf Россия Абонемент ($m)

Обработка "Тестирование отчетов" предназначена для тестирования списка отчетов путем их сравнения в модифицируемой базе и эталонной. Для сравнения используется механизм платформы 1С "Сравнить файлы". Отличие предлагаемого решения в удобстве использования для списка отчетов.

1 стартмани

29.05.2020    858    0    keifaya    0    

Конструктор сравнения таблиц значения, в том числе из внешней базы

Прочие инструменты разработчика v8::СКД 1cv8.cf Россия Абонемент ($m)

Предложен конструктор для определения различий между таблицами значений (ТЗ), в том числе сформированных во внешней базе данных. Конструктор использует СКД. Сравнение данных в разных базах востребовано, например, при свёртке базы или объединении двух баз в одну. Также конструктор можно применять для контроля обмена или просто сравнить две ТЗ. Применение СКД для формирования (ТЗ) снижает трудозатраты и гарантирует корректное сравнение по наименованию колонок.

1 стартмани

28.05.2020    1211    4    pavley2002    2    

PDF Extractor - извлекаем информацию из PDF с помощью Poppler

Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

«Класс» - обёртка для упрощения использования возможностей Poppler из 1С. Позволяет просто извлекать информацию из PDF-файлов в виде изображений и текста.

1 стартмани

26.05.2020    2200    4    salexdv    7    

Спасение рядового Райана

Обработка документов Универсальные обработки Обработка справочников Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Бывало, что потратишь полчаса, набьёшь в документ кучу данных, а его потом не записать? И вся работа насмарку? Тогда прошу под кат.

1 стартмани

22.05.2020    1786    2    the1    2    

Шаблоны внешних отчетов и обработок для обычных и управляемых форм

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

15 шаблонов внешних отчетов и обработок для обычных и управляемых форм.

1 стартмани

15.05.2020    1669    36    DNN13    0    

Фильтр объектов на базе СКД

Прочие инструменты разработчика v8::УФ v8::СКД 1cv8.cf Абонемент ($m)

Универсальный фильтр объектов на базе СКД. Может применяться как в чистом виде, например, при организации выборочного обмена данными, так и в качестве каркаса для создания сложных механизмов, позволяющих осуществлять обработку документов в зависимости от их содержания.

1 стартмани

13.05.2020    1162    2    olegarch    2    

Полезный костыль для настроек по умолчанию при разработке отчетов на СКД

Практика программирования Прочие инструменты разработчика v8 v8::СКД 1cv8.cf Абонемент ($m)

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

1 стартмани

30.04.2020    2079    0    zaxarovsky    4    

Редактирование JSON в виде дерева

Прочие инструменты разработчика v8 Абонемент ($m)

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

1 стартмани

28.04.2020    2615    21    vladnet    12    

Контроль доработок конфигураций

Прочие инструменты разработчика v8 Абонемент ($m)

Конфигурация для отслеживания доработок типовых конфигураций, позволяет ускорить обновление модулей типовых релизов и находить потерянные при обновлении доработки. Имеет ряд уникальных функций, которые не предоставляет конфигуратор 1С.

5 стартмани

27.04.2020    2298    6    Serge R    8    

Подсистема "Редактор Markdown 1C"

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Подсистема для быстрого встраивания в форму редактора языка разметки markdown

2 стартмани

19.04.2020    3289    6    cprit    9    

Создание описания, добавления и чтения таблицы значений

Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Иногда приходится создавать Таблицу значения (ТЗ) с большим количеством полей, описывать ТЗ вручную достаточно долго. Для автоматизации этого процесса и написана данная обработка. Данная обработка нужна только программистам.

1 стартмани

16.04.2020    1588    1    Dmitry77    4    

Отладка обработки заполнения

Прочие инструменты разработчика v8 1cv8.cf Россия Абонемент ($m)

Внешняя обработка, позволяющая отладить любую написанную вами обработку заполнения.

1 стартмани

12.04.2020    1649    5    ah7777777    0    

Быстрая функция поиска ссылки по УИД(GUID)

Поиск данных Прочие инструменты разработчика v8 1cv8.cf Россия Абонемент ($m)

Простая, а самое главное быстрая функция поиска ссылки на объект в информационной базе по УИД(GUID) через запрос.

1 стартмани

11.04.2020    4922    13    Kondratenko.as    27    

http сервис, возвращающий печатную форму

Печатные формы документов Прочие инструменты разработчика v8 УТ11 Россия Абонемент ($m)

Расширение, которое по get запросу в виде: http:///hs/WSPrint/Download/?UUID=&IDPF=&format= возвращает указанную печатную форму.

1 стартмани

09.04.2020    1871    4    user1350020    0    

Валидация данных

Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Пример универсального механизма для валидации данных: проверка типов, связей между таблицами, заполненности полей.

1 стартмани

01.04.2020    4122    2    relines    8    

Отладка шаблонов ограничений

Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

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

1 стартмани

26.03.2020    3385    26    vadim1980    3    

Имена таблиц на сервере

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка позволяющая удобно определить, в какой таблице на сервере баз данных находится той или иной объект 1С. Только для управляемого приложения! Тестировалось на платформе 1с 8.3.15.1565.

1 стартмани

19.03.2020    2031    0    alexyur    2    

Подготовка (исправление) XML схем

Прочие инструменты разработчика v8 Абонемент ($m)

Иногда, XML схемы не соответствуют стандарту w3.org и это грустно :-( . Скрипт публикации исправляет ошибки XML схем в автоматическом режиме.

1 стартмани

10.03.2020    2245    0    infosoft-v    3    

Внешний регламент для 1С

Прочие инструменты разработчика v8 Россия Абонемент ($m)

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

1 стартмани

05.03.2020    2463    5    moolex    6    

Пишем код в режиме предприятия на УФ

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Тестирование кода прямо в режиме предприятия. Изменение документов и справочников. Управляемые формы. Сохранение и форматирование кода.

1 стартмани

27.02.2020    2362    1    HAMAZ    9    

Выполнение произвольного кода 1С на управляемых формах

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Часто при работе в режиме предприятия необходимо выполнить какой-либо код. Для этого необходимо написать внешнюю обработку, а можно воспользоваться нашей обработкой для выполнения произвольного кода в режиме предприятия.

2 стартмани

18.02.2020    3031    12    seregapolygon    8    

БСП - Дополнительная обработка - Заполнение объекта - Произвольный алгоритм

БСП (Библиотека стандартных подсистем) Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Информационная система 1С ИТС: "При разработке решений следует учитывать, что опасно не только непосредственное выполнение кода, написанного в режиме Предприятие, но и те места, где методами Выполнить или Вычислить исполняется код, сконструированный на основе параметров, переданных в серверные функции и процедуры. Ограничение не распространяется на код, выполняемый на клиенте."

1 стартмани

13.02.2020    2677    0    duhh    2    

Эмуляция COM передачи данных через http сервис

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Делаем расширение для конвертации 2.0 через http-сервис.

1 стартмани

11.02.2020    3647    12    sikuda    19    

Простая параллельная обработка данных

Производительность и оптимизация (HighLoad) Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Предлагаю способ быстрой параллельной обработки "неких" данных. Методика проста как дважды два. Предварительно подготовленная обработка запускается вручную в нескольких сеансах, и каждый сеанс занимается обработкой своей части (случайного диапазона). Может пригодиться для ускоренной обработки данных. К примеру, необходимо заполнить реквизит большого справочника, заполнение в один поток идёт долго, а сроки поджимают.

1 стартмани

10.02.2020    2795    1    Amadeus007    8    

Выгрузка любого запроса или таблицы значений в текст JSON

Обработка справочников WEB Универсальные функции Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

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

1 стартмани

07.02.2020    6048    21    user796054    18    

Очень простая и удобная отладка внешних обработок

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Расширение для отладки внешних отчётов и обработок в несколько кликов.

1 стартмани

07.02.2020    3222    26    for_sale    0    

Набор скриптов .bat для автообновления списка баз и версии платформы 1С

Прочие инструменты разработчика v8 1cv8.cf Россия Абонемент ($m)

Автоматическое обновление списка информационных баз 1С, автоматическая установка новой версии платформы на компьютер пользователя.

1 стартмани

23.01.2020    2757    5    ManyakRus    4    

Конструктор запросов при внешнем подключении

Консоль запросов Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Конструктор запроса при внешнем подключении (с возможностью выборки по табличным частям объектов конфигурации). Управляемые формы, тонкий клиент.

1 стартмани

23.01.2020    2959    2    falcon_wild    1    

Отладчик внешних печатных форм (обычное и управляемое приложение)

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка для отладки внешних печатных форм.

2 стартмани

21.01.2020    2632    17    Denr83    0    

1C и защищенное хранение данных на блокчейне: модуль интеграции от Acryl Platform

Защита и шифрование Блокчейн Расширения Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Модуль интеграция 1С и блокчейн платформы "Acryl Platform" без использования внешних компонент. Под катом реализация механизмов Base58, Blake2b, Keccak, Curv25519 (the elliptic curve Diffie–Hellman) в подсистеме "Crypt", примеры генерации ключей, адресов, подписи транзакций, запись данных в блокчейн, чтение и восстановление данных из блокчейн. Код открыть. Лицензия MIT.

1 стартмани

21.01.2020    4831    2    ArtemSerov    17    

Редактор справки 1С

Прочие инструменты разработчика v8 Абонемент ($m)

Конфигурация для разработки справочной информации для конфигураций 1С. Тестировалось на 1С:Предприятие 8.3 (8.3.13.1690). Файловая база.

3 стартмани

16.01.2020    5586    15    lastpioneer    16    

Документация по объектам расширения конфигурации 1С

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка для автоматического создания документации для программистов по доработкам в расширении конфигурации.

1 стартмани

14.01.2020    4137    12    ManyakRus    2    

Неиндексированные измерения регистров сведений. В помощь 1С:Эксперту

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

Обработка показывает неиндексированные измерения регистров сведений, из-за которых случаются блокировки. Для любых баз 1С - на обычных и управляемых формах.

1 стартмани

07.01.2020    5636    12    Rustig    30    

Глобальный поиск и замена в модулях конфигурации

Поиск данных Прочие инструменты разработчика v8 1cv8.cf Россия Абонемент ($m)

Зачастую у программиста возникает желание работать с кодом модулей конфигурации средствами встроенного языка: так, как мы сейчас работаем с данными. Как результат реализации данной потребности и родилась данная обработка. Она предназначена для минимизации ручного труда при внесении однотипных изменений в модули конфигурации. Она представляет из себя расширение глобального поиска и замены в конфигураторе. Отличие в предоставлении ряда дополнительных возможностей, таких, как: наложение условий И, ИЛИ, НЕ; поиск только в названии процедуры / функции, либо в теле определенной процедуры / функции; управление поиском в комментариях и др.

1 стартмани

06.01.2020    2746    4    keifaya    0    

Подсистема перевода базы данных

Прочие инструменты разработчика Локализация решений v8 1cv8.cf Абонемент ($m)

В базе данных работают разноязычные пользователи и приходится писать наименования объектов сразу на нескольких языках? ЕСТЬ РЕШЕНИЕ!

2 стартмани

04.01.2020    2470    1    onec.developer    0    

Анализ подписок на события

Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Внешний отчет по подпискам на события.

1 стартмани

31.12.2019    2364    3    Sergspectr    4    

Расширение для отладки внешних печатных форм

Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

31.12.2019    2785    10    Sergspectr    7