Получает значение по индексу. Работает аналогично оператору [].
Синтаксис
Получить(<Индекс>)Полное описание, параметры и ограничения
ПараметрыМакетаТекстовогоДокумента.Получить (TextDocumentTemplateParameters.Get)
ПараметрыМакетаТекстовогоДокумента (TextDocumentTemplateParameters)
Получить (Get)
Доступен, начиная с версии 8.0.
Синтаксис:
Получить(<Индекс>)
Параметры:
<Индекс> (обязательный)
Тип: Число.
Индекс параметра.
Возвращаемое значение:
Тип: Произвольный.
Описание:
Получает значение по индексу. Работает аналогично оператору [].
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
Применяется в случаях, когда использование оператора [] невозможно.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Сводка собственных карточек: текстовые макеты и реальные ссылки
Прочитать3свои вручную подготовленные карточки20/25/30 и сформировать точный текст75→45 через native выбор/макеты/параметры, не записывая документов.
Где и как запускать
Windows8.5.1.1343 собственная FileCF/ordinary application. MAIN полный ownProcessingObject module; FORM/APP thickordinary UI. Программных DBwrites нет, только authoring/static.
Подготовка
Вручную подготовьте НОВУЮ свою File ИБ на отдельном учебном Windows стенде: C:\1c-labs\OwnTextSummary85_2bf185cc-b660-4de1-96d1-a3a4dc905acf\IB. Если этот каталог или регистрация уже существуют, не используйте/не очищайте их: остановитесь. Это exact registration File-строка, не canonical path и не UUID самойИБ. Здесь ни1С/VM/ИБ/файлы данных/UI/сеть не запускались и не создавались.
Новая пустая CF УчебнаяТекстоваяСводка85, ordinary application/обычные формы, точная платформа8.5.1.1343, совместимостьНеИспользовать. Только один документ и одна обработка ниже; нет общих модулей/общих форм/регистров/каталогов/подписок/заданий/разделителей/расширений/источников. Модуль менеджера документа и все посторонние модули пустые.
Единственный собственный пользователь ТекстСводка85Ученик, одна роль с полными правами только этой новойИБ, включая native Users admin чтение; один сеанс. CurrentUser UUID сравнивается с actual единственным Users[0], не выводится. GUIDы ключей ниже — только собственные литералы реквизита; настоящие document references получаются из вручную сохраненных карточек.
Документ УчебнаяКарточкаТекста85: ПроведениеЗапретить, без движений/табличных частей, номерСтрока12/автонумерацияНет/контрольуникальностиДа; реквизиты МаркерСтенда85 Строка36, КлючКарточки85 Строка36, КодКарточки85 Строка8, Сумма85 Число12,0. Проверка заполнения Показывать ошибку для всех4; модуль объекта пустой. Разрешите стандартные команды для ручного создания своих карточек.
До запуска примера вручную запишите ровно3свои карточки. Все МаркерСтенда85=2bf185cc-b660-4de1-96d1-a3a4dc905acf. A: номерLAB-A, дата10.10.2026 09:00, КлючКарточки85=6a680517-2b11-461d-90c6-2e927e24e288, Сумма85=20. B: LAB-B,10:00,7599ac97-cd01-4597-a48c-82bfbf27943c,25. C: LAB-C,11:00,3c42af36-5c22-424f-b8b5-3b5d1f501b8d,30. Пометка удаленияFalse, ПроведенFalse; никакие другие карточки/производственные refs не вводятся. Код примера НИЧЕГО вБД не записывает.
Обработка СводкаКарточек85: реквизиты Заголовок85 Строка40 и Режим85 Строка12, проверка заполненияНеПроверять; без табличных частей. CODE полностью в МодульОбъекта этой обработки. NativeFillCheck exactly2formals использует globalЭтотОбъект только в собственном objectmodule; не вызывайте событие вручную. Обработчик отказывает в пустом/недопустимом вводе, не очищает ПроверяемыеРеквизиты.
Через Макеты→Добавить→Текстовый макет создайте3 compiledlayouts. У обработки: Заголовок85 и Итог85; у документа: СтрокаКарточки85. Вставьте точные тексты TEMPLATES ниже в текстовый редактор макетов, не вBSL и не как внешний plain .txt. Не убирайте пробелы внутри []: это реальные field widths40/8/12. #Область/#КонецОбласти — служебный compiled формат, не комментарииBSL.
У обработки создайте единственную ОБЫЧНУЮ форму Сводка85 и назначьте основной. FORM целиком в её модуль. Отдельные реквизиты формы: ВводЗаголовка85 Строка80, ВводРежима85 Строка40, Вывод85 ТекстовыйДокумент, Доступные85 СписокЗначений, Статус85 Строка2000. Эти длинные input fields позволяют честно отказать заголовку>40 до присваивания в короткий object attribute.
В ordinary форме разместите поля ввода ВводЗаголовка85/ВводРежима85; полеТекстовогоДокумента Вывод85 Данные=Вывод85, ТолькоПросмотрИстина; readonly поле списка Доступные85 Данные=Доступные85; readonly многострочный Статус85. Единственная кнопка Сформировать85 Нажатие→Сформировать85(Кнопка)1; nativeButton.Click0 + ordinaryevent104firstControl. Form.ПриОткрытии→ПриОткрытии()0. Свои Инициализировать85/ПроверитьСвязь85 не являются native callbacks.
APPLICATION целиком в МодульОбычногоПриложения: nativeПриНачалеРаботыСистемы0 создаёт actualProcessingManager.Create0 и вызывает собственный exported initializer route. Object.GetForm3 имеет thickonly availability, поэтому этот UI helper скомпилирован только #Если ТолстыйКлиентОбычноеПриложение; остальные objecthelpers/callback не вызывают client-only commonmodule/UI.
Сохраните/проверьте/обновите только своюCF вручную, подготовьте3свои карточки штатным own UI перед запуском урока, затем новый запуск8.5.1.1343 ordinary client. Startup откроет actualinstance.GetForm, передаст только sameactualobject/freshnativekey в закрытую форму; неизвестный объект/форма и повторная инициализация запрещены.
Все→кнопкаСформировать85: fullsource3, список выбора3, selection3, native текст5строк с итогом75. ПервыеДва→кнопка: sourceвсегда3, список3, selection2(A/B), текст4строки с итогом45. Порядок nativeGetChoiceData/SelectByRefs не обещается: строки раскладываются по заранее проверенным actualrefs/кодам.
Пустой заголовок/лишний символ|/перенос/заголовок>40/неизвестныйрежим отказывает до вывода. Неправильные3карточки/дубли/лишняястрока/чужойmarker/неподготовленныймакет/обрезка/неизвестныйparameterindex останавливают. Нет programWrite/Post/Delete/cleanup/backup и нет слепого восстановления partialUI.
Native readonly Parameters даёт реальную изменяемую коллекцию. Fill принимает свойства Structure, Count/Get находят два уникальных коротких sentinel значения footer; Set использует только обнаруженный native index. Затем Get подтверждает реальный итог и количество перед Put. Значения как строки форматированы ЧГ=0;ЧДЦ=0, а сумма посчитана по native selection числам.
Output readback проверяет точный текст вместе с padding/разделителями/порядком/количеством строк. Допускается только CRLF→LF и один завершающийLF; Trim/обрезка/игнорирование лишнейстроки/символов запрещены. Ширинаполей — знакоместа, неpixels; цель не обещает визуальный font/rendering без будущей ручной проверки.
Процедура ПроверитьСвойСтенд85() Экспорт
Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnTextSummary85_2bf185cc-b660-4de1-96d1-a3a4dc905acf\IB"";" Тогда
ВызватьИсключение "СТОП: нужен точный собственный File-адрес; UUID пути не является UUID ИБ";
КонецЕсли;
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужна собственная новая конфигурация на точной платформе без режима совместимости";
КонецЕсли;
Если Метаданные.Документы.Количество() <> 1 Или Метаданные.Обработки.Количество() <> 1
Или Метаданные.Справочники.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0
Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0
Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0
Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0
Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0
Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0
Или Метаданные.ОбщиеМодули.Количество() <> 0 Или Метаданные.ОбщиеФормы.Количество() <> 0
Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПараметрыСеанса.Количество() <> 0
Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0
Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только собственный документ и transient обработка, не рабочая конфигурация";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Расширенная схема не принимается";
КонецЕсли;
Если РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.БазаДанных).Количество() <> 0
Или РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные).Количество() <> 0
Или РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансОтключенные).Количество() <> 0 Тогда
ВызватьИсключение "В собственной CF не должно быть расширений любого из трех native источников";
КонецЕсли;
Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Если ТипЗнч(Пользователи) <> Тип("Массив") Или Пользователи.Количество() <> 1
Или Пользователь = Неопределено Или Пользователь.Имя <> "ТекстСводка85Ученик"
Или Пользователи[0].Имя <> Пользователь.Имя
Или Пользователи[0].УникальныйИдентификатор <> Пользователь.УникальныйИдентификатор
Или ТипЗнч(Пользователь.УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Тогда
ВызватьИсключение "Нужен actual единственный собственный аутентифицированный пользователь";
КонецЕсли;
СвояОбработка = Метаданные.Обработки.Найти("СводкаКарточек85");
СвойДокумент = Метаданные.Документы.Найти("УчебнаяКарточкаТекста85");
Если СвояОбработка = Неопределено Или СвойДокумент = Неопределено
Или ЭтотОбъект.Метаданные() <> СвояОбработка Или СвояОбработка.Реквизиты.Количество() <> 2
Или СвояОбработка.ТабличныеЧасти.Количество() <> 0 Или СвояОбработка.Формы.Количество() <> 1
Или СвояОбработка.Формы.Найти("Сводка85") = Неопределено Или СвояОбработка.Макеты.Количество() <> 2
Или СвойДокумент.Реквизиты.Количество() <> 4 Или СвойДокумент.ТабличныеЧасти.Количество() <> 0
Или СвойДокумент.Макеты.Количество() <> 1 Или СвойДокумент.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда
ВызватьИсключение "Не совпала полная собственная metadata схема";
КонецЕсли;
Для Каждого Пара Из Новый Структура("Заголовок85,Режим85", 40, 12) Цикл
ПроверитьСвойСтроковыйРеквизит85(СвояОбработка.Реквизиты, Пара.Ключ, Пара.Значение);
КонецЦикла;
Для Каждого Пара Из Новый Структура("МаркерСтенда85,КлючКарточки85,КодКарточки85", 36, 36, 8) Цикл
ПроверитьСвойСтроковыйРеквизит85(СвойДокумент.Реквизиты, Пара.Ключ, Пара.Значение);
КонецЦикла;
Сумма = СвойДокумент.Реквизиты.Найти("Сумма85");
Если Сумма = Неопределено Или Сумма.Тип.Типы().Количество() <> 1 Или Не Сумма.Тип.СодержитТип(Тип("Число"))
Или Сумма.Тип.КвалификаторыЧисла.Разрядность <> 12 Или Сумма.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 0 Тогда
ВызватьИсключение "Нужен собственный Сумма85 Число12,0";
КонецЕсли;
Для Каждого Макет Из СвояОбработка.Макеты Цикл
Если Макет.ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент
Или (Макет.Имя <> "Заголовок85" И Макет.Имя <> "Итог85") Тогда
ВызватьИсключение "Нужны два точно названных compiled текстовых макета своей обработки";
КонецЕсли;
КонецЦикла;
Если СвойДокумент.Макеты.Найти("СтрокаКарточки85") = Неопределено
Или СвойДокумент.Макеты.Найти("СтрокаКарточки85").ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда
ВызватьИсключение "Не подготовлен compiled текстовый макет своего документа";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойСтроковыйРеквизит85(Коллекция, Имя, Длина)
Реквизит = Коллекция.Найти(Имя);
Если Реквизит = Неопределено Или Реквизит.Тип.Типы().Количество() <> 1 Или Не Реквизит.Тип.СодержитТип(Тип("Строка"))
Или Реквизит.Тип.КвалификаторыСтроки.Длина <> Длина Тогда
ВызватьИсключение "Не совпал точно названный строковый реквизит собственного metadata";
КонецЕсли;
КонецПроцедуры
Функция ДопустимыйВвод85(Заголовок, Режим) Экспорт
Возврат ТипЗнч(Заголовок) = Тип("Строка") И СтрДлина(Заголовок) > 0 И СтрДлина(Заголовок) <= 40
И СокрЛП(Заголовок) = Заголовок И СтрНайти(Заголовок, Символы.ПС) = 0
И СтрНайти(Заголовок, Символы.ВК) = 0 И СтрНайти(Заголовок, Символы.Таб) = 0
И СтрНайти(Заголовок, "|") = 0 И ТипЗнч(Режим) = Тип("Строка")
И (Режим = "Все" Или Режим = "ПервыеДва");
КонецФункции
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ТипЗнч(ПроверяемыеРеквизиты) <> Тип("Массив") Или ЭтотОбъект.Метаданные() <> Метаданные.Обработки.СводкаКарточек85
Или Не ДопустимыйВвод85(ЭтотОбъект.Заголовок85, ЭтотОбъект.Режим85) Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Функция СоздатьСвоюФорму85() Экспорт
#Если ТолстыйКлиентОбычноеПриложение Тогда
ПроверитьСвойСтенд85();
Если Не ЭтотОбъект.ПроверитьЗаполнение() Тогда
ВызватьИсключение "Native проверка actual instance не подтвердила ввод";
КонецЕсли;
Плохой = Обработки.СводкаКарточек85.Создать();
Плохой.Заголовок85 = "";
Плохой.Режим85 = "Все";
Если Плохой.Метаданные() <> ЭтотОбъект.Метаданные() Или Плохой.ПроверитьЗаполнение() Тогда
ВызватьИсключение "Native CheckFill обязан отказать отдельному собственному transient объекту с пустым заголовком";
КонецЕсли;
Ключ = Новый УникальныйИдентификатор;
СвояФорма = ЭтотОбъект.ПолучитьФорму("Сводка85", , Ключ);
Если СвояФорма = Неопределено Или ТипЗнч(СвояФорма) <> Тип("Форма") Или СвояФорма.Открыта()
Или СвояФорма.КлючУникальности <> Ключ Тогда
ВызватьИсключение "Не подтверждена closed ordinary форма именно этого actual instance и freshKey";
КонецЕсли;
СвояФорма.Инициализировать85(ЭтотОбъект, Ключ);
Возврат СвояФорма;
#Иначе
ВызватьИсключение "Открытие собственной формы доступно только толстому обычному клиенту";
#КонецЕсли
КонецФункции
Функция ПрочитатьСвоиКарточки85()
ПроверитьСвойСтенд85();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ К.Ссылка,К.Дата,К.Номер,К.Проведен,К.ПометкаУдаления,К.МаркерСтенда85,К.КлючКарточки85,К.КодКарточки85,К.Сумма85
|ИЗ Документ.УчебнаяКарточкаТекста85 КАК К
|УПОРЯДОЧИТЬ ПО К.КодКарточки85";
Карточки = Запрос.Выполнить().Выгрузить();
Если ТипЗнч(Карточки) <> Тип("ТаблицаЗначений") Или Карточки.Количество() <> 3 Или Карточки.Колонки.Количество() <> 9 Тогда
ВызватьИсключение "ВЕСЬ собственный документ должен содержать ровно3карточки/9полей, не отфильтрованный фрагмент";
КонецЕсли;
Ключи = СтрРазделить("6a680517-2b11-461d-90c6-2e927e24e288,7599ac97-cd01-4597-a48c-82bfbf27943c,3c42af36-5c22-424f-b8b5-3b5d1f501b8d", ",");
Коды = СтрРазделить("A,B,C", ",");
Номера = СтрРазделить("LAB-A,LAB-B,LAB-C", ",");
Суммы = Новый Массив;
Суммы.Добавить(20);
Суммы.Добавить(25);
Суммы.Добавить(30);
Проверенные = Новый Массив;
Для Индекс = 0 По 2 Цикл
Карточка = Карточки[Индекс];
Если ТипЗнч(Карточка.Ссылка) <> Тип("ДокументСсылка.УчебнаяКарточкаТекста85") Или Карточка.Ссылка.Пустая()
Или Проверенные.Найти(Карточка.Ссылка) <> Неопределено Или ТипЗнч(Карточка.Сумма85) <> Тип("Число")
Или Карточка.Сумма85 <> Суммы[Индекс] Или Карточка.КодКарточки85 <> Коды[Индекс]
Или Карточка.КлючКарточки85 <> Ключи[Индекс] Или Карточка.МаркерСтенда85 <> "2bf185cc-b660-4de1-96d1-a3a4dc905acf"
Или Карточка.Номер <> Номера[Индекс] Или Карточка.Дата <> Дата(2026, 10, 10, Индекс + 9)
Или ТипЗнч(Карточка.Проведен) <> Тип("Булево") Или Карточка.Проведен
Или ТипЗнч(Карточка.ПометкаУдаления) <> Тип("Булево") Или Карточка.ПометкаУдаления Тогда
ВызватьИсключение "Full actual own reference/date/number/UUID/code/sum snapshot нарушен";
КонецЕсли;
Найденная = Документы.УчебнаяКарточкаТекста85.НайтиПоРеквизиту("КлючКарточки85", Ключи[Индекс]);
Если Найденная <> Карточка.Ссылка Тогда
ВызватьИсключение "Native FindByAttribute не совпал с actual уникальной карточкой после полной проверки всех3строк";
КонецЕсли;
ОбъектКарточки = Карточка.Ссылка.ПолучитьОбъект();
Если ОбъектКарточки = Неопределено Или ОбъектКарточки.Ссылка <> Карточка.Ссылка
Или ОбъектКарточки.МаркерСтенда85 <> Карточка.МаркерСтенда85 Или ОбъектКарточки.КлючКарточки85 <> Карточка.КлючКарточки85
Или ОбъектКарточки.КодКарточки85 <> Карточка.КодКарточки85 Или ОбъектКарточки.Сумма85 <> Карточка.Сумма85
Или ОбъектКарточки.Дата <> Карточка.Дата Или ОбъектКарточки.Номер <> Карточка.Номер
Или ОбъектКарточки.Проведен Или ОбъектКарточки.ПометкаУдаления Тогда
ВызватьИсключение "Actual full document object не совпал с собственной строкой запроса";
КонецЕсли;
Проверенные.Добавить(Карточка.Ссылка);
КонецЦикла;
Возврат Карточки;
КонецФункции
Функция ДополнитьПоле85(Значение, Ширина)
Если ТипЗнч(Значение) <> Тип("Строка") Или СтрДлина(Значение) > Ширина Тогда
ВызватьИсключение "Текст не должен обрезаться в своем compiled поле";
КонецЕсли;
Результат = Значение;
Пока СтрДлина(Результат) < Ширина Цикл
Результат = Результат + " ";
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПолучитьСвоюОбласть85(Макет, Имя, ЧислоПараметров)
Если ТипЗнч(Макет) <> Тип("ТекстовыйДокумент") Тогда
ВызватьИсключение "Фабрика обязана вернуть настоящий compiled TextDocument, не строку с похожим текстом";
КонецЕсли;
Область = Макет.ПолучитьОбласть(Имя);
Если ТипЗнч(Область) <> Тип("ТекстовыйДокумент") Или ТипЗнч(Область.Параметры) <> Тип("ПараметрыМакетаТекстовогоДокумента")
Или Область.Параметры.Количество() <> ЧислоПараметров Тогда
ВызватьИсключение "Native GetArea/readonly Parameters/Count не подтвердили собственный compiled макет";
КонецЕсли;
Возврат Область;
КонецФункции
Функция ПрочитатьСвойТекст85(Документ) Экспорт
Если ТипЗнч(Документ) <> Тип("ТекстовыйДокумент") Тогда
ВызватьИсключение "Нужен actual native text document для readback";
КонецЕсли;
Текст = СтрЗаменить(Документ.ПолучитьТекст(), Символы.ВК + Символы.ПС, Символы.ПС);
Если Прав(Текст, 1) = Символы.ПС Тогда
Текст = Лев(Текст, СтрДлина(Текст) - 1);
КонецЕсли;
Возврат Текст;
КонецФункции
Функция СформироватьСвойТекст85() Экспорт
ПроверитьСвойСтенд85();
Если Не ЭтотОбъект.ПроверитьЗаполнение() Тогда
ВызватьИсключение "Native CheckFill отказал; прошлый видимый текст не заменяется";
КонецЕсли;
Карточки = ПрочитатьСвоиКарточки85();
Доступные = Документы.УчебнаяКарточкаТекста85.ПолучитьДанныеВыбора(
Новый Структура("Отбор,СтрокаПоиска", Новый Структура("МаркерСтенда85", "2bf185cc-b660-4de1-96d1-a3a4dc905acf"), Неопределено));
Если ТипЗнч(Доступные) <> Тип("СписокЗначений") Или Доступные.Количество() <> 3 Тогда
ВызватьИсключение "Native GetChoiceData обязан вернуть actual список всех3своих карточек";
КонецЕсли;
ВсеСсылки = Карточки.ВыгрузитьКолонку("Ссылка");
Проверенные = Новый Массив;
Для Каждого Элемент Из Доступные Цикл
Если ТипЗнч(Элемент.Значение) <> Тип("ДокументСсылка.УчебнаяКарточкаТекста85")
Или ВсеСсылки.Найти(Элемент.Значение) = Неопределено Или Проверенные.Найти(Элемент.Значение) <> Неопределено Тогда
ВызватьИсключение "GetChoiceData содержит неизвестную/повторную actual ссылку; порядок native списка не угадываем";
КонецЕсли;
Проверенные.Добавить(Элемент.Значение);
КонецЦикла;
Ссылки = Новый Массив;
ЧислоКарточек = ?(ЭтотОбъект.Режим85 = "Все", 3, 2);
Для Индекс = 0 По ЧислоКарточек - 1 Цикл
Ссылки.Добавить(Карточки[Индекс].Ссылка);
КонецЦикла;
Для Каждого Ссылка Из Ссылки Цикл
Если ТипЗнч(Ссылка) <> Тип("ДокументСсылка.УчебнаяКарточкаТекста85") Или Ссылка.Пустая()
Или Проверенные.Найти(Ссылка) = Неопределено Тогда
ВызватьИсключение "Source array должен состоять только из доказанных own refs до SelectByRefs";
КонецЕсли;
КонецЦикла;
Выборка = Документы.УчебнаяКарточкаТекста85.ВыбратьПоСсылкам(Ссылки);
Если ТипЗнч(Выборка) <> Тип("ДокументВыборка.УчебнаяКарточкаТекста85") Тогда
ВызватьИсключение "Не получена native DocumentSelection собственной metadata";
КонецЕсли;
Прочитанные = Новый Массив;
Для Индекс = 0 По ЧислоКарточек - 1 Цикл
Прочитанные.Добавить(Неопределено);
КонецЦикла;
Сумма = 0;
ЧислоСтрок = 0;
Пока Выборка.Следующий() Цикл
Индекс = Ссылки.Найти(Выборка.Ссылка);
Если Индекс = Неопределено Тогда
ВызватьИсключение "Native выборка содержит не выбранную собственную карточку";
КонецЕсли;
Факт = Карточки[Индекс];
Если Прочитанные[Индекс] <> Неопределено Или Выборка.Сумма85 <> Факт.Сумма85
Или Выборка.КодКарточки85 <> Факт.КодКарточки85 Или Выборка.КлючКарточки85 <> Факт.КлючКарточки85
Или Выборка.МаркерСтенда85 <> Факт.МаркерСтенда85 Или Выборка.Дата <> Факт.Дата
Или Выборка.Номер <> Факт.Номер Или Выборка.Проведен Или Выборка.ПометкаУдаления Тогда
ВызватьИсключение "Full own selection readback нарушен; частичное игнорирование ссылок не считается успехом";
КонецЕсли;
Прочитанные[Индекс] = Выборка.Ссылка;
ЧислоСтрок = ЧислоСтрок + 1;
Сумма = Сумма + Выборка.Сумма85;
КонецЦикла;
Если ЧислоСтрок <> ЧислоКарточек Или Сумма <> ?(ЧислоКарточек = 3, 75, 45) Тогда
ВызватьИсключение "Native полный readback должен дать3/75 либо2/45";
КонецЕсли;
МойМенеджер = Обработки.СводкаКарточек85;
Заголовок = ПолучитьСвоюОбласть85(МойМенеджер.ПолучитьМакет("Заголовок85"), "Заголовок85", 1);
МакетКарточки = Документы.УчебнаяКарточкаТекста85.ПолучитьМакет("СтрокаКарточки85");
Итог = ПолучитьСвоюОбласть85(ЭтотОбъект.ПолучитьМакет("Итог85"), "Итог85", 2);
Заголовок.Параметры.Заполнить(Новый Структура("Заголовок85", ЭтотОбъект.Заголовок85));
Итог.Параметры.Заполнить(Новый Структура("Количество85,Итог85", "_COUNT85_", "_SUM85_"));
ИндексИтога = Неопределено;
ИндексКоличества = Неопределено;
Для Индекс = 0 По Итог.Параметры.Количество() - 1 Цикл
Значение = Итог.Параметры.Получить(Индекс);
Если Значение = "_SUM85_" И ИндексИтога = Неопределено Тогда
ИндексИтога = Индекс;
ИначеЕсли Значение = "_COUNT85_" И ИндексКоличества = Неопределено Тогда
ИндексКоличества = Индекс;
Иначе
ВызватьИсключение "Native parameter index не доказан уникальным sentinel readback";
КонецЕсли;
КонецЦикла;
Если ИндексИтога = Неопределено Или ИндексКоличества = Неопределено Или ИндексИтога = ИндексКоличества Тогда
ВызватьИсключение "Не подтверждены два разных actual parameter indexes";
КонецЕсли;
ТекстСуммы = Формат(Сумма, "ЧГ=0; ЧДЦ=0");
ТекстКоличества = Формат(ЧислоСтрок, "ЧГ=0; ЧДЦ=0");
Итог.Параметры.Заполнить(Новый Структура("Количество85,Итог85", ТекстКоличества, ""));
Итог.Параметры.Установить(ИндексИтога, ТекстСуммы);
Если Итог.Параметры.Получить(ИндексИтога) <> ТекстСуммы Или Итог.Параметры.Получить(ИндексКоличества) <> ТекстКоличества Тогда
ВызватьИсключение "Native Fill/Set discovered index/Get не подтвердили actual итог/число";
КонецЕсли;
Результат = Новый ТекстовыйДокумент;
Результат.Вывести(Заголовок);
Ожидаемый = "Сводка|" + ДополнитьПоле85(ЭтотОбъект.Заголовок85, 40) + "|";
Для Индекс = 0 По ЧислоКарточек - 1 Цикл
ОбластьКарточки = ПолучитьСвоюОбласть85(МакетКарточки, "Карточка85", 2);
Код = Карточки[Индекс].КодКарточки85;
Число = Формат(Карточки[Индекс].Сумма85, "ЧГ=0; ЧДЦ=0");
ОбластьКарточки.Параметры.Заполнить(Новый Структура("Код85,Сумма85", Код, Число));
Результат.Вывести(ОбластьКарточки);
Ожидаемый = Ожидаемый + Символы.ПС + "Карточка|" + ДополнитьПоле85(Код, 8) + "|" + ДополнитьПоле85(Число, 12) + "|";
КонецЦикла;
Результат.Вывести(Итог);
Ожидаемый = Ожидаемый + Символы.ПС + "Итог|" + ДополнитьПоле85(ТекстКоличества, 12) + "|" + ДополнитьПоле85(ТекстСуммы, 12) + "|";
Фактический = ПрочитатьСвойТекст85(Результат);
Если Фактический <> Ожидаемый Тогда
ВызватьИсключение "Compiled output exact width/padding/line/order/sum отличается; обрезку/лишние строки не маскируем Trim";
КонецЕсли;
Повторно = ПрочитатьСвоиКарточки85();
Для Индекс = 0 По 2 Цикл
Для Каждого Колонка Из Карточки.Колонки Цикл
Если Повторно[Индекс][Колонка.Имя] <> Карточки[Индекс][Колонка.Имя] Тогда
ВызватьИсключение "Весь own source изменился между snapshot/output; не выдаем candidate за свежий результат";
КонецЕсли;
КонецЦикла;
КонецЦикла;
Результат.ТолькоПросмотр = Истина;
Если Не Результат.ТолькоПросмотр Или ПрочитатьСвойТекст85(Результат) <> Фактический Тогда
ВызватьИсключение "Own readonly setter/readback изменил candidate; видимое состояние не заменяется";
КонецЕсли;
Возврат Новый Структура("Документ,Текст,Сумма,Количество,Доступные", Результат, Фактический, Сумма, ЧислоСтрок, Доступные);
КонецФункцииПолная ordinary форма actual transient instance
Обработки → СводкаКарточек85 → Формы → Сводка85 → Модуль, целиком
Толстый обычный клиент, ПриОткрытии0/реальнаяКнопкаНажатие1; полное source/control/key binding.
Перем СвойОбъект85;
Перем СвойКлюч85;
Перем Подготовлено85;
Перем Остановка85;
Процедура Инициализировать85(Объект, Ключ) Экспорт
Если Подготовлено85 = Истина Или Открыта() Или ТипЗнч(Объект) <> Тип("ОбработкаОбъект.СводкаКарточек85")
Или Объект.Метаданные() <> Метаданные.Обработки.СводкаКарточек85
Или ТипЗнч(Ключ) <> Тип("УникальныйИдентификатор") Или КлючУникальности <> Ключ Тогда
ВызватьИсключение "Нужны закрытая native instance форма/actual own object/freshKey";
КонецЕсли;
Объект.ПроверитьСвойСтенд85();
СвойОбъект85 = Объект;
СвойКлюч85 = Ключ;
ВводЗаголовка85 = Объект.Заголовок85;
ВводРежима85 = Объект.Режим85;
Вывод85 = Новый ТекстовыйДокумент;
Вывод85.ТолькоПросмотр = Истина;
Доступные85 = Новый СписокЗначений;
Статус85 = "Введите Все или ПервыеДва; прошлый вывод сохраняется при отказе.";
Остановка85 = Ложь;
Подготовлено85 = Истина;
КонецПроцедуры
Процедура ПриОткрытии()
ПроверитьСвязь85();
КонецПроцедуры
Процедура ПроверитьСвязь85()
Если Подготовлено85 <> Истина Или Остановка85 Или КлючУникальности <> СвойКлюч85
Или ТипЗнч(СвойОбъект85) <> Тип("ОбработкаОбъект.СводкаКарточек85")
Или СвойОбъект85.Метаданные() <> Метаданные.Обработки.СводкаКарточек85
Или ЭлементыФормы.Вывод85.Данные <> "Вывод85" Или ЭлементыФормы.Вывод85.Значение <> Вывод85
Или Не ЭлементыФормы.Вывод85.ТолькоПросмотр Тогда
ВызватьИсключение "СТОП: actual собственный instance/control/output binding изменен";
КонецЕсли;
СвойОбъект85.ПроверитьСвойСтенд85();
КонецПроцедуры
Процедура Сформировать85(Кнопка)
Если ТипЗнч(Кнопка) <> Тип("Кнопка") Или Кнопка <> ЭлементыФормы.Сформировать85 Или Кнопка.Имя <> "Сформировать85" Тогда
ВызватьИсключение "Нужен настоящий source-control ordinary button event1";
КонецЕсли;
ПроверитьСвязь85();
Если Не СвойОбъект85.ДопустимыйВвод85(ВводЗаголовка85, ВводРежима85) Тогда
Статус85 = "Отказ ввода: заголовок1..40 без CR/LF/TAB/|/краевых пробелов и режимВсе/ПервыеДва. Старый вывод сохранен.";
Возврат;
КонецЕсли;
СвойОбъект85.Заголовок85 = ВводЗаголовка85;
СвойОбъект85.Режим85 = ВводРежима85;
Если Не СвойОбъект85.ПроверитьЗаполнение() Тогда
Статус85 = "Native CheckFill вернул Ложь. Старый вывод и собственные документы не изменены.";
Возврат;
КонецЕсли;
Попытка
Кандидат = СвойОбъект85.СформироватьСвойТекст85();
ПроверитьСвязь85();
Если ТипЗнч(Кандидат.Документ) <> Тип("ТекстовыйДокумент") Или ТипЗнч(Кандидат.Текст) <> Тип("Строка")
Или ТипЗнч(Кандидат.Доступные) <> Тип("СписокЗначений") Или Кандидат.Доступные.Количество() <> 3
Или Кандидат.Сумма <> ?(ВводРежима85 = "Все", 75, 45) Или Кандидат.Количество <> ?(ВводРежима85 = "Все", 3, 2) Тогда
ВызватьИсключение "Candidate не подтвердил native document/list/numeric contract до visible replacement";
КонецЕсли;
Вывод85 = Кандидат.Документ;
Доступные85 = Кандидат.Доступные;
Если ЭлементыФормы.Вывод85.Значение <> Вывод85 Или Не ЭлементыФормы.Вывод85.ТолькоПросмотр
Или СвойОбъект85.ПрочитатьСвойТекст85(ЭлементыФормы.Вывод85.Значение) <> Кандидат.Текст Тогда
ВызватьИсключение "Actual form binding readback отказал; replacement мог завершиться частично";
КонецЕсли;
Статус85 = "Actual candidate " + Формат(Кандидат.Количество, "ЧГ=0; ЧДЦ=0") + "/" + Формат(Кандидат.Сумма, "ЧГ=0; ЧДЦ=0") + ". БД только прочитана; визуальный результат проверьте вручную.";
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: source/layout/UI outcome требует ручной проверки; не повторять. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыПолный native startup собственного экземпляра
Конфигурация → Модуль обычного приложения, целиком
NativeПриНачалеРаботыСистемы0, guardedordinarythick; actualmanager.Create0→sameobject.GetForm route.
Процедура ПриНачалеРаботыСистемы()
#Если ТолстыйКлиентОбычноеПриложение Тогда
Объект = Обработки.СводкаКарточек85.Создать();
Если ТипЗнч(Объект) <> Тип("ОбработкаОбъект.СводкаКарточек85") Или Объект.Метаданные() <> Метаданные.Обработки.СводкаКарточек85 Тогда
ВызватьИсключение "Manager.Create не вернул actual собственный transient объект";
КонецЕсли;
Объект.Заголовок85 = "Мои учебные карточки";
Объект.Режим85 = "Все";
Форма = Объект.СоздатьСвоюФорму85();
Форма.Открыть();
#Иначе
ВызватьИсключение "Урок только для собственного толстого обычного Windows клиента8.5.1.1343";
#КонецЕсли
КонецПроцедурыПолный собственный compiled текстовый макет
Обработки → СводкаКарточек85 → Макеты → Заголовок85 → текстовый редактор
Текстовый редактор своего макета; это НЕ модуль BSL и НЕ внешний plain .txt
#Область Заголовок85
Сводка|[Заголовок85 ]|
#КонецОбластиПолный собственный compiled текстовый макет
Документы → УчебнаяКарточкаТекста85 → Макеты → СтрокаКарточки85 → текстовый редактор
Текстовый редактор своего макета; это НЕ модуль BSL и НЕ внешний plain .txt
#Область Карточка85
Карточка|[Код85 ]|[Сумма85 ]|
#КонецОбластиПолный собственный compiled текстовый макет
Обработки → СводкаКарточек85 → Макеты → Итог85 → текстовый редактор
Текстовый редактор своего макета; это НЕ модуль BSL и НЕ внешний plain .txt
#Область Итог85
#Поле Количество85
#Выравнивание Лево
Итог|[Количество85]|[Итог85 ]|
#КонецОбластиРазбор по шагам
Проверить exactFile/version/fullmetadata/currentuser и получить настоящую transient обработку из ownmanager.Create0.
NativeCheckFill0/FillCheck2 отказывает отдельному ownblank объекту; actualinstance.GetForm("Сводка85",,freshKey) создаёт closedown ordinary form, затем передаётся sameobject.
WholeQuery безГДЕ подтверждает3actual refs/все9scalarfields; FindByAttribute должен совпасть с уникальными уже подтвержденными строками, а actualref.GetObject с полным объектом.
GetChoiceData возвращает native СписокЗначений exactly3ownrefs; typedarray выбранныхA/B/C→SelectByRefs и full native selection readback независимо от порядка.
Три actualcompiled factories→nativeGetArea/Parameters/Count; Footer sentinelFill→Get indexes→Fillactual→Set onlydiscoveredindex→Getreadback.
NativeTextDocument.Put строит candidate, GetText exact padding/lines/sums75/45 и повторныйwholeDBsnapshot проверяются ДО visible replacement.
Настоящая own button/form привязка показывает candidate и availablechoices; invalid input/CancelClose не скрывают записи, exceptionsticky останавливает дальнейшее действие.
Как проверить результат
Будущий ручной стенд должен дать полные5строк/3карточки/75 и4строки/2карточки/45 при sourceDB3 без изменений.
Blank nativeCheckFillFalse и неправильный ввод сохраняют прежний вывод; altered layout/wholeDB/owncontrol binding вызывает явный отказ.
Статические тесты сравнивают installed raw/native contracts, source/negative mutations и независимую арифметику; CF/BSLcompiler/1С/rendering не выполнялись.
Ожидаемый результат
Ожидаемый будущий ручной результат: actual native compiled text75→45, доступные ownchoices3 и неизменные3карточки. Здесь только authoredsource/static tests; actualruntime/CFcompile/1С/DB/UI/network0.
На что обратить внимание
UUID строки/пути не доказывает владениеИБ или юридическое владение; разрешён только отдельно вручную созданный own стенд.
FindByAttribute выбирает лишь один документ при дублях; нашу уникальность доказывает whole3snapshot, не обещание API.
SelectByRefs игнорирует неподходящие/несуществующиеrefs; отсутствие expected fullreadback — отказ, не успешная частичная сводка.
TextDocument.GetArea возвращает новый actual документ, Params readonly не означает readonly его значений; никаких fake constructors/неизвестного storedobject.
Object.FillCheck server/thick/external available; только UI GetForm helper условноordinarythick, не универсальная проверка «не сервер» в File варианте.
Несколько присваиваний формы не атомарны. До commit ошибки сохраняют прежний вывод; ошибка после visible setter может оставить partialUI и требует остановки.
Compiledlayout widths/locale/parser/native output здесь не запускались; exactreadback failclosed может отказать неподходящему макету, а не маскирует его.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.