РегистрыСведенийМенеджер

Типы · InformationRegistersManager

Предназначен для управления регистрами сведений и предоставляет доступ к значениям типа РегистрСведенийМенеджер.<Имя регистра сведений>. Доступ к объекту осуществляется через свойство глобального контекста РегистрыСведений.

Примеры платформы

Форма = РегистрыСведений.КурсыВалют.ПолучитьФормуСписка();
Форма.Открыть();
Полное описание, параметры и ограничения

РегистрыСведенийМенеджер (InformationRegistersManager)

РегистрыСведенийМенеджер (InformationRegistersManager)

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

Элементы коллекции:
РегистрСведенийМенеджер.<Имя регистра сведений>
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются менеджеры регистров сведений.
Возможно обращение к менеджеру регистра сведений посредством оператора [...]. В качестве аргумента передается имя регистра сведений, как оно задано в конфигурации.

Свойства:
<Имя регистра сведений> (<Information register name>)

Описание:

Предназначен для управления регистрами сведений и предоставляет доступ к значениям типа РегистрСведенийМенеджер.<Имя регистра сведений>. Доступ к объекту осуществляется через свойство глобального контекста РегистрыСведений.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Возможен обмен с сервером.

Пример:

// менеджер регистров сведений предоставляет доступ к менеджеру

// конкретного регистра (Курсы валют).

Форма = РегистрыСведений.КурсыВалют.ПолучитьФормуСписка();
Форма.Открыть();

См. также:
Глобальный контекст, свойство РегистрыСведений

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

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

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

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

Свои строки регистра: настоящий ключ, точный список и строковый отбор

Проверить own fixture20/25/30, сформировать numeric75/45/20 и сравнить read-only ordinary list exactA с memory-set rowfilterA→A+AA, без программной записи.

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

Собственный Windows FileCF8.5.1.1343/обычный толстый клиент. Полный общий client-only модуль; ownordinary формы и native set-module write-refusal. Actualruntime0, программа не пишетБД.

Подготовка

  1. Создайте вручную НОВУЮ собственную File ИБ в C:\1c-labs\OwnInfoPreview85_7c504ed8-19d1-4f22-9f07-f29ff862a9eb\IB на отдельном своём учебном Windows стенде с точной платформой8.5.1.1343. Если каталог/регистрация уже существуют, не используйте и не очищайте их: остановитесь. Код проверяет exact native registration string File="C:\1c-labs\OwnInfoPreview85_7c504ed8-19d1-4f22-9f07-f29ff862a9eb\IB"; — не canonical path и не UUID самойИБ. Здесь1С/VM/ИБ/GUI/файлы данных не создавались и не запускались.

  2. Новая пустая CF УчебныйПросмотрРегистра85: обычное приложение/обычные формы, совместимостьНеИспользовать. Один документ, один регистр сведений, один общий модуль, три формы регистра и один макет. Никаких обработок/отчётов/общих форм/каталогов/производственных регистров/подписок/заданий/разделителей/расширений/источников. Остальные модули пустые. Один сеанс, никакой совместной работы.

  3. Вручную создайте единственного собственного пользователя ПросмотрРег85Ученик с одной полной ролью только этой новойИБ, включая именно право Администрирование: nativeGetUsers1983 требует административные права, не только произвольное чтение. Всё только в этой собственной новойИБ. CurrentUser сопоставляется с actual Users[0] по native UUID; UUID пользователя не выводится. Сначала подготовьте fixture, только затем вставляйте startup/application и запреты записи ниже.

  4. Документ УчебныйРегистраторМетки85: реквизиты Маркер85 Строка36 и Код85 Строка1; табличных частей нет. НомерСтрока12, автонумерацияНет, контрольуникальностиДа. ПроведениеЗапретить. В Движения включите только собственный регистр ниже; документы будут вручную сохранены, но не проведены. Модуль объекта/менеджера документа пустой. Запрет проведения не превращает manual register records в проведенные документы; source проверяет ПроведенFalse.

  5. Регистр сведений УчебныеМеткиРегистраторов85: РежимЗаписиПодчинениеРегистратору, ПериодичностьПоПозицииРегистратора. Единственный разрешённый регистратор — УчебныйРегистраторМетки85 через его Движения. Измерения Маркер85 Строка36 и Код85 Строка8; ресурс Сумма85 Число12,0; дополнительных реквизитов нет. Не создавайте независимый регистр и не заменяйте периодичностьСекунда. Registrar-key native1511 имеет смысл именно для этих двух настроек.

  6. В регистре создайте3 обычные формы: Проверка85 и Список85 с главным реквизитом Список85 типа РегистрСведенийСписок.УчебныеМеткиРегистраторов85; Набор85 с главным реквизитом Набор85 типа РегистрСведенийНаборЗаписей.УчебныеМеткиРегистраторов85. ОсновнаяФормаСписка=Список85. Набор85 назначьте основной формой набора при её создании генератором. Не делайте managed формы/ТаблицаЗначений вместо native главных реквизитов.

  7. На этапе ручной подготовки оставьте native generated ordinary формы без модулей урока и без readonly запретов, applicationmodule пустым. Обновите только своюCF. Штатными стандартными командами своего нового документа создайте LAB-A дата10.10.2026 09:00, Код85=A и LAB-B дата10.10.2026 10:00, Код85=B, оба Маркер85=7c504ed8-19d1-4f22-9f07-f29ff862a9eb, ПометкаУдаленияFalse/ПроведенFalse. Настоящие refs получаются только после их manual сохранения, не из литераловUUID.

  8. В своём ordinary списке этого регистра выберите штатный ввод/редактирование набора под собственным actual LAB-A и руками сохраните ровно2строки: номерстроки1 Код85=A Сумма85=20 АктивностьИстина; номерстроки2 Код85=AA Сумма85=25 АктивностьИстина. Период10.10.2026 09:00, Регистратор actualLAB-A и Маркер85=7c504ed8-19d1-4f22-9f07-f29ff862a9eb у обеих. Затем один собственный набор LAB-B: номерстроки1 Код85=B Сумма85=30 АктивностьЛожь, период10:00, actualLAB-B, тот же marker. Только штатная ручная запись своего fixture; никакого authored Записать/Провести/Удалить/SQL/автоочистки.

  9. После проверки собственных2doc/3register rows вернитесь в Конфигуратор. ОбщийМодуль ПросмотрРегистра85: ГлобальныйНет, КлиентОбычноеПриложениеДа, КлиентУправляемоеПриложениеНет, СерверНет, ВнешнееСоединениеНет; CODE полностью в его модуль. В File ordinary вариант символТолстыйКлиентОбычноеПриложение может быть определён для обеих частей File-приложения; это не универсальный запрет Server, поэтому общий модуль здесь именно client-only metadata.

  10. HUB_FORM целиком в регистр→Формы→Проверка85→Модуль. Добавьте отдельные реквизиты Вывод85 ТабличныйДокумент и Статус85 Строка2000. ПолеТабличногоДокумента Вывод85 связано с Вывод85, ТолькоПросмотрИстина. Список85 главный реквизит не заменяйте. Кнопки ОткрытьНабор85, СписокA85, СписокAA85; Нажатие первой→ОткрытьНабор85(Кнопка), обеих других→ОткрытьСписок85(Кнопка). ПриОткрытии() и ПередОткрытием(Отказ,СтандартнаяОбработка) у формы привязаны к одноименным native событиям.

  11. LIST_MODULE целиком в Список85→Модуль. Главный Список85 native InfoRegisterList; ТабличноеПоле Строки85 Данные=Список85. Создайте видимые семь колонок, имена/Данные точноПериод,Регистратор,НомерСтроки,Активность,Маркер85,Код85,Сумма85; значение списка должно выбирать эти семь native columns. Полеreadonly Статус85 Строка2000. Кнопка Проверить85 Нажатие→Проверить85(Кнопка). ТабличноеПоле ПриАктивизацииСтроки→Строки85ПриАктивизацииСтроки(Элемент), ровно1actualcontrolformal. Свяжите formПередОткрытием2/ПриОткрытии0. Уберите стандартные команды создания/изменения/удаления, контекстные пункты записи и пользовательскую настройку отбора.

  12. SET_MODULE целиком в Набор85→Модуль. Главный Набор85 native Set; ТабличноеПоле Строки85 Данные=Набор85, семь тех же native columns. КолонкаКод85 Имя=Код85/Данные=Код85; она должна предоставить действительное native set-column extension. Фильтр и настройка строкиКод85 должны существовать в actual TableBox, иначе явный отказ. Добавьте readonlyСтатус85 и кнопкуПроверить85 с nativeClick1. ТабличноеПоле ПриАктивизацииСтроки→Строки85ПриАктивизацииСтроки1; formПередОткрытием2/ПриОткрытии0 и set-form nativeПередЗаписью(Отказ)1. Удалите все стандартные команды записи/редактирования.

  13. RECORDSET_MODULE полностью в регистр→МодульНабораЗаписей ТОЛЬКО ПОСЛЕ ручного fixture. NativeПередЗаписью(Отказ,Замещение)2 всегда ОтказИстина, без client-only helper и без UI; в остальных server/external контекстах тоже не вызывает UI. Он не пишет данных и не запускается кодом вручную. FormПередЗаписью1 — другое native событие, не подменяйте им module callback2.

  14. Макеты регистра→Добавить→ТабличныйДокумент→Сводка85. Ровно3строки×2колонки, никаких объединений/ячеек внеR1C1:R3C2. Полный copyable six-cell JSON asset ниже задаёт каждую ячейку; внесите свойства в собственный compiled макет через штатный редактор, JSON НЕ является загрузочным форматом 1С. Колонка1 текст: Все проверенные строки БД / Активные строки БД / Точный код A. Колонка2: ЗаполнениеПараметр, ПараметрВсего85/Активные85/Точный85, СодержитЗначениеДа, ТипЗначенияЧисло12,0, numericЗначение0, ФорматЧГ=0;ЧДЦ=0. ЗащитаИстина ВСЕХ6cells. Не используйте Текст0 вместо numericValue и не меняйте runtime ContainsValue для маскировки ошибки подготовки.

  15. APPLICATION целиком в МодульОбычногоПриложения. NativeПриНачалеРаботыСистемы0 вызывает guard→actualOwnManager.GetForm("Проверка85",,freshUID)→closedforminitializer→Open. Onlyownset.GetForm("Набор85",actualHub,freshUID) и Manager.GetListForm("Список85",actualHub,freshUID) используют native factories. Не вызывайте handlers как обычные процедуры; общие internal read helpers — не события.

  16. Вручную проверьте/обновите только своюCF и запустите own ordinary client8.5.1.1343. Hub выводит actual numeric candidate75/45/20 после полного query безГДЕ по2doc/3rows, actualref.GetObject и повторного whole source сравнения. Никакая inactive видимость в UI/SelectByRecorder/Set.Read не выводится из query: выборка/набор/GUI здесь только ownA active20/25. Если query реально не вернул inactiveB30, source отказывает, а не объявляет75.

  17. ОткрытьНабор85: SelectByRecorder(actualA) и Set.Отбор.Регистратор.Установить(actualA)→Прочитать дают ровно2actual active records45; порядок выборки не предполагается. Полные native Record flags/LineNumber/Recorder/Period/ownvalues проверяются; Record.МоментВремени должен дать actual own recorder+period и Compare(actualA.МоментВремени)=0. GUI row-filterA по native2573 является вхождением, поэтому expectedA иAA; отдельно нажмите обе реальные строки/Проверить85. Только после чтения двух разных currentdata возникает статусGUI45.

  18. СписокA85 и СписокAA85 открывают отдельные fresh native формы с initial dimension marker+exactcode, initial recorderA и настоящим functionalCtor key из actual rowPeriod/actualref/двухdimensions. Параметры действуют при nativeOpen, не являются мгновенным переключателем уже открытой формы. Нажмите Проверить85: actual CurrentRow должен совпасть с key, actualCurrentData — со всеми собственными source scalarfields, actualList.Filter — с тремя равенствами. Будущий expectedGUI: однаA20 или однаAA25; отсутствие/лишние строки и внешний вид осмотрите вручную.

  19. Close/Cancel не записывают/не очищают fixture. Native readonly containers ОтборСтрок/НастройкаОтбораСтрок/Колонки не заменяются; изменяются только допустимые child filter/settings/column flags. ReadOnly TabDoc действует только для защищённых ячеек, потому весь compiled asset и actualoutput требуют ЗащитаИстина плюс actualТолькоПросмотр. Нельзя трактовать 75 как сумму всех видимых строк или5checkers как proof native runtime/CFcompiler/rendering.

