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

Свойства · StandardPeriod

Тип: НастройкаПериода. Содержит объект НастройкаПериода, в соответствии с которым осуществляется настройка периода списка документов при открытии формы, содержащей данное табличное поле.

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

Расширение табличного поля списка документов.СтандартныйПериод (Document list table box extension.StandardPeriod)

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

СтандартныйПериод (StandardPeriod)

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

Использование:
Чтение и запись.
Описание:
Тип: НастройкаПериода.
Содержит объект НастройкаПериода, в соответствии с которым осуществляется настройка периода списка документов при открытии формы, содержащей данное табличное поле.
Доступность:

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

См. также:
НастройкаПериода

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

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

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

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

Колонки источника и видимые колонки обычного списка: свой профиль и реальные выбранные строки

Полный отдельный ordinary стенд с тремя своими документами2/200,3/300,5/500. Native factory создаёт собственную форму списка; урок объясняет Source.Columns≠GUI.Columns, AutoDeleteFalse/True, строковый source.Delete и плановую перестройку только собственного layout. Native событие доставляет настоящие currentrow/currentdata; SQL-паспорт не подменяет UI-проверку.

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

Windows8.5.1.1343, толстый клиент, обычное приложение/обычные формы, новая собственная файловая ИБ. MAIN — полная собственная ordinary форма-контроллер; actual child metadata Документ.Уч85Профиль.Форма.ФормаСписка с основным реквизитом ДокументСписок.Уч85Профиль и обычным ТабличноеПоле. Не managed DynamicList. Здесь только исходники/статические проверки, actual1C/DB/UI/files/network0.

Подготовка

  1. В собственной Windows VM вручную подготовьте НОВУЮ пустую файловую ИБ C:\1c-labs\OwnList85_8d18bc25-d53c-45eb-a8f8-4b14b9c6c682\IB, CF Уч85ПрофилиСписка, Основной режим запуска Обычное приложение. Платформа8.5.1.1343, толстый клиент. Не используйте УТ/КА/УНФ/БП/рабочие базы/старую CF предыдущего урока. Здесь ничего не создаётся и не запускается.

  2. Ровно один собственный пользователь Уч85Список_8d18bc25. В новой CF создайте роль Уч85Стенд с Администрирование для native чтения массива пользователей, чтением/добавлением/изменением своего Уч85Профиль; назначьте её только этому собственному пользователю. Не выдавайте права в рабочих ИБ. COMMON сверяет настоящий native current user и Users[0] при Count1, включая typed UUID; никаких UUID placeholders/ручной подстановки нет.

  3. Метка8d18bc25-d53c-45eb-a8f8-4b14b9c6c682 — не native UUID ИБ. Сценарий получает новый native UUID при запуске, пользователь — реальный UUID текущей авторизации. UUID самой ИБ не измеряется. Guard адреса требует exact File строки; если она иная, остановитесь и проверьте фактический адрес, не ослабляйте сравнение подстрокой.

  4. В CF только один документ Уч85Профиль, проведение Запретить, автонумерация строкового номера. Реквизиты Метка85/Пользователь85/Сценарий85 Строка36, Количество Число3,0, Сумма Число15,2, Описание85 Строка100. Дата стандартная включает время. Модуль объекта оставьте пустым: нет собственных обработчиков, движений и реальных регистров. Не добавляйте другие документы/справочники/регистры/задания/обмены/расширения/разделители.

  5. В Общих модулях создайте Уч85СписокСтенд: КлиентОбычноеПриложение=True, Сервер=False, Глобальный=False, Привилегированный=False, повторное использование Не использовать. Вставьте целиком COMMON. Native UserManager доступен здесь именно в толстом клиенте; не переносите его вызовы в тонкий клиент. Код читает только known собственный стенд и проверяет реальные saved ссылки/UUID/данные.

  6. В Документ.Уч85Профиль → Формы мастером создайте ОБЫЧНУЮ ФормаСписка; назначьте основной формой списка. Основной реквизит Список имеет тип ДокументСписок.Уч85Профиль. Это реальный metadata source native расширения формы списка документов, не общая форма с переименованной переменной и не managed ДинамическийСписок.

  7. В ordinary ФормаСписка подготовьте один ТабличноеПоле с именем Список и Данные=Список, ТолькоПросмотр=True. Перед сохранением metadata удалите ВСЕ его GUI-колонки в Конфигураторе: первоначальный GUI Count0 — явная подготовка этого известного собственного layout. Список-source и таблица имеют одинаковое имя, но код проверяет native metadata type плюс actual value identity/data-binding/control identity, а не только имена.

  8. Форму списка сделайте только для просмотра: не добавляйте команды создания/редактирования/удаления/проведения/пометки удаления и автонаполняемые командные панели. Свои saved данные изменяет только явная команда контроллера до открытия списка. Readonly-control не абсолютная защита от произвольного административного кода; одна собственная сессия и известная CF обязательны.

  9. В модуль этой ФормаСписка вставьте LIST_FORM. Назначьте форме native ПередОткрытием(Отказ,СтандартнаяОбработка)2. Для ТабличноеПоле.Список событие ПриАктивизацииСтроки назначьте СписокПриАктивизацииСтроки(Элемент): base native event имеет0 параметров, ordinary extension добавляет первый Элемент, поэтому handler1. Не вызывайте этот обработчик вручную. ПодготовитьСвойПоказ85 — собственная обычная Export процедура инициализации, не native событие.

  10. Создайте обычную общую форму Уч85ПрофилиСписка, без основного прикладного реквизита, с реквизитами СогласиеНаСвоиТриЗаписи85 Булево и Статус85 Строка1000. Флажок согласия доступен, поле Статус85 только для просмотра. Вставьте MAIN/CONTROLLER целиком. Он хранит actual свежий child-instance из manager.GetListForm, не ищет чужие формы и не конструирует абстрактные КолонкиСписка.

  11. В этой общей форме создайте4 обычные кнопки: СоздатьСвоиТри85, ПоказатьСемантикуУдаления85, ПерестроитьСвойМакет85, ПроверитьИтог85. Native Нажатие у Кнопка имеет0 параметров; ordinary extension добавляет первый Элемент, значит свяжите их Нажатие с одноимённой процедурой(Элемент). Это не managed command handler и не ручной callback.

  12. В Модуль обычного приложения вставьте APPLICATION с native ПриНачалеРаботыСистемы0. Оно проверяет пустоту и открывает именно свою общую форму через native ПолучитьОбщуюФорму. CF и формы сохраните/проверьте/запустите сами; actual compile/UI здесь0.

  13. Убедитесь вручную: пустая таблица документов, одна сессия, один actual пользователь, нужная роль, точный File адрес, только свой документ/CF, GUI metadata initially0. Первое действие создаст ровно3 собственных записи с явным согласием. Частичная запись оставляет unknown flag и сохранённые свои данные для проверки человеком; автоматических очисток/повторов/отмены транзакции/backup нет.

  14. GUI КолонкаТабличногоПоля.Данные — StringRW, имя source column. Source КолонкаСписка.Имя readonly. Не копируйте legacy пример с GUI.Значение на объект колонки: актуальная native TableBoxColumn использует Данные. Поле ТабличноеПоле.Данные связывает переменную основного реквизита через ordinary control-extension, .Значение возвращает actual native список; этот field никогда не используется владельцем окна.

  15. Явный свой source whitelist8: Ссылка,Дата,Номер,Количество,Сумма,Метка85,Пользователь85,Сценарий85. GUI4: Дата,Номер,Количество,Сумма. Ссылку и UUID держим в source для проверки delivered currentdata, но не показываем пользователю как редактируемые поля. Список.Колонки readonly factory→collection; нельзя присвоить новый абстрактный объект списку.

  16. Настройка времени own list — именно НастройкаПериода, не СтандартныйПериод из managed/СКД. Его native ctor0 даёт обе границы БезОграничения; код проверяет фактические пустые GetDateFrom/GetDateTo и назначает field.СтандартныйПериод ДО Открыть. Это гарантируемое raw contract ожидание, actual список ещё не запускался; не оставляйте default текущий месяц, скрывающий январские учебные документы.

  17. Native ПараметрТекущаяСтрока получает свою сохранённую ссылку3/300 до открытия. Raw позиционирование происходит только при open/reopen, не при любом последующем присваивании. После открытия сами щёлкните все свои2,3,5; SQL-count3 не считается доказательством того, что GUI их отобразил или native event доставил.

  18. В текущие3 записи входят даты02/03/04.01.2026 с00:00, количества2/3/5, суммы200/300/500 и свои описания. COMMON читает реальную таблицу по typed refs и UUID и сверяет Qty10/Sum1000. Отбор.Add/Delete/GetAvailableFields для DocumentList.Filter нативно НЕ доступны; их намеренно нет в PRIMARY/коде и они не подменяются похожим standalone Отбор.

  19. AutoDeleteFalse означает: удаление видимой GUI-колонки сохраняет её source-column. AutoDeleteTrue на том же actual source-column означает: native удаление собственной связанной GUI-колонки удаляет source-column тоже. Это не удаление реквизита metadata или записей документа. Source.Columns.Удалить принимает String name; GUI.Columns.Удалить принимает index либо actualGUIColumn, не наоборот.

  20. Reset разрешён лишь этому созданному целиком собственному child-instance/knownwhitelist/order/bindings и независимым данным3/10/1000. Вначале phase flag, все8 source.AutoDelete=False, потом ownGUI.Clear0, проверка GUI0/source8, ownSource.Clear0, проверка source0, только затем плановый Set8/Add4. После ошибки не выполняется blindrestore/retry/cleanup; ноль — явное проверенное промежуточное собственное состояние, не произвольная пустота.

  21. Данные native текущей строки не кэшируйте между профилями. LIST_FORM берёт свежие .ТекущаяСтрока/.ТекущиеДанные в настоящем событии; MAIN сравнивает actual form/control/data identities, concrete types, ownDocRef/UUID/values с отдельным DB-readback. Во время layout перехода событие не засчитывается; после каждого профиля нужны три реальных ручных выбора заново.

  22. Статические tests моделируют ошибки и сверяют source/API/raw8.5, но не заменяют BSL compiler/GUI-протокол. Ожидаемые результаты source9→8/native AutoDelete/currentrow/currentdata/0→8/4 должны быть подтверждены вручную в этом собственном стенде. Здесь actual writes/UI/1C/OS/network/files provisioning0; authored файлы урока не являются готовой CF.

