Реальные идентификаторы истории получают на сервере; клиент передаёт их документированной форме без записи / удаления версий.
Где и как запускать
Своя управляемая обработка: основной обработчик &НаКлиенте, источник истории &НаСервереБезКонтекста.
Подготовка
Только собственная отдельная учебная база. Создайте Справочники → УчебныеКарточкиИстории. Справочник: код Строка 10, наименование 100, реквизит КомментарийИстории Строка 100. Вручную создайте Книгу, затем измените собственный комментарий.
У этого своего объекта включите ИсторияДанных; у дополнительного поля КомментарийИстории, если оно используется, также включите участие в истории. Подготовьте две версии только собственных данных; включение флага само не создаёт задним числом версии.
Дождитесь штатного обновления своей истории. Для ручного обновления выбирайте конкретные свои данные / свои метаданные и не вызывайте бесконтрольное ОбновитьИсторию() без отбора в рабочей базе.
Создайте свою управляемую обработку с командой ОткрытьУчебнуюИсторию. Основной обработчик и дополнительная серверная функция — в модуле именно этой обработки.
Источник сначала выбирает данные только своих метаданных, затем две версии одного и того же объекта по отбору Данные. Номера не назначаются числами 1 / 2 наугад и не берутся от разных книг.
Пользователю нужны чтение своих данных и истории. Если история ещё не сформирована или прав недостаточно, опыт должен остановиться с ошибкой; не подменяйте отсутствующие версии нулями.
Пример только открывает формы. Не нажимайте Записать / восстановление версии; закройте опыт без сохранения. BSL, запись объектов и обновление истории при сборке HTML не выполнялись.
Мастером создайте и назначьте основную управляемую форму объекта / записи именно своего типа. Не используйте общую форму с одноимённым реквизитом: у неё нет этого расширения.
НомерВерсииПереходаНаВерсиюИсторииДанных — ключевой стандартный параметр формы. Он не заменяется реквизитом формы НомерВерсии и не является проверкой версии платформы.
&НаКлиенте
Процедура ОткрытьУчебнуюИсторию(Команда)
ДанныеИстории = ПолучитьПаруУчебныхВерсий();
Параметры = Новый Структура("Ключ,НомерВерсииПереходаНаВерсиюИсторииДанных",
ДанныеИстории.Данные, ДанныеИстории.ДоИзменения);
ОткрытьФорму("Справочник.УчебныеКарточкиИстории.ФормаОбъекта", Параметры);
Сообщить("Открыта только собственная учебная история");
КонецПроцедурыТот же модуль: выбрать две настоящие версии одного своего объекта
&НаСервереБезКонтекста
Функция ПолучитьПаруУчебныхВерсий()
Отбор = Новый Структура("Метаданные", Метаданные.Справочники.УчебныеКарточкиИстории);
ПерваяВыборка = ИсторияДанных.ВыбратьВерсии(Отбор, "Данные,НомерВерсии", "НомерВерсии Возр", 1);
Если ПерваяВыборка.Количество() = 0 Тогда
ВызватьИсключение "Подготовьте историю собственных данных по инструкции";
КонецЕсли;
Данные = ПерваяВыборка[0].Данные;
ОтборДанных = Новый Структура("Данные", Данные);
Версии = ИсторияДанных.ВыбратьВерсии(ОтборДанных, "НомерВерсии", "НомерВерсии Возр", 2);
Если Версии.Количество() < 2 Тогда
ВызватьИсключение "Для одного своего объекта нужны две реальные версии";
КонецЕсли;
Возврат Новый Структура("Данные,ДоИзменения,ПослеИзменения", Данные, Версии[0].НомерВерсии, Версии[1].НомерВерсии);
КонецФункцииРазбор по шагам
Подготовьте два состояния одного собственного объекта и дождитесь обновления истории.
Сервер выбирает конкретные данные и две существующие версии.
Клиент открывает нужную форму с точными именами параметров.
Как проверить результат
Ключ и номер относятся к одной собственной записи / ссылке из реальной истории. Для регистра Ключ имеет тип ключа записи, а не ссылка документа.
Открытие с номером версии само не считается подтверждённым восстановлением данных. Сохранение и команда перехода требуют отдельного осознанного действия пользователя.
Ожидаемый результат
У каждого параметра есть реальный источник, точная системная / собственная форма и понятная граница между просмотром и восстановлением.
На что обратить внимание
Ключ и номер версии нельзя безопасно подставлять от другого объекта.
ОбновитьИсторию без отбора и УдалитьВерсии этим кодом не вызываются.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.