В отменяемой транзакции записываем собственную пару, читаем версии данных и отбросим только несохранённые комментарии. Запись процесса не равна его старту.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
В этой отдельной пустой конфигурации Учебная85 добавьте Задачи → УчебнаяЗадача: длина номера 9, тип Строка, автонумерация; наименование длиной 100. Добавьте реквизит Комментарий (Строка, 100), без проверки заполнения.
Добавьте Бизнес-процессы → УчебныйПроцесс: длина номера 9, тип Строка, автонумерация, реквизит Комментарий (Строка, 100), без проверки заполнения. В свойстве Задача выберите УчебнаяЗадача.
Карта маршрута: одна точка старта Старт → одна одиночная точка действия ПодготовитьКнигу → одна точка завершения Финиш. Соедините их стрелками; в представлении точки действия укажите Подготовить учебную книгу.
Адресацию задач, групповые/условные/вложенные точки и обработчики маршрута для этой задачи не добавляйте. Модули задачи и процесса, подписки и внешние действия должны быть пустыми. Обновите конфигурацию базы данных.
Все имена здесь относятся к новым учебным объектам, не к рабочей КА2/УНФ/УТ/БП. Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Если Метаданные.БизнесПроцессы.Найти("УчебныйПроцесс") = Неопределено
Или Метаданные.Задачи.Найти("УчебнаяЗадача") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебные процесс, задачу и карту маршрута";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Нельзя запускать внутри чужой транзакции";
КонецЕсли;
СсылкаПроцесса = БизнесПроцессы.УчебныйПроцесс.ПолучитьСсылку(Новый УникальныйИдентификатор);
НачатьТранзакцию();
Попытка
Процесс = БизнесПроцессы.УчебныйПроцесс.СоздатьБизнесПроцесс();
Процесс.УстановитьСсылкуНового(СсылкаПроцесса);
Процесс.Дата = Дата(2026, 10, 3, 10, 0, 0);
Процесс.Комментарий = "Записанный учебный процесс";
Процесс.Записать();
СсылкаЗадачи = Задачи.УчебнаяЗадача.ПолучитьСсылку(Новый УникальныйИдентификатор);
Задача = Задачи.УчебнаяЗадача.СоздатьЗадачу();
Задача.УстановитьСсылкуНового(СсылкаЗадачи);
Задача.Наименование = "Самостоятельная учебная задача";
Задача.Дата = Процесс.Дата;
Задача.БизнесПроцесс = СсылкаПроцесса;
Задача.Комментарий = "Записанная учебная задача";
Задача.Записать();
Процесс.Комментарий = "Несохранённая правка процесса";
Задача.Комментарий = "Несохранённая правка задачи";
Сообщить(Процесс.Модифицированность());
Сообщить(Задача.Модифицированность());
Процесс.Прочитать();
Задача.Прочитать();
Сообщить(Процесс.Комментарий = "Записанный учебный процесс");
Сообщить(Задача.Комментарий = "Записанная учебная задача");
Сообщить(Не Процесс.Модифицированность());
Сообщить(Не Задача.Модифицированность());
Сообщить(ТипЗнч(Процесс.ВерсияДанных) = Тип("Строка"));
Сообщить(ТипЗнч(Задача.ВерсияДанных) = Тип("Строка"));
Сообщить(Не Процесс.Стартован);
Сообщить(Не Задача.Выполнена);
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(СсылкаПроцесса.ПолучитьОбъект() = Неопределено);
Сообщить(СсылкаЗадачи.ПолучитьОбъект() = Неопределено);Разбор по шагам
Запись разрешена только в изолированной новой Учебная85 с пустыми модулями/подписками. Проверяем отсутствие чужой транзакции.
Каждому новому объекту назначена собственная UUID-ссылка. Процесс записывается до связанной учебной задачи.
Меняем комментарии только в памяти и вызываем Прочитать. Записанные комментарии восстанавливаются, локальная модифицированность сбрасывается.
ВерсияДанных — непрозрачная строка; не форматируем её как дату или номер конфигурации.
Все записи откатываем. Ни Старт, ни ВыполнитьЗадачу не вызывались.
Как проверить результат
Десять сравнений в транзакции Истина; после неё ещё три: транзакция закрыта, обе собственные записи отсутствуют.
В учебных списках не осталось созданной пары.
Ожидаемый результат
Проверены запись, чтение и откат двух собственных объектов без исполнения маршрута.
На что обратить внимание
Самостоятельное ручное связывание показано для упражнения чтения, не для проектирования рабочего маршрута.
Откат базы не отменяет внешние действия обработчиков. Поэтому рабочую конфигурацию здесь использовать нельзя.
После отката состояние объекта в памяти не доказывает наличие строки в базе: проверяем по ссылке.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.