Расширение табличного поля списка справочника.Автонумерация

Свойства · Autonumeration

Тип: АвтонумерацияВФорме. Режим автонумерации.

Полное описание, параметры и ограничения

Расширение табличного поля списка справочника.Автонумерация (Catalog list table box extension.Autonumeration)

Расширение табличного поля списка справочника (Catalog list table box extension)

Автонумерация (Autonumeration)

Доступен, начиная с версии 8.1.

Использование:
Чтение и запись.
Описание:
Тип: АвтонумерацияВФорме.
Режим автонумерации.
Доступность:

Толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Настроить собственный список товаров: дерево, отбор, доступность и обновление

На двух группах и трёх товарах сравниваем плоский список, дерево и ограниченную группу. Реальный отбор отделён от доступности диалога настройки; отдельный цикл возвращает 14 скалярных свойств и два флага доступности.

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

Полный модуль ОБЫЧНОЙ формы Список собственной обработки УчебныйСписок85; отдельные модули Пульта и серверной защиты ниже. Только толстый клиент, не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу на 8.5.1.1343, конфигурация УчебныеВыборкиКаталога85, совместимость НеИспользовать, обычное приложение и толстый клиент. Это не рабочая база/копия УТ, КА, УНФ или БП. UI здесь не запускался: runtimeVerifiedScenarios=0.

  2. Единственный справочник УчебныеТовары: иерархия групп и элементов, владельцев и предопределенных строк нет; Код Строка(10), автонумерация выключена, контроль уникальности включён, Наименование(100), единственный Артикул Строка(20), для групп и элементов, Индексировать. Прочие бизнес-объекты, разделители, расширения, подписки и задания отсутствуют; модули справочника/менеджера пусты.

  3. ВРУЧНУЮ только в этом своём стенде запишите ровно пять записей: группы G01 Основной/GROUP-A и G02 Архив/GROUP-B в корне; A01 Книга/BOOK-A и A02 Ручка/PEN-A под G01; B01 Книга/BOOK-B под G02. Все без пометок. В отличие от урока отменяемой выборки, данные здесь остаются для будущего UI-теста; код урока их только читает.

  4. Обработка УчебныйСписок85: обычные формы Пульт и Список, Пульт основная. В Список создайте реквизит Товары типа СправочникСписок.УчебныеТовары и табличное поле СписокТоваров, данные которого именно Товары. Колонки Код, Наименование, Артикул связаны с одноимёнными колонками списка. У поля ТолькоПросмотр=Да, команды создания/записи/удаления не добавляйте.

  5. В Список добавьте кнопки ПлоскийСписок, ДеревоГрупп, ТолькоОсновной, ТолькоКнига, РазрешитьНастройки, ЗапретитьНастройки, АвтоДесятьСекунд, РучноеОбновление, ПроверитьВосстановление, ЗакрытьСписок; назначьте одноимённые действия и события ПриОткрытии/ПередЗакрытием. Вставьте полный основной модуль. Оставьте доступ к стандартному диалогу настройки списка через контекстное меню поля для проверки доступностей.

  6. В Пульт добавьте ОткрытьПлоский, ОткрытьДерево и ЗакрытьСвойСписок, назначьте действия и события ПриОткрытии/ПередЗакрытием. Вставьте полный отдельный модуль Пульта ниже. Он получает своё закрытое окно с новым UUID и вызывает ПодготовитьДоОткрытия до Открыть.

  7. Общий модуль УчебныйКаталог85: неглобальный, Сервер=Да, Вызов сервера=Да, клиентские флаги=Нет, привилегированный=Нет. Вставьте полный модуль защиты стенда ниже, без подготовки/записи пяти товаров. Обновите конфигурацию базы, проверьте F7 и привязку данных табличного поля вручную.

  8. Найдённые элементы настройки Наименование и Код должны существовать у подготовленного динамического списка. Если их нет, сценарий отказывает: не добавляйте их через Добавить и не подменяйте список таблицей значений. ТолькоПросмотр запрещает редактирование поля, не является правами доступа.

Перем СвоиДанные;
Перем Подготовлено;

