ПолучитьСписок возвращает СписокЗначений с ключами; Выбрать возвращает курсор, у которого поля доступны после Следующий.
Где и как запускать
Полный серверный общий модуль только собственной отдельной учебной базы; сохранение здесь реальное.
Подготовка
Только собственная отдельная учебная база 8.5.1.1343 с конфигурацией УчебнаяКонфигурацияСинтаксиса. Не запускайте уроки сохранения в КА2/УНФ/УТ/БП или их рабочем сеансе.
В своей учебной базе создайте пользователя с точным именем guide-owned-user и войдите под ним. В собственной учебной роли разрешите СохранениеДанныхПользователя. Не расширяйте права рабочего пользователя.
Создайте общий модуль УчебноеХранилищеНастроек с флагом Сервер. Каждый урок — отдельный полный модуль с ВыполнитьПример() Экспорт, вызванный из серверной учебной команды.
Уроки сохранения действительно пишут настройки в учебную базу. Новый ключ объекта содержит собственный UUID; перед записью проверяется отсутствие записи, после опыта удаляется только созданная запись.
Личный вариант использует стандартное хранилище общих настроек текущего учебного пользователя; вариант по умолчанию — только ХранилищеСистемныхНастроек.
При ошибке очистки сохраните сообщение с собственным ключом для точечной проверки в этой учебной базе. Не удаляйте все настройки и не подставляйте Неопределено в аргументы удаления.
Процедура ВыполнитьПример() Экспорт
ПользовательУрока = ИмяПользователя();
Если ПользовательУрока <> "guide-owned-user" Тогда
ВызватьИсключение "Войдите под собственным учебным пользователем guide-owned-user";
КонецЕсли;
КлючОбъекта = "guide-owned-settings-" + Строка(Новый УникальныйИдентификатор);
КлючНастроек = "guide-book-view";
Хранилище = ПолучитьСтандартноеХранилищеОбщихНастроек();
Отбор = Новый Структура("КлючОбъекта,КлючНастроек,Пользователь", КлючОбъекта, КлючНастроек, ПользовательУрока);
Проверка = Хранилище.Выбрать(Отбор);
Если Проверка.Следующий() Тогда
ВызватьИсключение "Новый ключ уже занят: никакая существующая настройка не заменяется";
КонецЕсли;
Описание = Новый ОписаниеНастроек;
Описание.КлючОбъекта = КлючОбъекта;
Описание.КлючНастроек = КлючНастроек;
Описание.Пользователь = ПользовательУрока;
Описание.Представление = "Учебный вид Книга, количество 3";
Описание.ДополнительныеСвойства.Вставить("Источник", "Собственная учебная обработка");
Настройки = Новый Структура("Товар,Количество,ПоказыватьСумму", "Книга", 3, Истина);
Создано = Ложь;
ОшибкаОперации = "";
ОшибкаОчистки = "";
Попытка
Хранилище.Сохранить(КлючОбъекта, КлючНастроек, Настройки, Описание, ПользовательУрока);
Создано = Истина;
Список = Хранилище.ПолучитьСписок(КлючОбъекта, ПользовательУрока);
Сообщить(Список.Количество() = 1);
Сообщить(Список.Получить(0).Значение = КлючНастроек);
Выборка = Хранилище.Выбрать(Отбор);
Строк = 0;
Пока Выборка.Следующий() Цикл
Строк = Строк + 1;
Сообщить(Выборка.КлючОбъекта = КлючОбъекта);
Сообщить(Выборка.КлючНастроек = КлючНастроек);
Сообщить(Выборка.Пользователь = ПользовательУрока);
Сообщить(Выборка.Представление = "Учебный вид Книга, количество 3");
Сообщить(ТипЗнч(Выборка.ДатаИзменения) = Тип("Дата"));
Сообщить(Выборка.Настройки.Количество = 3);
КонецЦикла;
Сообщить(Строк = 1);
Исключение
ОшибкаОперации = ОписаниеОшибки();
КонецПопытки;
Если Создано Тогда
Попытка
Хранилище.Удалить(КлючОбъекта, КлючНастроек, ПользовательУрока);
Сообщить(Хранилище.Загрузить(КлючОбъекта, КлючНастроек, , ПользовательУрока) = Неопределено);
Исключение
ОшибкаОчистки = ОписаниеОшибки();
КонецПопытки;
КонецЕсли;
Если НЕ ПустаяСтрока(ОшибкаОперации) ИЛИ НЕ ПустаяСтрока(ОшибкаОчистки) Тогда
ВызватьИсключение "Ошибка учебной настройки " + КлючОбъекта + "/" + КлючНастроек
+ ": " + ОшибкаОперации + " Очистка: " + ОшибкаОчистки
+ " При неопределённом результате записи проверьте только этот собственный ключ в учебной базе";
КонецЕсли;
Сообщить("Собственная настройка удалена. Другие ключи и пользователи не затронуты");
КонецПроцедурыРазбор по шагам
Создаём ровно одну собственную запись под новым ключом объекта.
ПолучитьСписок ограничиваем этим объектом и текущим учебным пользователем. Значение элемента списка — ключ настройки, не её структура.
Выбрать получает отбор по всем трём полям, поэтому не требует просмотра чужих пользователей.
В цикле Следующий читаем шесть свойств выборки: ключи, пользователя, подпись, дату и данные.
ДатаИзменения проверяется как Дата; не выдаём её за UTC или точно равную моменту начала урока.
После подсчёта одной строки удаляем собственную запись тем же точным способом.
Как проверить результат
Девять сравнений списка/выборки и десятый контроль удаления — Истина.
В Значение списка находится guide-book-view, в Настройки выборки — структура с количеством 3.
Выборка не используется до успешного Следующий.
Ожидаемый результат
Разобраны два разных представления одного собственного варианта настроек.
На что обратить внимание
Выбрать без отбора пользователя может потребовать АдминистрированиеДанных: не убирайте наш отбор.
Список не является массивом структур настроек; нельзя обращаться к Список[0].Количество как к товару.
Курсор выборки не создаётся через Новый: его возвращает менеджер.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.