Перем СвояФорма85;
Перем СвойСписок85;
Перем СвоеПоле85;
Перем СвоиСсылки85;
Перем Сценарий85;
Перем ЗапускНачат85;
Перем НеизвестныйИсход85;
Перем МеняемМакет85;
Перем Этап85;
Перем ДоставленныеСтроки85;

Процедура СоздатьСвоиТри85(Элемент)
    Если Не СогласиеНаСвоиТриЗаписи85 Или ЗапускНачат85 = Истина Тогда
        ВызватьИсключение "Нужно явное согласие на три собственные записи; повторное создание запрещено.";
    КонецЕсли;
    Уч85СписокСтенд.ПроверитьПустоту85();
    Паспорт = Уч85СписокСтенд.ПаспортСтенда85();
    ЗапускНачат85 = Истина;
    НеизвестныйИсход85 = Истина;
    МеняемМакет85 = Истина;
    Идентификатор = Новый УникальныйИдентификатор;
    Сценарий85 = Строка(Идентификатор);
    СвоиСсылки85 = Новый Массив;
    ДоставленныеСтроки85 = Новый Массив;
    Для Индекс = 0 По 2 Цикл
        Уч85СписокСтенд.ПрочитатьСвоиДанные85(Сценарий85, СвоиСсылки85);
        Количество = ?(Индекс = 0, 2, ?(Индекс = 1, 3, 5));
        Документ = Документы.Уч85Профиль.СоздатьДокумент();
        Документ.Дата = Дата(2026, 1, 2 + Индекс);
        Документ.Метка85 = Паспорт.Метка;
        Документ.Пользователь85 = Паспорт.Пользователь;
        Документ.Сценарий85 = Сценарий85;
        Документ.Количество = Количество;
        Документ.Сумма = Количество * 100;
        Документ.Описание85 = "Своя строка " + Строка(Количество);
        Документ.Записать(РежимЗаписиДокумента.Запись);
        Если Документ.ЭтоНовый() Или Документ.Ссылка.Пустая() Тогда
            ВызватьИсключение "Не получена реальная сохранённая ссылка, исход нельзя подменять ожидаемым.";
        КонецЕсли;
        СвоиСсылки85.Добавить(Документ.Ссылка);
        Уч85СписокСтенд.ПрочитатьСвоиДанные85(Сценарий85, СвоиСсылки85);
    КонецЦикла;
    КлючФормы = Новый УникальныйИдентификатор;
    СвояФорма85 = Документы.Уч85Профиль.ПолучитьФормуСписка("ФормаСписка", ЭтаФорма, КлючФормы);
    Если СвояФорма85 = Неопределено Или ТипЗнч(СвояФорма85) <> Тип("Форма")
        Или СвояФорма85.ВладелецФормы <> ЭтаФорма Тогда
        ВызватьИсключение "Нет собственного свежего ordinary list-instance из native manager factory.";
    КонецЕсли;
    СвойСписок85 = СвояФорма85.Список;
    СвоеПоле85 = СвояФорма85.ЭлементыФормы.Список;
    ПроверитьИсточник85();
    Если СвоеПоле85.Колонки.Количество() <> 0 Тогда
        ВызватьИсключение "В подготовленной своей форме GUI-колонки первоначально пустые; чужой layout не заменяем.";
    КонецЕсли;
    СвояФорма85.ПодготовитьСвойПоказ85(Сценарий85, СвоиСсылки85);
    СвойСписок85.Колонки.Установить("Ссылка,Дата,Номер,Количество,Сумма,Метка85,Пользователь85,Сценарий85");
    ПроверитьКолонкиИсточника85(Ложь);
    ДобавитьЧетыреВидимые85();
    Период = Новый НастройкаПериода;
    Если Период.ПолучитьДатуНачала() <> Дата(1, 1, 1) Или Период.ПолучитьДатуОкончания() <> Дата(1, 1, 1) Тогда
        ВызватьИсключение "Native новый период должен быть без ограничений, иначе учебные январские строки могут скрыться.";
    КонецЕсли;
    СвоеПоле85.СтандартныйПериод = Период;
    СвоеПоле85.РазрешитьНастройкуПериода = Ложь;
    СвояФорма85.ПараметрТекущаяСтрока = СвоиСсылки85[1];
    Если СвояФорма85.ПараметрТекущаяСтрока <> СвоиСсылки85[1] Тогда
        ВызватьИсключение "Не назначена собственная начальная ссылка3/300 до открытия формы.";
    КонецЕсли;
    Этап85 = 0;
    НеизвестныйИсход85 = Ложь;
    МеняемМакет85 = Ложь;
    СвояФорма85.Открыть();
    Статус85 = "В ИБ реально три свои строки10/1000. В отдельном native списке вручную выберите2,3,5 для проверки доставки.";
КонецПроцедуры

Процедура ПроверитьИсточник85()
    Уч85СписокСтенд.ПрочитатьСвоиДанные85(Сценарий85, СвоиСсылки85);
    Если ТипЗнч(СвойСписок85) <> Тип("ДокументСписок.Уч85Профиль")
        Или СвояФорма85.Список <> СвойСписок85 Или СвоеПоле85 <> СвояФорма85.ЭлементыФормы.Список
        Или ТипЗнч(СвоеПоле85) <> Тип("ТабличноеПоле") Или СвоеПоле85.Данные <> "Список"
        Или СвоеПоле85.Значение <> СвойСписок85 Или Не СвоеПоле85.ТолькоПросмотр Тогда
        ВызватьИсключение "Не совпал реальный metadata-source/own table/value-binding, не alias по имени переменной.";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьКолонкиИсточника85(СОписанием)
    Имена = СтрРазделить("Ссылка,Дата,Номер,Количество,Сумма,Метка85,Пользователь85,Сценарий85", ",");
    Если СвойСписок85.Колонки.Количество() <> Имена.Количество() + ?(СОписанием, 1, 0) Тогда
        ВызватьИсключение "Изменён полный собственный набор колонок источника, лишние колонки не удаляем.";
    КонецЕсли;
    Для Индекс = 0 По Имена.Количество() - 1 Цикл
        Колонка = СвойСписок85.Колонки.Получить(Индекс);
        Если ТипЗнч(Колонка) <> Тип("КолонкаСписка") Или Колонка.Имя <> Имена[Индекс]
            Или СвойСписок85.Колонки.Найти(Имена[Индекс]) <> Колонка Тогда
            ВызватьИсключение "Индекс/readonly Name/Find actual source-column не совпали с своим полным whitelist.";
        КонецЕсли;
    КонецЦикла;
    Если СОписанием Тогда
        КолонкаОписания = СвойСписок85.Колонки.Получить(8);
        Если КолонкаОписания.Имя <> "Описание85" Или СвойСписок85.Колонки.Найти("Описание85") <> КолонкаОписания Тогда
            ВызватьИсключение "Девятая source-колонка не собственное Описание85.";
        КонецЕсли;
    Иначе
        Если СвойСписок85.Колонки.Найти("Описание85") <> Неопределено Тогда
            ВызватьИсключение "Описание85 неожиданно осталось в источнике.";
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура ДобавитьЧетыреВидимые85()
    Если СвоеПоле85.Колонки.Количество() <> 0 Тогда
        ВызватьИсключение "Создание своих GUI-колонок допустимо только после проверенного пустого собственного layout.";
    КонецЕсли;
    Имена = СтрРазделить("Дата,Номер,Количество,Сумма", ",");
    Для Каждого Имя Из Имена Цикл
        Колонка = СвоеПоле85.Колонки.Добавить(Имя, Имя);
        Колонка.Данные = Имя;
        Колонка.ТолькоПросмотр = Истина;
        Если Колонка.Данные <> Имя Тогда
            ВызватьИсключение "GUI.Данные не связан с реальной собственной source-column.";
        КонецЕсли;
    КонецЦикла;
    ПроверитьВидимые85(Ложь);