#Если ТолстыйКлиентОбычноеПриложение Тогда

Процедура ПроверитьСвойСтенд85() Экспорт
    Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnInfoPreview85_7c504ed8-19d1-4f22-9f07-f29ff862a9eb\IB"";" Тогда
        ВызватьИсключение "Только exact File регистрации своего нового стенда; путь не UUID самой ИБ";
    КонецЕсли;
    Если ИмяПользователя() <> "ПросмотрРег85Ученик" Тогда
        ВызватьИсключение "Нужны собственная пустая CF и учебный пользователь";
    КонецЕсли;
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
    Если ТипЗнч(Пользователи) <> Тип("Массив") Или Пользователи.Количество() <> 1
        Или Пользователи[0].Имя <> "ПросмотрРег85Ученик" Или Текущий = Неопределено
        Или Текущий.УникальныйИдентификатор <> Пользователи[0].УникальныйИдентификатор Тогда
        ВызватьИсключение "Нужен один actual свой пользователь; его UUID не выводится";
    КонецЕсли;
    Если Метаданные.Документы.Количество() <> 1 Или Метаданные.РегистрыСведений.Количество() <> 1
        Или Метаданные.ОбщиеМодули.Количество() <> 1 Или Метаданные.Справочники.Количество() <> 0
        Или Метаданные.Обработки.Количество() <> 0 Или Метаданные.Отчеты.Количество() <> 0
        Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0
        Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ОбщиеФормы.Количество() <> 0
        Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0
        Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нельзя использовать рабочую конфигурацию вместо своей минимальной CF";
    КонецЕсли;
    ДокументМД = Метаданные.Документы.УчебныйРегистраторМетки85;
    РегистрМД = Метаданные.РегистрыСведений.УчебныеМеткиРегистраторов85;
    Если ДокументМД.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Запретить
        Или ДокументМД.ТипНомера <> Метаданные.СвойстваОбъектов.ТипНомераДокумента.Строка Или ДокументМД.ДлинаНомера <> 12
        Или ДокументМД.Автонумерация Или Не ДокументМД.КонтрольУникальности
        Или ДокументМД.Движения.Количество() <> 1 Или Не ДокументМД.Движения.Содержит(РегистрМД)
        Или ДокументМД.Реквизиты.Количество() <> 2 Или ДокументМД.ТабличныеЧасти.Количество() <> 0
        Или РегистрМД.РежимЗаписи <> Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору
        Или РегистрМД.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.ПозицияРегистратора
        Или РегистрМД.Измерения.Количество() <> 2 Или РегистрМД.Ресурсы.Количество() <> 1
        Или РегистрМД.Реквизиты.Количество() <> 0 Или РегистрМД.Формы.Количество() <> 3
        Или РегистрМД.Макеты.Количество() <> 1 Или РегистрМД.ОсновнаяФормаСписка <> РегистрМД.Формы.Список85 Тогда
        ВызватьИсключение "Нужен именно свой подчиненный периодический регистр и его три ordinary формы";
    КонецЕсли;
    ПроверитьТипРеквизита85(ДокументМД.Реквизиты.Маркер85, Тип("Строка"), 36, 0);
    ПроверитьТипРеквизита85(ДокументМД.Реквизиты.Код85, Тип("Строка"), 1, 0);
    ПроверитьТипРеквизита85(РегистрМД.Измерения.Маркер85, Тип("Строка"), 36, 0);
    ПроверитьТипРеквизита85(РегистрМД.Измерения.Код85, Тип("Строка"), 8, 0);
    ПроверитьТипРеквизита85(РегистрМД.Ресурсы.Сумма85, Тип("Число"), 12, 0);
    Если РегистрМД.Макеты.Сводка85.ТипМакета <> Метаданные.СвойстваОбъектов.ТипМакета.ТабличныйДокумент Тогда
        ВызватьИсключение "Нужен сохраненный собственный compiled табличный макет";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьТипРеквизита85(РеквизитМД, НужныйТип, Длина, Точность)
    Описание = РеквизитМД.Тип;
    Если Описание.Типы().Количество() <> 1 Или Не Описание.СодержитТип(НужныйТип) Тогда
        ВызватьИсключение "Состав native типов собственного metadata поля не совпал";
    КонецЕсли;
    Если НужныйТип = Тип("Строка") Тогда
        Если Описание.КвалификаторыСтроки.Длина <> Длина Тогда
            ВызватьИсключение "Неправильная длина ownString";
        КонецЕсли;
    ИначеЕсли Описание.КвалификаторыЧисла.Разрядность <> Длина Или Описание.КвалификаторыЧисла.РазрядностьДробнойЧасти <> Точность Тогда
        ВызватьИсключение "Неправильная точность ownNumber";
    КонецЕсли;
