Используется для доступа к элементам управления, расположенным на форме. Типы элементов управления описаны в Элементы управления.
Примеры платформы
Сообщить(ЭлементыФормы.ТаблПоле.Колонки.Количество());Полное описание, параметры и ограничения
ЭлементыФормы (Controls)
ЭлементыФормы (Controls)
Доступен, начиная с версии 8.0.
Свойства:
<Имя элемента управления> (<Control name>)
Методы:
Добавить (Add)
ДобавитьActiveX (AddActiveX)
Индекс (IndexOf)
Количество (Count)
Найти (Find)
Очистить (Clear)
Получить (Get)
Удалить (Delete)
Описание:
Используется для доступа к элементам управления, расположенным на форме. Типы элементов управления описаны в Элементы управления.
Доступность:
Толстый клиент.
Пример:
Сообщить(ЭлементыФормы.ТаблПоле.Колонки.Количество());
См. также:
Форма, свойство ЭлементыФормы
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Свой обычный бланк: редакторы в ячейках, пересчет850→530, подсказка и безопасная очистка собственной служебной формы
Целый ordinary UI workflow, не обертка над неизвестным объектом: actual Controls получены из readonly Форма.ЭлементыФормы; real Add fourth-owner spreadsheet field создает связанные с ним input editors/overlay extension. Числа читаются из своих actual полей, затем из своего numeric результата. Clear касается только fresh whole-owned scratch, не основного бланка.
Где и как запускать
MAIN FORM только модуль собственной обычной общей формы Бланк85 нового host УчебныйОбычныйБланк85. Windows thick ОбычноеПриложение/FileIB/actual ownuser. Actual controls collection catalog56 и extension от native fourthowner spreadsheet field; supporting SCRATCH/APPLICATION в своих точных местах.
Подготовка
Только собственная отдельная Windows VM/платформа8.5.1.1343, толстый клиент в режиме ОбычноеПриложение. Не thin/web/managed Forms: здесь именно native ЭлементыФормы (Controls), registry owner ЭлементыФормы @Controls; одноименный managed FormItems имеет другую справку/factory/контекст.
Вручную создайте canonical nonzero UUID-marker и новую пустую FileIB C:\1c-labs\Уч85Бланк_<UUID>\ИБ\. Connection строго File="C:\1c-labs\Уч85Бланк_<UUID>\ИБ\";. Конфигурация УчебныйОбычныйБланк85. Marker пути/имени не UUID информационной базы или настоящего пользователя; реальный UUID базы не измеряется.
Создайте одного actual IBUser Уч85Бланк_<UUID> с правами этого своего стенда/чтения списка пользователей, без privileged mode. Native currentuser UUID сверяется с единственным настоящим пользователем, а marker извлекается из его actual имени. Не используйте типовую/рабочую конфигурацию или другого OS/1C-пользователя.
Собственная CF пуста: нет справочников/документов/регистров/общих реквизитов/разделителей/внешних данных/расширений/ботов/констант/подписок/регламентных заданий. Создайте только две ordinary общие формы Бланк85 и Служебная85 с модулями ниже; основной блок FORM вставляется исключительно в модуль собственной Бланк85.
Конфигуратор → Общие → Общие формы → Бланк85: тип Обычная форма. Реквизиты формы: МеткаОпыта Строка36, Согласен85 Булево с начальным Ложь, Бланк85 ТабличныйДокумент. Поле флажка связано с Согласен85. МеткаОпыта назначается настоящим app module перед открытием, вручную не подменяется.
На Бланк85 создайте ПолеТабличногоДокумента Уч85Бланк, Данные=Бланк85. Разместите его так, чтобы были видны четыре колонки/строки1..16; разрешите ввод в нем на собственном стенде. Не назначайте ни ПолеВвода, ни ТабличноеПоле владельцем этой формы: native spreadsheet-field extension тогда недоступно.
Создайте пять обычных кнопок с точными именами: Подготовить85, Пересчитать85, Просмотр85, УдалитьПодсказку85, ОчиститьСлужебную85. В свойствах каждой кнопки → События → Нажатие явно назначьте соответственно ПодготовитьБланк85, ПересчитатьБланк85, РежимПросмотра85, УдалитьПодсказку85, ЗавершитьСлужебнуюПроверку85. Имя кнопки само по себе не связывает событие с процедурой.
Все пять handlers имеют один параметр Элемент: исходное native Button.Нажатие() не содержит собственных параметров, но ordinary Расширение элементов управления, расположенных в форме добавляет первый Элемент. Это actual initiating Кнопка, а не managed Команда и не произвольный объект. Не вызывайте эти handlers вручную.
Полностью вставьте FORM в модуль Бланк85. Actual readonly ЭтаФорма типа Форма дает readonly ЭлементыФормы; их не создают через Новый и не присваивают другой коллекцией. Stored ПоляКоличества85/Подсказка85 — только реальные объекты, возвращенные own Controls.Добавить, не найденные чужие объекты.
Служебная85 — отдельная собственная ordinary общая форма. Реквизиты МеткаОпыта Строка36 и СлужебноеКоличество85 Число(2,0). Число7 назначает MAIN своему fresh экземпляру перед проверкой/открытием, а не выдуманное metadata initial-value свойство. Она не редактирует бланк и не содержит кнопок, подписок или сторонних элементов. Именно ее целая новая коллекция позже удаляется Clear.
Для Служебная85 сохраните/назовите native главную панель Уч85СлужебнаяПанель. Затем создайте строго в таком порядке Надпись Уч85СлужебнаяНадпись с текстом "Только свои служебные элементы" и ПолеВвода Уч85СлужебныйВвод, Данные=СлужебноеКоличество85, ТолькоПросмотр=Истина. Удалите все прочие elements только при собственной ручной подготовке этой новой формы.
Если native главная панель присутствует в Controls, она обязана быть индексом0 и actual объектом readonly Форма.Панель с точным собственным именем. За ней ожидаются только подготовленная надпись и ввод; если root panel не входит в коллекцию, ожидаются только два этих controls. Код проверяет actual Индекс/Получить identity и порядок, а не угадывает наличие панели по имени переменной.
Вставьте SCRATCH целиком в модуль собственной Служебная85. Ее export проверяет actual typed attribute7, data binding и реальное input.Value. MAIN получает только fresh native ПолучитьОбщуюФорму("Служебная85",ЭтаФорма,freshUUID), назначает own marker, проверяет и открывает этот экземпляр. Владельцем служит собственная Форма, не input/table control.
В обычный модуль приложения этой CF вставьте APPLICATION целиком. Реальное native ПриНачалеРаботыСистемы() получает actual ownuser marker, выполняет полный guard, затем получает fresh Бланк85 через GetCommonForm и открывает. Оно не запускает очистку, расчет, печать или искусственные button events.
Вручную проверьте модули конфигуратором и запустите только эту собственную новую ИБ actual пользователем. Автор не создавал ИБ/формы/файлы и не запускал1С/UI. В открытой Бланк85 отметьте Согласен85 и нажмите Подготовить85 один раз. При ошибке нет автоматического retry/сноса неизвестных controls; закройте только свои новые формы и исправьте own metadata вручную.
После подготовки три actual ПолеВвода созданы Add(Тип("ПолеВвода"),ownName,Истина,actual Уч85Бланк). Это документированный четвертый owner ПолеТабличногоДокумента. Расположить получает actual его область ячейки, ВстроенВЯчейку=True; numeric cells/ОграничениеТипа задают собственный Число, Value читается и проверяется. Для данных через форму Data неизвестная переменная редакторам не придумывается.
Начальные количества Пакет2/Папка3/Маркер5 и actual ячейки цен100/200/10 должны дать numeric850. Вручную введите1/2/3, завершите ввод уходом из редактора, нажмите Пересчитать85: actual значения и независимо прочитанные outputcells должны дать530. Нецелые/строки/0/100 и измененные ячейки цен отказывают до result writes; источник не используется как fallback.
Собственная overlay Надпись помещена в тот же spreadsheet field, но ВстроенВЯчейку=False. Ее Лево5/Верх42/Ширина80/Высота10 заданы именно в МИЛЛИМЕТРАХ от границы табличного документа, не в logical units обычной формы. Из-за разрешенного округления geometry readback имеет допуск0.2mm; embedded input geometry вручную не перезаписывается.
Просмотр85 сначала пересчитывает собственные числа, затем только скрывает/показывает редакторы и подсказку, значения не уничтожаются. ВыводитьНаПечать=False на каждом служебном control читается обратно; значения количества и сумм остаются числовыми в собственном бланке. Это настройка исключения controls из печати, не выполненная/проверенная печать и не обещание произвольного экспортного формата.
УдалитьПодсказку85 удаляет только actual сохраненную nativeAdd надпись после name/type/Index/Get/identity guard. Native Count уменьшается на1, Find возвращает Undefined, три input editors и исходные элементы остаются. Повторное удаление отказывает; unknown одноименный объект не подставляется.
Последней командой ОчиститьСлужебную85 удалите целую исключительно fresh собственную Служебная85. Не закрывайте ее вручную до этой команды: actual IsOpen проверяется, уже закрытая форма отказывает без восстановления. До Clear совпадают marker, native source, exact whitelist/order/identity, typed7 и count; дополнительный/измененный control означает отказ. Только эта коллекция становится0, затем закрывается только эта своя форма и IsOpen=False подтверждает закрытие; основная Controls должна сохранить count/identity.
Ручной negative протокол выполняйте только на отдельном собственном экземпляре: без Согласен85 нажать подготовку — отказ; повторить подготовку — отказ; поменять typed quantity на0/100 — отказ; добавить лишний control/поменять порядок в own scratch metadata — отказ до Clear. После частичной ошибки нельзя переносить коллекцию/объекты из другого экземпляра или удалять их автоматически.
Перем НачатаПодготовка85;
Перем Подготовлено85;
Перем ПоляКоличества85;
Перем Подсказка85;
Перем СлужебнаяФорма85;
Перем ИсходноеКоличество85;
Перем Просмотр85;
Процедура ПодготовитьБланк85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "Подготовить85");
Если НачатаПодготовка85 = Истина Тогда
ВызватьИсключение "Подготовка одноразовая. После ошибки закройте только свои формы и откройте новый собственный экземпляр, не дополняйте частичную коллекцию";
КонецЕсли;
Имена = ПолучитьИменаСвоихРедакторов85();
Для Каждого Имя Из Имена Цикл
Если ЭтаФорма.ЭлементыФормы.Найти(Имя) <> Неопределено Тогда
ВызватьИсключение "Собственное новое имя уже занято. Существующий элемент не переиспользуется";
КонецЕсли;
КонецЦикла;
Если ЭтаФорма.ЭлементыФормы.Найти("Уч85Подсказка") <> Неопределено Тогда
ВызватьИсключение "Имя собственного overlay уже занято";
КонецЕсли;
ПолеБланка = ЭтаФорма.ЭлементыФормы.Найти("Уч85Бланк");
Если ПолеБланка = Неопределено Или ТипЗнч(ПолеБланка) <> Тип("ПолеТабличногоДокумента") Или ПолеБланка.Данные <> "Бланк85" Тогда
ВызватьИсключение "Нужно собственное prepared spreadsheet field с реальной связью Данные=Бланк85";
КонецЕсли;
НачатаПодготовка85 = Истина;
ИсходноеКоличество85 = ЭтаФорма.ЭлементыФормы.Количество();
Бланк85 = Новый ТабличныйДокумент;
Бланк85.Область(1, 1).Текст = "Собственный учебный бланк: количество вводится в трех редакторах";
Бланк85.Область(2, 1).Текст = "Товар";
Бланк85.Область(2, 2).Текст = "Количество";
Бланк85.Область(2, 3).Текст = "Цена";
Бланк85.Область(2, 4).Текст = "Сумма";
Товары = ПолучитьСвоиТовары85();
Цены = ПолучитьСвоиЦены85();
Количества = Новый Массив;
Количества.Добавить(2);
Количества.Добавить(3);
Количества.Добавить(5);
ПоляКоличества85 = Новый Массив;
Для ИндексСтроки = 0 По 2 Цикл
Номер = ИндексСтроки + 3;
Бланк85.Область(Номер, 1).Текст = Товары[ИндексСтроки];
ЗаписатьСвоюЧисловуюЯчейку85(Номер, 2, Количества[ИндексСтроки]);
ЗаписатьСвоюЧисловуюЯчейку85(Номер, 3, Цены[ИндексСтроки]);
ПолеКоличества = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), Имена[ИндексСтроки], Истина, ПолеБланка);
ПолеКоличества.ОграничениеТипа = Новый ОписаниеТипов("Число");
ПолеКоличества.Расположить(ПолеБланка.Область(Номер, 2));
ПолеКоличества.ВстроенВЯчейку = Истина;
ПолеКоличества.ВыводитьНаПечать = Ложь;
ПолеКоличества.Значение = Количества[ИндексСтроки];
Если Не ПолеКоличества.ВстроенВЯчейку Или ПолеКоличества.ВыводитьНаПечать
Или ТипЗнч(ПолеКоличества.Значение) <> Тип("Число") Или ПолеКоличества.Значение <> Количества[ИндексСтроки] Тогда
ВызватьИсключение "Реальный spreadsheet-field editor не подтвердил embedded/value/print-exclusion. Формальные свойства неизвестного объекта не используются";
КонецЕсли;
ПоляКоличества85.Добавить(ПолеКоличества);
КонецЦикла;
Бланк85.Область(6, 1).Текст = "Итого";
Бланк85.Область(16, 1).Текст = "Служебные редакторы не являются печатным документом";
Подсказка85 = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"), "Уч85Подсказка", Истина, ПолеБланка);
Подсказка85.Заголовок = "Введите количества1..99 и нажмите Пересчитать. База данных и принтер не используются.";
Подсказка85.ВстроенВЯчейку = Ложь;
Подсказка85.Лево = 5;
Подсказка85.Верх = 42;
Подсказка85.Ширина = 80;
Подсказка85.Высота = 10;
Подсказка85.ВыводитьНаПечать = Ложь;
Если Подсказка85.ВстроенВЯчейку Или Подсказка85.ВыводитьНаПечать Или Не Подсказка85.Видимость
Или Абс(Подсказка85.Лево - 5) > 0.2 Или Абс(Подсказка85.Верх - 42) > 0.2
Или Абс(Подсказка85.Ширина - 80) > 0.2 Или Абс(Подсказка85.Высота - 10) > 0.2 Тогда
ВызватьИсключение "Own free overlay geometry в миллиметрах не подтверждена; embedded редакторам эти координаты не задаются";
КонецЕсли;
Просмотр85 = Ложь;
Подготовлено85 = Истина;
ПроверитьКоллекциюСвоихРедакторов85();
Сумма = ПересчитатьПоActualРедакторам85();
Если Сумма <> 850 Тогда
ВызватьИсключение "Фактические редакторы2/3/5 и прочитанные результатные ячейки не дали850";
КонецЕсли;
СлужебнаяФорма85 = ПолучитьОбщуюФорму("Служебная85", ЭтаФорма, Строка(Новый УникальныйИдентификатор));
Если ТипЗнч(СлужебнаяФорма85) <> Тип("Форма") Тогда
ВызватьИсключение "Native factory не вернул собственную свежую ordinary служебную форму";
КонецЕсли;
СлужебнаяФорма85.МеткаОпыта = МеткаОпыта;
СлужебнаяФорма85.СлужебноеКоличество85 = 7;
СлужебнаяФорма85.ПроверитьСвоиСлужебныеЭлементы85();
СлужебнаяФорма85.Открыть();
Если Не СлужебнаяФорма85.Открыта() Тогда
ВызватьИсключение "Собственная native служебная форма не открыта; это не считается UI success";
КонецЕсли;
Сообщить("Бланк подготовлен: actual сумма850. Для530 вручную введите1/2/3, подтвердите ввод уходом из ячейки и нажмите Пересчитать. Служебная форма очищается отдельной командой только после проверки ее собственной коллекции.");
КонецПроцедуры
Процедура ПересчитатьБланк85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "Пересчитать85");
ПроверитьКоллекциюСвоихРедакторов85();
Сумма = ПересчитатьПоActualРедакторам85();
Сообщить("Сумма из actual input values и независимо прочитанных собственных output cells=" + Строка(Сумма));
КонецПроцедуры
Процедура РежимПросмотра85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "Просмотр85");
ПроверитьКоллекциюСвоихРедакторов85();
Сумма = ПересчитатьПоActualРедакторам85();
Просмотр85 = Не Просмотр85;
ДолженОтображаться = Не Просмотр85;
Для Каждого ПолеКоличества Из ПоляКоличества85 Цикл
ПолеКоличества.Видимость = ДолженОтображаться;
Если ПолеКоличества.Видимость <> ДолженОтображаться Или ПолеКоличества.ВыводитьНаПечать Тогда
ВызватьИсключение "Own visibility/readback/print exclusion не подтвердились";
КонецЕсли;
КонецЦикла;
Если Подсказка85 <> Неопределено Тогда
Подсказка85.Видимость = ДолженОтображаться;
Если Подсказка85.Видимость <> ДолженОтображаться Тогда
ВызватьИсключение "Own overlay visibility не подтверждена";
КонецЕсли;
КонецЕсли;
Если Бланк85.Область(6, 4).Значение <> Сумма Тогда
ВызватьИсключение "Режим просмотра не должен удалять/подменять own numeric result";
КонецЕсли;
Сообщить("Режим просмотра=" + Строка(Просмотр85) + ". Редакторы только скрыты, значения сохранены. Печать не выполнялась.");
КонецПроцедуры
Процедура УдалитьПодсказку85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "УдалитьПодсказку85");
ПроверитьКоллекциюСвоихРедакторов85();
Если Подсказка85 = Неопределено Тогда
ВызватьИсключение "Собственная подсказка уже удалена; неизвестный одноименный объект не ищется для удаления";
КонецЕсли;
Если ЭтаФорма.ЭлементыФормы.Найти("Уч85Подсказка") <> Подсказка85 Или ТипЗнч(Подсказка85) <> Тип("Надпись") Тогда
ВызватьИсключение "Удаление разрешено только actual созданной own overlay надписи";
КонецЕсли;
ИндексПодсказки = ЭтаФорма.ЭлементыФормы.Индекс(Подсказка85);
До = ЭтаФорма.ЭлементыФормы.Количество();
Если ИндексПодсказки < 0 Или ИндексПодсказки >= До Или ЭтаФорма.ЭлементыФормы.Получить(ИндексПодсказки) <> Подсказка85 Тогда
ВызватьИсключение "Actual index/get identity собственного удаляемого элемента не совпали";
КонецЕсли;
ЭтаФорма.ЭлементыФормы.Удалить(Подсказка85);
Подсказка85 = Неопределено;
Если ЭтаФорма.ЭлементыФормы.Количество() <> До - 1 Или ЭтаФорма.ЭлементыФормы.Найти("Уч85Подсказка") <> Неопределено Тогда
ВызватьИсключение "Удаление только своей надписи не подтверждено";
КонецЕсли;
ПроверитьКоллекциюСвоихРедакторов85();
Сообщить("Удалена только собственная динамическая надпись; три редактора, бланк и подготовленные кнопки сохранены. Ее нельзя восстановить повторной подготовкой этого экземпляра.");
КонецПроцедуры
Процедура ЗавершитьСлужебнуюПроверку85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "ОчиститьСлужебную85");
ПроверитьКоллекциюСвоихРедакторов85();
Если СлужебнаяФорма85 = Неопределено Тогда
ВызватьИсключение "Своей fresh служебной формы нет или она уже очищена; чужая форма не подставляется";
КонецЕсли;
Если Не СлужебнаяФорма85.Открыта() Тогда
ВызватьИсключение "Собственная служебная форма уже закрыта вручную; ее controls не восстанавливаются/не очищаются после закрытия";
КонецЕсли;
СлужебнаяФорма85.ПроверитьСвоиСлужебныеЭлементы85();
Если СлужебнаяФорма85.МеткаОпыта <> МеткаОпыта Тогда
ВызватьИсключение "Marker собственного экземпляра служебной формы изменился";
КонецЕсли;
Коллекция = СлужебнаяФорма85.ЭлементыФормы;
Надпись = Коллекция.Найти("Уч85СлужебнаяНадпись");
Ввод = Коллекция.Найти("Уч85СлужебныйВвод");
Если Надпись = Неопределено Или Ввод = Неопределено Или ТипЗнч(Надпись) <> Тип("Надпись")
Или ТипЗнч(Ввод) <> Тип("ПолеВвода") Или Ввод.Данные <> "СлужебноеКоличество85" Или Ввод.Значение <> 7 Тогда
ВызватьИсключение "Fresh own scratch whitelist/type/binding/value не совпал; Clear не разрешен";
КонецЕсли;
Ожидаемые = Новый Массив;
ИндексПанели = Коллекция.Индекс(СлужебнаяФорма85.Панель);
Если ИндексПанели >= 0 Тогда
Если ИндексПанели <> 0 Или СлужебнаяФорма85.Панель.Имя <> "Уч85СлужебнаяПанель" Тогда
ВызватьИсключение "Если native root panel входит в Controls, она должна быть собственным первым подготовленным элементом";
КонецЕсли;
Ожидаемые.Добавить(СлужебнаяФорма85.Панель);
КонецЕсли;
Ожидаемые.Добавить(Надпись);
Ожидаемые.Добавить(Ввод);
Если Коллекция.Количество() <> Ожидаемые.Количество() Тогда
ВызватьИсключение "В whole owned scratch есть дополнительный неизвестный элемент. Его нельзя удалять Clear";
КонецЕсли;
Для ИндексЭлемента = 0 По Ожидаемые.Количество() - 1 Цикл
Если Коллекция.Получить(ИндексЭлемента) <> Ожидаемые[ИндексЭлемента]
Или Коллекция.Индекс(Ожидаемые[ИндексЭлемента]) <> ИндексЭлемента Тогда
ВызватьИсключение "Own scratch native order/Get/Index identity не совпали";
КонецЕсли;
КонецЦикла;
ОсновныхДо = ЭтаФорма.ЭлементыФормы.Количество();
Коллекция.Очистить();
Если Коллекция.Количество() <> 0 Или ЭтаФорма.ЭлементыФормы.Количество() <> ОсновныхДо Тогда
ВызватьИсключение "Clear собственного целого scratch не подтвердил0 либо затронул основной бланк";
КонецЕсли;
СлужебнаяФорма85.Закрыть();
Если СлужебнаяФорма85.Открыта() Тогда
ВызватьИсключение "Закрытие только своей очищенной служебной формы не подтверждено";
КонецЕсли;
СлужебнаяФорма85 = Неопределено;
ПроверитьКоллекциюСвоихРедакторов85();
Сообщить("Whole own scratch Controls очищена до0 и своя служебная форма закрыта. Основная коллекция не очищалась.");
КонецПроцедуры
Функция ПересчитатьПоActualРедакторам85()
ПроверитьКоллекциюСвоихРедакторов85();
Количества = Новый Массив;
Для Каждого ПолеКоличества Из ПоляКоличества85 Цикл
Значение = ПолеКоличества.Значение;
Если ТипЗнч(Значение) <> Тип("Число") Или Значение < 1 Или Значение > 99 Или Значение <> Цел(Значение) Тогда
ВызватьИсключение "Сначала завершите ввод: каждому actual редактору нужно целое число1..99. Строки/0/100 не конвертируются и не заменяются исходными значениями";
КонецЕсли;
Количества.Добавить(Значение);
КонецЦикла;
Цены = ПолучитьСвоиЦены85();
Для ИндексЦены = 0 По 2 Цикл
ЯчейкаЦены = Бланк85.Область(ИндексЦены + 3, 3);
Если Не ЯчейкаЦены.СодержитЗначение Или ТипЗнч(ЯчейкаЦены.Значение) <> Тип("Число")
Или ЯчейкаЦены.Значение <> Цены[ИндексЦены] Тогда
ВызватьИсключение "Собственные actual числовые цены изменены или отсутствуют. Расчет не маскирует это исходными ценами";
КонецЕсли;
КонецЦикла;
Сумма = 0;
Для ИндексСтроки = 0 По 2 Цикл
Номер = ИндексСтроки + 3;
ЗаписатьСвоюЧисловуюЯчейку85(Номер, 2, Количества[ИндексСтроки]);
ЦенаИзЯчейки = Бланк85.Область(Номер, 3).Значение;
ЗаписатьСвоюЧисловуюЯчейку85(Номер, 4, Количества[ИндексСтроки] * ЦенаИзЯчейки);
Ячейка = Бланк85.Область(Номер, 4);
Если Не Ячейка.СодержитЗначение Или ТипЗнч(Ячейка.Значение) <> Тип("Число")
Или Ячейка.Значение <> Количества[ИндексСтроки] * ЦенаИзЯчейки Тогда
ВызватьИсключение "Own actual output cell после пересчета не подтверждена";
КонецЕсли;
Сумма = Сумма + Ячейка.Значение;
КонецЦикла;
ЗаписатьСвоюЧисловуюЯчейку85(6, 4, Сумма);
ЯчейкаИтога = Бланк85.Область(6, 4);
Если Не ЯчейкаИтога.СодержитЗначение Или ТипЗнч(ЯчейкаИтога.Значение) <> Тип("Число") Или ЯчейкаИтога.Значение <> Сумма Тогда
ВызватьИсключение "Итог actual табличного документа не подтвержден чтением";
КонецЕсли;
Возврат ЯчейкаИтога.Значение;
КонецФункции
Процедура ЗаписатьСвоюЧисловуюЯчейку85(Номер, Колонка, Значение)
Ячейка = Бланк85.Область(Номер, Колонка);
Ячейка.СодержитЗначение = Истина;
Ячейка.ТипЗначения = Новый ОписаниеТипов("Число");
Ячейка.Значение = Значение;
КонецПроцедуры
Процедура ПроверитьКоллекциюСвоихРедакторов85()
ПроверитьСвойOrdinaryБланк85(МеткаОпыта);
Если Подготовлено85 <> Истина Или ПоляКоличества85 = Неопределено Тогда
ВызватьИсключение "Сначала собственная одноразовая подготовка, не unknown caller-provided collection";
КонецЕсли;
Если ПоляКоличества85.Количество() <> 3 Тогда
ВызватьИсключение "Нужны ровно три actual own созданных редактора";
КонецЕсли;
Дополнительных = 3;
Если Подсказка85 <> Неопределено Тогда
Дополнительных = Дополнительных + 1;
КонецЕсли;
Если ЭтаФорма.ЭлементыФормы.Количество() <> ИсходноеКоличество85 + Дополнительных Тогда
ВызватьИсключение "Количество Controls основной собственной формы изменено вне процесса";
КонецЕсли;
Имена = ПолучитьИменаСвоихРедакторов85();
Для ИндексПоля = 0 По 2 Цикл
ПолеКоличества = ПоляКоличества85[ИндексПоля];
ИндексЭлемента = ЭтаФорма.ЭлементыФормы.Индекс(ПолеКоличества);
Если ТипЗнч(ПолеКоличества) <> Тип("ПолеВвода") Или ЭтаФорма.ЭлементыФормы.Найти(Имена[ИндексПоля]) <> ПолеКоличества
Или ИндексЭлемента < 0 Или ИндексЭлемента >= ЭтаФорма.ЭлементыФормы.Количество()
Или ЭтаФорма.ЭлементыФормы.Получить(ИндексЭлемента) <> ПолеКоличества
Или Не ПолеКоличества.ВстроенВЯчейку Или ПолеКоличества.ВыводитьНаПечать Тогда
ВызватьИсключение "Native Find/Index/Get/embedded identity собственного поля не совпал";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьСвоюКнопку85(Элемент, Имя)
ПроверитьСвойOrdinaryБланк85(МеткаОпыта);
Если Согласен85 <> Истина Тогда
ВызватьИсключение "Подтвердите опыт только со своей новой ordinary формой";
КонецЕсли;
Если ТипЗнч(Элемент) <> Тип("Кнопка") Или ЭтаФорма.ЭлементыФормы.Найти(Имя) <> Элемент Тогда
ВызватьИсключение "Нужно настоящее событие своей prepared ordinary кнопки, не fake event или чужой control";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьИменаСвоихРедакторов85()
Имена = Новый Массив;
Имена.Добавить("Уч85КоличествоПакета");
Имена.Добавить("Уч85КоличествоПапки");
Имена.Добавить("Уч85КоличествоМаркера");
Возврат Имена;
КонецФункции
Функция ПолучитьСвоиТовары85()
Товары = Новый Массив;
Товары.Добавить("Пакет");
Товары.Добавить("Папка");
Товары.Добавить("Маркер");
Возврат Товары;
КонецФункции
Функция ПолучитьСвоиЦены85()
Цены = Новый Массив;
Цены.Добавить(100);
Цены.Добавить(200);
Цены.Добавить(10);
Возврат Цены;
КонецФункции
Процедура ПроверитьСвойOrdinaryБланк85(МеткаОпыта)
#Если ТолстыйКлиентОбычноеПриложение Тогда
ПроверитьСвойПустойСтенд();
UUIDМетки = Новый УникальныйИдентификатор(МеткаОпыта);
Если МеткаОпыта <> Строка(UUIDМетки) Или UUIDМетки = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
ВызватьИсключение "Нужен canonical nonzero marker собственного каталога, не UUID самой базы или реального пользователя ИБ";
КонецЕсли;
Соединение = "File=""C:\1c-labs\Уч85Бланк_" + МеткаОпыта + "\ИБ\"";";
Если СтрокаСоединенияИнформационнойБазы() <> Соединение Или ПривилегированныйРежим() Тогда
ВызватьИсключение "Только своя новая FileIB и собственный непривилегированный сеанс; пути/connection string не печатаются";
КонецЕсли;
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Пользователи.Количество() <> 1 Или Текущий = Неопределено Тогда
ВызватьИсключение "Нужен один настоящий собственный пользователь ИБ";
КонецЕсли;
Если Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор
Или Текущий.Имя <> "Уч85Бланк_" + МеткаОпыта Или Метаданные.ОбщиеФормы.Количество() <> 2
Или Метаданные.ОбщиеФормы.Бланк85.Имя <> "Бланк85" Или Метаданные.ОбщиеФормы.Служебная85.Имя <> "Служебная85"
Или Метаданные.Боты.Количество() <> 0 Или Метаданные.Константы.Количество() <> 0 Тогда
ВызватьИсключение "Паспорт own host/двух ordinary форм/реального пользователя ИБ не совпал";
КонецЕсли;
#Иначе
ВызватьИсключение "Коллекция Controls и spreadsheet-field extension здесь доступны только thick ordinary, не FormItems managed";
#КонецЕсли
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыПолный модуль своей ordinary служебной формы Служебная85: prepared typed controls, никакого Clear главной формы
Собственная CF → Общие → Общие формы → Служебная85 → Модуль.
Только fresh own ordinary common form Служебная85, actual native Form factory и parent основная Форма, не input/table owner.
Процедура ПроверитьСвоиСлужебныеЭлементы85() Экспорт
ПроверитьСвойOrdinaryБланк85(МеткаОпыта);
Надпись = ЭтаФорма.ЭлементыФормы.Найти("Уч85СлужебнаяНадпись");
Ввод = ЭтаФорма.ЭлементыФормы.Найти("Уч85СлужебныйВвод");
Если Надпись = Неопределено Или Ввод = Неопределено Или ТипЗнч(Надпись) <> Тип("Надпись")
Или ТипЗнч(Ввод) <> Тип("ПолеВвода") Или Ввод.Данные <> "СлужебноеКоличество85" Тогда
ВызватьИсключение "Нужны собственные prepared scratch controls и реальная связь с own typed attribute";
КонецЕсли;
Если ТипЗнч(СлужебноеКоличество85) <> Тип("Число") Или СлужебноеКоличество85 <> 7
Или ТипЗнч(Ввод.Значение) <> Тип("Число") Или Ввод.Значение <> 7 Тогда
ВызватьИсключение "В собственном служебном экземпляре должно быть фактическое число7 из своего атрибута";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойOrdinaryБланк85(МеткаОпыта)
#Если ТолстыйКлиентОбычноеПриложение Тогда
ПроверитьСвойПустойСтенд();
UUIDМетки = Новый УникальныйИдентификатор(МеткаОпыта);
Если МеткаОпыта <> Строка(UUIDМетки) Или UUIDМетки = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
ВызватьИсключение "Нужен canonical nonzero marker собственного каталога, не UUID самой базы или реального пользователя ИБ";
КонецЕсли;
Соединение = "File=""C:\1c-labs\Уч85Бланк_" + МеткаОпыта + "\ИБ\"";";
Если СтрокаСоединенияИнформационнойБазы() <> Соединение Или ПривилегированныйРежим() Тогда
ВызватьИсключение "Только своя новая FileIB и собственный непривилегированный сеанс; пути/connection string не печатаются";
КонецЕсли;
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Пользователи.Количество() <> 1 Или Текущий = Неопределено Тогда
ВызватьИсключение "Нужен один настоящий собственный пользователь ИБ";
КонецЕсли;
Если Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор
Или Текущий.Имя <> "Уч85Бланк_" + МеткаОпыта Или Метаданные.ОбщиеФормы.Количество() <> 2
Или Метаданные.ОбщиеФормы.Бланк85.Имя <> "Бланк85" Или Метаданные.ОбщиеФормы.Служебная85.Имя <> "Служебная85"
Или Метаданные.Боты.Количество() <> 0 Или Метаданные.Константы.Количество() <> 0 Тогда
ВызватьИсключение "Паспорт own host/двух ordinary форм/реального пользователя ИБ не совпал";
КонецЕсли;
#Иначе
ВызватьИсключение "Коллекция Controls и spreadsheet-field extension здесь доступны только thick ordinary, не FormItems managed";
#КонецЕсли
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыПолный обычный модуль приложения: actual ownuser marker и native fresh main form
Собственная CF → Открыть обычный модуль приложения.
Обычный модуль приложения своей пустой CF, native OnStart0, exact guarded ordinary thick source. Не managed application module.
Процедура ПриНачалеРаботыСистемы()
#Если ТолстыйКлиентОбычноеПриложение Тогда
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Пользователь = Неопределено Или Не СтрНачинаетсяС(Пользователь.Имя, "Уч85Бланк_") Тогда
ВызватьИсключение "Запустите собственную новую FileIB настоящим единственным учебным пользователем";
КонецЕсли;
Метка = Сред(Пользователь.Имя, СтрДлина("Уч85Бланк_") + 1);
ПроверитьСвойOrdinaryБланк85(Метка);
СвояФорма = ПолучитьОбщуюФорму("Бланк85", , Строка(Новый УникальныйИдентификатор));
Если ТипЗнч(СвояФорма) <> Тип("Форма") Тогда
ВызватьИсключение "Native GetCommonForm не создал собственную ordinary форму";
КонецЕсли;
СвояФорма.МеткаОпыта = Метка;
СвояФорма.Согласен85 = Ложь;
СвояФорма.Открыть();
Если Не СвояФорма.Открыта() Тогда
ВызватьИсключение "Открытие своей основной ordinary формы не подтверждено native IsOpen";
КонецЕсли;
#Иначе
ВызватьИсключение "Запуск только Windows thick ordinary. Native collection Controls не managed FormItems";
#КонецЕсли
КонецПроцедуры
Процедура ПроверитьСвойOrdinaryБланк85(МеткаОпыта)
#Если ТолстыйКлиентОбычноеПриложение Тогда
ПроверитьСвойПустойСтенд();
UUIDМетки = Новый УникальныйИдентификатор(МеткаОпыта);
Если МеткаОпыта <> Строка(UUIDМетки) Или UUIDМетки = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
ВызватьИсключение "Нужен canonical nonzero marker собственного каталога, не UUID самой базы или реального пользователя ИБ";
КонецЕсли;
Соединение = "File=""C:\1c-labs\Уч85Бланк_" + МеткаОпыта + "\ИБ\"";";
Если СтрокаСоединенияИнформационнойБазы() <> Соединение Или ПривилегированныйРежим() Тогда
ВызватьИсключение "Только своя новая FileIB и собственный непривилегированный сеанс; пути/connection string не печатаются";
КонецЕсли;
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Пользователи.Количество() <> 1 Или Текущий = Неопределено Тогда
ВызватьИсключение "Нужен один настоящий собственный пользователь ИБ";
КонецЕсли;
Если Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор
Или Текущий.Имя <> "Уч85Бланк_" + МеткаОпыта Или Метаданные.ОбщиеФормы.Количество() <> 2
Или Метаданные.ОбщиеФормы.Бланк85.Имя <> "Бланк85" Или Метаданные.ОбщиеФормы.Служебная85.Имя <> "Служебная85"
Или Метаданные.Боты.Количество() <> 0 Или Метаданные.Константы.Количество() <> 0 Тогда
ВызватьИсключение "Паспорт own host/двух ordinary форм/реального пользователя ИБ не совпал";
КонецЕсли;
#Иначе
ВызватьИсключение "Коллекция Controls и spreadsheet-field extension здесь доступны только thick ordinary, не FormItems managed";
#КонецЕсли
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Настоящий own APPLICATION guard проверяет Windows thick ordinary/FileIB/currentrealuser/empty metadata и получает собственную Форма. Это source коллекции Controls, а не одноименный managed alias.
Реальные пять ordinary кнопок имеют native событие Нажатие с первым extension Элемент. Guard сверяет actual initiating Кнопка с собственной named коллекцией и согласие до изменений.
До Add проверены отсутствие own имен и actual prepared ПолеТабличногоДокумента с Data=Бланк85. Count baseline берется из реальной основной коллекции; новые4 controls принадлежат only native fourthowner field.
Три input controls получают actual owncellrange через Расположить, embedded true/numeric values/print exclusion с readback. Own overlay не embedded и располагается в документе по подтвержденным millimeter coordinates.
Stored returned objects сверяются native Find/Index/Get identity; count допускает только baseline+4 или после удаления help baseline+3. Индекс=-1 никогда не используется как индекс последнего элемента.
Пересчет предварительно читает/валидирует все actual editor values. Только затем записывает/читает own numeric output cells и итог; подготовленные2/3/5 дают850, ручные1/2/3 дают530.
Режим просмотра меняет actual Visibility и подтверждает сохранение числового итога. Print=False относится к контролам и не вызывает принтер/preview/export.
Удаление помощи касается ровно сохраненной ownAdd надписи; Count/Find и оставшиеся actual objects проверяются после Delete. Чужие objects не ищутся для восстановительного удаления.
Clear получает только stored freshown scratch Форма.ЭлементыФормы, проверенную по реальной metadata подготовке/marker/whitelist/order/typed input. Только ее whole collection удаляется; основной бланк не очищается.
Actual source/native/static проверки отделены от ручного runtime протокола. Авторство не запускало1С/UI/файлы/БД/сеть/COM/печать, backup0.
Как проверить результат
Actual native collection proof: readonly ordinary ЭтаФорма → ЭлементыФормы (Controls catalog56), не catalog1649 managed FormItems. No invented collection/extension constructor.
После Add реально baseline+4 controls, после ownHelp Delete baseline+3; Find/Get/Index сверяют те же фактические возвращенные объекты.
Own input edit2/3/5 с prices100/200/10 дает850; manual1/2/3 дает530 после завершения ввода. Actual numeric cell readback, а не заданный итог/строковая конвертация.
Embedded properties/Own overlay geometry millimeters/Visibility/print exclusion проверены отдельным readback. Data-only Value не применяется к Надпись.
Служебная коллекция очищается до0 только после exact whole-own whitelist/order; main collection/count/three editors остаются. Дополнительные scratch elements запрещают Clear.
Все five native checkers/rawHBK/blocks статические. Ручная metadata подготовка/компиляция/реальные события/визуальный результат и печать автором не выполнялись.
Ожидаемый результат
При ручной успешной собственной metadata подготовке ordinary форма дает редактируемый бланк: actual исходные количества2/3/5 подтверждают850, ручные1/2/3 подтверждают530. Собственные редакторы можно скрыть, own help удалить, fresh отдельную whole-owned служебную форму очистить и закрыть без изменения основного бланка. Здесь authored source/static checks; actual1С/UI/DB/files/network/COM/print0.
На что обратить внимание
Controls ordinary и FormItems managed — разные native источники. Suffix @Controls нужен только registry, это не текст для Тип("...") и не managedproperty формы.
Дополнительный spreadsheet-field extension появляется у реального control, помещенного в actual ПолеТабличногоДокумента через native Add fourthowner. Не создается Новый Extension и не доказывается совпадением имени переменной.
Readonly ЭтаФорма/ЭлементыФормы/Панель не заменяют присваиванием. У коллекции допустимы native mutations только для собственных объектов/целой freshown scratch по этому процессу.
Если владельцем формы назначен input/table control, native extension свойства недоступны. Здесь parent scratch только собственная Форма, а main не имеет такого владельца.
Input Value допустимо для data-capable ПолеВвода, не для overlay Надпись. Typed cell/ОграничениеТипа и actual number readback не являются гарантиями произвольной чужой UI metadata.
ВстроенВЯчейку=True и Расположить используют native область своего spreadsheet field. Геометрию встроенных редакторов нельзя смешивать с free overlay millimeter geometry.
Не путайте millimeters document-relative с координатами обычной формы. Readback допускает только0.2mm округления, не произвольное молчаливое размещение.
Native ordinary Button Click0 получает дополнительный first Элемент от form extension. Каждый handler реально привязывается в metadata и не вызывается руками как доказательство UI события.
Все actual quantity значения валидируются до первых result writes. Неверный ввод не превращается в значение initial source или530; partial ошибки не исправляются blind retry.
Index returns-1 для отсутствующего control. Сначала range/identity, затем Get/Delete; изменение коллекции при обходе текущего enumerator здесь не используется.
Полное Clear удаляет все элементы только той формы. Поэтому main neverClear; own scratch must be whole-owned/exact whitelisted/order verified, дополнительных элементов быть не может.
Native root panel membership не угадывается. Реальный readonly Панель сравнивается по object identity/Index; при наличии ожидается индекс0/name, после нее только two prepared owncontrols.
Visibility=False только скрывает editor, не стирает Value. Print=False задает native исключение контроля из печати, но здесь ни принтер, ни preview/экспорт не запускались.
Загрузка/сохранение настроек/файлов, COM/ActiveX и рабочая база не нужны. ДобавитьActiveX намеренно не покрывается выдуманным ProgID или установкой стороннего компонента.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.