Оба варианта Добавить относятся к одному вручную созданному учебному товару. Метод не возвращает элемент истории.
Где и как запускать
Полный серверный общий модуль УчебнаяИстория отдельной собственной учебной конфигурации.
Подготовка
Работайте только в отдельной собственной конфигурации УчебнаяКонфигурацияСинтаксиса, не в УТ, КА, УНФ или БП. Создайте справочник УчебныеТовары с кодом типа Строка длиной 32, вручную сохраните товар Книга с кодом guide-book.
Создайте серверный общий модуль УчебнаяИстория с флагом Сервер. Вставьте полный код выбранного урока. Из серверного обработчика команды своей обработки вызовите УчебнаяИстория.ВыполнитьПример().
Для истории требуется право СохранениеДанныхПользователя. Права задайте вручную только в своей учебной базе; код не включает привилегированный режим и не меняет роли.
Уроки удаления необратимо удаляют историю. Для них заранее создайте в этой отдельной базе единственного пользователя УчебныйПользовательСинтаксиса, войдите под ним монопольно, не открывайте другие сеансы. Для первого запуска оставьте подтверждение пустым.
Код не удаляет товары и не проводит документы. Добавление и очистка истории — настоящая запись пользовательских данных, а не изменение локального массива. Эти BSL-образцы в 1С автоматически не выполнялись.
Процедура ВыполнитьПример() Экспорт
Книга = Справочники.УчебныеТовары.НайтиПоКоду("guide-book");
Если Книга.Пустая() Тогда
ВызватьИсключение "В своей учебной базе вручную создайте Книгу с кодом guide-book";
КонецЕсли;
СсылкаКниги = ПолучитьНавигационнуюСсылку(Книга);
ИсторияРаботыПользователя.Добавить(Книга);
ПервыйСнимок = ИсторияРаботыПользователя.Получить();
НайденаПоОбъекту = Ложь;
Для Каждого ЗаписьИстории Из ПервыйСнимок Цикл
Если ЗаписьИстории.НавигационнаяСсылка = СсылкаКниги Тогда
НайденаПоОбъекту = Истина;
КонецЕсли;
КонецЦикла;
Сообщить(НайденаПоОбъекту);
ИсторияРаботыПользователя.Добавить(СсылкаКниги);
ВторойСнимок = ИсторияРаботыПользователя.Получить();
НайденаПоСтроке = Ложь;
Для Каждого ЗаписьИстории Из ВторойСнимок Цикл
Если ЗаписьИстории.НавигационнаяСсылка = СсылкаКниги Тогда
НайденаПоСтроке = Истина;
КонецЕсли;
КонецЦикла;
Сообщить(НайденаПоСтроке);
Сообщить("Товар не изменён, изменена только история текущего учебного пользователя");
КонецПроцедурыРазбор по шагам
Найти заранее сохранённую Книгу по собственному коду. При пустой ссылке остановиться, не создавать и не записывать товар автоматически.
Получить навигационную строку средствами платформы, не склеивать UUID и путь вручную.
Сначала передать ссылку справочника, затем строку. После каждого вызова заново получить историю и найти ожидаемую строку.
Не требовать прибавления ровно двух записей: повторное добавление одного объекта не доказывает наличие двух разных объектов.
Как проверить результат
Обе проверки наличия ожидаются Истина при наличии необходимых прав.
В истории есть ссылка именно на собственную Книгу. Количество, порядок и точное время повторного добавления не объявляются фиксированными.
Ожидаемый результат
Два настоящих варианта добавления разобраны на одном учебном объекте без изменения товара.
На что обратить внимание
Добавить не возвращает запись: не присваивайте его вызов переменной.
История сохраняется платформой. Это не самостоятельный массив и не журнал регистрации.
Повторное добавление не является тестом уникальности товарного кода и не заменяет сохранение самого товара.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.