КонецПроцедуры

Процедура ПроверитьВидимые85(СОписанием)
    Имена = СтрРазделить("Дата,Номер,Количество,Сумма", ",");
    Если СвоеПоле85.Колонки.Количество() <> 4 + ?(СОписанием, 1, 0) Тогда
        ВызватьИсключение "Чужая или неожиданная GUI-колонка: весь layout не чистим.";
    КонецЕсли;
    Для Индекс = 0 По 3 Цикл
        Колонка = СвоеПоле85.Колонки.Получить(Индекс);
        Если Колонка.Имя <> Имена[Индекс] Или Колонка.Данные <> Имена[Индекс]
            Или Не Колонка.ТолькоПросмотр Или СвоеПоле85.Колонки.Найти(Имена[Индекс]) <> Колонка Тогда
            ВызватьИсключение "Собственная GUI-позиция/data binding/readonly-control изменены.";
        КонецЕсли;
    КонецЦикла;
    Если СОписанием Тогда
        Описание = СвоеПоле85.Колонки.Получить(4);
        Если Описание.Имя <> "Описание85" Или Описание.Данные <> "Описание85" Тогда
            ВызватьИсключение "Дополнительная GUI-колонка не своё Описание85.";
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура ПринятьСвоюСтроку85(ФормаИсточник, ЭлементИсточник, Ссылка, Данные) Экспорт
    Если МеняемМакет85 = Истина Или НеизвестныйИсход85 = Истина Тогда
        Возврат;
    КонецЕсли;
    Если ФормаИсточник <> СвояФорма85 Или ЭлементИсточник <> СвоеПоле85
        Или ТипЗнч(Ссылка) <> Тип("ДокументСсылка.Уч85Профиль")
        Или ТипЗнч(Данные) <> Тип("ТекущиеДанныеСписка")
        Или Ссылка <> СвоеПоле85.ТекущаяСтрока Тогда
        ВызватьИсключение "Native delivery не от своих actual form/control/row/currentdata.";
    КонецЕсли;
    ПроверитьИсточник85();
    СвежиеДанные = СвоеПоле85.ТекущиеДанные;
    Если ТипЗнч(СвежиеДанные) <> Тип("ТекущиеДанныеСписка")
        Или СвежиеДанные.Ссылка <> Данные.Ссылка Или СвежиеДанные.Количество <> Данные.Количество
        Или СвежиеДанные.Сумма <> Данные.Сумма Или СвежиеДанные.Сценарий85 <> Данные.Сценарий85 Тогда
        ВызватьИсключение "Native текущие значения изменились между доставкой и чтением; стабильную identity wrapper не предполагаем.";
    КонецЕсли;
    Таблица = Уч85СписокСтенд.ПрочитатьСвоиДанные85(Сценарий85, СвоиСсылки85);
    Индекс = СвоиСсылки85.Найти(Ссылка);
    Если Индекс = Неопределено Тогда
        ВызватьИсключение "Ссылка не принадлежит своим реальным трём документам.";
    КонецЕсли;
    Сохранено = Таблица[Индекс];
    Если Данные.Ссылка <> Сохранено.Ссылка Или Данные.Количество <> Сохранено.Количество
        Или Данные.Сумма <> Сохранено.Сумма Или Данные.Дата <> Сохранено.Дата
        Или Данные.Номер <> Сохранено.Номер Или Данные.Метка85 <> Сохранено.Метка85
        Или Данные.Пользователь85 <> Сохранено.Пользователь85 Или Данные.Сценарий85 <> Сохранено.Сценарий85 Тогда
        ВызватьИсключение "Actual native currentdata, а не DB-расчёт, отличается от независимой собственной строки.";
    КонецЕсли;
    Если СвойСписок85.Колонки.Найти("Описание85") <> Неопределено И Данные.Описание85 <> Сохранено.Описание85 Тогда
        ВызватьИсключение "Source-only hidden Описание85 не прочиталось как реальное значение своего документа.";
    КонецЕсли;
    Если ДоставленныеСтроки85.Найти(Ссылка) = Неопределено Тогда
        ДоставленныеСтроки85.Добавить(Ссылка);
    КонецЕсли;
    Статус85 = "Native строка " + Строка(Данные.Количество) + "/" + Строка(Данные.Сумма)
        + "; доставлено разных своих ссылок " + Строка(ДоставленныеСтроки85.Количество()) + ". DB10/1000 проверяется отдельно.";
КонецПроцедуры

Процедура ПоказатьСемантикуУдаления85(Элемент)
    Если Этап85 <> 0 Или НеизвестныйИсход85 = Истина Или МеняемМакет85 = Истина
        Или ДоставленныеСтроки85.Количество() <> 3 Тогда
        ВызватьИсключение "Сначала native событие должно реально доставить все свои2,3,5; повтор/partial layout запрещён.";
    КонецЕсли;
    ПроверитьИсточник85();
    ПроверитьКолонкиИсточника85(Ложь);
    ПроверитьВидимые85(Ложь);
    НеизвестныйИсход85 = Истина;
    МеняемМакет85 = Истина;
    КолонкаИсточника = СвойСписок85.Колонки.Добавить("Описание85", Ложь);
    Если КолонкаИсточника.АвтоУдаление Или КолонкаИсточника.Имя <> "Описание85" Тогда
        ВызватьИсключение "Native source.Add не вернул своё имя/AutoDeleteFalse.";
    КонецЕсли;
    GUIКолонка = СвоеПоле85.Колонки.Добавить("Описание85", "Своё описание");
    GUIКолонка.Данные = "Описание85";
    GUIКолонка.ТолькоПросмотр = Истина;
    ПроверитьКолонкиИсточника85(Истина);
    ПроверитьВидимые85(Истина);
    Если КолонкаИсточника.АвтоУдаление Или СвойСписок85.Колонки.Найти("Описание85") <> КолонкаИсточника Тогда
        ВызватьИсключение "Перед первым GUI-delete своё source identity/AutoDeleteFalse неожиданно изменено.";
    КонецЕсли;
    СвоеПоле85.Колонки.Удалить(GUIКолонка);
    ПроверитьВидимые85(Ложь);
    ПроверитьКолонкиИсточника85(Истина);
    Если СвойСписок85.Колонки.Найти("Описание85") <> КолонкаИсточника Тогда
        ВызватьИсключение "При AutoDeleteFalse источник должен сохранить своё описание после GUI-delete.";
    КонецЕсли;
    КолонкаИсточника.АвтоУдаление = Истина;
    Если Не КолонкаИсточника.АвтоУдаление Тогда
        ВызватьИсключение "AutoDeleteTrue не установлен на actual own source-column.";
    КонецЕсли;
    GUIКолонка = СвоеПоле85.Колонки.Добавить("Описание85", "Своё описание");
    GUIКолонка.Данные = "Описание85";
    GUIКолонка.ТолькоПросмотр = Истина;
    ПроверитьВидимые85(Истина);
    Если Не КолонкаИсточника.АвтоУдаление Или СвойСписок85.Колонки.Найти("Описание85") <> КолонкаИсточника Тогда
        ВызватьИсключение "Перед вторым GUI-delete своё source identity/AutoDeleteTrue неожиданно изменено.";
    КонецЕсли;
    СвоеПоле85.Колонки.Удалить(GUIКолонка);
    ПроверитьВидимые85(Ложь);
    ПроверитьКолонкиИсточника85(Ложь);
    СвойСписок85.Колонки.Добавить("Описание85", Ложь);
    ПроверитьКолонкиИсточника85(Истина);
    СвойСписок85.Колонки.Удалить("Описание85");
    ПроверитьКолонкиИсточника85(Ложь);
    ПроверитьИсточник85();
    СвойСписок85.Обновить();
    Этап85 = 1;
    НеизвестныйИсход85 = Ложь;
    МеняемМакет85 = Ложь;
    ДоставленныеСтроки85.Очистить();
    Статус85 = "AutoDeleteFalse сохранил source-column, True удалил её вместе с GUI; source.Delete принимает имя. Вручную опять выберите свои2,3,5.";
