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

07.07.22

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

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

Скачать исходный код

Наименование Файл Версия Размер
Программная работа с типовыми формами истории данных
.cf 85,15Kb
3
.cf 85,15Kb 3 Скачать

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

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

Для механизма разработаны 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)

См. также

Сервисы интеграции без Шины и интеграции

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

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

13.03.2024    3108    dsdred    16    

63

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

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

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

24.01.2024    7208    YA_418728146    25    

69

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

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

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

11.12.2023    7629    dsdred    36    

115

1С-ная магия

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

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

06.10.2023    19968    SeiOkami    46    

124

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

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

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

14.09.2023    13883    human_new    27    

77

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

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

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

28.08.2023    10233    YA_418728146    7    

147

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

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

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

20.08.2023    6947    sebekerga    54    

99
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DimaKors 2 31.01.23 10:31 Сейчас в теме
У объектов, у которых включена история изменений, так есть возможность их переопределения форм в Конфигураторе:

Не могу разобраться, как именно можно переопределить формы работы с историей данных. Кому-либо это удавалось? Неоднократно уже читал о том, что это можно сделать, но без примеров.
3. DimaKors 2 31.01.23 11:51 Сейчас в теме
(1)
Для переопределения формы необходимо создать новую общую форму и выбрать тип формы. Затем в свойствах корня конфигурации выбрать нужную форму, как описано в следующем комментарии.
Прикрепленные файлы:
2. zeltyr 575 31.01.23 10:36 Сейчас в теме
(1) Там всё просто. В окне конфигуратора выбрать корень конфигурации и листать вниз до следующих разделов (см. скриншот)

Это должно работать для конфигураций без БСП. С БСП всё немного иначе, у них своя форма истории, если я не ошибаюсь.
Прикрепленные файлы:
DimaKors; +1 Ответить
4. DimaKors 2 31.01.23 11:54 Сейчас в теме
(2)
Нет, с БСП все так же. Если вы имели в виду версионирование, которое есть в БСП, то это отдельный механизм, не связанный с историей данных.
5. zeltyr 575 31.01.23 12:09 Сейчас в теме
(4) да, я про отдельный механизм и вёл речь. Просто и там версии и там версии, бывает путаница
Оставьте свое сообщение