КонецПроцедуры

Функция ПрочитатьПолныйИсточник85() Экспорт
    ПроверитьСвойСтенд85();
    ЗапросДокументов = Новый Запрос;
    ЗапросДокументов.Текст =
    "ВЫБРАТЬ Ссылка, Номер, Дата, ПометкаУдаления, Проведен, Маркер85, Код85
    |ИЗ Документ.УчебныйРегистраторМетки85";
    Документы85 = ЗапросДокументов.Выполнить().Выгрузить();
    Если ТипЗнч(Документы85) <> Тип("ТаблицаЗначений") Или Документы85.Количество() <> 2 Или Документы85.Колонки.Количество() <> 7 Тогда
        ВызватьИсключение "В whole source должны быть ровно2 своих actual регистратора";
    КонецЕсли;
    А = Неопределено;
    Б = Неопределено;
    Для Каждого Карточка Из Документы85 Цикл
        Если ТипЗнч(Карточка.Ссылка) <> Тип("ДокументСсылка.УчебныйРегистраторМетки85") Или Карточка.Ссылка.Пустая()
            Или ТипЗнч(Карточка.Номер) <> Тип("Строка") Или ТипЗнч(Карточка.Дата) <> Тип("Дата")
            Или ТипЗнч(Карточка.ПометкаУдаления) <> Тип("Булево") Или Карточка.ПометкаУдаления
            Или ТипЗнч(Карточка.Проведен) <> Тип("Булево") Или Карточка.Проведен
            Или ТипЗнч(Карточка.Маркер85) <> Тип("Строка") Или Карточка.Маркер85 <> "7c504ed8-19d1-4f22-9f07-f29ff862a9eb"
            Или ТипЗнч(Карточка.Код85) <> Тип("Строка") Тогда
            ВызватьИсключение "Не подтвержден полный own document source";
        КонецЕсли;
        Если Карточка.Код85 = "A" И Карточка.Номер = "LAB-A" И Карточка.Дата = Дата(2026, 10, 10, 9, 0, 0) И А = Неопределено Тогда
            А = Карточка.Ссылка;
        ИначеЕсли Карточка.Код85 = "B" И Карточка.Номер = "LAB-B" И Карточка.Дата = Дата(2026, 10, 10, 10, 0, 0) И Б = Неопределено Тогда
            Б = Карточка.Ссылка;
        Иначе
            ВызватьИсключение "Дубликат/неизвестная/измененная карточка собственного регистратора";
        КонецЕсли;
        Объект = Карточка.Ссылка.ПолучитьОбъект();
        Если ТипЗнч(Объект) <> Тип("ДокументОбъект.УчебныйРегистраторМетки85") Или Объект.Ссылка <> Карточка.Ссылка
            Или Объект.Метаданные() <> Метаданные.Документы.УчебныйРегистраторМетки85
            Или Объект.Номер <> Карточка.Номер Или Объект.Дата <> Карточка.Дата
            Или Объект.ПометкаУдаления <> Карточка.ПометкаУдаления Или Объект.Проведен <> Карточка.Проведен
            Или Объект.Маркер85 <> Карточка.Маркер85 Или Объект.Код85 <> Карточка.Код85 Тогда
            ВызватьИсключение "Actual own GetObject не совпал со всеми полями whole query";
        КонецЕсли;
    КонецЦикла;
    Если А = Неопределено Или Б = Неопределено Или А = Б Тогда
        ВызватьИсключение "Не получены две разные actual own ссылки";
    КонецЕсли;
    ЗапросСтрок = Новый Запрос;
    ЗапросСтрок.Текст =
    "ВЫБРАТЬ Период, Регистратор, НомерСтроки, Активность, Маркер85, Код85, Сумма85
    |ИЗ РегистрСведений.УчебныеМеткиРегистраторов85";
    Строки85 = ЗапросСтрок.Выполнить().Выгрузить();
    Если ТипЗнч(Строки85) <> Тип("ТаблицаЗначений") Или Строки85.Количество() <> 3 Или Строки85.Колонки.Количество() <> 7 Тогда
        ВызватьИсключение "Whole native query должен реально вернуть все3 own строки; видимость inactive не предполагается";
    КонецЕсли;
    Индексы = Новый Структура("A,AA,B", -1, -1, -1);
    Всего = 0;
    Активные = 0;
    Для Индекс = 0 По Строки85.Количество() - 1 Цикл
        Строка85 = Строки85[Индекс];
        ПроверитьСтроку85(Строка85, А, Б);
        БылИндекс = -1;
        Если Не Индексы.Свойство(Строка85.Код85, БылИндекс) Или БылИндекс <> -1 Тогда
            ВызватьИсключение "Дубликат own row code";
        КонецЕсли;
        Индексы.Вставить(Строка85.Код85, Индекс);
        Всего = Всего + Строка85.Сумма85;
        Если Строка85.Активность Тогда
            Активные = Активные + Строка85.Сумма85;
        КонецЕсли;
    КонецЦикла;
    Если Индексы.A = -1 Или Индексы.AA = -1 Или Индексы.B = -1 Или Всего <> 75 Или Активные <> 45 Тогда
        ВызватьИсключение "Actual source не подтвердил75/45";
    КонецЕсли;
    Возврат Новый Структура("Документы,Строки,А,Б,Индексы,Всего,Активные", Документы85, Строки85, А, Б, Индексы, Всего, Активные);
КонецФункции

Процедура ПроверитьСтроку85(Строка85, А, Б) Экспорт
    Если ТипЗнч(Строка85.Период) <> Тип("Дата") Или ТипЗнч(Строка85.Регистратор) <> Тип("ДокументСсылка.УчебныйРегистраторМетки85")
        Или ТипЗнч(Строка85.НомерСтроки) <> Тип("Число") Или Строка85.НомерСтроки <> Цел(Строка85.НомерСтроки)
        Или ТипЗнч(Строка85.Активность) <> Тип("Булево") Или ТипЗнч(Строка85.Маркер85) <> Тип("Строка")
        Или Строка85.Маркер85 <> "7c504ed8-19d1-4f22-9f07-f29ff862a9eb" Или ТипЗнч(Строка85.Код85) <> Тип("Строка")
        Или ТипЗнч(Строка85.Сумма85) <> Тип("Число") Тогда
        ВызватьИсключение "Полные native типы/own marker строки не подтверждены";
    КонецЕсли;
    Если Строка85.Код85 = "A" И Строка85.Регистратор = А И Строка85.НомерСтроки = 1
        И Строка85.Период = Дата(2026, 10, 10, 9, 0, 0) И Строка85.Активность И Строка85.Сумма85 = 20 Тогда
        Возврат;
    ИначеЕсли Строка85.Код85 = "AA" И Строка85.Регистратор = А И Строка85.НомерСтроки = 2
        И Строка85.Период = Дата(2026, 10, 10, 9, 0, 0) И Строка85.Активность И Строка85.Сумма85 = 25 Тогда
        Возврат;
    ИначеЕсли Строка85.Код85 = "B" И Строка85.Регистратор = Б И Строка85.НомерСтроки = 1
        И Строка85.Период = Дата(2026, 10, 10, 10, 0, 0) И Не Строка85.Активность И Строка85.Сумма85 = 30 Тогда
        Возврат;
    КонецЕсли;
    ВызватьИсключение "Неизвестное/измененное собственное значение строки";