КонецПроцедуры

Процедура ПерестроитьСвойМакет85(Элемент)
    Если Этап85 <> 1 Или НеизвестныйИсход85 = Истина Или МеняемМакет85 = Истина
        Или ДоставленныеСтроки85.Количество() <> 3 Тогда
        ВызватьИсключение "Нужна реальная доставка своих строк после предыдущего профиля; повтор и partial запрещены.";
    КонецЕсли;
    ПроверитьИсточник85();
    ПроверитьКолонкиИсточника85(Ложь);
    ПроверитьВидимые85(Ложь);
    НеизвестныйИсход85 = Истина;
    МеняемМакет85 = Истина;
    Для Индекс = 0 По 7 Цикл
        Колонка = СвойСписок85.Колонки.Получить(Индекс);
        Колонка.АвтоУдаление = Ложь;
        Если Колонка.АвтоУдаление Тогда
            ВызватьИсключение "Перед сбросом GUI своё source-column сохранение не подтверждено.";
        КонецЕсли;
    КонецЦикла;
    СвоеПоле85.Колонки.Очистить();
    Если СвоеПоле85.Колонки.Количество() <> 0 Тогда
        ВызватьИсключение "Свои GUI-колонки не стали пустыми, source.clear не разрешён.";
    КонецЕсли;
    ПроверитьКолонкиИсточника85(Ложь);
    СвойСписок85.Колонки.Очистить();
    Если СвойСписок85.Колонки.Количество() <> 0 Тогда
        ВызватьИсключение "Собственный source.Clear не дал пустой набор; перестройку не продолжаем.";
    КонецЕсли;
    ПроверитьИсточник85();
    СвойСписок85.Колонки.Установить("Ссылка,Дата,Номер,Количество,Сумма,Метка85,Пользователь85,Сценарий85");
    ПроверитьКолонкиИсточника85(Ложь);
    ДобавитьЧетыреВидимые85();
    СвойСписок85.Обновить();
    ПроверитьИсточник85();
    Этап85 = 2;
    НеизвестныйИсход85 = Ложь;
    МеняемМакет85 = Ложь;
    ДоставленныеСтроки85.Очистить();
    Статус85 = "Планово перестроен только полностью свой layout0→8source/4GUI, не очищены документы. Вручную ещё раз выберите2,3,5.";
КонецПроцедуры

Процедура ПроверитьИтог85(Элемент)
    Если Этап85 <> 2 Или НеизвестныйИсход85 = Истина Или МеняемМакет85 = Истина
        Или ДоставленныеСтроки85.Количество() <> 3 Тогда
        ВызватьИсключение "Нет полной реальной доставки собственных строк после перестройки.";
    КонецЕсли;
    ПроверитьИсточник85();
    ПроверитьКолонкиИсточника85(Ложь);
    ПроверитьВидимые85(Ложь);
    Статус85 = "Полный own protocol: actual native delivery2/200,3/300,5/500; DB3records/qty10/sum1000; source8/GUI4.";
КонецПроцедуры
COMMON — полный паспорт собственных реальных saved данных

Своя CF Уч85ПрофилиСписка → Общие → Общие модули → Уч85СписокСтенд → Модуль.

КлиентОбычноеПриложение=True/Сервер=False; thick-only currentUsers factory/readQuery, никакого actual запуска.

Функция ПаспортСтенда85() Экспорт
    Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnList85_8d18bc25-d53c-45eb-a8f8-4b14b9c6c682\IB"";" Или Метаданные.Документы.Количество() <> 1 Или Метаданные.Документы.Найти("Уч85Профиль") = Неопределено Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.Справочники.Количество() <> 0 Тогда
        ВызватьИсключение "Допустим только собственный новый файловый стенд с одним своим документом без регистров.";
    КонецЕсли;
    Если Метаданные.Документы.Уч85Профиль.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда
        ВызватьИсключение "Учебные документы этого отдельного стенда не проводятся.";
    КонецЕсли;
    Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Если Текущий = Неопределено Или Пользователи.Количество() <> 1 Тогда
        ВызватьИсключение "Нужен один подготовленный собственный пользователь с административным правом чтения списка пользователей.";
    КонецЕсли;
    Если Текущий.Имя <> "Уч85Список_8d18bc25"
        Или Пользователи[0].Имя <> Текущий.Имя
        Или Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор Тогда
        ВызватьИсключение "Current native user не совпал с единственным фактическим пользователем своей ИБ.";
    КонецЕсли;
    Возврат Новый Структура("Метка,Пользователь", "8d18bc25-d53c-45eb-a8f8-4b14b9c6c682", Строка(Текущий.УникальныйИдентификатор));
КонецФункции

Процедура ПроверитьПустоту85() Экспорт
    ПаспортСтенда85();
    Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Число ИЗ Документ.Уч85Профиль");
    Строки = Запрос.Выполнить().Выбрать();
    Если Не Строки.Следующий() Или Строки.Число <> 0 Тогда
        ВызватьИсключение "ИБ не пуста. Не создаём повторно, не удаляем и не перезаписываем существующие документы.";
    КонецЕсли;
КонецПроцедуры

