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

Свойства · ChangeRowOrder

Тип: Булево. Определяет возможность перемещения строк набора записей. Истина - менять разрешено.

Полное описание, параметры и ограничения

Расширение табличного поля набора записей регистра сведений.ИзменятьПорядокСтрок (Information register recordset table box extension.ChangeRowOrder)

Расширение табличного поля набора записей регистра сведений (Information register recordset table box extension)

ИзменятьПорядокСтрок (ChangeRowOrder)

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

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Определяет возможность перемещения строк набора записей.
Истина - менять разрешено.
Доступность:

Толстый клиент.

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

Доступен, начиная с версии 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С» и не аффилирован с ней.