Тип: АвтонумерацияВФорме. Режим автонумерации.
Полное описание, параметры и ограничения
Расширение табличного поля списка справочника.Автонумерация (Catalog list table box extension.Autonumeration)
Расширение табличного поля списка справочника (Catalog list table box extension)
Автонумерация (Autonumeration)
Доступен, начиная с версии 8.1.
Использование:
Чтение и запись.
Описание:
Тип: АвтонумерацияВФорме.
Режим автонумерации.
Доступность:
Толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Настроить собственный список товаров: дерево, отбор, доступность и обновление
На двух группах и трёх товарах сравниваем плоский список, дерево и ограниченную группу. Реальный отбор отделён от доступности диалога настройки; отдельный цикл возвращает 14 скалярных свойств и два флага доступности.
Где и как запускать
Полный модуль ОБЫЧНОЙ формы Список собственной обработки УчебныйСписок85; отдельные модули Пульта и серверной защиты ниже. Только толстый клиент, не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу на 8.5.1.1343, конфигурация УчебныеВыборкиКаталога85, совместимость НеИспользовать, обычное приложение и толстый клиент. Это не рабочая база/копия УТ, КА, УНФ или БП. UI здесь не запускался: runtimeVerifiedScenarios=0.
Единственный справочник УчебныеТовары: иерархия групп и элементов, владельцев и предопределенных строк нет; Код Строка(10), автонумерация выключена, контроль уникальности включён, Наименование(100), единственный Артикул Строка(20), для групп и элементов, Индексировать. Прочие бизнес-объекты, разделители, расширения, подписки и задания отсутствуют; модули справочника/менеджера пусты.
ВРУЧНУЮ только в этом своём стенде запишите ровно пять записей: группы G01 Основной/GROUP-A и G02 Архив/GROUP-B в корне; A01 Книга/BOOK-A и A02 Ручка/PEN-A под G01; B01 Книга/BOOK-B под G02. Все без пометок. В отличие от урока отменяемой выборки, данные здесь остаются для будущего UI-теста; код урока их только читает.
Обработка УчебныйСписок85: обычные формы Пульт и Список, Пульт основная. В Список создайте реквизит Товары типа СправочникСписок.УчебныеТовары и табличное поле СписокТоваров, данные которого именно Товары. Колонки Код, Наименование, Артикул связаны с одноимёнными колонками списка. У поля ТолькоПросмотр=Да, команды создания/записи/удаления не добавляйте.
В Список добавьте кнопки ПлоскийСписок, ДеревоГрупп, ТолькоОсновной, ТолькоКнига, РазрешитьНастройки, ЗапретитьНастройки, АвтоДесятьСекунд, РучноеОбновление, ПроверитьВосстановление, ЗакрытьСписок; назначьте одноимённые действия и события ПриОткрытии/ПередЗакрытием. Вставьте полный основной модуль. Оставьте доступ к стандартному диалогу настройки списка через контекстное меню поля для проверки доступностей.
В Пульт добавьте ОткрытьПлоский, ОткрытьДерево и ЗакрытьСвойСписок, назначьте действия и события ПриОткрытии/ПередЗакрытием. Вставьте полный отдельный модуль Пульта ниже. Он получает своё закрытое окно с новым UUID и вызывает ПодготовитьДоОткрытия до Открыть.
Общий модуль УчебныйКаталог85: неглобальный, Сервер=Да, Вызов сервера=Да, клиентские флаги=Нет, привилегированный=Нет. Вставьте полный модуль защиты стенда ниже, без подготовки/записи пяти товаров. Обновите конфигурацию базы, проверьте F7 и привязку данных табличного поля вручную.
Найдённые элементы настройки Наименование и Код должны существовать у подготовленного динамического списка. Если их нет, сценарий отказывает: не добавляйте их через Добавить и не подменяйте список таблицей значений. ТолькоПросмотр запрещает редактирование поля, не является правами доступа.
Перем СвоиДанные;
Перем Подготовлено;
Процедура ПодготовитьДоОткрытия(Режим) Экспорт
УчебныйКаталог85.ПроверитьСвойСтенд();
Если ЭтаФорма.Открыта() Тогда
ВызватьИсключение "Начальные свойства задаёт свой Пульт до Открыть";
КонецЕсли;
Если ТипЗнч(Товары) <> Тип("СправочникСписок.УчебныеТовары") Тогда
ВызватьИсключение "Нужен реквизит Товары типа списка своего справочника";
КонецЕсли;
СвоиДанные = ПрочитатьСвойНабор();
Колонки = Товары.Колонки;
Для Каждого ИмяКолонки Из СтрРазделить("Код,Наименование,Артикул", ",") Цикл
Если Колонки.Найти(ИмяКолонки) = Неопределено Тогда
Колонки.Добавить(ИмяКолонки);
КонецЕсли;
Если Колонки.Найти(ИмяКолонки) = Неопределено Тогда
ВызватьИсключение "Не подготовлена колонка собственного списка " + ИмяКолонки;
КонецЕсли;
КонецЦикла;
Поле = ЭлементыФормы.СписокТоваров;
Поле.ТолькоПросмотр = Истина;
Товары.Отбор.Сбросить();
Товары.Порядок.Установить("Код Возр");
ПрименитьПрофиль(Поле, НовыйПрофиль(Режим));
ПроверитьПрофиль(Поле, НовыйПрофиль(Режим));
НастроитьДоступность(Истина);
Товары.Обновить();
Подготовлено = Истина;
КонецПроцедуры
Процедура ПриОткрытии()
Если Подготовлено <> Истина Тогда
ВызватьИсключение "Открывайте эту собственную форму только из подготовленного Пульта";
КонецЕсли;
КонецПроцедуры
Функция НовыйПрофиль(Режим)
Если Режим <> "Плоский" И Режим <> "Дерево" И Режим <> "Основной" Тогда
ВызватьИсключение "Неизвестный собственный профиль";
КонецЕсли;
Дерево = Режим = "Дерево";
ТолькоОсновной = Режим = "Основной";
ВерхнийРодитель = СвоиДанные.Пустая;
Просмотр = ИспользованиеГруппИЭлементов.Элементы;
Если Дерево Тогда
Просмотр = ИспользованиеГруппИЭлементов.ГруппыИЭлементы;
КонецЕсли;
Если ТолькоОсновной Тогда
ВерхнийРодитель = СвоиДанные.G01;
КонецЕсли;
Возврат Новый Структура("Автонумерация,АвтоОбновление,ВосстанавливатьТекущуюСтроку,Дерево,ИерархическийПросмотр,ИзменятьАвтоОбновление,ИзменятьИерархическийПросмотр,ИзменятьСпособРедактирования,ИзменятьТекущегоРодителя,ПериодАвтоОбновления,ПроверкаОтображенияНовойСтроки,ПросмотрГруппИЭлементов,РодительВерхнегоУровня,СпособРедактирования",
АвтонумерацияВФорме.НеИспользовать, Ложь, Ложь, Дерево, Дерево Или ТолькоОсновной,
Истина, Не ТолькоОсновной, Ложь, Не ТолькоОсновной, 10,
ВариантПроверкиОтображенияНовойСтроки.СообщатьОНесоответствииОтбору,
Просмотр, ВерхнийРодитель, СпособРедактированияСписка.ВДиалоге);
КонецФункции
Функция ПрочитатьСвойНабор()
Ожидания = Новый Структура;
Ожидания.Вставить("G01", Новый Структура("Наименование,Артикул,Родитель,ЭтоГруппа", "Основной", "GROUP-A", "", Истина));
Ожидания.Вставить("G02", Новый Структура("Наименование,Артикул,Родитель,ЭтоГруппа", "Архив", "GROUP-B", "", Истина));
Ожидания.Вставить("A01", Новый Структура("Наименование,Артикул,Родитель,ЭтоГруппа", "Книга", "BOOK-A", "G01", Ложь));
Ожидания.Вставить("A02", Новый Структура("Наименование,Артикул,Родитель,ЭтоГруппа", "Ручка", "PEN-A", "G01", Ложь));
Ожидания.Вставить("B01", Новый Структура("Наименование,Артикул,Родитель,ЭтоГруппа", "Книга", "BOOK-B", "G02", Ложь));
Данные = Новый Структура;
Выборка = Справочники.УчебныеТовары.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не Ожидания.Свойство(Выборка.Код, Ожидание) Или Данные.Свойство(Выборка.Код) Тогда
ВызватьИсключение "В своем наборе появилась неизвестная или повторная запись";
КонецЕсли;
КодРодителя = "";
Если Не Выборка.Родитель.Пустая() Тогда
КодРодителя = Выборка.Родитель.Код;
КонецЕсли;
Если Выборка.Наименование <> Ожидание.Наименование Или Выборка.Артикул <> Ожидание.Артикул
Или КодРодителя <> Ожидание.Родитель Или Выборка.ЭтоГруппа <> Ожидание.ЭтоГруппа
Или Выборка.ПометкаУдаления Или Выборка.Предопределенный Тогда
ВызватьИсключение "Запись отличается от собственного учебного набора";
КонецЕсли;
Данные.Вставить(Выборка.Код, Выборка.Ссылка);
КонецЦикла;
Если Данные.Количество() <> 5 Тогда
ВызватьИсключение "Вручную подготовьте ровно две свои группы и три товара";
КонецЕсли;
Данные.Вставить("Пустая", Справочники.УчебныеТовары.ПустаяСсылка());
Возврат Данные;
КонецФункции
Функция СнятьПрофиль(Поле)
Возврат Новый Структура("Автонумерация,АвтоОбновление,ВосстанавливатьТекущуюСтроку,Дерево,ИерархическийПросмотр,ИзменятьАвтоОбновление,ИзменятьИерархическийПросмотр,ИзменятьСпособРедактирования,ИзменятьТекущегоРодителя,ПериодАвтоОбновления,ПроверкаОтображенияНовойСтроки,ПросмотрГруппИЭлементов,РодительВерхнегоУровня,СпособРедактирования",
Поле.Автонумерация,
Поле.АвтоОбновление,
Поле.ВосстанавливатьТекущуюСтроку,
Поле.Дерево,
Поле.ИерархическийПросмотр,
Поле.ИзменятьАвтоОбновление,
Поле.ИзменятьИерархическийПросмотр,
Поле.ИзменятьСпособРедактирования,
Поле.ИзменятьТекущегоРодителя,
Поле.ПериодАвтоОбновления,
Поле.ПроверкаОтображенияНовойСтроки,
Поле.ПросмотрГруппИЭлементов,
Поле.РодительВерхнегоУровня,
Поле.СпособРедактирования);
КонецФункции
Процедура ПрименитьПрофиль(Поле, Профиль)
Если Профиль.ПериодАвтоОбновления < 5 Тогда
ВызватьИсключение "Native период автообновления не меньше пяти секунд";
КонецЕсли;
Поле.АвтоОбновление = Ложь;
Поле.РодительВерхнегоУровня = СвоиДанные.Пустая;
Поле.ТекущийРодитель = СвоиДанные.Пустая;
Поле.Автонумерация = Профиль.Автонумерация;
Поле.ВосстанавливатьТекущуюСтроку = Профиль.ВосстанавливатьТекущуюСтроку;
Поле.Дерево = Профиль.Дерево;
Поле.ИерархическийПросмотр = Профиль.ИерархическийПросмотр;
Поле.ИзменятьАвтоОбновление = Профиль.ИзменятьАвтоОбновление;
Поле.ИзменятьИерархическийПросмотр = Профиль.ИзменятьИерархическийПросмотр;
Поле.ИзменятьСпособРедактирования = Профиль.ИзменятьСпособРедактирования;
Поле.ИзменятьТекущегоРодителя = Профиль.ИзменятьТекущегоРодителя;
Поле.ПериодАвтоОбновления = Профиль.ПериодАвтоОбновления;
Поле.ПроверкаОтображенияНовойСтроки = Профиль.ПроверкаОтображенияНовойСтроки;
Поле.ПросмотрГруппИЭлементов = Профиль.ПросмотрГруппИЭлементов;
Поле.РодительВерхнегоУровня = Профиль.РодительВерхнегоУровня;
Поле.СпособРедактирования = Профиль.СпособРедактирования;
Если Профиль.РодительВерхнегоУровня <> СвоиДанные.Пустая Тогда
Поле.ТекущийРодитель = Профиль.РодительВерхнегоУровня;
КонецЕсли;
Поле.АвтоОбновление = Профиль.АвтоОбновление;
КонецПроцедуры
Процедура ПроверитьПрофиль(Поле, Ожидание)
Факт = СнятьПрофиль(Поле);
Если Факт.Количество() <> 14 Или Ожидание.Количество() <> 14 Тогда
ВызватьИсключение "Профиль содержит ровно четырнадцать скалярных свойств";
КонецЕсли;
Для Каждого Пара Из Ожидание Цикл
Если ТипЗнч(Факт[Пара.Ключ]) <> ТипЗнч(Пара.Значение) Или Факт[Пара.Ключ] <> Пара.Значение Тогда
ВызватьИсключение "Не подтверждено свойство поля " + Пара.Ключ;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура НастроитьДоступность(Разрешено)
Поле = ЭлементыФормы.СписокТоваров;
УправлениеОтбором = Поле.НастройкаОтбора;
УправлениеПорядком = Поле.НастройкаПорядка;
ОтборИмени = УправлениеОтбором.Найти("Наименование");
ПорядокКода = УправлениеПорядком.Найти("Код");
Если ОтборИмени = Неопределено Или ПорядокКода = Неопределено Тогда
ВызватьИсключение "Сверьте колонки и поля настройки собственного списка: Наименование и Код";
КонецЕсли;
Если ОтборИмени.Имя <> "Наименование" Или ПорядокКода.Имя <> "Код" Тогда
ВызватьИсключение "Найдены другие элементы управления настройками";
КонецЕсли;
ОтборИмени.Доступность = Разрешено;
ПорядокКода.Доступность = Разрешено;
Если ОтборИмени.Доступность <> Разрешено Или ПорядокКода.Доступность <> Разрешено Тогда
ВызватьИсключение "Доступность интерактивной настройки не подтверждена";
КонецЕсли;
КонецПроцедуры
Процедура РазрешитьНастройки(Кнопка)
НастроитьДоступность(Истина);
КонецПроцедуры
Процедура ЗапретитьНастройки(Кнопка)
НастроитьДоступность(Ложь);
КонецПроцедуры
Процедура ПлоскийСписок(Кнопка)
УстановитьСвойВид("Плоский");
КонецПроцедуры
Процедура ДеревоГрупп(Кнопка)
УстановитьСвойВид("Дерево");
КонецПроцедуры
Процедура ТолькоОсновной(Кнопка)
УстановитьСвойВид("Основной");
КонецПроцедуры
Процедура УстановитьСвойВид(Режим)
Товары.Отбор.Сбросить();
Товары.Порядок.Установить("Код Возр");
Поле = ЭлементыФормы.СписокТоваров;
ПрименитьПрофиль(Поле, НовыйПрофиль(Режим));
ПроверитьПрофиль(Поле, НовыйПрофиль(Режим));
Товары.Обновить();
Поле.ОбновитьСтроки();
КонецПроцедуры
Процедура ТолькоКнига(Кнопка)
УстановитьСвойВид("Плоский");
Товары.Отбор.Код.Установить("A01", Истина);
Товары.Обновить();
ЭлементыФормы.СписокТоваров.ТекущаяСтрока = СвоиДанные.A01;
Сообщить("Ожидается единственная книга A01; это настоящий отбор объекта списка");
КонецПроцедуры
Процедура АвтоДесятьСекунд(Кнопка)
Поле = ЭлементыФормы.СписокТоваров;
Поле.ПериодАвтоОбновления = 10;
Поле.АвтоОбновление = Истина;
Если Поле.ПериодАвтоОбновления <> 10 Или Не Поле.АвтоОбновление Тогда
ВызватьИсключение "Не подтверждено собственное автообновление";
КонецЕсли;
Сообщить("Автообновление разрешено с периодом 10 секунд; это не точный таймер");
КонецПроцедуры
Процедура РучноеОбновление(Кнопка)
ЭлементыФормы.СписокТоваров.АвтоОбновление = Ложь;
Товары.Обновить();
ЭлементыФормы.СписокТоваров.ОбновитьСтроки();
КонецПроцедуры
Процедура ПроверитьВосстановление(Кнопка)
УстановитьСвойВид("Плоский");
Поле = ЭлементыФормы.СписокТоваров;
Снимок = СнятьПрофиль(Поле);
ОтборИмени = Поле.НастройкаОтбора.Найти("Наименование");
ПорядокКода = Поле.НастройкаПорядка.Найти("Код");
Если ОтборИмени = Неопределено Или ПорядокКода = Неопределено Тогда
ВызватьИсключение "Нет собственных элементов управления настройками";
КонецЕсли;
БылОтборДоступен = ОтборИмени.Доступность;
БылПорядокДоступен = ПорядокКода.Доступность;
Попытка
Измененный = НовыйПрофиль("Дерево");
Измененный.АвтоОбновление = Истина;
Измененный.ПериодАвтоОбновления = 15;
Измененный.ВосстанавливатьТекущуюСтроку = Истина;
Измененный.Автонумерация = АвтонумерацияВФорме.Авто;
Измененный.СпособРедактирования = СпособРедактированияСписка.ВСписке;
Измененный.ПроверкаОтображенияНовойСтроки = ВариантПроверкиОтображенияНовойСтроки.НеПроверять;
ПрименитьПрофиль(Поле, Измененный);
ПроверитьПрофиль(Поле, Измененный);
НастроитьДоступность(Ложь);
Исключение
ВосстановитьСнимок(Поле, Снимок, ОтборИмени, ПорядокКода, БылОтборДоступен, БылПорядокДоступен);
ВызватьИсключение;
КонецПопытки;
ВосстановитьСнимок(Поле, Снимок, ОтборИмени, ПорядокКода, БылОтборДоступен, БылПорядокДоступен);
Сообщить("14 скалярных свойств и две доступности восстановлены к своему плоскому профилю");
КонецПроцедуры
Процедура ВосстановитьСнимок(Поле, Снимок, ОтборИмени, ПорядокКода, БылОтборДоступен, БылПорядокДоступен)
ПрименитьПрофиль(Поле, Снимок);
ПроверитьПрофиль(Поле, Снимок);
ОтборИмени.Доступность = БылОтборДоступен;
ПорядокКода.Доступность = БылПорядокДоступен;
Если ОтборИмени.Доступность <> БылОтборДоступен Или ПорядокКода.Доступность <> БылПорядокДоступен Тогда
ВызватьИсключение "Восстановление двух доступностей не подтверждено";
КонецЕсли;
Товары.Обновить();
Поле.ОбновитьСтроки();
КонецПроцедуры
Процедура ЗакрытьСписок(Кнопка)
ЭтаФорма.Закрыть();
КонецПроцедуры
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ЭлементыФормы.СписокТоваров.АвтоОбновление = Ложь;
КонецПроцедурыУчебныйСписок85.Пульт
УчебныеВыборкиКаталога85 → Обработки → УчебныйСписок85 → Формы → Пульт → Модуль
Полный отдельный модуль обычной формы Пульта; настройка дочернего списка до открытия, не выполнялся.
Перем СвоеОкно;
Процедура ПриОткрытии()
УчебныйКаталог85.ПроверитьСвойСтенд();
СвоеОкно = Неопределено;
КонецПроцедуры
Процедура ОткрытьПлоский(Кнопка)
СоздатьСвоеОкно("Плоский");
КонецПроцедуры
Процедура ОткрытьДерево(Кнопка)
СоздатьСвоеОкно("Дерево");
КонецПроцедуры
Процедура СоздатьСвоеОкно(Режим)
УчебныйКаталог85.ПроверитьСвойСтенд();
Если СвоеОкно <> Неопределено Тогда
Если СвоеОкно.Открыта() Тогда
ВызватьИсключение "Сначала закройте собственный список";
КонецЕсли;
КонецЕсли;
Ключ = Новый УникальныйИдентификатор;
Окно = Обработки.УчебныйСписок85.ПолучитьФорму("Список", ЭтаФорма, Ключ);
Если Окно = Неопределено Тогда
ВызватьИсключение "Своя обычная форма Список не создана";
КонецЕсли;
Если ТипЗнч(Окно) <> Тип("Форма") Тогда
ВызватьИсключение "Нужна обычная форма толстого клиента";
КонецЕсли;
Если Окно.Открыта() Или Окно.КлючУникальности <> Ключ Или Окно.ВладелецФормы <> ЭтаФорма.ЭтаФорма Тогда
ВызватьИсключение "Не перенастраиваем чужое или открытое окно";
КонецЕсли;
Окно.КлючСохраненияПоложенияОкна = "УчебныйСписок85.МойОпыт." + Строка(Ключ);
Окно.ЗакрыватьПриЗакрытииВладельца = Истина;
Окно.ПодготовитьДоОткрытия(Режим);
СвоеОкно = Окно;
Окно.Открыть();
КонецПроцедуры
Процедура ЗакрытьСвойСписок(Кнопка)
ЗакрытьСвоеОкно();
КонецПроцедуры
Процедура ЗакрытьСвоеОкно()
Если СвоеОкно <> Неопределено Тогда
Если СвоеОкно.Открыта() Тогда
СвоеОкно.Закрыть();
Если СвоеОкно.Открыта() Тогда
ВызватьИсключение "Свой список отказался закрываться";
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ЗакрытьСвоеОкно();
КонецПроцедурыУчебныйКаталог85.ПроверкаСтенда
УчебныеВыборкиКаталога85 → Общие → Общие модули → УчебныйКаталог85
Полный серверный модуль проверки собственного стенда; не выполнялся.
Процедура ПроверитьСвойСтенд() Экспорт
Если Метаданные.Справочники.Количество() <> 1 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Каталог = Метаданные.Справочники[0];
Если Каталог.Имя <> "УчебныеТовары" Или Не Каталог.Иерархический
Или Каталог.Реквизиты.Количество() <> 1 Или Каталог.Реквизиты.Найти("Артикул") = Неопределено Тогда
ВызватьИсключение "Нужен собственный иерархический справочник с единственным реквизитом Артикул";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Пульт готовит собственное закрытое окно. ВосстанавливатьТекущуюСтроку=Ложь устанавливается до открытия, чтобы начальный опыт не рассчитывал на ранее сохранённую позицию. Смена этого флага в открытом окне не является проверкой восстановления при следующем открытии.
Плоский профиль: Дерево=Ложь, ИерархическийПросмотр=Ложь, просмотр только элементов. Ожидаются A01,A02,B01. Дерево включает обе настройки и просмотр групп/элементов: G01 → A01,A02 и G02 → B01.
ТолькоОсновной ограничивает РодительВерхнегоУровня ссылкой G01, устанавливает ТекущийРодитель=G01 и запрещает пользователю его менять. Это область просмотра, а не изменение реквизита Родитель у товара.
Товары — реальный СправочникСписок.УчебныеТовары, не таблица значений. Через readonly Колонки получаем изменяемую коллекцию: для Код, Наименование и собственного Артикул проверяем Найти и добавляем только отсутствующую колонку. Колонки источника и колонки табличного поля связаны в редакторе, но это не одна коллекция.
ТолькоКнига сначала задаёт собственный плоский вид, затем Товары.Отбор.Код.Установить("A01",Истина). Реальный порядок Товары.Порядок задаётся Код Возр. Обновить перечитывает список из базы, ОбновитьСтроки обновляет видимые строки поля.
НастройкаОтбора и НастройкаПорядка readonly как свойства поля, но их элементы позволяют менять Доступность. Наименование и Код находятся через Найти, проверяется отсутствие; блокировка диалога не снимает программный отбор и не меняет сортировку.
ИзменятьАвтоОбновление и ИзменятьИерархическийПросмотр — разрешения интерактивного изменения, не сами режимы. ИзменятьСпособРедактирования также не запрет записи. ТолькоПросмотр остаётся Истина во всех профилях.
АвтоОбновление включает перечитывание с ПериодАвтоОбновления в секундах, минимум 5; здесь 10. Ручное обновление отключает его. Флаг/период не доказывают точный тайминг и не создают новых данных.
АвтонумерацияВФорме.НеИспользовать/Авто относится к вводу номера в форме; Авто зависит от метаданных. СпособРедактирования ВДиалоге/ВСписке и ПроверкаОтображенияНовойСтроки относятся к будущему интерактивному вводу. На readonly-поле новые строки не вводятся, поэтому их эффект на запись здесь не проверяется.
ПроверитьВосстановление намеренно начинает с собственного известного плоского вида, снимает 14 скалярных значений и два флага доступности, меняет профиль и проверяет возврат при успехе/ошибке. Автообновление выключается на время присваиваний и возвращается последним.
Этот снимок не клонирует произвольные отборы, сортировки, текущую строку или пользовательский профиль. До снимка выбраны собственные Отбор.Сбросить и Код Возр; цикл возвращает только явно перечисленные значения, не прежний произвольный экран пользователя.
Как проверить результат
Будущий ручной тест: плоский вид показывает только A01,A02,B01, дерево показывает две свои ветви, ТолькоОсновной — только товары группы G01, ТолькоКнига — A01. Набор базы при этом всё ещё состоит из пяти записей.
ЗапретитьНастройки: в стандартном диалоге нельзя изменять отбор Наименование и порядок Код. РазрешитьНастройки возвращает возможность. Это проверяйте глазами, а не только считанным флагом.
ПроверитьВосстановление должно вывести подтверждение 14 свойств и двух доступностей; поле снова в собственном плоском режиме. В копии кода после применения нового профиля измените период на 20 перед проверкой: должно быть исключение с восстановлением.
АвтоДесятьСекунд проверяет назначение 10 секунд и флаг. Без второго сеанса, изменяющего данные, это не доказательство получения новых записей или точного периода. Не изменяйте рабочие данные для такого теста.
Для отдельного будущего опыта восстановления позиции задайте ВосстанавливатьТекущуюСтроку=Истина до открытия своей формы и повторите открытие того же собственного профиля после сохранённой позиции. Не объявляйте восстановление доказанным по переключению в уже открытом окне.
Закройте Список или Пульт: свой обработчик выключает автообновление и закрывается только собственное окно. Пять подготовленных записей не удаляются.
Ожидаемый результат
Подготовлены полный модуль собственного списка, отдельный Пульт и защита стенда; параметры, доступности и границы проверок описаны без обещания запуска в 1С. runtimeVerifiedScenarios=0.
На что обратить внимание
Расширение относится к ТабличноеПоле обычной формы с данными СправочникСписок, не к управляемому ДинамическомуСписку и не к ТаблицеЗначений.
НастройкаОтбора/НастройкаПорядка не содержат условия и направления сортировки. Не присваивайте readonly свойства и не вызывайте Добавить у настройки динамического списка: native это запрещает.
Флаги интерактивной доступности не заменяют права доступа. Поле readonly, модули пустые, код не вызывает Записать; текущий опыт не проверяет автонумерацию при записи или ввод новой строки.
Параметры формы/списка могут сохраняться платформой в собственном пользовательском профиле. Новый собственный ключ не очищает чужие настройки и не доказывает отсутствие внутренних служебных записей.
Если восстановление само отказало, успешное сообщение не выводится. Не выдавайте частичное присваивание свойств за атомарное восстановление произвольного UI.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.