Добавить свою Книгу в историю по ссылке и по навигационной строке

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

Оба варианта Добавить относятся к одному вручную созданному учебному товару. Метод не возвращает элемент истории.

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

Полный серверный общий модуль УчебнаяИстория отдельной собственной учебной конфигурации.

Подготовка

  1. Работайте только в отдельной собственной конфигурации УчебнаяКонфигурацияСинтаксиса, не в УТ, КА, УНФ или БП. Создайте справочник УчебныеТовары с кодом типа Строка длиной 32, вручную сохраните товар Книга с кодом guide-book.

  2. Создайте серверный общий модуль УчебнаяИстория с флагом Сервер. Вставьте полный код выбранного урока. Из серверного обработчика команды своей обработки вызовите УчебнаяИстория.ВыполнитьПример().

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

  4. Уроки удаления необратимо удаляют историю. Для них заранее создайте в этой отдельной базе единственного пользователя УчебныйПользовательСинтаксиса, войдите под ним монопольно, не открывайте другие сеансы. Для первого запуска оставьте подтверждение пустым.

  5. Код не удаляет товары и не проводит документы. Добавление и очистка истории — настоящая запись пользовательских данных, а не изменение локального массива. Эти BSL-образцы в 1С автоматически не выполнялись.

Процедура ВыполнитьПример() Экспорт
    Книга = Справочники.УчебныеТовары.НайтиПоКоду("guide-book");
    Если Книга.Пустая() Тогда
        ВызватьИсключение "В своей учебной базе вручную создайте Книгу с кодом guide-book";
    КонецЕсли;
    СсылкаКниги = ПолучитьНавигационнуюСсылку(Книга);
    ИсторияРаботыПользователя.Добавить(Книга);
    ПервыйСнимок = ИсторияРаботыПользователя.Получить();
    НайденаПоОбъекту = Ложь;
    Для Каждого ЗаписьИстории Из ПервыйСнимок Цикл
        Если ЗаписьИстории.НавигационнаяСсылка = СсылкаКниги Тогда
            НайденаПоОбъекту = Истина;
        КонецЕсли;
    КонецЦикла;
    Сообщить(НайденаПоОбъекту);
    ИсторияРаботыПользователя.Добавить(СсылкаКниги);
    ВторойСнимок = ИсторияРаботыПользователя.Получить();
    НайденаПоСтроке = Ложь;
    Для Каждого ЗаписьИстории Из ВторойСнимок Цикл
        Если ЗаписьИстории.НавигационнаяСсылка = СсылкаКниги Тогда
            НайденаПоСтроке = Истина;
        КонецЕсли;
    КонецЦикла;
    Сообщить(НайденаПоСтроке);
    Сообщить("Товар не изменён, изменена только история текущего учебного пользователя");
КонецПроцедуры

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

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

  2. Получить навигационную строку средствами платформы, не склеивать UUID и путь вручную.

  3. Сначала передать ссылку справочника, затем строку. После каждого вызова заново получить историю и найти ожидаемую строку.

  4. Не требовать прибавления ровно двух записей: повторное добавление одного объекта не доказывает наличие двух разных объектов.

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

  1. Обе проверки наличия ожидаются Истина при наличии необходимых прав.

  2. В истории есть ссылка именно на собственную Книгу. Количество, порядок и точное время повторного добавления не объявляются фиксированными.

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

Два настоящих варианта добавления разобраны на одном учебном объекте без изменения товара.

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

  1. Добавить не возвращает запись: не присваивайте его вызов переменной.

  2. История сохраняется платформой. Это не самостоятельный массив и не журнал регистрации.

  3. Повторное добавление не является тестом уникальности товарного кода и не заменяет сохранение самого товара.

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

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

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

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

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