КонецПроцедуры

Процедура ПроверитьИсточникНеизменным85(До) Экспорт
    После = ПрочитатьПолныйИсточник85();
    Если После.А <> До.А Или После.Б <> До.Б Или После.Всего <> До.Всего Или После.Активные <> До.Активные Тогда
        ВызватьИсключение "Own identities/totals изменились между чтениями";
    КонецЕсли;
    Для Каждого Код Из СтрРазделить("A,AA,B", ",") Цикл
        Левый = До.Строки[До.Индексы[Код]];
        Правый = После.Строки[После.Индексы[Код]];
        Для Каждого Имя Из СтрРазделить("Период,Регистратор,НомерСтроки,Активность,Маркер85,Код85,Сумма85", ",") Цикл
            Если Левый[Имя] <> Правый[Имя] Тогда
                ВызватьИсключение "Полный источник регистра изменился; это не atomic snapshot";
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    Для Каждого ДоДок Из До.Документы Цикл
        Совпало = 0;
        Для Каждого ПослеДок Из После.Документы Цикл
            Если ДоДок.Ссылка = ПослеДок.Ссылка Тогда
                Для Каждого Имя Из СтрРазделить("Ссылка,Номер,Дата,ПометкаУдаления,Проведен,Маркер85,Код85", ",") Цикл
                    Если ДоДок[Имя] <> ПослеДок[Имя] Тогда
                        ВызватьИсключение "Полные scalar карточки изменились";
                    КонецЕсли;
                КонецЦикла;
                Совпало = Совпало + 1;
            КонецЕсли;
        КонецЦикла;
        Если Совпало <> 1 Тогда
            ВызватьИсключение "Actual reference карточки не подтвержден повторным whole чтением";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Функция ПрочитатьНаборА85(Паспорт) Экспорт
    ПроверитьИсточникНеизменным85(Паспорт);
    Выборка = РегистрыСведений.УчебныеМеткиРегистраторов85.ВыбратьПоРегистратору(Паспорт.А);
    Если ТипЗнч(Выборка) <> Тип("РегистрСведенийВыборка.УчебныеМеткиРегистраторов85") Тогда
        ВызватьИсключение "Actual SelectByRecorder не вернул собственную typed выборку";
    КонецЕсли;
    Коды = Новый Соответствие;
    Сумма = 0;
    Пока Выборка.Следующий() Цикл
        ПроверитьСтроку85(Выборка, Паспорт.А, Паспорт.Б);
        Если Выборка.Регистратор <> Паспорт.А Или Не Выборка.Активность Или Коды.Получить(Выборка.Код85) <> Неопределено Тогда
            ВызватьИсключение "SelectByRecorderA изменил scope/активность/полный состав";
        КонецЕсли;
        Коды.Вставить(Выборка.Код85, Выборка.НомерСтроки);
        Сумма = Сумма + Выборка.Сумма85;
    КонецЦикла;
    Если Коды.Количество() <> 2 Или Коды.Получить("A") <> 1 Или Коды.Получить("AA") <> 2 Или Сумма <> 45 Тогда
        ВызватьИсключение "Actual selectionA не подтвердила2 строки45";
    КонецЕсли;
    Набор = РегистрыСведений.УчебныеМеткиРегистраторов85.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Паспорт.А);
    Набор.Прочитать();
    ПроверитьНаборА85(Набор, Паспорт);
    ПроверитьИсточникНеизменным85(Паспорт);
    Возврат Набор;
КонецФункции

Процедура ПроверитьНаборА85(Набор, Паспорт) Экспорт
    Если ТипЗнч(Набор) <> Тип("РегистрСведенийНаборЗаписей.УчебныеМеткиРегистраторов85") Или Не Набор.Выбран()
        Или Не Набор.Отбор.Регистратор.Использование Или Набор.Отбор.Регистратор.Значение <> Паспорт.А Или Набор.Количество() <> 2 Тогда
        ВызватьИсключение "Нужен actual own recorder-filtered выбранный набор2 строк";
    КонецЕсли;
    Коды = Новый Соответствие;
    Сумма = 0;
    Для Каждого Запись Из Набор Цикл
        Если ТипЗнч(Запись) <> Тип("РегистрСведенийЗапись.УчебныеМеткиРегистраторов85") Тогда
            ВызватьИсключение "Actual набор не дал native own Record";
        КонецЕсли;
        ПроверитьСтроку85(Запись, Паспорт.А, Паспорт.Б);
        Если Запись.Регистратор <> Паспорт.А Или Не Запись.Активность Или Коды.Получить(Запись.Код85) <> Неопределено Тогда
            ВызватьИсключение "НаборA не подтвердил actual recorder/active/unique rows";
        КонецЕсли;
        Момент = Запись.МоментВремени();
        Если ТипЗнч(Момент) <> Тип("МоментВремени") Или Момент.Дата <> Запись.Период Или Момент.Ссылка <> Паспорт.А
            Или Момент.Сравнить(Паспорт.А.МоментВремени()) <> 0 Тогда
            ВызватьИсключение "Actual PointInTime не совпал с периодом/реальным own регистратором";
        КонецЕсли;
        Коды.Вставить(Запись.Код85, Запись.НомерСтроки);
        Сумма = Сумма + Запись.Сумма85;
    КонецЦикла;
    Если Коды.Количество() <> 2 Или Коды.Получить("A") <> 1 Или Коды.Получить("AA") <> 2 Или Сумма <> 45 Тогда
        ВызватьИсключение "ReadSetA не подтвердил2 строки45";
    КонецЕсли;
КонецПроцедуры

Функция СоздатьНастоящийКлюч85(Паспорт, Код) Экспорт
    ПроверитьИсточникНеизменным85(Паспорт);
    Если Код <> "A" И Код <> "AA" Тогда
        ВызватьИсключение "Позиционировать можно только ownA/AA active fixture";
    КонецЕсли;
    Источник = Паспорт.Строки[Паспорт.Индексы[Код]];
    Значения = Новый Структура("Регистратор,Период,Маркер85,Код85", Источник.Регистратор, Источник.Период, Источник.Маркер85, Источник.Код85);
    Аргументы = Новый Массив;
    Аргументы.Добавить(Значения);
    Ключ = Новый(Тип("РегистрСведенийКлючЗаписи.УчебныеМеткиРегистраторов85"), Аргументы);
    Если ТипЗнч(Ключ) <> Тип("РегистрСведенийКлючЗаписи.УчебныеМеткиРегистраторов85") Или Ключ.Пустой()
        Или Ключ.Регистратор <> Источник.Регистратор Или Ключ.Период <> Источник.Период
        Или Ключ.Маркер85 <> Источник.Маркер85 Или Ключ.Код85 <> Источник.Код85 Тогда
        ВызватьИсключение "Native functional ctor не подтвердил полный настоящий ключ own source";
    КонецЕсли;
    Возврат Ключ;
КонецФункции

