Тип: ДокументСсылка.<Имя документа>. Осуществляет позиционирование на строку, содержащуюся в форме списка и отображающую устанавливаемое значение. Позиционирование происходит при открытии или повторном открытии формы. Если форма используется для выбора или подбора, данная установка имеет более высокий приоритет, чем свойство формы НачальноеЗначениеВыбора.
Полное описание, параметры и ограничения
Расширение формы списка документов.ПараметрТекущаяСтрока (Document list form extension.CurrentLineParameter)
Расширение формы списка документов (Document list form extension)
ПараметрТекущаяСтрока (CurrentLineParameter)
Доступен, начиная с версии 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.
Подготовка
В собственной Windows VM вручную подготовьте НОВУЮ пустую файловую ИБ C:\1c-labs\OwnList85_8d18bc25-d53c-45eb-a8f8-4b14b9c6c682\IB, CF Уч85ПрофилиСписка, Основной режим запуска Обычное приложение. Платформа8.5.1.1343, толстый клиент. Не используйте УТ/КА/УНФ/БП/рабочие базы/старую CF предыдущего урока. Здесь ничего не создаётся и не запускается.
Ровно один собственный пользователь Уч85Список_8d18bc25. В новой CF создайте роль Уч85Стенд с Администрирование для native чтения массива пользователей, чтением/добавлением/изменением своего Уч85Профиль; назначьте её только этому собственному пользователю. Не выдавайте права в рабочих ИБ. COMMON сверяет настоящий native current user и Users[0] при Count1, включая typed UUID; никаких UUID placeholders/ручной подстановки нет.
Метка8d18bc25-d53c-45eb-a8f8-4b14b9c6c682 — не native UUID ИБ. Сценарий получает новый native UUID при запуске, пользователь — реальный UUID текущей авторизации. UUID самой ИБ не измеряется. Guard адреса требует exact File строки; если она иная, остановитесь и проверьте фактический адрес, не ослабляйте сравнение подстрокой.
В CF только один документ Уч85Профиль, проведение Запретить, автонумерация строкового номера. Реквизиты Метка85/Пользователь85/Сценарий85 Строка36, Количество Число3,0, Сумма Число15,2, Описание85 Строка100. Дата стандартная включает время. Модуль объекта оставьте пустым: нет собственных обработчиков, движений и реальных регистров. Не добавляйте другие документы/справочники/регистры/задания/обмены/расширения/разделители.
В Общих модулях создайте Уч85СписокСтенд: КлиентОбычноеПриложение=True, Сервер=False, Глобальный=False, Привилегированный=False, повторное использование Не использовать. Вставьте целиком COMMON. Native UserManager доступен здесь именно в толстом клиенте; не переносите его вызовы в тонкий клиент. Код читает только known собственный стенд и проверяет реальные saved ссылки/UUID/данные.
В Документ.Уч85Профиль → Формы мастером создайте ОБЫЧНУЮ ФормаСписка; назначьте основной формой списка. Основной реквизит Список имеет тип ДокументСписок.Уч85Профиль. Это реальный metadata source native расширения формы списка документов, не общая форма с переименованной переменной и не managed ДинамическийСписок.
В ordinary ФормаСписка подготовьте один ТабличноеПоле с именем Список и Данные=Список, ТолькоПросмотр=True. Перед сохранением metadata удалите ВСЕ его GUI-колонки в Конфигураторе: первоначальный GUI Count0 — явная подготовка этого известного собственного layout. Список-source и таблица имеют одинаковое имя, но код проверяет native metadata type плюс actual value identity/data-binding/control identity, а не только имена.
Форму списка сделайте только для просмотра: не добавляйте команды создания/редактирования/удаления/проведения/пометки удаления и автонаполняемые командные панели. Свои saved данные изменяет только явная команда контроллера до открытия списка. Readonly-control не абсолютная защита от произвольного административного кода; одна собственная сессия и известная CF обязательны.
В модуль этой ФормаСписка вставьте LIST_FORM. Назначьте форме native ПередОткрытием(Отказ,СтандартнаяОбработка)2. Для ТабличноеПоле.Список событие ПриАктивизацииСтроки назначьте СписокПриАктивизацииСтроки(Элемент): base native event имеет0 параметров, ordinary extension добавляет первый Элемент, поэтому handler1. Не вызывайте этот обработчик вручную. ПодготовитьСвойПоказ85 — собственная обычная Export процедура инициализации, не native событие.
Создайте обычную общую форму Уч85ПрофилиСписка, без основного прикладного реквизита, с реквизитами СогласиеНаСвоиТриЗаписи85 Булево и Статус85 Строка1000. Флажок согласия доступен, поле Статус85 только для просмотра. Вставьте MAIN/CONTROLLER целиком. Он хранит actual свежий child-instance из manager.GetListForm, не ищет чужие формы и не конструирует абстрактные КолонкиСписка.
В этой общей форме создайте4 обычные кнопки: СоздатьСвоиТри85, ПоказатьСемантикуУдаления85, ПерестроитьСвойМакет85, ПроверитьИтог85. Native Нажатие у Кнопка имеет0 параметров; ordinary extension добавляет первый Элемент, значит свяжите их Нажатие с одноимённой процедурой(Элемент). Это не managed command handler и не ручной callback.
В Модуль обычного приложения вставьте APPLICATION с native ПриНачалеРаботыСистемы0. Оно проверяет пустоту и открывает именно свою общую форму через native ПолучитьОбщуюФорму. CF и формы сохраните/проверьте/запустите сами; actual compile/UI здесь0.
Убедитесь вручную: пустая таблица документов, одна сессия, один actual пользователь, нужная роль, точный File адрес, только свой документ/CF, GUI metadata initially0. Первое действие создаст ровно3 собственных записи с явным согласием. Частичная запись оставляет unknown flag и сохранённые свои данные для проверки человеком; автоматических очисток/повторов/отмены транзакции/backup нет.
GUI КолонкаТабличногоПоля.Данные — StringRW, имя source column. Source КолонкаСписка.Имя readonly. Не копируйте legacy пример с GUI.Значение на объект колонки: актуальная native TableBoxColumn использует Данные. Поле ТабличноеПоле.Данные связывает переменную основного реквизита через ordinary control-extension, .Значение возвращает actual native список; этот field никогда не используется владельцем окна.
Явный свой source whitelist8: Ссылка,Дата,Номер,Количество,Сумма,Метка85,Пользователь85,Сценарий85. GUI4: Дата,Номер,Количество,Сумма. Ссылку и UUID держим в source для проверки delivered currentdata, но не показываем пользователю как редактируемые поля. Список.Колонки readonly factory→collection; нельзя присвоить новый абстрактный объект списку.
Настройка времени own list — именно НастройкаПериода, не СтандартныйПериод из managed/СКД. Его native ctor0 даёт обе границы БезОграничения; код проверяет фактические пустые GetDateFrom/GetDateTo и назначает field.СтандартныйПериод ДО Открыть. Это гарантируемое raw contract ожидание, actual список ещё не запускался; не оставляйте default текущий месяц, скрывающий январские учебные документы.
Native ПараметрТекущаяСтрока получает свою сохранённую ссылку3/300 до открытия. Raw позиционирование происходит только при open/reopen, не при любом последующем присваивании. После открытия сами щёлкните все свои2,3,5; SQL-count3 не считается доказательством того, что GUI их отобразил или native event доставил.
В текущие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 Отбор.
AutoDeleteFalse означает: удаление видимой GUI-колонки сохраняет её source-column. AutoDeleteTrue на том же actual source-column означает: native удаление собственной связанной GUI-колонки удаляет source-column тоже. Это не удаление реквизита metadata или записей документа. Source.Columns.Удалить принимает String name; GUI.Columns.Удалить принимает index либо actualGUIColumn, не наоборот.
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; ноль — явное проверенное промежуточное собственное состояние, не произвольная пустота.
Данные native текущей строки не кэшируйте между профилями. LIST_FORM берёт свежие .ТекущаяСтрока/.ТекущиеДанные в настоящем событии; MAIN сравнивает actual form/control/data identities, concrete types, ownDocRef/UUID/values с отдельным DB-readback. Во время layout перехода событие не засчитывается; после каждого профиля нужны три реальных ручных выбора заново.
Статические 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ПрофилиСписка");
Форма.Открыть();
КонецПроцедурыРазбор по шагам
В новой собственной пустой ИБ запустите свой толстый ordinary клиент. Launcher появился только после exact File/CF/единственный current+UsersUUID/pustota guards. Отметьте СогласиеНаСвоиТриЗаписи85, затем СоздатьСвоиТри85 один раз.
MAIN перед каждым native document.Write сверяет собственные ранее сохранённые0/1/2 записи и ссылки; native СоздатьДокумент создаёт именно свой непроводимый объект. После каждого write новая фактическая ссылка добавляется только при ЭтоНовый=False/nonempty и независимом saved readback. После третьего — real count3, Qty10/Sum1000. При partial ошибка прекращает урок без автоудаления.
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.
До Open назначены native НастройкаПериода без ограничений и ПараметрТекущаяСтрока=своя сохранённая3/300. Native BeforeOpen2 support подтвердит реальный main DocList и independent own rows. Ожидаемое первоначальное выделение3/300 проверьте вручную; это не выполненный здесь результат.
В списке вручную выберите2/200,3/300,5/500. Настоящий rowevent handler1 берёт delivered currentdata; MAIN не вычисляет эти значения вместо UI, а сравнивает их с независимыми saved rows/refs/date/number/UUID. Пока все3 different actual refs не доставлены, следующая команда запрещена.
В 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 всё время прежний.
После профиля опять щёлкните2/3/5, реально повторно доставьте currentdata. Исчезновение source Description проверяется FindUndefined/Count8; не считайте изменение одного SQL count доказательством GUI association.
ПерестроитьСвойМакет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.
После rebuild снова реально выберите2/3/5 и нажмите ПроверитьИтог85. Expected source8/GUI4, три настоящие события собственных ссылок и прежний независимый DB3/10/1000. Задача не меняла saved документы после первоначальных3 writes, не печатала/экспортировала/удаляла данные.
Зафиксируйте ручной протокол либо точный отказ; сохранённые собственные3 записи оставьте для человека. Следующий запуск в непустой ИБ намеренно откажет, не создаст дубликаты и не выполнит cleanup. Actual protocol здесь ещё отсутствует: только static source.
Как проверить результат
Статически: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 неизменны.
Вручную: wrong path/config/user/usersUUID/count/preexisting data/source/control/layout/deliveredref/UUID →отказ до очередной допустимой own операции, никакого foreign write/перезапуска/очистки. Admin/read-only поля не объявляются абсолютной security.
Вручную: real DB3 records own typed refs, marker/realUserUUID/freshScenarioUUID, dates0:00, qty2+3+5=10, amount200+300+500=1000 до и после каждого layout. Unknown partial не превращается в ожидаемые данные.
Вручную: source8/GUI4 действительно разные collections; AutoDeleteFalse GUIdelete keeps source9, True deletes sourceDescription→8; sourceDelete("Описание85")String не GUIobject/index. Column.Name readonly, actual column.Data binding подтверждён.
Вручную: native callback1 реально доставляет concrete currentDataList values иactualDocRef всех3ownrows; сравнениеQuery не выдаётся за факт отображения. InitialCurrentRow только приopen/reopen, period actualownНастройкаПериодаNoBounds.
Вручную: clear only fullyowned layout, snapshot/whitelist/flags до изменений; GUI0/source8→source0→source8/GUI4 при прежнемDB3/10/1000. Native callbacks вручную не запускаются; после каждого профиля требуется свежая реальная delivery всех3 строк.
Публикационные 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.
На что обратить внимание
ДокументСписок.<Имя> — ordinary native список, не managed ДинамическийСписок. Native manager.GetListForm3 — реальный источник формы; type/name совпадение переменных без factory/metadata/value identity доказательством не считается.
Source.Columns readonly property даёт изменяемую collection; Column.Name readonly. GUI.Column.Данные связывает source-column, а не native GUI.Значение из legacy примера.
Source.Set(String CSV) replaces whole source columns; GUI layout автоматически не создаётся. Source.Delete(StringName) отличается от GUI.Delete(IndexOrActualColumn).
AutoDeleteFalse/True относится к source-column при удалении соответствующей GUI-column, не к удалению metadata/документов. Не присваивайте ожидаемый Count вместо фактического native readback.
ПараметрТекущаяСтрока делает positioning приopen/reopen; currentdata читается после реальной активации, не сразу из обещанного parameter assignment. Rowevent base0+ordinaryfirstElement1; manual callback запрещён.
Native ТекущиеДанные readonly и зависят от SOURCE columns. Не путайте скрытое source поле с видимой GUI колонкой и не кэшируйте старую selection между source changes.
Native поле.СтандартныйПериод ordinary принимает НастройкаПериода, НЕ одноимённый managed СтандартныйПериод. Fresh ctor0 даётNoBounds; GetDateFrom/GetDateTo actualemptydate, startup historical rows не спрятаны текущим месяцем.
Отбор.Add/Delete/GetAvailableFields rawnative запрещены для DocumentList.Filter. Не применяйте standalone API к похожему owner ради покрытия; в уроке этих calls нет.
Whole Clear только whollyowned freshinstance сownknownstate. Порядок GUI.Clear before source.Clear и exact0 before planned restore нужен; arbitrary чужой source/reset/автоматический rollback после partial недопустим.
Три real native writes выполняет только вручную запущенный authored сценарий с согласия в новой собственной ИБ. После partial/exception unknown flag и реальные saved данные остаются для проверки, без retries/delete/backups.
Native CurrentUser UUID — UUID пользователя, не базы/маркер пути. СписокUsers1 и matching currentUUID устраняют placeholders, но дают administrative read contract только собственному подготовленному толстому клиенту.
Readonly control и guards не защита от произвольного административного кода/других сессий/unknown CF. Только собственная known пустая CF/oneuser/onesession без регистров/расширений/jobs.
СуммаQuery1000 не доказывает GUI отображение илиcallbackdelivery. Delivered data сравниваются отдельно с native actual table/currentrow identity иindependent saved data; без3 разных реальных событий следующая фаза не запускается.
Python synthetic tests/native static checks не BSLcompiler/работающая1C. Field-value identity/AutoDelete/repaint/currentdata delivery/period и GUIzero transitions нужно подтвердить вручную; в этой работе runtime0.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.