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

07.07.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Программная работа с типовыми формами истории данных
.cf 85,15Kb
6
6 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    5582    dsdred    40    

91

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

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    9914    bayselonarrend    21    

160

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

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

13.03.2024    7151    dsdred    18    

81

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

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

24.01.2024    23027    YA_418728146    28    

73

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

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

06.10.2023    25298    SeiOkami    48    

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

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

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