Функция ПостроитьСводку85(Паспорт) Экспорт
    ПроверитьИсточникНеизменным85(Паспорт);
    Макет = РегистрыСведений.УчебныеМеткиРегистраторов85.ПолучитьМакет("Сводка85");
    Если ТипЗнч(Макет) <> Тип("ТабличныйДокумент") Или Макет.ВысотаТаблицы <> 3 Или Макет.ШиринаТаблицы <> 2 Тогда
        ВызватьИсключение "Нужен свой native compiled макет3x2";
    КонецЕсли;
    Метки = СтрРазделить("Все проверенные строки БД,Активные строки БД,Точный код A", ",");
    Параметры = СтрРазделить("Всего85,Активные85,Точный85", ",");
    Для Номер = 1 По 3 Цикл
        Метка = Макет.Область(Номер, 1, Номер, 1);
        Ячейка = Макет.Область(Номер, 2, Номер, 2);
        Если Метка.Заполнение <> ТипЗаполненияОбластиТабличногоДокумента.Текст Или Метка.Текст <> Метки[Номер - 1] Или Не Метка.Защита
            Или Ячейка.Заполнение <> ТипЗаполненияОбластиТабличногоДокумента.Параметр Или Ячейка.Параметр <> Параметры[Номер - 1]
            Или Не Ячейка.Защита Или Не Ячейка.СодержитЗначение Или Ячейка.ТипЗначения.Типы().Количество() <> 1
            Или Не Ячейка.ТипЗначения.СодержитТип(Тип("Число")) Или ТипЗнч(Ячейка.Значение) <> Тип("Число") Или Ячейка.Значение <> 0 Тогда
            ВызватьИсключение "Compiled numeric cells/labels/parameters не соответствуют полному own asset";
        КонецЕсли;
    КонецЦикла;
    Макет.Параметры.Всего85 = Паспорт.Всего;
    Макет.Параметры.Активные85 = Паспорт.Активные;
    Макет.Параметры.Точный85 = Паспорт.Строки[Паспорт.Индексы.A].Сумма85;
    Вывод = Новый ТабличныйДокумент;
    Вывод.Вывести(Макет);
    Вывод.ТолькоПросмотр = Истина;
    ПроверитьСводку85(Вывод);
    ПроверитьИсточникНеизменным85(Паспорт);
    Возврат Вывод;
КонецФункции

Процедура ПроверитьСводку85(Вывод) Экспорт
    Если ТипЗнч(Вывод) <> Тип("ТабличныйДокумент") Или Вывод.ВысотаТаблицы <> 3 Или Вывод.ШиринаТаблицы <> 2 Или Не Вывод.ТолькоПросмотр Тогда
        ВызватьИсключение "Actual candidate/output не3x2";
    КонецЕсли;
    Метки = СтрРазделить("Все проверенные строки БД,Активные строки БД,Точный код A", ",");
    Числа = Новый Массив;
    Числа.Добавить(75);
    Числа.Добавить(45);
    Числа.Добавить(20);
    Для Номер = 1 По 3 Цикл
        Ячейка = Вывод.Область(Номер, 2, Номер, 2);
        Если Вывод.Область(Номер, 1, Номер, 1).Текст <> Метки[Номер - 1] Или Не Вывод.Область(Номер, 1, Номер, 1).Защита
            Или Не Ячейка.Защита Или Не Ячейка.СодержитЗначение
            Или Ячейка.ТипЗначения.Типы().Количество() <> 1 Или Не Ячейка.ТипЗначения.СодержитТип(Тип("Число"))
            Или ТипЗнч(Ячейка.Значение) <> Тип("Число") Или Ячейка.Значение <> Числа[Номер - 1] Тогда
            ВызватьИсключение "Numeric actual output readback отказал; текст цифр не считается числом";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Функция СоздатьСвоюГлавнуюФорму85() Экспорт
    ПроверитьСвойСтенд85();
    СвойКлюч = Новый УникальныйИдентификатор;
    Форма = РегистрыСведений.УчебныеМеткиРегистраторов85.ПолучитьФорму("Проверка85",, СвойКлюч);
    Если Форма = Неопределено Или ТипЗнч(Форма) <> Тип("Форма") Или Форма.Открыта() Или Форма.КлючУникальности <> СвойКлюч Тогда
        ВызватьИсключение "Native own manager.GetForm не подтвердил closed form/fresh key";
    КонецЕсли;
    Форма.Инициализировать85(СвойКлюч);
    Возврат Форма;
КонецФункции

Процедура ОткрытьСвойСписок85(Владелец, Код, Паспорт) Экспорт
    ПроверитьИсточникНеизменным85(Паспорт);
    Если ТипЗнч(Владелец) <> Тип("Форма") Или Не Владелец.Открыта() Или Код <> "A" И Код <> "AA" Тогда
        ВызватьИсключение "Только actual own opened Hub и exact A/AA route";
    КонецЕсли;
    Владелец.ПроверитьСвязь85();
    СвойКлюч = Новый УникальныйИдентификатор;
    Форма = РегистрыСведений.УчебныеМеткиРегистраторов85.ПолучитьФормуСписка("Список85", Владелец, СвойКлюч);
    Если Форма = Неопределено Или ТипЗнч(Форма) <> Тип("Форма") Или Форма.Открыта()
        Или Форма.КлючУникальности <> СвойКлюч Или Форма.ВладелецФормы <> Владелец Тогда
        ВызватьИсключение "Actual GetListForm не подтвердил closed own form/key/owner";
    КонецЕсли;
    КлючСтроки = СоздатьНастоящийКлюч85(Паспорт, Код);
    Форма.ПараметрОтборПоИзмерению = Новый Структура("Маркер85,Код85", "7c504ed8-19d1-4f22-9f07-f29ff862a9eb", Код);
    Форма.ПараметрОтборПоРегистратору = Паспорт.А;
    Форма.ПараметрТекущаяСтрока = КлючСтроки;
    Если Форма.ПараметрОтборПоИзмерению.Маркер85 <> "7c504ed8-19d1-4f22-9f07-f29ff862a9eb"
        Или Форма.ПараметрОтборПоИзмерению.Код85 <> Код Или Форма.ПараметрОтборПоРегистратору <> Паспорт.А
        Или Форма.ПараметрТекущаяСтрока <> КлючСтроки Тогда
        ВызватьИсключение "Readback initial list parameters отказал до native Open";
    КонецЕсли;
    Форма.Инициализировать85(СвойКлюч, Код, КлючСтроки);
    Форма.Открыть();
    ПроверитьИсточникНеизменным85(Паспорт);
КонецПроцедуры

Процедура НастроитьСвойТабличныйНабор85(Поле, Набор, Паспорт) Экспорт
    ПроверитьИсточникНеизменным85(Паспорт);
    ПроверитьНаборА85(Набор, Паспорт);
    Если ТипЗнч(Поле) <> Тип("ТабличноеПоле") Или Поле.Имя <> "Строки85" Или Поле.Значение <> Набор Тогда
        ВызватьИсключение "Нужен actual own native TableBox из setform, не неизвестный объект";
    КонецЕсли;
    Поле.ТолькоПросмотр = Истина;
    Поле.ИзменятьСоставСтрок = Ложь;
    Поле.ИзменятьПорядокСтрок = Ложь;
    Поле.ОбновлятьПриИзмененииОтбора = Ложь;
    Настройка = Поле.НастройкаОтбораСтрок.Найти("Код85");
    ОтборКода = Поле.ОтборСтрок.Найти("Код85");
    КолонкаКода = Поле.Колонки.Найти("Код85");
    Если Настройка = Неопределено Или ОтборКода = Неопределено Или КолонкаКода = Неопределено Тогда
        ВызватьИсключение "Actual own TableBox должен дать фильтр/настройку/колонкуКод85";
    КонецЕсли;
    Если ТипЗнч(КолонкаКода) <> Тип("КолонкаТабличногоПоля") Или КолонкаКода.Имя <> "Код85" Или КолонкаКода.Данные <> "Код85" Тогда
        ВызватьИсключение "Actual native колонка должна отображать именно собственный Код85";
    КонецЕсли;
    Для Каждого НастройкаПоля Из Поле.НастройкаОтбораСтрок Цикл
        НастройкаПоля.Доступность = Ложь;
    КонецЦикла;
    ОтборКода.Установить("A");
    КолонкаКода.ОтображатьСтандартнуюКартинку = Истина;
    Если Не Поле.ТолькоПросмотр Или Поле.ИзменятьСоставСтрок Или Поле.ИзменятьПорядокСтрок Или Поле.ОбновлятьПриИзмененииОтбора
        Или Поле.НастройкаОтбораСтрок.Найти("Код85").Доступность Или Не Поле.ОтборСтрок.Код85.Использование
        Или Поле.ОтборСтрок.Код85.Значение <> "A" Или Не Поле.Колонки.Код85.ОтображатьСтандартнуюКартинку Тогда
        ВызватьИсключение "Fresh actual parent TableBox readback отказал";
    КонецЕсли;
    Для Каждого НастройкаПоля Из Поле.НастройкаОтбораСтрок Цикл
        Если НастройкаПоля.Доступность Тогда
            ВызватьИсключение "Fresh actual parent settings содержат доступный пользовательский отбор";
        КонецЕсли;
    КонецЦикла;
    ПроверитьНаборА85(Набор, Паспорт);
    ПроверитьИсточникНеизменным85(Паспорт);
