Передать реальный номер версии своей форме УчебныеСогласования

Учебные задачи

Реальные идентификаторы истории получают на сервере; клиент передаёт их документированной форме без записи / удаления версий.

Где и как запускать

Своя управляемая обработка: основной обработчик &НаКлиенте, источник истории &НаСервереБезКонтекста.

Подготовка

  1. Только собственная отдельная учебная база. Создайте Задачи → УчебныеСогласования. Используйте собственную задачу из подготовки маршрута. Добавьте КомментарийИстории Строка 100; изменяйте только собственную записанную невыполненную задачу.

  2. Работайте в отдельной пустой учебной конфигурации. Создайте справочник УчебныеИсполнители и предопределённый элемент Демонстрационный с наименованием Учебный исполнитель.

  3. Создайте задачу УчебныеСогласования: строковый номер длиной 12, автонумерация, наименование длиной 100. Добавьте реквизит адресации Исполнитель типа СправочникСсылка.УчебныеИсполнители и выберите его основным реквизитом адресации. Здесь используется прямая адресация; регистр ролевой адресации не нужен.

  4. Создайте параметр сеанса УчебныйИсполнитель того же ссылочного типа. В свойстве задачи Текущий исполнитель выберите этот параметр. Запросы урока передают исполнителя явно и не зависят от начального значения параметра сеанса.

  5. Создайте бизнес-процесс УчебноеСогласование со строковым номером длиной 12 и автонумерацией. В свойстве Задача выберите УчебныеСогласования. Карта маршрута: Старт (начало) → Согласовать (действие) → Завершение. В точке Согласовать задайте адресацию Исполнитель = Демонстрационный, Групповая = Ложь.

  6. И у задачи, и у бизнес-процесса создайте обычные реквизиты КомментарийУчебный (Строка 100), Сумма (Число 12.2), Подтверждено (Булево), ЗапретУдаления (Булево). Добавьте табличную часть Детали с колонками Наименование (Строка 100) и Количество (Число 10.0).

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

  8. Дождитесь штатного обновления своей истории. Для ручного обновления выбирайте конкретные свои данные / свои метаданные и не вызывайте бесконтрольное ОбновитьИсторию() без отбора в рабочей базе.

  9. Создайте свою управляемую обработку с командой ОткрытьУчебнуюИсторию. Основной обработчик и дополнительная серверная функция — в модуле именно этой обработки.

  10. Источник сначала выбирает данные только своих метаданных, затем две версии одного и того же объекта по отбору Данные. Номера не назначаются числами 1 / 2 наугад и не берутся от разных книг.

  11. Пользователю нужны чтение своих данных и истории. Если история ещё не сформирована или прав недостаточно, опыт должен остановиться с ошибкой; не подменяйте отсутствующие версии нулями.

  12. Пример только открывает формы. Не нажимайте Записать / восстановление версии; закройте опыт без сохранения. BSL, запись объектов и обновление истории при сборке HTML не выполнялись.

  13. Мастером создайте и назначьте основную управляемую форму объекта / записи именно своего типа. Не используйте общую форму с одноимённым реквизитом: у неё нет этого расширения.

  14. НомерВерсииПереходаНаВерсиюИсторииДанных — ключевой стандартный параметр формы. Он не заменяется реквизитом формы НомерВерсии и не является проверкой версии платформы.

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

Разбор по шагам

  1. Подготовьте два состояния одного собственного объекта и дождитесь обновления истории.

  2. Сервер выбирает конкретные данные и две существующие версии.

  3. Клиент открывает нужную форму с точными именами параметров.

Как проверить результат

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

  2. Открытие с номером версии само не считается подтверждённым восстановлением данных. Сохранение и команда перехода требуют отдельного осознанного действия пользователя.

Ожидаемый результат

У каждого параметра есть реальный источник, точная системная / собственная форма и понятная граница между просмотром и восстановлением.

На что обратить внимание

  1. Ключ и номер версии нельзя безопасно подставлять от другого объекта.

  2. ОбновитьИсторию без отбора и УдалитьВерсии этим кодом не вызываются.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.