Предназначен для управления регистрами сведений и предоставляет доступ к значениям типа РегистрСведенийМенеджер.<Имя регистра сведений>. Доступ к объекту осуществляется через свойство глобального контекста РегистрыСведений.
Примеры платформы
Форма = РегистрыСведений.КурсыВалют.ПолучитьФормуСписка();
Форма.Открыть();Полное описание, параметры и ограничения
РегистрыСведенийМенеджер (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, программа не пишетБД.
Подготовка
Создайте вручную НОВУЮ собственную 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/файлы данных не создавались и не запускались.
Новая пустая CF УчебныйПросмотрРегистра85: обычное приложение/обычные формы, совместимостьНеИспользовать. Один документ, один регистр сведений, один общий модуль, три формы регистра и один макет. Никаких обработок/отчётов/общих форм/каталогов/производственных регистров/подписок/заданий/разделителей/расширений/источников. Остальные модули пустые. Один сеанс, никакой совместной работы.
Вручную создайте единственного собственного пользователя ПросмотрРег85Ученик с одной полной ролью только этой новойИБ, включая именно право Администрирование: nativeGetUsers1983 требует административные права, не только произвольное чтение. Всё только в этой собственной новойИБ. CurrentUser сопоставляется с actual Users[0] по native UUID; UUID пользователя не выводится. Сначала подготовьте fixture, только затем вставляйте startup/application и запреты записи ниже.
Документ УчебныйРегистраторМетки85: реквизиты Маркер85 Строка36 и Код85 Строка1; табличных частей нет. НомерСтрока12, автонумерацияНет, контрольуникальностиДа. ПроведениеЗапретить. В Движения включите только собственный регистр ниже; документы будут вручную сохранены, но не проведены. Модуль объекта/менеджера документа пустой. Запрет проведения не превращает manual register records в проведенные документы; source проверяет ПроведенFalse.
Регистр сведений УчебныеМеткиРегистраторов85: РежимЗаписиПодчинениеРегистратору, ПериодичностьПоПозицииРегистратора. Единственный разрешённый регистратор — УчебныйРегистраторМетки85 через его Движения. Измерения Маркер85 Строка36 и Код85 Строка8; ресурс Сумма85 Число12,0; дополнительных реквизитов нет. Не создавайте независимый регистр и не заменяйте периодичностьСекунда. Registrar-key native1511 имеет смысл именно для этих двух настроек.
В регистре создайте3 обычные формы: Проверка85 и Список85 с главным реквизитом Список85 типа РегистрСведенийСписок.УчебныеМеткиРегистраторов85; Набор85 с главным реквизитом Набор85 типа РегистрСведенийНаборЗаписей.УчебныеМеткиРегистраторов85. ОсновнаяФормаСписка=Список85. Набор85 назначьте основной формой набора при её создании генератором. Не делайте managed формы/ТаблицаЗначений вместо native главных реквизитов.
На этапе ручной подготовки оставьте 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.
В своём 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/автоочистки.
После проверки собственных2doc/3register rows вернитесь в Конфигуратор. ОбщийМодуль ПросмотрРегистра85: ГлобальныйНет, КлиентОбычноеПриложениеДа, КлиентУправляемоеПриложениеНет, СерверНет, ВнешнееСоединениеНет; CODE полностью в его модуль. В File ordinary вариант символТолстыйКлиентОбычноеПриложение может быть определён для обеих частей File-приложения; это не универсальный запрет Server, поэтому общий модуль здесь именно client-only metadata.
HUB_FORM целиком в регистр→Формы→Проверка85→Модуль. Добавьте отдельные реквизиты Вывод85 ТабличныйДокумент и Статус85 Строка2000. ПолеТабличногоДокумента Вывод85 связано с Вывод85, ТолькоПросмотрИстина. Список85 главный реквизит не заменяйте. Кнопки ОткрытьНабор85, СписокA85, СписокAA85; Нажатие первой→ОткрытьНабор85(Кнопка), обеих других→ОткрытьСписок85(Кнопка). ПриОткрытии() и ПередОткрытием(Отказ,СтандартнаяОбработка) у формы привязаны к одноименным native событиям.
LIST_MODULE целиком в Список85→Модуль. Главный Список85 native InfoRegisterList; ТабличноеПоле Строки85 Данные=Список85. Создайте видимые семь колонок, имена/Данные точноПериод,Регистратор,НомерСтроки,Активность,Маркер85,Код85,Сумма85; значение списка должно выбирать эти семь native columns. Полеreadonly Статус85 Строка2000. Кнопка Проверить85 Нажатие→Проверить85(Кнопка). ТабличноеПоле ПриАктивизацииСтроки→Строки85ПриАктивизацииСтроки(Элемент), ровно1actualcontrolformal. Свяжите formПередОткрытием2/ПриОткрытии0. Уберите стандартные команды создания/изменения/удаления, контекстные пункты записи и пользовательскую настройку отбора.
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. Удалите все стандартные команды записи/редактирования.
RECORDSET_MODULE полностью в регистр→МодульНабораЗаписей ТОЛЬКО ПОСЛЕ ручного fixture. NativeПередЗаписью(Отказ,Замещение)2 всегда ОтказИстина, без client-only helper и без UI; в остальных server/external контекстах тоже не вызывает UI. Он не пишет данных и не запускается кодом вручную. FormПередЗаписью1 — другое native событие, не подменяйте им module callback2.
Макеты регистра→Добавить→ТабличныйДокумент→Сводка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 для маскировки ошибки подготовки.
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 — не события.
Вручную проверьте/обновите только свою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.
ОткрытьНабор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.
Список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; отсутствие/лишние строки и внешний вид осмотрите вручную.
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
}
]Разбор по шагам
ExactFile/version/currentUser/fullmetadata guards до каждого полного source чтения.
БезГДЕ: own2doc actualreferences/fullGetObject и own3register rows/full7scalars, duplicate/alteration refusal; native totals75/45.
Actual SelectByRecorderA и native emptySet→recorder-onlyfilter→Read подтверждают2active actual records45; настоящие MomentTime/ownreference/period сравниваются.
Actual compiled layout3x2→native Fill parameters→Put→protected numeric cells75/45/20 readback, repeat-wholeDB unchanged ДО visible binding.
Own Set.GetForm/freshkey и realTableBox extension: readonly/security/settings/substring-filterA/defaultpicture, actual two different native GUI records.
Own Manager.GetListForm/freshkey: initial exactDimensions/Recorder/currentkey из functionalCtor, thenactualOpen, callback/buttonsharedhelper читает realkey/CurrentData/filter.
Ошибки блокируют повторные действия; Close/Cancel/неизвестный объект/неправильный fixture не создают скрытых DBwrites.
Как проверить результат
Будущий manual source raw75/active45, activeownA selection/set45, numericcompiledoutput75/45/20.
FutureGUI set substringA покажетA20+AA25; list exactA/AA покажет одну20/25. Проверяется actual key/currentdata отдельно, не угадывается из source count.
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.
На что обратить внимание
ExactFile path/fixture marker — границы этого урока, не универсальное доказательство владенияИБ или UUID самойИБ.
Visibility inactive нельзя вывести из похожих API; B не открывается selection/set/GUI. Если whole query не вернул3exactrows, отказ, не пропускB.
RecordManager native type говорит ТолькоНезависимый: его новые recorder properties не используются в подчинённом регистре и не покрываются через догадку.
RowFilter2573 явно substring, initial List filter params применяются приOpen; это разные контракты, не два имени SQL-отбора.
Полные source snapshots не атомарны и не доказывают отсутствие чужого конкурентного изменения; нужен один own сеанс, altered readback failstop.
Присваивание visible form не атомарно; ошибка после setter может оставить partialUI, его нельзя скрыто восстанавливать. Native rendering и все ручные шаги ещё не выполнены.
TabDoc readonly без Protected cells недостаточен; numericValue проверяется отдельно от formattedText. JSON asset требует ручного compiled переноса, это не fake native constructor.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.