КонецПроцедуры

#КонецЕсли
Полная ownordinary Hub форма

РегистрыСведений → УчебныеМеткиРегистраторов85 → Формы → Проверка85 → Модуль, целиком

Толстый обычный клиент; nativeBeforeOpen2/OnOpen0/actualButtonClick1, собственный native InfoList main attribute.

#Если ТолстыйКлиентОбычноеПриложение Тогда

Перем Паспорт85, Инициализирована85, Остановка85;

Процедура Инициализировать85(СвойКлюч) Экспорт
    ПросмотрРегистра85.ПроверитьСвойСтенд85();
    Если Инициализирована85 = Истина Или Открыта() Или КлючУникальности <> СвойКлюч
        Или ТипЗнч(СвойКлюч) <> Тип("УникальныйИдентификатор")
        Или ТипЗнч(Список85) <> Тип("РегистрСведенийСписок.УчебныеМеткиРегистраторов85") Тогда
        ВызватьИсключение "Однократная инициализация actual closed native own form/key/list";
    КонецЕсли;
    Паспорт85 = ПросмотрРегистра85.ПрочитатьПолныйИсточник85();
    Остановка85 = Ложь;
    Инициализирована85 = Истина;
КонецПроцедуры

Процедура ПроверитьСвязь85() Экспорт
    Если Инициализирована85 <> Истина Или Остановка85 = Истина
        Или ТипЗнч(Список85) <> Тип("РегистрСведенийСписок.УчебныеМеткиРегистраторов85") Тогда
        ВызватьИсключение "Actual Hub route/главный own native list не подтвержден";
    КонецЕсли;
    ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если Инициализирована85 <> Истина Или Остановка85 = Истина Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    Попытка
        Если Инициализирована85 <> Истина Или Остановка85 = Истина Тогда
            ВызватьИсключение "Hub не подготовлен native factory route";
        КонецЕсли;
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
        Кандидат = ПросмотрРегистра85.ПостроитьСводку85(Паспорт85);
        ПросмотрРегистра85.ПроверитьСводку85(Кандидат);
        Вывод85 = Кандидат;
        Если ЭлементыФормы.Вывод85.Значение <> Вывод85 Или Не ЭлементыФормы.Вывод85.ТолькоПросмотр Тогда
            ВызватьИсключение "Actual output binding/readonly не совпал; возможен partialUI";
        КонецЕсли;
        ПросмотрРегистра85.ПроверитьСводку85(ЭлементыФормы.Вывод85.Значение);
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
        Статус85 = "Числа actual output75/45/20 проверены чтением numeric cells. Это НЕ сумма всех видимых GUI строк. Откройте свой наборA и два точных списка.";
    Исключение
        Остановка85 = Истина;
        Статус85 = "СТОП: ошибка подготовки/источника/visible binding; не повторять. " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

Процедура ОткрытьНабор85(Кнопка)
    Если Кнопка <> ЭлементыФормы.ОткрытьНабор85 Или Кнопка.Имя <> "ОткрытьНабор85" Тогда
        ВызватьИсключение "Нужна actual собственная кнопка набора";
    КонецЕсли;
    Если Остановка85 = Истина Или Инициализирована85 <> Истина Тогда
        ВызватьИсключение "Hub остановлен";
    КонецЕсли;
    Попытка
        Набор = ПросмотрРегистра85.ПрочитатьНаборА85(Паспорт85);
        СвойКлюч = Новый УникальныйИдентификатор;
        Форма = Набор.ПолучитьФорму("Набор85", ЭтаФорма, СвойКлюч);
        Если Форма = Неопределено Или ТипЗнч(Форма) <> Тип("Форма") Или Форма.Открыта()
            Или Форма.КлючУникальности <> СвойКлюч Или Форма.ВладелецФормы <> ЭтаФорма Тогда
            ВызватьИсключение "Actual set.GetForm не подтвердил closed own form/key/owner";
        КонецЕсли;
        Форма.Инициализировать85(СвойКлюч, Набор);
        Форма.Открыть();
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
    Исключение
        Остановка85 = Истина;
        Статус85 = "СТОП: native набор/форма мог открыться частично; не повторять. " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

Процедура ОткрытьСписок85(Кнопка)
    Если Кнопка <> ЭлементыФормы.СписокA85 И Кнопка <> ЭлементыФормы.СписокAA85 Тогда
        ВызватьИсключение "Нужна одна из двух own actual кнопок списка";
    КонецЕсли;
    Если Остановка85 = Истина Или Инициализирована85 <> Истина Тогда
        ВызватьИсключение "Hub остановлен";
    КонецЕсли;
    Попытка
        Код = ?(Кнопка = ЭлементыФормы.СписокA85, "A", "AA");
        Если Кнопка.Имя <> ?(Код = "A", "СписокA85", "СписокAA85") Тогда
            ВызватьИсключение "Native имя actual кнопки не подтвердило выбранный own код";
        КонецЕсли;
        ПросмотрРегистра85.ОткрытьСвойСписок85(ЭтаФорма, Код, Паспорт85);
    Исключение
        Остановка85 = Истина;
        Статус85 = "СТОП: отказ list/key/initial parameters, partial form возможна; не повторять. " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

#КонецЕсли
Полная native ownreadonly list форма

РегистрыСведений → УчебныеМеткиРегистраторов85 → Формы → Список85 → Модуль, целиком

Толстый ordinary; nativeList extension, exact initialfilters/currentkey, callbackscontrol1/BeforeOpen2/OnOpen0.

#Если ТолстыйКлиентОбычноеПриложение Тогда

Перем Паспорт85, СвойКод85, СвойКлючСтроки85, Инициализирована85, Остановка85;

Процедура Инициализировать85(СвойКлюч, Код, КлючСтроки) Экспорт
    ПросмотрРегистра85.ПроверитьСвойСтенд85();
    Если Инициализирована85 = Истина Или Открыта() Или КлючУникальности <> СвойКлюч
        Или ТипЗнч(СвойКлюч) <> Тип("УникальныйИдентификатор") Или Код <> "A" И Код <> "AA"
        Или ТипЗнч(Список85) <> Тип("РегистрСведенийСписок.УчебныеМеткиРегистраторов85") Тогда
        ВызватьИсключение "Нужна closed own InfoRegisterList form и exact A/AA";
    КонецЕсли;
    Паспорт85 = ПросмотрРегистра85.ПрочитатьПолныйИсточник85();
    ПроверенныйКлюч = ПросмотрРегистра85.СоздатьНастоящийКлюч85(Паспорт85, Код);
    Если ТипЗнч(КлючСтроки) <> Тип("РегистрСведенийКлючЗаписи.УчебныеМеткиРегистраторов85") Или КлючСтроки <> ПроверенныйКлюч
        Или ПараметрТекущаяСтрока <> КлючСтроки Или ПараметрОтборПоРегистратору <> Паспорт85.А
        Или ТипЗнч(ПараметрОтборПоИзмерению) <> Тип("Структура") Или ПараметрОтборПоИзмерению.Количество() <> 2
        Или ПараметрОтборПоИзмерению.Маркер85 <> "7c504ed8-19d1-4f22-9f07-f29ff862a9eb" Или ПараметрОтборПоИзмерению.Код85 <> Код Тогда
        ВызватьИсключение "Native initial parameters не соответствуют freshly проверенному source key";
    КонецЕсли;
    СвойКод85 = Код;
    СвойКлючСтроки85 = КлючСтроки;
    ЭлементыФормы.Строки85.ТолькоПросмотр = Истина;
    ЭлементыФормы.Строки85.ИзменятьСоставСтрок = Ложь;
    Остановка85 = Ложь;
    Инициализирована85 = Истина;
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если Инициализирована85 <> Истина Или Остановка85 = Истина Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    Если Инициализирована85 <> Истина Или Остановка85 = Истина Тогда
        ВызватьИсключение "Список не подготовлен";
    КонецЕсли;
    Статус85 = "Initial native params установлены передOpen. Нажмите Проверить85 для actual CurrentRow/CurrentData; цифры не выводятся из Query без GUI readback.";