Функция ПрочитатьСвоиДанные85(Сценарий, Ссылки) Экспорт
    Паспорт = ПаспортСтенда85();
    Если ТипЗнч(Ссылки) <> Тип("Массив") Или Ссылки.Количество() > 3
        Или ТипЗнч(Сценарий) <> Тип("Строка") Или СтрДлина(Сценарий) <> 36 Тогда
        ВызватьИсключение "Нужны собственные реальные ссылки и UUID текущего запуска.";
    КонецЕсли;
    Идентификатор = Новый УникальныйИдентификатор(Сценарий);
    Если НРег(Строка(Идентификатор)) <> НРег(Сценарий) Тогда
        ВызватьИсключение "UUID сценария повреждён.";
    КонецЕсли;
    Счетчик = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Число ИЗ Документ.Уч85Профиль");
    Проверка = Счетчик.Выполнить().Выбрать();
    Если Не Проверка.Следующий() Или Проверка.Число <> Ссылки.Количество() Тогда
        ВызватьИсключение "Количество реальных документов изменено, частичная запись не исправляется автоматически.";
    КонецЕсли;
    Запрос = Новый Запрос(
        "ВЫБРАТЬ П.Ссылка, П.Дата, П.Номер, П.Количество, П.Сумма, П.Описание85,
        | П.Метка85, П.Пользователь85, П.Сценарий85, П.Проведен, П.ПометкаУдаления
        |ИЗ Документ.Уч85Профиль КАК П
        |ГДЕ П.Метка85 = &Метка И П.Пользователь85 = &Пользователь И П.Сценарий85 = &Сценарий
        |УПОРЯДОЧИТЬ ПО П.Количество");
    Запрос.УстановитьПараметр("Метка", Паспорт.Метка);
    Запрос.УстановитьПараметр("Пользователь", Паспорт.Пользователь);
    Запрос.УстановитьПараметр("Сценарий", Сценарий);
    Данные = Запрос.Выполнить().Выгрузить();
    Если Данные.Количество() <> Ссылки.Количество() Тогда
        ВызватьИсключение "Не совпали фактические собственные UUID в сохранённых документах.";
    КонецЕсли;
    ИтогКоличество = 0;
    ИтогСумма = 0;
    Для Индекс = 0 По Данные.Количество() - 1 Цикл
        СтрокаДанных = Данные[Индекс];
        Количество = ?(Индекс = 0, 2, ?(Индекс = 1, 3, 5));
        Если ТипЗнч(Ссылки[Индекс]) <> Тип("ДокументСсылка.Уч85Профиль")
            Или Ссылки[Индекс].Пустая() Или СтрокаДанных.Ссылка <> Ссылки[Индекс]
            Или СтрокаДанных.Дата <> Дата(2026, 1, 2 + Индекс)
            Или СтрокаДанных.Количество <> Количество Или СтрокаДанных.Сумма <> Количество * 100
            Или ПустаяСтрока(СтрокаДанных.Номер) Или СтрокаДанных.Описание85 <> "Своя строка " + Строка(Количество)
            Или СтрокаДанных.Проведен Или СтрокаДанных.ПометкаУдаления Тогда
            ВызватьИсключение "Независимый паспорт реальной строки отличается от своей подготовки.";
        КонецЕсли;
        ИтогКоличество = ИтогКоличество + СтрокаДанных.Количество;
        ИтогСумма = ИтогСумма + СтрокаДанных.Сумма;
    КонецЦикла;
    Если Данные.Количество() = 3 И (ИтогКоличество <> 10 Или ИтогСумма <> 1000) Тогда
        ВызватьИсключение "Суммы собственных трёх документов не10/1000.";
    КонецЕсли;
    Возврат Данные;
КонецФункции
LIST_FORM — actual native ordinary document list и настоящее rowevent1

Своя CF → Документы → Уч85Профиль → Формы → ordinary ФормаСписка → Модуль.

Main Список:ДокументСписок.Уч85Профиль actual ordinary metadata; BeforeOpen2/rowActivate1 на толстом клиенте, не managed aliases.

Перем СвойСценарий85;
Перем СвоиСсылки85;
Перем Подготовлено85;

Процедура ПодготовитьСвойПоказ85(Сценарий, Ссылки) Экспорт
    Если Подготовлено85 = Истина Или ТипЗнч(Список) <> Тип("ДокументСписок.Уч85Профиль")
        Или ТипЗнч(Ссылки) <> Тип("Массив") Или Ссылки.Количество() <> 3 Тогда
        ВызватьИсключение "Инициализация допустима только один раз для actual собственного metadata document list.";
    КонецЕсли;
    Уч85СписокСтенд.ПрочитатьСвоиДанные85(Сценарий, Ссылки);
    СвойСценарий85 = Сценарий;
    СвоиСсылки85 = Ссылки;
    Подготовлено85 = Истина;
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если Подготовлено85 <> Истина Или ЭтаФорма.ВладелецФормы = Неопределено
        Или ТипЗнч(ЭтаФорма.ВладелецФормы) <> Тип("Форма")
        Или ТипЗнч(Список) <> Тип("ДокументСписок.Уч85Профиль")
        Или ЭлементыФормы.Список.Данные <> "Список"
        Или ЭлементыФормы.Список.Значение <> Список
        Или Не ЭлементыФормы.Список.ТолькоПросмотр
        Или ЭтаФорма.ПараметрТекущаяСтрока <> СвоиСсылки85[1] Тогда
        Отказ = Истина;
        ВызватьИсключение "Форму открывает только свой подготовленный owner; default metadata positioning ещё не исполнено.";
    КонецЕсли;
    Уч85СписокСтенд.ПрочитатьСвоиДанные85(СвойСценарий85, СвоиСсылки85);
КонецПроцедуры

Процедура СписокПриАктивизацииСтроки(Элемент)
    Если Подготовлено85 <> Истина Или Элемент <> ЭлементыФормы.Список Тогда
        ВызватьИсключение "Native row event пришёл не от своего подготовленного TableBox.";
    КонецЕсли;
    Данные = Элемент.ТекущиеДанные;
    Если Данные = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ЭтаФорма.ВладелецФормы.ПринятьСвоюСтроку85(ЭтаФорма, Элемент, Элемент.ТекущаяСтрока, Данные);
КонецПроцедуры
APPLICATION — полный собственный ordinary старт

Своя CF → Модуль обычного приложения.

Native ordinary ПриНачалеРаботыСистемы0/ПолучитьОбщуюФорму/Форма.Открыть after own empty scope.

Процедура ПриНачалеРаботыСистемы()
    Уч85СписокСтенд.ПроверитьПустоту85();
    Форма = ПолучитьОбщуюФорму("Уч85ПрофилиСписка");
    Форма.Открыть();
КонецПроцедуры

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

  1. В новой собственной пустой ИБ запустите свой толстый ordinary клиент. Launcher появился только после exact File/CF/единственный current+UsersUUID/pustota guards. Отметьте СогласиеНаСвоиТриЗаписи85, затем СоздатьСвоиТри85 один раз.

  2. MAIN перед каждым native document.Write сверяет собственные ранее сохранённые0/1/2 записи и ссылки; native СоздатьДокумент создаёт именно свой непроводимый объект. После каждого write новая фактическая ссылка добавляется только при ЭтоНовый=False/nonempty и независимом saved readback. После третьего — real count3, Qty10/Sum1000. При partial ошибка прекращает урок без автоудаления.

  3. Native manager.GetListForm3 создаёт свежую собственную ordinary списочную форму с owner=этот launcher и freshUUIDkey. MAIN проверяет actual source type, child/source/table binding identities, preparedGUI0, заменяет целиком known собственные source columns на8 и создаёт отдельно4 GUI columns с native Данные binding.

  4. До Open назначены native НастройкаПериода без ограничений и ПараметрТекущаяСтрока=своя сохранённая3/300. Native BeforeOpen2 support подтвердит реальный main DocList и independent own rows. Ожидаемое первоначальное выделение3/300 проверьте вручную; это не выполненный здесь результат.

  5. В списке вручную выберите2/200,3/300,5/500. Настоящий rowevent handler1 берёт delivered currentdata; MAIN не вычисляет эти значения вместо UI, а сравнивает их с независимыми saved rows/refs/date/number/UUID. Пока все3 different actual refs не доставлены, следующая команда запрещена.

  6. В launcher ПоказатьСемантикуУдаления85: source.Add Описание85 withFalse →source9 и GUI5. Native GUI.Delete(actual own column) →GUI4/source9. Same source.AutoDelete=True +проверенная новая ownGUI association+GUIdelete →GUI4/source8. Отдельный source.AddFalse/Delete("Описание85") подтверждает именно строковую сигнатуру source.Delete; DB3/10/1000 всё время прежний.

  7. После профиля опять щёлкните2/3/5, реально повторно доставьте currentdata. Исчезновение source Description проверяется FindUndefined/Count8; не считайте изменение одного SQL count доказательством GUI association.

  8. ПерестроитьСвойМакет85: snapshot guards before any setters, unknown/layout flags. После отключенияAutoDelete своих8, GUI.Clear→0/source8, Source.Clear→0 при прежних DB3/10/1000. Только доказанный own intermediate0 позволяет planned Set8/Add4; любая ошибка оставляет процесс остановленным без blindrollback.

  9. После rebuild снова реально выберите2/3/5 и нажмите ПроверитьИтог85. Expected source8/GUI4, три настоящие события собственных ссылок и прежний независимый DB3/10/1000. Задача не меняла saved документы после первоначальных3 writes, не печатала/экспортировала/удаляла данные.

  10. Зафиксируйте ручной протокол либо точный отказ; сохранённые собственные3 записи оставьте для человека. Следующий запуск в непустой ИБ намеренно откажет, не создаст дубликаты и не выполнит cleanup. Actual protocol здесь ещё отсутствует: только static source.

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

  1. Статически:15 unique PRIMARY/main uses, source factory+ordinary metadata binding, five native checkers0 mismatches, exactraw8.5 source/columns/readonly/event1/period/ManagerUsers contracts. Старые frozen workspace sources SHA неизменны.

  2. Вручную: wrong path/config/user/usersUUID/count/preexisting data/source/control/layout/deliveredref/UUID →отказ до очередной допустимой own операции, никакого foreign write/перезапуска/очистки. Admin/read-only поля не объявляются абсолютной security.

  3. Вручную: real DB3 records own typed refs, marker/realUserUUID/freshScenarioUUID, dates0:00, qty2+3+5=10, amount200+300+500=1000 до и после каждого layout. Unknown partial не превращается в ожидаемые данные.

  4. Вручную: source8/GUI4 действительно разные collections; AutoDeleteFalse GUIdelete keeps source9, True deletes sourceDescription→8; sourceDelete("Описание85")String не GUIobject/index. Column.Name readonly, actual column.Data binding подтверждён.

  5. Вручную: native callback1 реально доставляет concrete currentDataList values иactualDocRef всех3ownrows; сравнениеQuery не выдаётся за факт отображения. InitialCurrentRow только приopen/reopen, period actualownНастройкаПериодаNoBounds.

  6. Вручную: clear only fullyowned layout, snapshot/whitelist/flags до изменений; GUI0/source8→source0→source8/GUI4 при прежнемDB3/10/1000. Native callbacks вручную не запускаются; после каждого профиля требуется свежая реальная delivery всех3 строк.

  7. Публикационные tests различают authored source и published exact own id/keys/code; root не переписывается из этого урока. Все реальные1C/DB/UI/OS/network/provisioning/backup действия здесь0.

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

Ожидаемый ручной результат:3 своих документов10/1000, один whollyowned ordinary список source8/GUI4, доказанные native различия AutoDelete и три реально доставленные выбранные строки после каждого профиля. В этой работе этот runtime результат не выполнялся: authoredsource/static only.

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

  1. ДокументСписок.<Имя> — ordinary native список, не managed ДинамическийСписок. Native manager.GetListForm3 — реальный источник формы; type/name совпадение переменных без factory/metadata/value identity доказательством не считается.

  2. Source.Columns readonly property даёт изменяемую collection; Column.Name readonly. GUI.Column.Данные связывает source-column, а не native GUI.Значение из legacy примера.

  3. Source.Set(String CSV) replaces whole source columns; GUI layout автоматически не создаётся. Source.Delete(StringName) отличается от GUI.Delete(IndexOrActualColumn).

  4. AutoDeleteFalse/True относится к source-column при удалении соответствующей GUI-column, не к удалению metadata/документов. Не присваивайте ожидаемый Count вместо фактического native readback.

  5. ПараметрТекущаяСтрока делает positioning приopen/reopen; currentdata читается после реальной активации, не сразу из обещанного parameter assignment. Rowevent base0+ordinaryfirstElement1; manual callback запрещён.

  6. Native ТекущиеДанные readonly и зависят от SOURCE columns. Не путайте скрытое source поле с видимой GUI колонкой и не кэшируйте старую selection между source changes.

  7. Native поле.СтандартныйПериод ordinary принимает НастройкаПериода, НЕ одноимённый managed СтандартныйПериод. Fresh ctor0 даётNoBounds; GetDateFrom/GetDateTo actualemptydate, startup historical rows не спрятаны текущим месяцем.

  8. Отбор.Add/Delete/GetAvailableFields rawnative запрещены для DocumentList.Filter. Не применяйте standalone API к похожему owner ради покрытия; в уроке этих calls нет.

  9. Whole Clear только whollyowned freshinstance сownknownstate. Порядок GUI.Clear before source.Clear и exact0 before planned restore нужен; arbitrary чужой source/reset/автоматический rollback после partial недопустим.

  10. Три real native writes выполняет только вручную запущенный authored сценарий с согласия в новой собственной ИБ. После partial/exception unknown flag и реальные saved данные остаются для проверки, без retries/delete/backups.

  11. Native CurrentUser UUID — UUID пользователя, не базы/маркер пути. СписокUsers1 и matching currentUUID устраняют placeholders, но дают administrative read contract только собственному подготовленному толстому клиенту.

  12. Readonly control и guards не защита от произвольного административного кода/других сессий/unknown CF. Только собственная known пустая CF/oneuser/onesession без регистров/расширений/jobs.

  13. СуммаQuery1000 не доказывает GUI отображение илиcallbackdelivery. Delivered data сравниваются отдельно с native actual table/currentrow identity иindependent saved data; без3 разных реальных событий следующая фаза не запускается.

  14. Python synthetic tests/native static checks не BSLcompiler/работающая1C. Field-value identity/AutoDelete/repaint/currentdata delivery/period и GUIzero transitions нужно подтвердить вручную; в этой работе runtime0.

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

Показать заявки сентября или октября с точным временем границ

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

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

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

Подготовка

  1. Создайте НОВУЮ файловую базу на 8.5.1.1343: конфигурация УчебныеПериодыДокументов85, совместимость НеИспользовать, обычное приложение, толстый клиент. Рабочие конфигурации и их копии не используйте. Здесь запуск отсутствует: runtimeVerifiedScenarios=0.

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

  3. ВРУЧНУЮ только в своём стенде запишите четыре непроведенных документа без пометок: S001 01.09.2026 00:00:00/Начало сентября; S002 30.09.2026 23:59:59/Конец сентября; O001 01.10.2026 00:00:00/Начало октября; O002 31.10.2026 23:59:59/Конец октября. В форме ввода даты включите показ секунд, иначе проверка точных значений откажет. Данные остаются для UI-теста; код их только читает.

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

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

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

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

  8. НастройкаОтбора.Дата и НастройкаПорядка.Номер должны присутствовать в подготовленном списке. При отсутствии код отказывает, а не добавляет элементы настройки динамического списка. ТолькоПросмотр относится к UI и не заменяет права доступа.

Перем СвоиЗаявки;
Перем Подготовлено;
Перем РазрешалисьИзмененияИнтервала;

Процедура ПодготовитьДоОткрытия(Режим) Экспорт
    УчебныеПериоды85.ПроверитьСвойСтенд();
    Если ЭтаФорма.Открыта() Тогда
        ВызватьИсключение "Настройку начального периода вызывайте до открытия своего окна";
    КонецЕсли;
    Если ТипЗнч(Заявки) <> Тип("ДокументСписок.УчебнаяЗаявка") Тогда
        ВызватьИсключение "Реквизит Заявки должен быть списком собственного документа";
    КонецЕсли;
    СвоиЗаявки = ПрочитатьСвоиЗаявки();
    РазрешалисьИзмененияИнтервала = Ложь;
    Колонки = Заявки.Колонки;
    Для Каждого Имя Из СтрРазделить("Номер,Дата,Комментарий", ",") Цикл
        Если Колонки.Найти(Имя) = Неопределено Тогда
            Колонки.Добавить(Имя);
        КонецЕсли;
    КонецЦикла;
    Заявки.Отбор.Сбросить();
    Заявки.Порядок.Установить("Дата Возр, Номер Возр");
    Поле = ЭлементыФормы.СписокЗаявок;
    Поле.ТолькоПросмотр = Истина;
    Поле.АвтоОбновление = Ложь;
    Поле.ПериодАвтоОбновления = 10;
    Поле.ИзменятьАвтоОбновление = Истина;
    Поле.ВосстанавливатьТекущуюСтроку = Ложь;
    Поле.ПроверкаОтображенияНовойСтроки = ВариантПроверкиОтображенияНовойСтроки.СообщатьОНесоответствииОтбору;
    Поле.РазрешитьНастройкуПериода = Ложь;
    Границы = СвоиГраницы(Режим);
    Настройка = Новый НастройкаПериода;
    Настройка.РедактироватьКакИнтервал = Истина;
    Настройка.РедактироватьКакПериод = Ложь;
    Настройка.УстановитьПериод(Границы.Начало, Границы.Конец, Ложь);
    Настройка.ВариантНастройки = ВариантНастройкиПериода.Интервал;
    Если Настройка.ПолучитьДатуНачала() <> Границы.Начало Или Настройка.ПолучитьДатуОкончания() <> Границы.Конец Тогда
        ВызватьИсключение "Не подтверждены точные даты и время собственного периода";
    КонецЕсли;
    Поле.СтандартныйПериод = Настройка;
    Полученная = Поле.СтандартныйПериод;
    Если ТипЗнч(Полученная) <> Тип("НастройкаПериода") Тогда
        ВызватьИсключение "Свойство обычного списка содержит НастройкаПериода, не СтандартныйПериод";
    КонецЕсли;
    Если Полученная.ПолучитьДатуНачала() <> Границы.Начало Или Полученная.ПолучитьДатуОкончания() <> Границы.Конец Тогда
        ВызватьИсключение "Поле не приняло собственный начальный интервал";
    КонецЕсли;
    НастроитьДиалоги(Ложь);
    ПроверитьВыборкуМесяца(Режим, Границы);
    Подготовлено = Истина;
КонецПроцедуры

Функция СвоиГраницы(Режим)
    Если Режим = "Сентябрь" Тогда
        Возврат Новый Структура("Начало,Конец,Номера", Дата(2026, 9, 1, 0, 0, 0), Дата(2026, 9, 30, 23, 59, 59), "S001,S002");
    ИначеЕсли Режим = "Октябрь" Тогда
        Возврат Новый Структура("Начало,Конец,Номера", Дата(2026, 10, 1, 0, 0, 0), Дата(2026, 10, 31, 23, 59, 59), "O001,O002");
    Иначе
        ВызватьИсключение "Для своего опыта выберите Сентябрь или Октябрь";
    КонецЕсли;
КонецФункции

Процедура ПроверитьВыборкуМесяца(Режим, Границы)
    Выборка = Документы.УчебнаяЗаявка.Выбрать(Границы.Начало, Границы.Конец, , "Дата Возр");
    Номера = Новый Массив;
    Пока Выборка.Следующий() Цикл
        Номера.Добавить(Выборка.Номер);
    КонецЦикла;
    Если СтрСоединить(Номера, ",") <> Границы.Номера Тогда
        ВызватьИсключение "Выборка месяца не совпала с собственными граничными заявками";
    КонецЕсли;
    Сообщить(Режим + ": выборка " + Границы.Номера + "; видимое поле ещё проверьте после открытия");
КонецПроцедуры

Процедура ПриОткрытии()
    Если Подготовлено <> Истина Тогда
        ВызватьИсключение "Открывайте только из собственного Пульта после подготовки периода";
    КонецЕсли;
КонецПроцедуры

Функция ПрочитатьСвоиЗаявки()
    Ожидания = Новый Структура;
    Ожидания.Вставить("S001", Новый Структура("Дата,Комментарий", Дата(2026, 9, 1, 0, 0, 0), "Начало сентября"));
    Ожидания.Вставить("S002", Новый Структура("Дата,Комментарий", Дата(2026, 9, 30, 23, 59, 59), "Конец сентября"));
    Ожидания.Вставить("O001", Новый Структура("Дата,Комментарий", Дата(2026, 10, 1, 0, 0, 0), "Начало октября"));
    Ожидания.Вставить("O002", Новый Структура("Дата,Комментарий", Дата(2026, 10, 31, 23, 59, 59), "Конец октября"));
    Данные = Новый Структура;
    Выборка = Документы.УчебнаяЗаявка.Выбрать(, , , "Дата Возр");
    Если ТипЗнч(Выборка) <> Тип("ДокументВыборка.УчебнаяЗаявка") Тогда
        ВызватьИсключение "Ожидалась выборка только своего документа";
    КонецЕсли;
    Пока Выборка.Следующий() Цикл
        Если Не Ожидания.Свойство(Выборка.Номер, Ожидание) Или Данные.Свойство(Выборка.Номер) Тогда
            ВызватьИсключение "В своем наборе неизвестный или повторный номер";
        КонецЕсли;
        Если Выборка.Дата <> Ожидание.Дата Или Выборка.Комментарий <> Ожидание.Комментарий
            Или Выборка.Проведен Или Выборка.ПометкаУдаления Или Выборка.Ссылка.Пустая()
            Или ТипЗнч(Выборка.ВерсияДанных) <> Тип("Строка") Тогда
            ВызватьИсключение "Своя заявка отличается от подготовки";
        КонецЕсли;
        Объект = Выборка.ПолучитьОбъект();
        Если Объект = Неопределено Тогда
            ВызватьИсключение "Объект текущей заявки отсутствует";
        КонецЕсли;
        Если Объект.Ссылка <> Выборка.Ссылка Или Объект.Номер <> Выборка.Номер
            Или Объект.Дата <> Выборка.Дата Или Объект.ВерсияДанных <> Выборка.ВерсияДанных Тогда
            ВызватьИсключение "Объект не соответствует строке собственной выборки";
        КонецЕсли;
        Данные.Вставить(Выборка.Номер, Выборка.Ссылка);
    КонецЦикла;
    Если Данные.Количество() <> 4 Тогда
        ВызватьИсключение "Вручную подготовьте ровно четыре собственные непроведенные заявки";
    КонецЕсли;
    Возврат Данные;
КонецФункции

Процедура НастроитьДиалоги(РазрешитьИнтервал)
    Поле = ЭлементыФормы.СписокЗаявок;
    ДатаОтбора = Поле.НастройкаОтбора.Найти("Дата");
    ПорядокНомера = Поле.НастройкаПорядка.Найти("Номер");
    Если ДатаОтбора = Неопределено Или ПорядокНомера = Неопределено Тогда
        ВызватьИсключение "Сверьте наличие полей Дата и Номер у собственного списка";
    КонецЕсли;
    ДатаОтбора.Доступность = Ложь;
    ПорядокНомера.Доступность = Ложь;
    Поле.РазрешитьНастройкуПериода = РазрешитьИнтервал;
    Если РазрешитьИнтервал Тогда
        РазрешалисьИзмененияИнтервала = Истина;
    КонецЕсли;
    Если ДатаОтбора.Доступность Или ПорядокНомера.Доступность
        Или Поле.РазрешитьНастройкуПериода <> РазрешитьИнтервал Тогда
        ВызватьИсключение "Доступность собственного диалога интервала не подтверждена";
    КонецЕсли;
КонецПроцедуры

Процедура РазрешитьИнтервал(Кнопка)
    НастроитьДиалоги(Истина);
КонецПроцедуры

Процедура ЗапретитьИнтервал(Кнопка)
    НастроитьДиалоги(Ложь);
КонецПроцедуры

Функция СнятьСкалярныеНастройки(Поле)
    Возврат Новый Структура("АвтоОбновление,ВосстанавливатьТекущуюСтроку,ИзменятьАвтоОбновление,ПериодАвтоОбновления,ПроверкаОтображенияНовойСтроки,РазрешитьНастройкуПериода",
        Поле.АвтоОбновление,
        Поле.ВосстанавливатьТекущуюСтроку,
        Поле.ИзменятьАвтоОбновление,
        Поле.ПериодАвтоОбновления,
        Поле.ПроверкаОтображенияНовойСтроки,
        Поле.РазрешитьНастройкуПериода);
КонецФункции

Процедура ВосстановитьСкалярныеНастройки(Поле, Снимок)
    Поле.АвтоОбновление = Ложь;
    Поле.ВосстанавливатьТекущуюСтроку = Снимок.ВосстанавливатьТекущуюСтроку;
    Поле.ИзменятьАвтоОбновление = Снимок.ИзменятьАвтоОбновление;
    Поле.ПериодАвтоОбновления = Снимок.ПериодАвтоОбновления;
    Поле.ПроверкаОтображенияНовойСтроки = Снимок.ПроверкаОтображенияНовойСтроки;
    Поле.РазрешитьНастройкуПериода = Снимок.РазрешитьНастройкуПериода;
    Поле.АвтоОбновление = Снимок.АвтоОбновление;
    Факт = СнятьСкалярныеНастройки(Поле);
    Если Факт.Количество() <> 6 Или Снимок.Количество() <> 6 Тогда
        ВызватьИсключение "Снимок содержит ровно шесть скалярных настроек";
    КонецЕсли;
    Для Каждого Пара Из Снимок Цикл
        Если ТипЗнч(Факт[Пара.Ключ]) <> ТипЗнч(Пара.Значение) Или Факт[Пара.Ключ] <> Пара.Значение Тогда
            ВызватьИсключение "Не восстановлено собственное свойство " + Пара.Ключ;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Процедура ТолькоПервыйДокумент(Кнопка)
    Если РазрешалисьИзмененияИнтервала = Истина Тогда
        ВызватьИсключение "После разрешения ручной смены интервала откройте новый собственный опыт";
    КонецЕсли;
    Заявки.Отбор.Сбросить();
    Поле = ЭлементыФормы.СписокЗаявок;
    Настройка = Поле.СтандартныйПериод;
    Граница = Настройка.ПолучитьДатуНачала();
    Если Граница = Дата(2026, 9, 1, 0, 0, 0) Тогда
        Номер = "S001";
    ИначеЕсли Граница = Дата(2026, 10, 1, 0, 0, 0) Тогда
        Номер = "O001";
    Иначе
        ВызватьИсключение "После произвольной настройки периода откройте новый собственный опыт";
    КонецЕсли;
    Заявки.Отбор.Номер.Установить(Номер, Истина);
    Заявки.Обновить();
    Поле.ТекущаяСтрока = СвоиЗаявки[Номер];
    Поле.ОбновитьСтроки();
    Если Поле.ТекущаяСтрока <> СвоиЗаявки[Номер] Тогда
        ВызватьИсключение "Собственный первый документ не стал текущей строкой";
    КонецЕсли;
    Сообщить("Ожидается собственный номер " + Номер + "; проверьте видимый список");
КонецПроцедуры

Процедура СнятьНомернойОтбор(Кнопка)
    Заявки.Отбор.Номер.Использование = Ложь;
    Заявки.Обновить();
    ЭлементыФормы.СписокЗаявок.ОбновитьСтроки();
КонецПроцедуры

Процедура ПроверитьВосстановление(Кнопка)
    Поле = ЭлементыФормы.СписокЗаявок;
    Снимок = СнятьСкалярныеНастройки(Поле);
    Попытка
        Поле.АвтоОбновление = Ложь;
        Поле.ПериодАвтоОбновления = 15;
        Поле.ИзменятьАвтоОбновление = Ложь;
        Поле.ВосстанавливатьТекущуюСтроку = Истина;
        Поле.ПроверкаОтображенияНовойСтроки = ВариантПроверкиОтображенияНовойСтроки.НеПроверять;
        Поле.РазрешитьНастройкуПериода = Истина;
        Поле.АвтоОбновление = Истина;
        Если Поле.ПериодАвтоОбновления <> 15 Или Не Поле.АвтоОбновление Тогда
            ВызватьИсключение "Не подтвержден собственный измененный режим обновления";
        КонецЕсли;
    Исключение
        ВосстановитьСкалярныеНастройки(Поле, Снимок);
        ВызватьИсключение;
    КонецПопытки;
    ВосстановитьСкалярныеНастройки(Поле, Снимок);
    Сообщить("Шесть скалярных настроек восстановлены; период и условия отбора в этом цикле не менялись");
КонецПроцедуры

Процедура РучноеОбновление(Кнопка)
    ЭлементыФормы.СписокЗаявок.АвтоОбновление = Ложь;
    Заявки.Обновить();
    ЭлементыФормы.СписокЗаявок.ОбновитьСтроки();
КонецПроцедуры

Процедура ЗакрытьСписок(Кнопка)
    ЭтаФорма.Закрыть();
КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    ЭлементыФормы.СписокЗаявок.АвтоОбновление = Ложь;
КонецПроцедуры
УчебныеДокументы85.Пульт

УчебныеПериодыДокументов85 → Обработки → УчебныеДокументы85 → Формы → Пульт → Модуль

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

Перем СвоеОкно;

Процедура ПриОткрытии()
    УчебныеПериоды85.ПроверитьСвойСтенд();
    СвоеОкно = Неопределено;
КонецПроцедуры

Процедура ОткрытьСентябрь(Кнопка)
    СоздатьСвоеОкно("Сентябрь");
КонецПроцедуры

Процедура ОткрытьОктябрь(Кнопка)
    СоздатьСвоеОкно("Октябрь");
КонецПроцедуры

Процедура СоздатьСвоеОкно(Режим)
    УчебныеПериоды85.ПроверитьСвойСтенд();
    Если СвоеОкно <> Неопределено Тогда
        Если СвоеОкно.Открыта() Тогда
            ВызватьИсключение "Сначала закройте собственный список";
        КонецЕсли;
    КонецЕсли;
    Ключ = Новый УникальныйИдентификатор;
    Окно = Обработки.УчебныеДокументы85.ПолучитьФорму("Список", ЭтаФорма, Ключ);
    Если Окно = Неопределено Тогда
        ВызватьИсключение "Своя обычная форма Список не создана";
    КонецЕсли;
    Если ТипЗнч(Окно) <> Тип("Форма") Тогда
        ВызватьИсключение "Нужна обычная форма толстого клиента";
    КонецЕсли;
    Если Окно.Открыта() Или Окно.КлючУникальности <> Ключ Или Окно.ВладелецФормы <> ЭтаФорма.ЭтаФорма Тогда
        ВызватьИсключение "Не перенастраиваем чужое или открытое окно";
    КонецЕсли;
    Окно.КлючСохраненияПоложенияОкна = "УчебныеДокументы85.МойОпыт." + Строка(Ключ);
    Окно.ЗакрыватьПриЗакрытииВладельца = Истина;
    Окно.ПодготовитьДоОткрытия(Режим);
    СвоеОкно = Окно;
    Окно.Открыть();
КонецПроцедуры

Процедура ЗакрытьСвойСписок(Кнопка)
    ЗакрытьСвоеОкно();
КонецПроцедуры

Процедура ЗакрытьСвоеОкно()
    Если СвоеОкно <> Неопределено Тогда
        Если СвоеОкно.Открыта() Тогда
            СвоеОкно.Закрыть();
            Если СвоеОкно.Открыта() Тогда
                ВызватьИсключение "Свой список отказался закрываться";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    ЗакрытьСвоеОкно();
КонецПроцедуры
УчебныеПериоды85.ПроверкаСтенда

УчебныеПериодыДокументов85 → Общие → Общие модули → УчебныеПериоды85

Полный серверный модуль защиты собственного стенда, не выполнялся.

Процедура ПроверитьСвойСтенд() Экспорт
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 1 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Документ = Метаданные.Документы[0];
    Если Документ.Имя <> "УчебнаяЗаявка" Или Документ.Реквизиты.Количество() <> 1
        Или Документ.Реквизиты.Найти("Комментарий") = Неопределено Тогда
        ВызватьИсключение "Нужен собственный документ УчебнаяЗаявка с единственным Комментарий";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. СтандартныйПериод — имя свойства поля, его тип именно НастройкаПериода. Одноимённый тип СтандартныйПериод для СКД здесь не используется; подмена типов была бы ошибкой.

  2. Новая НастройкаПериода получает границы выбранного месяца с 00:00:00 до 23:59:59. УстановитьПериод может подобрать вариант периода; точные границы проверяем getters до передачи полю. ВариантНастройки только записывается: Интервал выбирает закладку диалога, его не читаем.

  3. Настройка начального периода применяется при открытии формы. Пульт вызывает ПодготовитьДоОткрытия у своего закрытого окна, затем Открыть. Переключение сентября/октября требует закрыть этот опыт и получить новое окно, не присвоить свойство открытому полю.

  4. Полная ДокументВыборка проверяет все четыре записи: Номер/Дата/Комментарий, отсутствие проведения/пометки, непустую ссылку и строковую ВерсияДанных. ПолучитьОбъект проверяется на Неопределено; объект читается без изменения или записи.

  5. Выбрать(начало,конец,,"Дата Возр") отдельно подтверждает номера месяца, включая крайние секунды. Это контроль данных, не доказательство того, что видимое поле применило период: экран проверяется после открытия отдельно.

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

  7. ДатаОтбора.Доступность=Ложь отключает интерактивное изменение отбора по дате. РазрешитьНастройкуПериода=Истина отдельно делает команду интервала доступной даже при этом запрете. Это не установка самого периода и не право записи документа.

  8. ТолькоПервыйДокумент использует настоящий отбор Заявки.Отбор.Номер и делает текущей строкой именно собственную ссылку из проверенной выборки. ТекущаяСтрока здесь ДокументСсылка, не номер строки. Кнопка снятия выключает только номерной элемент, не сбрасывает весь отбор по дате. После первого разрешения ручной смены интервала номерной опыт блокируется до нового открытия: исходная НастройкаПериода не считается достоверным снимком текущего пользовательского фильтра. Обновить перечитывает источник, ОбновитьСтроки перерисовывает видимые строки.

  9. Цикл восстановления снимает только шесть скалярных настроек и возвращает их при успехе/ошибке. НастройкаПериода, выбранный интервал, номерной отбор, текущая строка и доступности диалога в цикле не меняются и не объявляются глубоко скопированными.

  10. ПериодАвтоОбновления минимум 5 секунд; цикл пробует 15, начальный профиль 10 и автообновление выключено. ВосстанавливатьТекущуюСтроку задаётся до открытия; временное изменение в цикле не проверяет сохранённую позицию. Проверка новой строки на readonly-поле не срабатывает, поскольку ввод не производится.

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

  1. Будущий ручной тест: ОткрытьСентябрь даёт контрольную выборку S001,S002 и видимый список этих двух документов; октябрь — O001,O002. Сверьте экран отдельно от сообщения выборки.

  2. Первые и последние секунды обоих месяцев входят в собственный ожидаемый интервал. Следующий месяц не должен попадать в сентябрь. Если ручной ввод округлил время, проверка всего набора должна отказать до открытия.

  3. ЗапретитьИнтервал: отбор Дата запрещён и команда интервала недоступна. РазрешитьИнтервал: отбор Дата остаётся запрещён, но команда интервала доступна. После произвольного изменения интервала заново откройте собственный месяц для повторения ожидаемых результатов.

  4. В новом опыте, до РазрешитьИнтервал, ТолькоПервыйДокумент показывает S001 или O001. СнятьНомернойОтбор возвращает оба документа текущего интервала; кнопка не обещает возврат произвольно изменённого пользовательского периода. После РазрешитьИнтервал требуется новое окно для проверки первого номера, даже если затем запрет снова включён.

  5. ПроверитьВосстановление возвращает шесть скалярных значений. Для проверки ошибки в копии модуля поменяйте период на 20 перед сравнением с 15; должно быть исключение с восстановлением.

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

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

Подготовлены два собственных месячных просмотра, контроль выборкой граничных документов, отбор номера и управление доступностью интервала. runtimeVerifiedScenarios=0.

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

  1. Обычный список документов и управляемый ДинамическийСписок имеют разные настройки периода. Не переносите имя свойства с сохранением неверного типа.

  2. НастройкаПериода.ВариантНастройки имеет режим только записи. Не читайте его в снимке и не сравнивайте как обычное свойство.

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

  4. Контроль выборки данных и успешные присваивания не доказывают внешний вид. UI, сохранение позиции, точное время автообновления и ввод новых строк в 1С здесь не проверены.

  5. ВерсияДанных служебная, не версия платформы; сравнение в собственном неизменяемом наборе не заменяет блокировки многопользовательской базы.

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

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

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

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

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

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