Каталог решений - Программная работа с типовыми формами истории данных

Программная работа с типовыми формами истории данных

Программная работа с типовыми формами истории данных

В наличии

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

Категория:

Описание

Небольшой теоретический экскурс

История данных — специальный механизм, который позволяет хранить в базе данных версии объектов конфигурации, упорядоченные по времени. Другими словами это типовой механизм для версионирования данных. Базовая информация о нём есть в интернете и на ИТС, поэтому в данной статье я напишу то, что касается стандартных форм.

Для механизма разработаны 3 общие типовые формы:

  • ФормаИсторииИзмененийИсторииДанных – это та форма, которая показывает список версий данных, она открывается при вызове команды История изменений;
  • ФормаДанныхВерсииИсторииДанных – это та форма, которая показывает отчёт о данных версии, она открывается из формы истории изменений;
  • ФормаРазличийВерсийИсторииДанных – это та форма, которая показывает отчёт о различиях между версиями, она также открывается из формы истории изменений.

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

  • Основная форма истории изменений истории данных
  • Основная форма данных версии истории данных
  • Основная форма различий версий истории данных

Программно с общими формами можно работать через типовые методы ПолучитьФорму / ОткрытьФорму

ОткрытьФорму("ФормаДанныхВерсииИсторииДанных", ПараметрыФормы)
ОткрытьФорму("ФормаИсторииИзмененийИсторииДанных", ПараметрыФормы)
ОткрытьФорму("ФормаРазличийВерсийИсторииДанных", ПараметрыФормы)

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

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

ПутьКФорме = "v8res://mngbase/DataHistoryVersionDataRuForm.lf";
ПутьНаДиске = "c:/temp/DataHistoryVersionDataRuForm.lf";
КопироватьФайл(ПутьКФорме, ПутьНаДиске);

Имена форм истории:

  • ФормаИсторииИзмененийИсторииДанных – DataHistoryChangeHistoryRuForm.lf
  • ФормаДанныхВерсииИсторииДанных – DataHistoryVersionDataRuForm.lf
  • ФормаРазличийВерсийИсторииДанных – DataHistoryVersionDifferencesRuForm.lf

 

Тестовый случай

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

 

Открытие формы ФормаИсторииИзмененийИсторииДанных

Тут всё просто. В параметры формы необходимо передать 1 параметр — "Данные", в котором будет либо ссылка на объект, либо ключ записи для регистра сведений.

&НаКлиенте
Процедура История(Команда)
    
    ПараметрыФормы = ПолучитьПараметрыФормыДляОткрытия_ФормаИсторииИзмененийИсторииДанных();
    ОткрытьФорму("ФормаИсторииИзмененийИсторииДанных", ПараметрыФормы);    
    
КонецПроцедуры

&НаСервере
Функция ПолучитьПараметрыФормыДляОткрытия_ФормаИсторииИзмененийИсторииДанных()
    
    КлючЗаписи = ПодготовитьТестовыйКлючЗаписи();
    ПараметрыФормы = Новый Структура("Данные", КлючЗаписи); 
    Возврат ПараметрыФормы;

КонецФункции

&НаСервере
Функция ПодготовитьТестовыйКлючЗаписи()
    
    ПараметрыКлючаЗаписи = новый Структура;
    ПараметрыКлючаЗаписи.Вставить("Период", Дата(2022, 7, 5));
    ПараметрыКлючаЗаписи.Вставить("Номенклатура", Справочники.Номенклатура._ТестоваяНоменклатура);
    
    КлючЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьКлючЗаписи(ПараметрыКлючаЗаписи);
    
    Возврат КлючЗаписи;

КонецФункции

 

Открытие формы ФормаДанныхВерсииИсторииДанных

Тут уже сложнее. Требуется передать как 2 параметра: — "Данные" и "НомерВерсии". Естественно номер версии требуется откуда-то перед этим узнать. Если передать номер версии удалённого объекта — платформа выдаст ошибку.

&НаКлиенте
Процедура ИсторииВерсии(Команда)

    ПараметрыФормы = ПолучитьПараметрыФормыДляОткрытия_ФормаДанныхВерсииИсторииДанных();
    ОткрытьФорму("ФормаДанныхВерсииИсторииДанных", ПараметрыФормы);    
    
КонецПроцедуры

&НаСервере
Функция ПолучитьПараметрыФормыДляОткрытия_ФормаДанныхВерсииИсторииДанных()
    
    КлючЗаписи = ПодготовитьТестовыйКлючЗаписи();
    ТестовыйНомер = 2;
    ПараметрыФормы = Новый Структура("Данные, НомерВерсии", КлючЗаписи, ТестовыйНомер); 
    Возврат ПараметрыФормы;

КонецФункции

 

Открытие формы ФормаРазличийВерсийИсторииДанных

Можно передать как 3 параметра: — "Данные", "НомерВерсииДоИзменения", "НомерВерсииПослеИзменения", тогда программа откроет окно сравнения версий. Если передать номер версии удалённого объекта — платформа выдаст ошибку.

&НаКлиенте
Процедура СравениеВерсий(Команда)
    
    ПараметрыФормы = ПолучитьПараметрыФормыДляОткрытия_ФормаРазличийВерсийИсторииДанных();
    ОткрытьФорму("ФормаРазличийВерсийИсторииДанных", ПараметрыФормы);    
    
КонецПроцедуры

&НаСервере
Функция ПолучитьПараметрыФормыДляОткрытия_ФормаРазличийВерсийИсторииДанных()
    
    КлючЗаписи = ПодготовитьТестовыйКлючЗаписи();
    ТестовыйНомерДо = 2;
    ТестовыйНомерПосле = 4;
    ПараметрыФормы = Новый Структура("Данные, НомерВерсииДоИзменения, НомерВерсииПослеИзменения", 
        КлючЗаписи, ТестовыйНомерДо, ТестовыйНомерПосле); 
    Возврат ПараметрыФормы;

КонецФункции

На этом я и закончу сей рассказ. Спасибо за внимание.

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

Источники, которые помогли разобраться с вопросом:

  1. Статья о развитии механизма История данных (wonderland.v8.1c.ru)
  2. Внедрение истории данных (infostart.ru)
  3. Недокументированное использование стандартных форм (infostart.ru)
has been added to your cart:
Оформление заказа