КонецПроцедуры

Процедура Строки85ПриАктивизацииСтроки(Элемент)
    Если Элемент <> ЭлементыФормы.Строки85 Или Элемент.Имя <> "Строки85" Тогда
        ВызватьИсключение "Native event не принадлежит собственному list control";
    КонецЕсли;
    Если Не Открыта() Тогда
        Возврат;
    КонецЕсли;
    ПроверитьТекущуюСтроку85();
КонецПроцедуры

Процедура Проверить85(Кнопка)
    Если Кнопка <> ЭлементыФормы.Проверить85 Или Кнопка.Имя <> "Проверить85" Тогда
        ВызватьИсключение "Нужна actual own list кнопка";
    КонецЕсли;
    ПроверитьТекущуюСтроку85();
КонецПроцедуры

Процедура ПроверитьТекущуюСтроку85()
    Если Остановка85 = Истина Или Инициализирована85 <> Истина Тогда
        ВызватьИсключение "List fail-stop";
    КонецЕсли;
    Попытка
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
        Поле = ЭлементыФормы.Строки85;
        Если Поле.Значение <> Список85 Или Не Поле.ТолькоПросмотр Или Поле.ИзменятьСоставСтрок Тогда
            ВызватьИсключение "Actual own list binding/readonly изменен";
        КонецЕсли;
        Ключ = Поле.ТекущаяСтрока;
        Данные = Поле.ТекущиеДанные;
        Если ТипЗнч(Ключ) <> Тип("РегистрСведенийКлючЗаписи.УчебныеМеткиРегистраторов85") Или Ключ <> СвойКлючСтроки85
            Или Ключ.Регистратор <> Паспорт85.А Или Ключ.Период <> Дата(2026, 10, 10, 9, 0, 0)
            Или Ключ.Маркер85 <> "7c504ed8-19d1-4f22-9f07-f29ff862a9eb" Или Ключ.Код85 <> СвойКод85 Или Данные = Неопределено Тогда
            ВызватьИсключение "Actual CurrentRow не позиционировался на настоящий свой ключ";
        КонецЕсли;
        ПросмотрРегистра85.ПроверитьСтроку85(Данные, Паспорт85.А, Паспорт85.Б);
        Если Данные.Код85 <> СвойКод85 Или Данные.Регистратор <> Ключ.Регистратор Или Данные.Период <> Ключ.Период
            Или Данные.Маркер85 <> Ключ.Маркер85 Или Не Данные.Активность Тогда
            ВызватьИсключение "Actual GUI CurrentData не подтвердил expected own key/source";
        КонецЕсли;
        Для Каждого Имя Из СтрРазделить("Маркер85,Код85,Регистратор", ",") Цикл
            ЭлементОтбора = Список85.Отбор.Найти(Имя);
            Если ЭлементОтбора = Неопределено Или Не ЭлементОтбора.Использование
                Или ЭлементОтбора.ВидСравнения <> ВидСравнения.Равно Или ЭлементОтбора.Значение <> Данные[Имя] Тогда
                ВызватьИсключение "Actual list отбор не exact equals own displayed source";
            КонецЕсли;
        КонецЦикла;
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
        Статус85 = "Actual own GUI key/data: " + СвойКод85 + "/" + Формат(Данные.Сумма85, "ЧГ=0;ЧДЦ=0") + ". Expected одна строка; осмотрите GUI вручную. WholeDB3/75/45 unchanged.";
    Исключение
        Остановка85 = Истина;
        Статус85 = "СТОП: list/currentrow/отбор не подтверждены; не повторять. " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

#КонецЕсли
Полная native ownreadonly set форма

РегистрыСведений → УчебныеМеткиРегистраторов85 → Формы → Набор85 → Модуль, целиком

Толстый ordinary; sameactualSet/GetForm, TableBox/Column extensions, BeforeWriteForm1/BeforeOpen2/OnOpen0/control1.

#Если ТолстыйКлиентОбычноеПриложение Тогда

Перем Паспорт85, Инициализирована85, Остановка85, Виденные85;

Процедура Инициализировать85(СвойКлюч, СвойНабор) Экспорт
    ПросмотрРегистра85.ПроверитьСвойСтенд85();
    Если Инициализирована85 = Истина Или Открыта() Или КлючУникальности <> СвойКлюч Или ТипЗнч(СвойКлюч) <> Тип("УникальныйИдентификатор")
        Или ТипЗнч(Набор85) <> Тип("РегистрСведенийНаборЗаписей.УчебныеМеткиРегистраторов85") Или Набор85 <> СвойНабор Тогда
        ВызватьИсключение "Нужны closed own setform/key/sameactualset";
    КонецЕсли;
    Паспорт85 = ПросмотрРегистра85.ПрочитатьПолныйИсточник85();
    ПросмотрРегистра85.ПроверитьНаборА85(Набор85, Паспорт85);
    Поле = ЭлементыФормы.Строки85;
    Если Поле.Значение <> Набор85 Тогда
        ВызватьИсключение "Native TableBox не связан с actual own main recordset";
    КонецЕсли;
    ПросмотрРегистра85.НастроитьСвойТабличныйНабор85(Поле, Набор85, Паспорт85);
    Виденные85 = Новый Соответствие;
    Остановка85 = Ложь;
    Инициализирована85 = Истина;
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Если Инициализирована85 <> Истина Или Остановка85 = Истина Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Процедура ПриОткрытии()
    Если Инициализирована85 <> Истина Или Остановка85 = Истина Тогда
        ВызватьИсключение "Набор не подготовлен";
    КонецЕсли;
    Статус85 = "RowFilter native substring A: будущий GUI должен показатьA иAA, не толькоA. Нажмите на обе строки; Проверить85 читает actual текущую строку без ручного вызова события.";
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
    Отказ = Истина;
КонецПроцедуры

Процедура Строки85ПриАктивизацииСтроки(Элемент)
    Если Элемент <> ЭлементыФормы.Строки85 Или Элемент.Имя <> "Строки85" Тогда
        ВызватьИсключение "Native event не принадлежит own set control";
    КонецЕсли;
    Если Не Открыта() Тогда
        Возврат;
    КонецЕсли;
    ПроверитьТекущуюСтроку85();
КонецПроцедуры

Процедура Проверить85(Кнопка)
    Если Кнопка <> ЭлементыФормы.Проверить85 Или Кнопка.Имя <> "Проверить85" Тогда
        ВызватьИсключение "Нужна actual own set кнопка";
    КонецЕсли;
    ПроверитьТекущуюСтроку85();
КонецПроцедуры