Процедура ПодготовитьДоОткрытия(Режим) Экспорт
    УчебныйКаталог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 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. Пульт готовит собственное закрытое окно. ВосстанавливатьТекущуюСтроку=Ложь устанавливается до открытия, чтобы начальный опыт не рассчитывал на ранее сохранённую позицию. Смена этого флага в открытом окне не является проверкой восстановления при следующем открытии.

  2. Плоский профиль: Дерево=Ложь, ИерархическийПросмотр=Ложь, просмотр только элементов. Ожидаются A01,A02,B01. Дерево включает обе настройки и просмотр групп/элементов: G01 → A01,A02 и G02 → B01.

  3. ТолькоОсновной ограничивает РодительВерхнегоУровня ссылкой G01, устанавливает ТекущийРодитель=G01 и запрещает пользователю его менять. Это область просмотра, а не изменение реквизита Родитель у товара.

  4. Товары — реальный СправочникСписок.УчебныеТовары, не таблица значений. Через readonly Колонки получаем изменяемую коллекцию: для Код, Наименование и собственного Артикул проверяем Найти и добавляем только отсутствующую колонку. Колонки источника и колонки табличного поля связаны в редакторе, но это не одна коллекция.

  5. ТолькоКнига сначала задаёт собственный плоский вид, затем Товары.Отбор.Код.Установить("A01",Истина). Реальный порядок Товары.Порядок задаётся Код Возр. Обновить перечитывает список из базы, ОбновитьСтроки обновляет видимые строки поля.

  6. НастройкаОтбора и НастройкаПорядка readonly как свойства поля, но их элементы позволяют менять Доступность. Наименование и Код находятся через Найти, проверяется отсутствие; блокировка диалога не снимает программный отбор и не меняет сортировку.

  7. ИзменятьАвтоОбновление и ИзменятьИерархическийПросмотр — разрешения интерактивного изменения, не сами режимы. ИзменятьСпособРедактирования также не запрет записи. ТолькоПросмотр остаётся Истина во всех профилях.

  8. АвтоОбновление включает перечитывание с ПериодАвтоОбновления в секундах, минимум 5; здесь 10. Ручное обновление отключает его. Флаг/период не доказывают точный тайминг и не создают новых данных.

  9. АвтонумерацияВФорме.НеИспользовать/Авто относится к вводу номера в форме; Авто зависит от метаданных. СпособРедактирования ВДиалоге/ВСписке и ПроверкаОтображенияНовойСтроки относятся к будущему интерактивному вводу. На readonly-поле новые строки не вводятся, поэтому их эффект на запись здесь не проверяется.

  10. ПроверитьВосстановление намеренно начинает с собственного известного плоского вида, снимает 14 скалярных значений и два флага доступности, меняет профиль и проверяет возврат при успехе/ошибке. Автообновление выключается на время присваиваний и возвращается последним.

  11. Этот снимок не клонирует произвольные отборы, сортировки, текущую строку или пользовательский профиль. До снимка выбраны собственные Отбор.Сбросить и Код Возр; цикл возвращает только явно перечисленные значения, не прежний произвольный экран пользователя.

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

  1. Будущий ручной тест: плоский вид показывает только A01,A02,B01, дерево показывает две свои ветви, ТолькоОсновной — только товары группы G01, ТолькоКнига — A01. Набор базы при этом всё ещё состоит из пяти записей.

  2. ЗапретитьНастройки: в стандартном диалоге нельзя изменять отбор Наименование и порядок Код. РазрешитьНастройки возвращает возможность. Это проверяйте глазами, а не только считанным флагом.

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

  4. АвтоДесятьСекунд проверяет назначение 10 секунд и флаг. Без второго сеанса, изменяющего данные, это не доказательство получения новых записей или точного периода. Не изменяйте рабочие данные для такого теста.

  5. Для отдельного будущего опыта восстановления позиции задайте ВосстанавливатьТекущуюСтроку=Истина до открытия своей формы и повторите открытие того же собственного профиля после сохранённой позиции. Не объявляйте восстановление доказанным по переключению в уже открытом окне.

  6. Закройте Список или Пульт: свой обработчик выключает автообновление и закрывается только собственное окно. Пять подготовленных записей не удаляются.

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

Подготовлены полный модуль собственного списка, отдельный Пульт и защита стенда; параметры, доступности и границы проверок описаны без обещания запуска в 1С. runtimeVerifiedScenarios=0.

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

  1. Расширение относится к ТабличноеПоле обычной формы с данными СправочникСписок, не к управляемому ДинамическомуСписку и не к ТаблицеЗначений.

  2. НастройкаОтбора/НастройкаПорядка не содержат условия и направления сортировки. Не присваивайте readonly свойства и не вызывайте Добавить у настройки динамического списка: native это запрещает.

  3. Флаги интерактивной доступности не заменяют права доступа. Поле readonly, модули пустые, код не вызывает Записать; текущий опыт не проверяет автонумерацию при записи или ввод новой строки.

  4. Параметры формы/списка могут сохраняться платформой в собственном пользовательском профиле. Новый собственный ключ не очищает чужие настройки и не доказывает отсутствие внутренних служебных записей.

  5. Если восстановление само отказало, успешное сообщение не выводится. Не выдавайте частичное присваивание свойств за атомарное восстановление произвольного UI.

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

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

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

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

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