Процедура ПроверитьТекущуюСтроку85()
    Если Остановка85 = Истина Или Инициализирована85 <> Истина Тогда
        ВызватьИсключение "Set form fail-stop";
    КонецЕсли;
    Попытка
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
        ПросмотрРегистра85.ПроверитьНаборА85(Набор85, Паспорт85);
        Поле = ЭлементыФормы.Строки85;
        Если Поле.Значение <> Набор85 Или Не Поле.ТолькоПросмотр Или Поле.ИзменятьСоставСтрок Или Поле.ИзменятьПорядокСтрок
            Или Поле.ОбновлятьПриИзмененииОтбора Или Поле.НастройкаОтбораСтрок.Найти("Код85").Доступность
            Или Не Поле.ОтборСтрок.Код85.Использование Или Поле.ОтборСтрок.Код85.Значение <> "A"
            Или Не Поле.Колонки.Код85.ОтображатьСтандартнуюКартинку Тогда
            ВызватьИсключение "Actual parent table security/filter/readback изменен";
        КонецЕсли;
        Запись = Поле.ТекущаяСтрока;
        Данные = Поле.ТекущиеДанные;
        Если ТипЗнч(Запись) <> Тип("РегистрСведенийЗапись.УчебныеМеткиРегистраторов85") Или Данные <> Запись Или Набор85.Индекс(Запись) < 0 Тогда
            ВызватьИсключение "Actual GUI Record не принадлежит этому native recordset";
        КонецЕсли;
        ПросмотрРегистра85.ПроверитьСтроку85(Данные, Паспорт85.А, Паспорт85.Б);
        Если Данные.Регистратор <> Паспорт85.А Или Не Данные.Активность Или Данные.Код85 <> "A" И Данные.Код85 <> "AA" Тогда
            ВызватьИсключение "Actual GUI не подтвердил ownA substring-filtered Record";
        КонецЕсли;
        Виденные85.Вставить(Данные.Код85, Данные.Сумма85);
        ПросмотрРегистра85.ПроверитьИсточникНеизменным85(Паспорт85);
        Если Виденные85.Количество() = 2 И Виденные85.Получить("A") = 20 И Виденные85.Получить("AA") = 25 Тогда
            Статус85 = "Две разные actual GUI строкиA20/AA25 проверены; сумма45, native set2 и wholeDB3/75/45 unchanged. Иконку и отсутствие других строк осмотрите вручную.";
        Иначе
            Статус85 = "Проверена actual GUI строка " + Данные.Код85 + "/" + Формат(Данные.Сумма85, "ЧГ=0;ЧДЦ=0") + "; выберите вторую own строку. Внешний вид не проверен статическими тестами.";
        КонецЕсли;
    Исключение
        Остановка85 = Истина;
        Статус85 = "СТОП: actual set/GUI/filter/source не подтвержден; не повторять. " + ОписаниеОшибки();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

#КонецЕсли
Полный native write-refusal собственного регистра

РегистрыСведений → УчебныеМеткиРегистраторов85 → Модуль набора записей, целиком ПОСЛЕ fixture

NativeBeforeWrite2 сервер/толстый/external. Без UI/client-only commoncallee, толькоОтказTrue.

Процедура ПередЗаписью(Отказ, Замещение)
    Отказ = Истина;
КонецПроцедуры
Полный startup через realown factory

Конфигурация → Модуль обычного приложения, целиком ПОСЛЕ fixture

NativeOnStart0/ordinarythick; ownManager.GetForm3 guardedclosed/key beforeinitializer/Open.

Процедура ПриНачалеРаботыСистемы()
#Если ТолстыйКлиентОбычноеПриложение Тогда
    Форма = ПросмотрРегистра85.СоздатьСвоюГлавнуюФорму85();
    Форма.Открыть();
#Иначе
    ВызватьИсключение "Урок только для собственного толстого обычного клиента";
#КонецЕсли
КонецПроцедуры
Полная спецификация всех шести compiled ячеек

РегистрыСведений → УчебныеМеткиРегистраторов85 → Макеты → Сводка85 → штатный табличный редактор

Собственный compiled3x2, exactprotected text+numeric cells. JSON — visiblecopyable specification, не поддерживаемый import формат1С.

[
  {
    "row": 1,
    "column": 1,
    "text": "Все проверенные строки БД",
    "fill": "Текст",
    "protected": true
  },
  {
    "row": 2,
    "column": 1,
    "text": "Активные строки БД",
    "fill": "Текст",
    "protected": true
  },
  {
    "row": 3,
    "column": 1,
    "text": "Точный код A",
    "fill": "Текст",
    "protected": true
  },
  {
    "row": 1,
    "column": 2,
    "fill": "Параметр",
    "parameter": "Всего85",
    "containsValue": true,
    "valueType": "Число(12,0)",
    "value": 0,
    "format": "ЧГ=0;ЧДЦ=0",
    "protected": true
  },
  {
    "row": 2,
    "column": 2,
    "fill": "Параметр",
    "parameter": "Активные85",
    "containsValue": true,
    "valueType": "Число(12,0)",
    "value": 0,
    "format": "ЧГ=0;ЧДЦ=0",
    "protected": true
  },
  {
    "row": 3,
    "column": 2,
    "fill": "Параметр",
    "parameter": "Точный85",
    "containsValue": true,
    "valueType": "Число(12,0)",
    "value": 0,
    "format": "ЧГ=0;ЧДЦ=0",
    "protected": true
  }
]

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

  1. ExactFile/version/currentUser/fullmetadata guards до каждого полного source чтения.

  2. БезГДЕ: own2doc actualreferences/fullGetObject и own3register rows/full7scalars, duplicate/alteration refusal; native totals75/45.

  3. Actual SelectByRecorderA и native emptySet→recorder-onlyfilter→Read подтверждают2active actual records45; настоящие MomentTime/ownreference/period сравниваются.

  4. Actual compiled layout3x2→native Fill parameters→Put→protected numeric cells75/45/20 readback, repeat-wholeDB unchanged ДО visible binding.

  5. Own Set.GetForm/freshkey и realTableBox extension: readonly/security/settings/substring-filterA/defaultpicture, actual two different native GUI records.

  6. Own Manager.GetListForm/freshkey: initial exactDimensions/Recorder/currentkey из functionalCtor, thenactualOpen, callback/buttonsharedhelper читает realkey/CurrentData/filter.

  7. Ошибки блокируют повторные действия; Close/Cancel/неизвестный объект/неправильный fixture не создают скрытых DBwrites.

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

  1. Будущий manual source raw75/active45, activeownA selection/set45, numericcompiledoutput75/45/20.

  2. FutureGUI set substringA покажетA20+AA25; list exactA/AA покажет одну20/25. Проверяется actual key/currentdata отдельно, не угадывается из source count.

  3. Static tests сверяют installed raw contracts, все wholemodules/canonical, arity/context/readonly/unknown members/callback/scopedmutants и независимую арифметику; runtime0.

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

Ожидаемый ручной результат: own source3rows75/45 без изменений, numericoutput75/45/20 и независимо прочитанные GUI ownA20/AA25. Здесь только authored source/static tests; actual1С/CFcompile/DB/GUI/files/network0.

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

  1. ExactFile path/fixture marker — границы этого урока, не универсальное доказательство владенияИБ или UUID самойИБ.

  2. Visibility inactive нельзя вывести из похожих API; B не открывается selection/set/GUI. Если whole query не вернул3exactrows, отказ, не пропускB.

  3. RecordManager native type говорит ТолькоНезависимый: его новые recorder properties не используются в подчинённом регистре и не покрываются через догадку.

  4. RowFilter2573 явно substring, initial List filter params применяются приOpen; это разные контракты, не два имени SQL-отбора.

  5. Полные source snapshots не атомарны и не доказывают отсутствие чужого конкурентного изменения; нужен один own сеанс, altered readback failstop.

  6. Присваивание visible form не атомарно; ошибка после setter может оставить partialUI, его нельзя скрыто восстанавливать. Native rendering и все ручные шаги ещё не выполнены.

  7. TabDoc readonly без Protected cells недостаточен; numericValue проверяется отдельно от formattedText. JSON asset требует ручного compiled переноса, это не fake native constructor.

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

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

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

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

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