Тип: Порядок. Объект для управления порядком.
Полное описание, параметры и ограничения
РегистрБухгалтерииСписок.<Имя регистра бухгалтерии>.Порядок (AccountingRegisterList.<Accounting register name>.Order)
РегистрБухгалтерииСписок.<Имя регистра бухгалтерии> (AccountingRegisterList.<Accounting register name>)
Порядок (Order)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: Порядок.
Объект для управления порядком.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Свой бухгалтерский список: период, реальные проводки и обновление
Подготовить собственные3проводки, связать actual ordinary список/поле, подтвердить каждый день настоящими rowevents, изменить только свою третью250→500→250 и сравнить GUI/wholeDB/остатки.
Где и как запускать
Windows8.5.1.1343, толстый обычный клиент/обычныеформы. MAIN — полный собственный ordinary ПультБухСписка85; supporting COMMON сервер иLIST_FORM actual AccountingList/ordinaryTableBox. Только authoredsource/static, runtime0.
Подготовка
Только будущая ручная подготовка своей новой Windows VM/файловойИБ: C:\1c-labs\OwnAccountingList85_50fb8d9a-7a2d-4b72-bdb2-16b8b5cabd8a\IB. Новая CF УчебныйБухгалтерскийСписок85, платформа8.5.1.1343, обычное приложение/обычные формы, совместимостьНеИспользовать, управляемые блокировки. В этом выполнении actual VM/ИБ/1С/UI/DB/files/network0; файлы урока являются authoredsource, не готовойCF.
Один собственный пользователь БухСписок85Ученик, одна учебная роль с полными правами только НОВОЙИБ и Администрирование для nativeUsers; один сеанс. Остальные прикладные объекты/разделители/подписки/задания/источники/расширения отсутствуют. Модули объектов/наборов/сеанса пусты; никаких обработчиков запуска стороннего кода/проведения/cleanup.
UUID50fb8d9a-7a2d-4b72-bdb2-16b8b5cabd8a — только marker File-пути, не native UUID ИБ. COMMON получает настоящий UUID единственного пользователя nativeCurrentUser/Users[0]; реальный UUID самой ИБ не измеряется. UUIDОпыта создается nativeNew, UUIDДокумента получают лишь после nativeWrite реального своего документа; placeholders/переданного неизвестного объекта нет.
Схема данных переиспользует ЧИСЛОВУЮ модель опубликованного ownAccountingTotals, но подготовьте отдельную новуюCF/ИБ, не запускайте старые12административных шагов и не меняйте старый исходник. ПланСчетов УчебныеСчетаИтогов85: КодСтрока20, без реквизитов/учетных признаков/субконто, МаксКоличествоСубконто0. Только3предопределенных балансовых счета без родителей: УчебнаяКасса кодOWN-CASH активный, УчебныеЗапасы кодOWN-STOCK активный, УчебныйКапитал кодOWN-CAPITAL пассивный.
Документ УчебныйПакетИтогов85: номерСтрока40/автонумерацияНет, ПроведениеЗапретить, реквизит UUIDОпыта85 только УникальныйИдентификатор; безтабчастей/своихформ/макетов, объектный модуль пустой. Он только registrar одной собственной группы, не изображает проводимый бизнес-документ.
РегистрБухгалтерии УчебныеБухИтоги85: ПланСчетов=свой УчебныеСчетаИтогов85, КорреспонденцияДа, ДлинаУточненияПериода3, единственный регистратор свой документ. Одно измерение UUIDОпыта85 nativeGuid/балансовое/Индексировать, один ресурс СуммаЧисло15,2/балансовый;0реквизитов/учетныхпризнаков. ИспользованиеИтогов заранее вручную подготовьте включенным только в своем стенде. Все3проводки имеют АктивностьTrue.
ОбщиеМодули Уч85БухСписокСервер: СерверДа/ВызовСервераДа; КлиентОбычное/КлиентУправляемое/Глобальный/Привилегированный/ВнешнееСоединениеНет, повторное использованиеНеИспользовать. Вставьте COMMON целиком. Это полный модуль данных/guards/подготовки/readback/двухявных замен, а не ссылка на отсутствующий серверный helper.
В РегистрБухгалтерии.УчебныеБухИтоги85 → Формы мастером создайте ОБЫЧНУЮ ФормаСписка85 и назначьте ОСНОВНОЙ формой списка. Ровноодна форма регистра. Основной реквизит Список:РегистрБухгалтерииСписок.УчебныеБухИтоги85, который реально инициализирует платформа. Нельзя подменить общей формой с переменной похожего имени или managed ДинамическимСписком.
В ФормаСписка85 один настоящий ТабличноеПоле.Список, Данные=Список, ТолькоПросмотрИстина. В Конфигураторе удалите ВСЕ его GUI-колонки, получив подготовленный knownGUI0; код не очищает неизвестный layout. Source source7 после Columns.Set: Период,Регистратор,НомерСтроки,СчетДт,СчетКт,UUIDОпыта85,Сумма; отдельные4GUIколонки Период/СчетДт/СчетКт/Сумма создаются и связываются через GUIColumn.Данные.
В модуль ФормаСписка85 вставьте LIST_FORM. Назначьте форме ПередОткрытием(Отказ,СтандартнаяОбработка)2, а полю.Список nativeПриАктивизацииСтроки → СписокПриАктивизацииСтроки85(Элемент)1: native base0 плюс первый параметр ordinary extension104. Обработчики не вызываются вручную; ПодготовитьСвоеОкно85/ПринятьСвоеNativeВыделение85 — явно собственные Export helpers, не native callbacks.
ОбщиеФормы → ПультБухСписка85 — ОБЫЧНАЯ форма. Реквизиты: Согласие85Булево, Статус85Строка2000(многострочное полеТолькоПросмотр). Создайте7обычных кнопок Подготовить85/ДеньПервый85/ДеньВторой85/ВсеДни85/ИзменитьТретью85/Обновить85/Завершить85 и каждому nativeНажатие назначьте одноименную процедуру(Элемент)1; baseButton.Нажатие0+ordinary104firstElement. Назначьте форме ПередОткрытием2. CODE целиком в модуль формы; runtimevariables Перем остаются только в этом экземпляре.
В МодульОбычногоПриложения вставьте APPLICATION с nativeПриНачалеРаботыСистемы0. Сохраните/проверьтеCF/обновите только свою новуюИБ вручную и запустите толстый обычный Windows клиент8.5.1.1343. Startup открывает именно свою общую форму; урок не угадывает меню рабочих конфигураций.
Отметьте Согласие85: оно относится только к своим3проводкам идвумявным заменам. Подготовить85 работает единожды после wholeDoc0/Reg0/Accounts3 и повторной пустоты внутри своей транзакции. Послеcommit отказ последующегоreadback НЕ означает отмену уже сохраненных данных; пульт sticky останавливается, retry/overwrite/delete/cleanup отсутствуют.
Native AccountingManager.GetListForm1183 имеет0параметров, возвращает Форма либоНеопределено и доступен толстомуклиенту. Он НЕ принимает владельца/ключUUID и НЕ гарантирует свежий уникальный экземпляр. Перед использованием проверяются closed/one-shot иactual source-type/Data/Value/control identity подготовленной собственной default формы.
В native AccountingList описание поля.НастройкаПериода — ordinary НастройкаПериода, а не managed СтандартныйПериод. НовыйPeriod0 задается всему своему октябрю до Open; getterdates проверяются. SourceFilter.Период использует native ВидСравнения.Интервал, исключающий ОБЕграницы: day1(01.10 00:00,02.10 00:00), day2(02.10 00:00,03.10 00:00), all(01.10,01.11). Свои09/10/15 часов строго внутри; полуночную строку нельзя считать включенной.
По очереди вручную выберите все3actual строки, затем ДеньПервый85→одна1000, ДеньВторой85→две750+250=1000, ВсеДни85→три2000. Перед следующим шагом нужны все РАЗНЫЕ native rowevents этого периода. WholeDB всегда остается3/2000; source list не имеет CountRows и SQL-count не считается фактом отображения.
Первое ИзменитьТретью85 разрешено только после этих3профилей/all3delivery. COMMON сверяет ВСЮ БД/UUID/realuser/счета/даты/суммы/refs до transaction ивнутри нее, native set.Read поСВОЕМУрегистратору ивсе3строки перед третьимsetter. Меняется только третья250→500; raw3/2250, кассаДт750/запасыДт250/капиталКт1000. Auto=False; source.Refresh0 вызван явно, все3GUIrowdata подтверждаются заново.
Второе ИзменитьТретью85 после all3delivery меняет собственный профиль AutoTrue/period10/разрешитьпериодTrue сreadback, затем только третью500→250. raw3/2000 иостатки500/500/Кт1000. Wait/GUIпроверка здесь только будущая ручная. AutoFalse не обещает staleUI: возможны другие notifications; AutoTrue/readback10 НЕ доказывает срок или происхождение обновления. При необходимости используйте explicit Обновить85, затем заново выберите все3строки.
РазрешитьНастройкуПериодаTrue позволяет native Установитьинтервалдат даже при недоступном интерактивномотбореПериод. Если изучаете этот диалог, отменяйте его без изменения ownпрофиля; изменение условий обнаруживается, не восстанавливается вслепую. НастройкаОтбора/Порядка только readonly factory properties, элементы.Доступность RW; эта UIpolicy не является правами доступа/security boundary.
Свое ВосстанавливатьТекущуюСтрокуFalse задается доOpen. Не обещаем первый выбранныйkey/детерминированныйcache или восстановление позиции. NativeAccountingRecordKey действует лишь пока запись существует иНЕперезаписывалась: между двумя set.Write ключи не хранятся и не переиспользуются, события снова читают свежиеCurrentRow/CurrentData.
Завершить85 после обеих замен/all3delivery ещё раз сверяет свой профиль/wholeDB и выключает auto/разрешениепериода сactualreadback. Это изменение knownownprofile, НЕrestore неизвестных исходных пользовательских настроек. При любой RPC/частичнойUIошибке client stickyTrue, без слепого rollback/retry/очистки; закрытие/reopen не снимает sticky.
Nativepage самого AccountingListTableBoxExtension содержит copy/paste текст про регистрнакопления иaccumulation пример. В этом уроке owner/path/header/nativeCurrentRowAccountingKey иреальный основнойAccountingList определены явно; неверный accumulation пример не принят за источник. NewRowShowCheck4305 сознательно НЕпокрыт: readonly viewer не делает ввода новой строки.
Перем Состояние85;
Перем СвояФорма85;
Перем СвойСписок85;
Перем СвоеПоле85;
Перем Начат85;
Перем Остановка85;
Перем Переход85;
Перем Шаг85;
Перем День85;
Перем Профиль85;
Перем Доставленные85;
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
#Если ТолстыйКлиентОбычноеПриложение Тогда
Если ТипЗнч(Отказ) <> Тип("Булево") Или ТипЗнч(СтандартнаяОбработка) <> Тип("Булево") Тогда
ВызватьИсключение "Нужны native formBeforeOpen2 параметры";
КонецЕсли;
Если Начат85 = Неопределено Тогда
Начат85 = Ложь;
Остановка85 = Ложь;
Переход85 = Ложь;
Шаг85 = 0;
Согласие85 = Ложь;
Статус85 = "Своя одноразоваяИБ. Разрешите3проводки идвеявные замены250→500→250.";
ИначеЕсли Остановка85 Тогда
Отказ = Истина;
КонецЕсли;
#Иначе
Отказ = Истина;
#КонецЕсли
КонецПроцедуры
Процедура Подготовить85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "Подготовить85");
Если Остановка85 Или Начат85 Или Не Согласие85 Тогда
ВызватьИсключение "Нужно явное согласие; после начатого/частичного запуска повтор запрещен";
КонецЕсли;
Начат85 = Истина;
Остановка85 = Истина;
Переход85 = Истина;
Попытка
Состояние85 = Уч85БухСписокСервер.ПодготовитьСвойБухСписок85(Согласие85);
СвояФорма85 = РегистрыБухгалтерии.УчебныеБухИтоги85.ПолучитьФормуСписка();
Если СвояФорма85 = Неопределено Или ТипЗнч(СвояФорма85) <> Тип("Форма") Или СвояФорма85.Открыта() Тогда
ВызватьИсключение "Нужна подготовленная собственная закрытая ordinary default list form; фабрика0 не гарантирует freshUUID instance";
КонецЕсли;
СвойСписок85 = СвояФорма85.Список;
СвоеПоле85 = СвояФорма85.ЭлементыФормы.Список;
ПроверитьСвязь85();
СвояФорма85.ПодготовитьСвоеОкно85(ЭтаФорма);
Если СвоеПоле85.Колонки.Количество() <> 0 Тогда
ВызватьИсключение "До сборки GUI должен быть подготовленный ownCount0; чужие колонки не очищаем";
КонецЕсли;
Для Каждого Колонка Из СвойСписок85.Колонки Цикл
Если СтрРазделить("Период,Регистратор,НомерСтроки,Активность,СчетДт,СчетКт,UUIDОпыта85,Сумма", ",").Найти(Колонка.Имя) = Неопределено Тогда
ВызватьИсключение "Неизвестная sourcecolumn; known собственный layout не подтвержден";
КонецЕсли;
КонецЦикла;
СвойСписок85.Колонки.Установить("Период,Регистратор,НомерСтроки,СчетДт,СчетКт,UUIDОпыта85,Сумма");
Для Каждого Имя Из СтрРазделить("Период,СчетДт,СчетКт,Сумма", ",") Цикл
Колонка = СвоеПоле85.Колонки.Добавить(Имя, Имя);
Колонка.Данные = Имя;
Колонка.ТолькоПросмотр = Истина;
КонецЦикла;
СвойСписок85.Отбор.UUIDОпыта85.Установить(Новый УникальныйИдентификатор(Состояние85.UUIDОпыта));
СвойСписок85.Отбор.Регистратор.Установить(Документы.УчебныйПакетИтогов85.ПолучитьСсылку(Новый УникальныйИдентификатор(Состояние85.UUIDДокумента)));
СвойСписок85.Порядок.Установить("Период Возр");
Настройка = Новый НастройкаПериода;
Настройка.УстановитьПериод(Дата(2026, 10, 1), Дата(2026, 10, 31, 23, 59, 59), Ложь);
СвоеПоле85.СтандартныйПериод = Настройка;
СвоеПоле85.АвтоОбновление = Ложь;
СвоеПоле85.ПериодАвтоОбновления = 10;
СвоеПоле85.ИзменятьАвтоОбновление = Ложь;
СвоеПоле85.ВосстанавливатьТекущуюСтроку = Ложь;
СвоеПоле85.РазрешитьНастройкуПериода = Ложь;
Для Каждого Имя Из СтрРазделить("UUIDОпыта85,Регистратор,Период", ",") Цикл
НастройкаОтбора = СвоеПоле85.НастройкаОтбора.Найти(Имя);
Если ТипЗнч(НастройкаОтбора) <> Тип("ЭлементУправленияОтбором") Или НастройкаОтбора.Имя <> Имя Тогда
ВызватьИсключение "Не найден actual собственный элемент управления отбором";
КонецЕсли;
НастройкаОтбора.Доступность = Ложь;
КонецЦикла;
НастройкаПорядка = СвоеПоле85.НастройкаПорядка.Найти("Период");
Если ТипЗнч(НастройкаПорядка) <> Тип("ЭлементУправленияПорядком") Или НастройкаПорядка.Имя <> "Период" Тогда
ВызватьИсключение "Не найден actual собственный элемент управления порядком";
КонецЕсли;
НастройкаПорядка.Доступность = Ложь;
День85 = 0;
УстановитьСвойДень85(0);
Профиль85 = ПрочитатьСвойПрофиль85();
Если Профиль85.Авто Или Профиль85.ПериодРазрешен Тогда
ВызватьИсключение "Начальные own setters AutoFalse/EnablePeriodFalse не подтвердились";
КонецЕсли;
ПроверитьСвойПрофиль85();
Доставленные85 = Новый Массив;
СвояФорма85.Открыть();
ПроверитьСвязь85();
УстановитьСвойДень85(0);
СвойСписок85.Обновить();
ПроверитьСвойПрофиль85();
Переход85 = Ложь;
Остановка85 = Ложь;
Статус85 = "DB3/2000, остатки500/500/Кт1000. Вручную выберите все3строки настоящего списка.";
Исключение
Остановка85 = Истина;
Переход85 = Ложь;
Статус85 = "СТОП: подготовка/запись/GUI могли завершиться частично. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ДеньПервый85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "ДеньПервый85");
ВыполнитьСвойДень85(1, 0);
КонецПроцедуры
Процедура ДеньВторой85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "ДеньВторой85");
ВыполнитьСвойДень85(2, 1);
КонецПроцедуры
Процедура ВсеДни85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "ВсеДни85");
ВыполнитьСвойДень85(0, 2);
КонецПроцедуры
Процедура ВыполнитьСвойДень85(НовыйДень, ТребуемыйШаг)
ПроверитьРаботу85();
Если Шаг85 <> ТребуемыйШаг Тогда
ВызватьИсключение "Сначала предыдущий собственный профиль ивсеего реальные выбранные строки";
КонецЕсли;
ПроверитьПолнуюДоставку85();
Переход85 = Истина;
Попытка
Уч85БухСписокСервер.ПрочитатьСвойСнимок85(Состояние85);
ПроверитьСвойПрофиль85();
УстановитьСвойДень85(НовыйДень);
СвойСписок85.Обновить();
День85 = НовыйДень;
Шаг85 = Шаг85 + 1;
ПроверитьСвойПрофиль85();
Доставленные85 = Новый Массив;
Переход85 = Ложь;
Статус85 = "Native Refresh перечитал свой список. Вручную выберите реальные строки нового периода; DB остается3/2000.";
Исключение
Остановка85 = Истина;
Переход85 = Ложь;
Статус85 = "СТОП на клиенте: новый профиль/серверное чтение не подтверждены. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ИзменитьТретью85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "ИзменитьТретью85");
ПроверитьРаботу85();
Если Шаг85 <> 3 Или Состояние85.Этап > 1 Или День85 <> 0 Тогда
ВызватьИсключение "Сначала день1→день2→весьоктябрь иactual полная доставка; разрешены лишьдве замены";
КонецЕсли;
ПроверитьПолнуюДоставку85();
Переход85 = Истина;
Попытка
ПроверитьСвойПрофиль85();
Если Состояние85.Этап = 1 Тогда
СвоеПоле85.АвтоОбновление = Истина;
СвоеПоле85.РазрешитьНастройкуПериода = Истина;
Профиль85.Авто = Истина;
Профиль85.ПериодРазрешен = Истина;
ПроверитьСвойПрофиль85();
КонецЕсли;
Состояние85 = Уч85БухСписокСервер.ИзменитьСвоюТретью85(Состояние85);
Если Состояние85.Этап = 1 Тогда
СвойСписок85.Обновить();
Статус85 = "Третья500: DB3/2250, касса750/запасы250/капиталКт1000. Native manualRefresh; выберите все3строки.";
Иначе
Статус85 = "Третья250: DB3/2000. Auto=True/period10 подтверждены, но источник/срок обновления не измерен. Подождите ивыберите3строки; при необходимости кнопка Обновить85.";
КонецЕсли;
ПроверитьСвойПрофиль85();
Доставленные85 = Новый Массив;
Переход85 = Ложь;
Исключение
Остановка85 = Истина;
Переход85 = Ложь;
Статус85 = "СТОП на клиенте: outcome записи/синхронизации неизвестен; не повторять инеоткатывать вслепую. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура Обновить85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "Обновить85");
ПроверитьРаботу85();
Переход85 = Истина;
Попытка
Уч85БухСписокСервер.ПрочитатьСвойСнимок85(Состояние85);
ПроверитьСвойПрофиль85();
СвойСписок85.Обновить();
Доставленные85 = Новый Массив;
Переход85 = Ложь;
Статус85 = "Вызван настоящий source.Refresh0. Реальную доставку всех строк снова подтвердите вручную.";
Исключение
Остановка85 = Истина;
Переход85 = Ложь;
Статус85 = "СТОП на клиенте: explicit обновление/серверное чтение не подтверждены. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура Завершить85(Элемент)
ПроверитьСвоюКнопку85(Элемент, "Завершить85");
ПроверитьРаботу85();
Если Шаг85 <> 3 Или Состояние85.Этап <> 2 Тогда
ВызватьИсключение "Нужен собственный завершенный250→500→250 route";
КонецЕсли;
ПроверитьПолнуюДоставку85();
Попытка
Уч85БухСписокСервер.ПрочитатьСвойСнимок85(Состояние85);
ПроверитьСвойПрофиль85();
СвоеПоле85.АвтоОбновление = Ложь;
СвоеПоле85.РазрешитьНастройкуПериода = Ложь;
Профиль85.Авто = Ложь;
Профиль85.ПериодРазрешен = Ложь;
ПроверитьСвойПрофиль85();
Шаг85 = 4;
Статус85 = "Ожидаемый ручной итог: actual GUI3/2000, БД3/2000, остатки500/500/Кт1000; auto выключено. Это не restore чужих настроек.";
Исключение
Остановка85 = Истина;
Статус85 = "СТОП на клиенте: finish partial; unknown состояние не восстанавливать. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПроверитьРаботу85()
Если Остановка85 Или Не Начат85 Или Переход85 Или Шаг85 = 4 Тогда
ВызватьИсключение "Own fail-stop/partial/terminal state; повтор или сторонняя команда запрещены";
КонецЕсли;
ПроверитьСвязь85();
КонецПроцедуры
Процедура ПроверитьСвоюКнопку85(Элемент, Имя)
Если ТипЗнч(Элемент) <> Тип("Кнопка") Или Элемент <> ЭлементыФормы[Имя] Или Элемент.Имя <> Имя Тогда
ВызватьИсключение "Нужна настоящая собственная ordinary button/native event1";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвязь85() Экспорт
Если ТипЗнч(СвойСписок85) <> Тип("РегистрБухгалтерииСписок.УчебныеБухИтоги85")
Или СвояФорма85.Список <> СвойСписок85 Или ТипЗнч(СвоеПоле85) <> Тип("ТабличноеПоле")
Или СвоеПоле85 <> СвояФорма85.ЭлементыФормы.Список Или СвоеПоле85.Данные <> "Список"
Или СвоеПоле85.Значение <> СвойСписок85 Или Не СвоеПоле85.ТолькоПросмотр Тогда
ВызватьИсключение "Не совпал actual AccountingList→ownForm→ordinary TableBox.Data/Value identity";
КонецЕсли;
КонецПроцедуры
Процедура УстановитьСвойДень85(День)
Если День <> 0 И День <> 1 И День <> 2 Тогда
ВызватьИсключение "Допустимы только own весьоктябрь/1/2октября";
КонецЕсли;
Начало = ?(День = 0, Дата(2026, 10, 1), Дата(2026, 10, День));
Конец = ?(День = 0, Дата(2026, 11, 1), Дата(2026, 10, День + 1));
СвойСписок85.Отбор.Период.ВидСравнения = ВидСравнения.Интервал;
СвойСписок85.Отбор.Период.ЗначениеС = Начало;
СвойСписок85.Отбор.Период.ЗначениеПо = Конец;
СвойСписок85.Отбор.Период.Использование = Истина;
КонецПроцедуры
Функция ПрочитатьСвойПрофиль85()
ПроверитьСвязь85();
Если ТипЗнч(СвоеПоле85.СтандартныйПериод) <> Тип("НастройкаПериода")
Или ТипЗнч(СвоеПоле85.НастройкаОтбора) <> Тип("НастройкаОтбора")
Или ТипЗнч(СвоеПоле85.НастройкаПорядка) <> Тип("НастройкаПорядка") Тогда
ВызватьИсключение "Не совпали настоящие ordinary settings factories";
КонецЕсли;
Возврат Новый Структура("Авто,Период,ИзменятьАвто,Восстанавливать,ПериодРазрешен,Начало,Конец",
СвоеПоле85.АвтоОбновление, СвоеПоле85.ПериодАвтоОбновления, СвоеПоле85.ИзменятьАвтоОбновление,
СвоеПоле85.ВосстанавливатьТекущуюСтроку, СвоеПоле85.РазрешитьНастройкуПериода,
СвоеПоле85.СтандартныйПериод.ПолучитьДатуНачала(), СвоеПоле85.СтандартныйПериод.ПолучитьДатуОкончания());
КонецФункции
Процедура ПроверитьСвойПрофиль85()
Сейчас = ПрочитатьСвойПрофиль85();
Для Каждого Пара Из Профиль85 Цикл
Если Сейчас[Пара.Ключ] <> Пара.Значение Тогда
ВызватьИсключение "Own profile изменен извне; не перезаписываем неизвестное состояние";
КонецЕсли;
КонецЦикла;
Если ТипЗнч(Сейчас.Авто) <> Тип("Булево") Или ТипЗнч(Сейчас.ИзменятьАвто) <> Тип("Булево")
Или ТипЗнч(Сейчас.Восстанавливать) <> Тип("Булево") Или ТипЗнч(Сейчас.ПериодРазрешен) <> Тип("Булево")
Или ТипЗнч(Сейчас.Период) <> Тип("Число") Или Сейчас.Период <> 10 Или Сейчас.Период < 5
Или Сейчас.ИзменятьАвто Или Сейчас.Восстанавливать
Или Сейчас.Начало <> Дата(2026, 10, 1) Или Сейчас.Конец <> Дата(2026, 10, 31, 23, 59, 59) Тогда
ВызватьИсключение "Full typed собственный profile/period10/весьоктябрь не совпал";
КонецЕсли;
Имена = СтрРазделить("Период,Регистратор,НомерСтроки,СчетДт,СчетКт,UUIDОпыта85,Сумма", ",");
Если ТипЗнч(СвойСписок85.Колонки) <> Тип("КолонкиСписка") Или СвойСписок85.Колонки.Количество() <> 7
Или СвоеПоле85.Колонки.Количество() <> 4 Тогда
ВызватьИсключение "Полный own source7/GUI4 нарушен; ничего не очищаем";
КонецЕсли;
Для Индекс = 0 По 6 Цикл
Если СвойСписок85.Колонки.Получить(Индекс).Имя <> Имена[Индекс] Тогда
ВызватьИсключение "Own readonly source-column Name/order изменен";
КонецЕсли;
КонецЦикла;
Видимые = СтрРазделить("Период,СчетДт,СчетКт,Сумма", ",");
Для Индекс = 0 По 3 Цикл
Колонка = СвоеПоле85.Колонки.Получить(Индекс);
Если Колонка.Имя <> Видимые[Индекс] Или Колонка.Данные <> Видимые[Индекс] Или Не Колонка.ТолькоПросмотр Тогда
ВызватьИсключение "Actual own GUI columns data-binding/readonly изменены";
КонецЕсли;
КонецЦикла;
Если ТипЗнч(СвойСписок85.Отбор) <> Тип("Отбор") Или ТипЗнч(СвойСписок85.Порядок) <> Тип("Порядок")
Или СвойСписок85.Порядок.Количество() <> 1 Или СвойСписок85.Порядок.Получить(0).Данные <> "Период"
Или СвойСписок85.Порядок.Получить(0).Направление <> НаправлениеСортировки.Возр Тогда
ВызватьИсключение "Нужен реальный own order ровноПериодВозр, не arbitrary Order object";
КонецЕсли;
Для Каждого Фильтр Из СвойСписок85.Отбор Цикл
Если Фильтр.Использование И СтрРазделить("UUIDОпыта85,Регистратор,Период", ",").Найти(Фильтр.Имя) = Неопределено Тогда
ВызватьИсключение "Неожиданный активный отбор; неизвестный фильтр не сбрасываем";
КонецЕсли;
КонецЦикла;
Начало = ?(День85 = 0, Дата(2026, 10, 1), Дата(2026, 10, День85));
Конец = ?(День85 = 0, Дата(2026, 11, 1), Дата(2026, 10, День85 + 1));
Если Не СвойСписок85.Отбор.UUIDОпыта85.Использование Или Не СвойСписок85.Отбор.Регистратор.Использование
Или СвойСписок85.Отбор.UUIDОпыта85.ВидСравнения <> ВидСравнения.Равно
Или СвойСписок85.Отбор.Регистратор.ВидСравнения <> ВидСравнения.Равно
Или СвойСписок85.Отбор.UUIDОпыта85.Значение <> Новый УникальныйИдентификатор(Состояние85.UUIDОпыта)
Или Строка(СвойСписок85.Отбор.Регистратор.Значение.УникальныйИдентификатор()) <> Состояние85.UUIDДокумента
Или Не СвойСписок85.Отбор.Период.Использование Или СвойСписок85.Отбор.Период.ВидСравнения <> ВидСравнения.Интервал
Или СвойСписок85.Отбор.Период.ЗначениеС <> Начало Или СвойСписок85.Отбор.Период.ЗначениеПо <> Конец Тогда
ВызватьИсключение "Full own source filters/UUID/real recorder/strict interval изменены";
КонецЕсли;
Для Каждого Имя Из СтрРазделить("UUIDОпыта85,Регистратор,Период", ",") Цикл
Настройка = СвоеПоле85.НастройкаОтбора.Найти(Имя);
Если Настройка = Неопределено Или Настройка.Имя <> Имя Или Настройка.Доступность Тогда
ВызватьИсключение "Native interactive filter policy изменена; это не security boundary";
КонецЕсли;
КонецЦикла;
Настройка = СвоеПоле85.НастройкаПорядка.Найти("Период");
Если Настройка = Неопределено Или Настройка.Имя <> "Период" Или Настройка.Доступность Тогда
ВызватьИсключение "Native interactive order policy изменена";
КонецЕсли;
КонецПроцедуры
Процедура ПринятьСвоеNativeВыделение85(Форма, Поле, Ключ, Данные) Экспорт
Если Переход85 Или Остановка85 Или Шаг85 = 4 Тогда
Возврат;
КонецЕсли;
ПроверитьРаботу85();
Попытка
ПроверитьСвойПрофиль85();
Строки = Уч85БухСписокСервер.ПрочитатьСвойСнимок85(Состояние85);
Если Форма <> СвояФорма85 Или Поле <> СвоеПоле85 Или Ключ <> Поле.ТекущаяСтрока Или Данные <> Поле.ТекущиеДанные
Или ТипЗнч(Ключ) <> Тип("РегистрБухгалтерииКлючЗаписи.УчебныеБухИтоги85")
Или ТипЗнч(Данные) <> Тип("ТекущиеДанныеСписка") Или ТипЗнч(Ключ.НомерСтроки) <> Тип("Число")
Или Ключ.НомерСтроки <> Цел(Ключ.НомерСтроки) Или Ключ.НомерСтроки < 1 Или Ключ.НомерСтроки > 3 Тогда
ВызватьИсключение "Нужны fresh actual key/currentData реальной собственной строки, не manualcallback или cached key";
КонецЕсли;
Факт = Строки[Ключ.НомерСтроки - 1];
Если Ключ.Регистратор <> Факт.Регистратор Или Данные.Регистратор <> Факт.Регистратор
Или Данные.НомерСтроки <> Факт.НомерСтроки Или Данные.Период <> Факт.Период
Или Данные.СчетДт <> Факт.СчетДт Или Данные.СчетКт <> Факт.СчетКт
Или Данные.UUIDОпыта85 <> Факт.UUIDОпыта85 Или ТипЗнч(Данные.Сумма) <> Тип("Число") Или Данные.Сумма <> Факт.Сумма Тогда
ВызватьИсключение "Actual GUI rowdata не равно полному независимому DB readback; sumCount не доказательство UI";
КонецЕсли;
Если Факт.Период <= СвойСписок85.Отбор.Период.ЗначениеС Или Факт.Период >= СвойСписок85.Отбор.Период.ЗначениеПо Тогда
ВызватьИсключение "Native Интервал исключает ОБЕграницы; доставлена строка вне собственного периода";
КонецЕсли;
Если Доставленные85.Найти(Ключ.НомерСтроки) = Неопределено Тогда
Доставленные85.Добавить(Ключ.НомерСтроки);
КонецЕсли;
Статус85 = "Actual own key/rowdata/UUID/refs/date/accounts/sum подтверждены для строки " + Строка(Ключ.НомерСтроки) + ".";
Исключение
Остановка85 = Истина;
Статус85 = "СТОП на клиенте: actual доставка/серверное чтение отказали. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПроверитьПолнуюДоставку85()
Ожидаемые = Новый Массив;
Если День85 <> 2 Тогда
Ожидаемые.Добавить(1);
КонецЕсли;
Если День85 <> 1 Тогда
Ожидаемые.Добавить(2);
Ожидаемые.Добавить(3);
КонецЕсли;
Если Доставленные85.Количество() <> Ожидаемые.Количество() Тогда
ВызватьИсключение "Не доставлены ВСЕ реальные строки этого периода; сначала вручную активизируйте их";
КонецЕсли;
Для Каждого Номер Из Ожидаемые Цикл
Если Доставленные85.Найти(Номер) = Неопределено Тогда
ВызватьИсключение "Повтор одной строки не заменяет другую own native delivery";
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОстановитьСвоеОкно85() Экспорт
Остановка85 = Истина;
Статус85 = "СТОП: child list native event не подтвердил свой контекст; повтор/авторестарт запрещен.";
КонецПроцедурыCOMMON — полный свой datafixture/whole guards/two replacements
УчебныйБухгалтерскийСписок85 → Общие модули → Уч85БухСписокСервер → Модуль, целиком.
Сервер своего нового стенда; own commonServer/ServerCallTrue, ordinary/thick RPC, не privileged.
Функция ПаспортСвоегоБухСписка85() Экспорт
Возврат ПаспортСвоегоБухСпискаВнутренний85(Ложь);
КонецФункции
Функция ПаспортСвоегоБухСпискаВнутренний85(СвояТранзакция)
ПроверитьСвоюСхемуИтогов85(СвояТранзакция);
Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnAccountingList85_50fb8d9a-7a2d-4b72-bdb2-16b8b5cabd8a\IB"";" Тогда
ВызватьИсключение "Нужен exact File адрес новой собственной ИБ, не чужая база с похожим именем";
КонецЕсли;
Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Если Текущий = Неопределено Или ТипЗнч(Пользователи) <> Тип("Массив") Или Пользователи.Количество() <> 1 Тогда
ВызватьИсключение "Нужен настоящий единственный собственный пользователь ИБ";
КонецЕсли;
Если Текущий.Имя <> "БухСписок85Ученик" Или Пользователи[0].Имя <> Текущий.Имя
Или ТипЗнч(Текущий.УникальныйИдентификатор) <> Тип("УникальныйИдентификатор")
Или Пользователи[0].УникальныйИдентификатор <> Текущий.УникальныйИдентификатор Тогда
ВызватьИсключение "Текущая авторизация не совпала с единственным actual пользователем";
КонецЕсли;
Возврат Строка(Текущий.УникальныйИдентификатор);
КонецФункции
Функция ПодготовитьСвойБухСписок85(Согласие) Экспорт
Пользователь = ПаспортСвоегоБухСписка85();
Если ТипЗнч(Согласие) <> Тип("Булево") Или Не Согласие
Или СобственноеКоличество85("Документ.УчебныйПакетИтогов85") <> 0
Или СобственноеКоличество85("РегистрБухгалтерии.УчебныеБухИтоги85") <> 0 Тогда
ВызватьИсключение "Нужно явное согласие и0своих документов/проводок; существующее не замещаем";
КонецЕсли;
Счета = ПрочитатьТриСвоихСчета85();
Если Не РегистрыБухгалтерии.УчебныеБухИтоги85.ПолучитьИспользованиеИтогов() Тогда
ВызватьИсключение "Заранее вручную включите итоги только своего нового регистра; setter здесь отсутствует";
КонецЕсли;
UUIDОпыта = Новый УникальныйИдентификатор;
НачатьТранзакцию();
Попытка
Если СобственноеКоличество85("Документ.УчебныйПакетИтогов85") <> 0
Или СобственноеКоличество85("РегистрБухгалтерии.УчебныеБухИтоги85") <> 0 Тогда
ВызватьИсключение "Пустота изменилась до собственных записей";
КонецЕсли;
Документ = Документы.УчебныйПакетИтогов85.СоздатьДокумент();
Документ.Дата = Дата(2026, 10, 2, 16);
Документ.Номер = Строка(UUIDОпыта);
Документ.UUIDОпыта85 = UUIDОпыта;
Документ.Записать(РежимЗаписиДокумента.Запись);
Если Документ.ЭтоНовый() Или Документ.Ссылка.Пустая() Тогда
ВызватьИсключение "Не получен собственный реально сохраненный документ";
КонецЕсли;
Набор = РегистрыБухгалтерии.УчебныеБухИтоги85.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Документ.Ссылка);
ДобавитьСвоюПроводку85(Набор, Дата(2026, 10, 1, 9), Счета.Касса, Счета.Капитал, 1000, UUIDОпыта, Документ.Ссылка);
ДобавитьСвоюПроводку85(Набор, Дата(2026, 10, 2, 10), Счета.Запасы, Счета.Касса, 750, UUIDОпыта, Документ.Ссылка);
ДобавитьСвоюПроводку85(Набор, Дата(2026, 10, 2, 15), Счета.Касса, Счета.Запасы, 250, UUIDОпыта, Документ.Ссылка);
Набор.Записать(Истина);
Состояние = Новый Структура("UUIDДокумента,UUIDОпыта,Пользователь,ТретьяСумма,Этап",
Строка(Документ.Ссылка.УникальныйИдентификатор()), Строка(UUIDОпыта), Пользователь, 250, 0);
ПрочитатьСвойСнимокВнутренний85(Состояние, Истина);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
ПрочитатьСвойСнимок85(Состояние);
Возврат Состояние;
КонецФункции
Функция ПрочитатьСвойСнимок85(Состояние) Экспорт
Возврат ПрочитатьСвойСнимокВнутренний85(Состояние, Ложь);
КонецФункции
Функция ПрочитатьСвойСнимокВнутренний85(Состояние, СвояТранзакция)
Пользователь = ПаспортСвоегоБухСпискаВнутренний85(СвояТранзакция);
Если ТипЗнч(Состояние) <> Тип("Структура") Или Состояние.Количество() <> 5 Тогда
ВызватьИсключение "Нужно полное собственное состояние5полей, не unknown ИсходныйОбъект";
КонецЕсли;
Для Каждого Имя Из СтрРазделить("UUIDДокумента,UUIDОпыта,Пользователь,ТретьяСумма,Этап", ",") Цикл
Если Не Состояние.Свойство(Имя) Тогда
ВызватьИсключение "В собственном состоянии нет обязательного поля";
КонецЕсли;
КонецЦикла;
КаноническийСвойUUID85(Состояние.UUIDДокумента);
КаноническийСвойUUID85(Состояние.UUIDОпыта);
КаноническийСвойUUID85(Состояние.Пользователь);
Если Состояние.Пользователь <> Пользователь Или ТипЗнч(Состояние.Этап) <> Тип("Число")
Или Состояние.Этап <> Цел(Состояние.Этап) Или Состояние.Этап < 0 Или Состояние.Этап > 2
Или ТипЗнч(Состояние.ТретьяСумма) <> Тип("Число")
Или Состояние.ТретьяСумма <> ?(Состояние.Этап = 1, 500, 250) Тогда
ВызватьИсключение "Не совпали actual пользователь/собственный этап0→1→2/сумма250→500→250";
КонецЕсли;
Данные = ПрочитатьВсеСвоиПроводки85(Состояние.UUIDДокумента, Состояние.UUIDОпыта, Состояние.ТретьяСумма);
ПроверитьСвоиОстаткиСписка85(Состояние.UUIDОпыта, Состояние.ТретьяСумма);
Возврат Данные;
КонецФункции
Функция ИзменитьСвоюТретью85(Состояние) Экспорт
ПрочитатьСвойСнимок85(Состояние);
Если Состояние.Этап <> 0 И Состояние.Этап <> 1 Тогда
ВызватьИсключение "Две собственные замены завершены; третьей попытки нет";
КонецЕсли;
Следующее = Новый Структура("UUIDДокумента,UUIDОпыта,Пользователь,ТретьяСумма,Этап",
Состояние.UUIDДокумента, Состояние.UUIDОпыта, Состояние.Пользователь, ?(Состояние.Этап = 0, 500, 250), Состояние.Этап + 1);
Ссылка = Документы.УчебныйПакетИтогов85.ПолучитьСсылку(КаноническийСвойUUID85(Состояние.UUIDДокумента));
НачатьТранзакцию();
Попытка
До = ПрочитатьСвойСнимокВнутренний85(Состояние, Истина);
Набор = РегистрыБухгалтерии.УчебныеБухИтоги85.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Ссылка);
Набор.Прочитать();
Если Набор.Количество() <> 3 Тогда
ВызватьИсключение "Собственный отбор набора не вернул все3проводки";
КонецЕсли;
СвояТретья = Неопределено;
Проверенные = Новый Массив;
Для Каждого Запись Из Набор Цикл
Если ТипЗнч(Запись.НомерСтроки) <> Тип("Число") Или Запись.НомерСтроки <> Цел(Запись.НомерСтроки)
Или Запись.НомерСтроки < 1 Или Запись.НомерСтроки > 3
Или Проверенные.Найти(Запись.НомерСтроки) <> Неопределено Тогда
ВызватьИсключение "Native номера должны быть1..3 бездублей, порядок Read не угадываем";
КонецЕсли;
Факт = До[Запись.НомерСтроки - 1];
Если Запись.Регистратор <> Факт.Регистратор
Или Запись.Период <> Факт.Период Или Запись.Активность <> Факт.Активность
Или Запись.СчетДт <> Факт.СчетДт Или Запись.СчетКт <> Факт.СчетКт
Или Запись.UUIDОпыта85 <> Факт.UUIDОпыта85 Или Запись.Сумма <> Факт.Сумма Тогда
ВызватьИсключение "Прочитанный native набор не равен полному собственному DB snapshot";
КонецЕсли;
Проверенные.Добавить(Запись.НомерСтроки);
Если Запись.НомерСтроки = 3 Тогда
СвояТретья = Запись;
КонецЕсли;
КонецЦикла;
Если Проверенные.Количество() <> 3 Или СвояТретья = Неопределено Тогда
ВызватьИсключение "Не подтверждена own actual третья запись после полной проверки набора";
КонецЕсли;
СвояТретья.Сумма = Следующее.ТретьяСумма;
Набор.Записать(Истина);
ПрочитатьСвойСнимокВнутренний85(Следующее, Истина);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
ПрочитатьСвойСнимок85(Следующее);
Возврат Следующее;
КонецФункции
Процедура ПроверитьСвоиОстаткиСписка85(UUIDОпыта, ТретьяСумма)
Если Не РегистрыБухгалтерии.УчебныеБухИтоги85.ПолучитьИспользованиеИтогов() Тогда
ВызватьИсключение "Итоги выключены; неизвестные virtual числа не принимаем";
КонецЕсли;
Счета = ПрочитатьТриСвоихСчета85();
UUID = КаноническийСвойUUID85(UUIDОпыта);
Конец = Новый Граница(Дата(2026, 10, 3), ВидГраницы.Исключая);
ПроверитьОстатокСвоегоСчета85(Конец, UUID, Счета.Касса, 1000 - 750 + ТретьяСумма, 0);
ПроверитьОстатокСвоегоСчета85(Конец, UUID, Счета.Запасы, 750 - ТретьяСумма, 0);
ПроверитьОстатокСвоегоСчета85(Конец, UUID, Счета.Капитал, 0, 1000);
КонецПроцедуры
Функция ПрочитатьВсеСвоиПроводки85(UUIDДокумента, UUIDОпыта, ТретьяСумма)
UUID = КаноническийСвойUUID85(UUIDОпыта);
Ссылка = Документы.УчебныйПакетИтогов85.ПолучитьСсылку(КаноническийСвойUUID85(UUIDДокумента));
Документ = Ссылка.ПолучитьОбъект();
Если Документ = Неопределено Тогда
ВызватьИсключение "Собственный документ должен действительно существовать, ссылку не изображаем готовым объектом";
КонецЕсли;
Если Документ.Проведен Или Документ.ПометкаУдаления Или Документ.UUIDОпыта85 <> UUID Или Документ.Дата <> Дата(2026, 10, 2, 16, 0, 0)
Или Документ.Номер <> UUIDОпыта Или СобственноеКоличество85("Документ.УчебныйПакетИтогов85") <> 1 Тогда
ВызватьИсключение "Разрешен только единственный свой неизменный документ/UUID";
КонецЕсли;
Счета = ПрочитатьТриСвоихСчета85();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ П.Период,П.Регистратор,П.НомерСтроки,П.Активность,П.СчетДт,П.СчетКт,П.UUIDОпыта85,П.Сумма
|ИЗ РегистрБухгалтерии.УчебныеБухИтоги85 КАК П
|УПОРЯДОЧИТЬ ПО П.Период";
Данные = Запрос.Выполнить().Выгрузить();
Если ТипЗнч(Данные) <> Тип("ТаблицаЗначений") Или Данные.Количество() <> 3 Тогда
ВызватьИсключение "ВЕСЬ собственный регистр должен содержать ровно3свои проводки, не3строки отфильтрованной чужой базы";
КонецЕсли;
Периоды = Новый Массив;
Периоды.Добавить(Дата(2026, 10, 1, 9, 0, 0));
Периоды.Добавить(Дата(2026, 10, 2, 10, 0, 0));
Периоды.Добавить(Дата(2026, 10, 2, 15, 0, 0));
Дебет = Новый Массив;
Дебет.Добавить(Счета.Касса);
Дебет.Добавить(Счета.Запасы);
Дебет.Добавить(Счета.Касса);
Кредит = Новый Массив;
Кредит.Добавить(Счета.Капитал);
Кредит.Добавить(Счета.Касса);
Кредит.Добавить(Счета.Запасы);
Суммы = Новый Массив;
Суммы.Добавить(1000);
Суммы.Добавить(3 * 250);
Суммы.Добавить(ТретьяСумма);
СуммаСтрок = 0;
Для Индекс = 0 По 2 Цикл
Проводка = Данные[Индекс];
Если ТипЗнч(Проводка.Период) <> Тип("Дата") Или ТипЗнч(Проводка.Активность) <> Тип("Булево")
Или ТипЗнч(Проводка.Сумма) <> Тип("Число") Или ТипЗнч(Проводка.UUIDОпыта85) <> Тип("УникальныйИдентификатор") Тогда
ВызватьИсключение "Не совпали типы реально записанной своей проводки";
КонецЕсли;
Если ТипЗнч(Проводка.НомерСтроки) <> Тип("Число") Или Проводка.НомерСтроки <> Индекс + 1
Или Проводка.Период <> Периоды[Индекс] Или Не Проводка.Активность Или Проводка.Регистратор <> Ссылка
Или Проводка.UUIDОпыта85 <> UUID Или Проводка.СчетДт <> Дебет[Индекс]
Или Проводка.СчетКт <> Кредит[Индекс] Или Проводка.Сумма <> Суммы[Индекс] Тогда
ВызватьИсключение "Изменена/добавлена не собственная точная проводка; обслуживание всего регистра запрещено";
КонецЕсли;
СуммаСтрок = СуммаСтрок + Проводка.Сумма;
КонецЦикла;
Если СуммаСтрок <> 1750 + ТретьяСумма Тогда
ВызватьИсключение "Сумма строк должна быть1750+своя третья сумма; это не остаток кассы";
КонецЕсли;
Возврат Данные;
КонецФункции
Процедура ДобавитьСвоюПроводку85(Набор, Период, СчетДт, СчетКт, Сумма, UUIDОпыта, СвояСсылка)
Запись = Набор.Добавить();
Запись.Период = Период;
Запись.Активность = Истина;
Запись.Регистратор = СвояСсылка;
Запись.СчетДт = СчетДт;
Запись.СчетКт = СчетКт;
Запись.UUIDОпыта85 = UUIDОпыта;
Запись.Сумма = Сумма;
КонецПроцедуры
Функция КаноническийСвойUUID85(Текст)
Если ТипЗнч(Текст) <> Тип("Строка") Или СтрДлина(Текст) <> 36 Тогда
ВызватьИсключение "Нужна каноническая строка собственного UUID";
КонецЕсли;
UUID = Новый УникальныйИдентификатор(Текст);
Если Строка(UUID) <> Текст Или UUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") Тогда
ВызватьИсключение "Нужен ненулевой канонический UUID, не чужая/пустая ссылка";
КонецЕсли;
Возврат UUID;
КонецФункции
Функция СобственноеКоличество85(Таблица)
Если Таблица <> "Документ.УчебныйПакетИтогов85" И Таблица <> "РегистрБухгалтерии.УчебныеБухИтоги85"
И Таблица <> "ПланСчетов.УчебныеСчетаИтогов85" Тогда
ВызватьИсключение "Динамический запрос разрешен только для3точно своих таблиц";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Строк ИЗ " + Таблица;
Данные = Запрос.Выполнить().Выгрузить();
Если ТипЗнч(Данные) <> Тип("ТаблицаЗначений") Или Данные.Количество() <> 1 Или ТипЗнч(Данные[0].Строк) <> Тип("Число") Тогда
ВызватьИсключение "Не получен реальный числовой count собственной таблицы";
КонецЕсли;
Возврат Данные[0].Строк;
КонецФункции
Функция ПрочитатьТриСвоихСчета85()
Касса = ПланыСчетов.УчебныеСчетаИтогов85.УчебнаяКасса;
Запасы = ПланыСчетов.УчебныеСчетаИтогов85.УчебныеЗапасы;
Капитал = ПланыСчетов.УчебныеСчетаИтогов85.УчебныйКапитал;
Если Касса.Пустая() Или Запасы.Пустая() Или Капитал.Пустая() Или Касса = Запасы Или Касса = Капитал Или Запасы = Капитал
Или СобственноеКоличество85("ПланСчетов.УчебныеСчетаИтогов85") <> 3 Тогда
ВызватьИсключение "Нужны ровно3разных существующих собственных предопределенных счета";
КонецЕсли;
Для Каждого Счет Из Новый Структура("Касса,Запасы,Капитал", Касса, Запасы, Капитал) Цикл
Объект = Счет.Значение.ПолучитьОбъект();
Если Объект = Неопределено Тогда
ВызватьИсключение "Ссылка собственного счета должна реально иметь объект";
КонецЕсли;
Если Объект.ПометкаУдаления Или Не Объект.Предопределенный Или Объект.Забалансовый Или Объект.ВидыСубконто.Количество() <> 0 Тогда
ВызватьИсключение "Свой счет балансовый, предопределенный, без удаления/субконто";
КонецЕсли;
КонецЦикла;
Если Касса.Вид <> ВидСчета.Активный Или Запасы.Вид <> ВидСчета.Активный Или Капитал.Вид <> ВидСчета.Пассивный Тогда
ВызватьИсключение "Виды собственных счетов отличаются от независимой модели";
КонецЕсли;
Возврат Новый Структура("Касса,Запасы,Капитал", Касса, Запасы, Капитал);
КонецФункции
Процедура ПроверитьОстатокСвоегоСчета85(ГраницаОстатка, UUID, Счет, ОжидаемыйДт, ОжидаемыйКт)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ О.СуммаОстатокДт КАК Дт, О.СуммаОстатокКт КАК Кт
|ИЗ РегистрБухгалтерии.УчебныеБухИтоги85.Остатки(&Граница, Счет = &Счет, , UUIDОпыта85 = &UUID) КАК О";
Запрос.УстановитьПараметр("Граница", ГраницаОстатка);
Запрос.УстановитьПараметр("Счет", Счет);
Запрос.УстановитьПараметр("UUID", UUID);
ПроверитьСвоюЧисловуюТаблицу85(Запрос.Выполнить().Выгрузить(), ОжидаемыйДт, ОжидаемыйКт);
КонецПроцедуры
Процедура ПроверитьСвоюЧисловуюТаблицу85(Таблица, ОжидаемыйДт, ОжидаемыйКт)
Если ТипЗнч(Таблица) <> Тип("ТаблицаЗначений") Или Таблица.Колонки.Количество() <> 2
Или Таблица.Колонки.Найти("Дт") = Неопределено Или Таблица.Колонки.Найти("Кт") = Неопределено Тогда
ВызватьИсключение "Нужен реальный результат запроса с точно названными2числовыми колонками";
КонецЕсли;
Если Таблица.Количество() = 0 Тогда
Если ОжидаемыйДт <> 0 Или ОжидаемыйКт <> 0 Тогда
ВызватьИсключение "Реально пустая таблица не доказывает ненулевой ожидаемый остаток/оборот";
КонецЕсли;
Возврат;
КонецЕсли;
Если Таблица.Количество() <> 1 Тогда
ВызватьИсключение "Свой счет/UUID без субконто должен дать не больше1строки, неизвестное не агрегируем незаметно";
КонецЕсли;
СтрокаЧисел = Таблица[0];
Если ТипЗнч(СтрокаЧисел.Дт) <> Тип("Число") Или ТипЗнч(СтрокаЧисел.Кт) <> Тип("Число")
Или СтрокаЧисел.Дт <> ОжидаемыйДт Или СтрокаЧисел.Кт <> ОжидаемыйКт Тогда
ВызватьИсключение "Виртуальные числа отличаются от независимого расчета по собственным3проводкам";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвоюСхемуИтогов85(СвояТранзакция = Ложь)
ПроверитьСвойПустойСтенд(СвояТранзакция);
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен свой режим совместимости Не использовать, не8.3.2илиниже с фиктивным минимумом0001";
КонецЕсли;
Если Метаданные.ОбщиеМодули.Количество() <> 1 Или Метаданные.ОбщиеФормы.Количество() <> 1
Или Метаданные.ПараметрыСеанса.Количество() <> 0 Тогда
ВызватьИсключение "Разрешены только свой серверный модуль, пульт и0параметров сеанса";
КонецЕсли;
План = Метаданные.ПланыСчетов.Найти("УчебныеСчетаИтогов85");
Регистр = Метаданные.РегистрыБухгалтерии.Найти("УчебныеБухИтоги85");
Документ = Метаданные.Документы.Найти("УчебныйПакетИтогов85");
Если План = Неопределено Или Регистр = Неопределено Или Документ = Неопределено
Или Метаданные.ОбщиеМодули.Найти("Уч85БухСписокСервер") = Неопределено
Или Метаданные.ОбщиеФормы.Найти("ПультБухСписка85") = Неопределено Тогда
ВызватьИсключение "Не совпадают точные собственные имена схемы";
КонецЕсли;
Модуль = Метаданные.ОбщиеМодули.Найти("Уч85БухСписокСервер");
Если Не Модуль.Сервер Или Не Модуль.ВызовСервера Или Модуль.КлиентУправляемоеПриложение
Или Модуль.КлиентОбычноеПриложение Или Модуль.ВнешнееСоединение Или Модуль.Глобальный Или Модуль.Привилегированный
Или Модуль.ПовторноеИспользованиеВозвращаемыхЗначений <> Метаданные.СвойстваОбъектов.ПовторноеИспользованиеВозвращаемыхЗначений.НеИспользовать Тогда
ВызватьИсключение "Свой серверный модуль без кэша/привилегий, с явно разрешенным вызовом сервера";
КонецЕсли;
Если План.МаксКоличествоСубконто <> 0 Или План.ПризнакиУчета.Количество() <> 0
Или План.ПризнакиУчетаСубконто.Количество() <> 0 Или Не Регистр.Корреспонденция Или Регистр.ПланСчетов <> План
Или Регистр.Измерения.Количество() <> 1 Или Регистр.Ресурсы.Количество() <> 1
Или Регистр.Реквизиты.Количество() <> 0 Или Регистр.ДлинаУточненияПериода <> 3
Или Документ.Реквизиты.Количество() <> 1 Или Документ.ТабличныеЧасти.Количество() <> 0 Тогда
ВызватьИсключение "Схема должна быть точной, без неизвестных измерений/ресурсов/субконто/реквизитов";
КонецЕсли;
Метка = Регистр.Измерения.Найти("UUIDОпыта85");
Сумма = Регистр.Ресурсы.Найти("Сумма");
МеткаДокумента = Документ.Реквизиты.Найти("UUIDОпыта85");
Если Метка = Неопределено Или Сумма = Неопределено Или МеткаДокумента = Неопределено Тогда
ВызватьИсключение "Нет собственного типизированногоUUID/ресурса";
КонецЕсли;
Если Метка.Тип.Типы().Количество() <> 1 Или Не Метка.Тип.СодержитТип(Тип("УникальныйИдентификатор"))
Или МеткаДокумента.Тип.Типы().Количество() <> 1 Или Не МеткаДокумента.Тип.СодержитТип(Тип("УникальныйИдентификатор"))
Или Не Метка.Балансовый Или Метка.Индексирование <> Метаданные.СвойстваОбъектов.Индексирование.Индексировать
Или Не Сумма.Балансовый Или Сумма.Тип.Типы().Количество() <> 1 Или Не Сумма.Тип.СодержитТип(Тип("Число"))
Или Сумма.Тип.КвалификаторыЧисла.Разрядность <> 15 Или Сумма.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 2 Тогда
ВызватьИсключение "Нужны балансовое индексированное UUIDизмерение и единственный ресурсЧисло15,2";
КонецЕсли;
Если Регистр.Формы.Количество() <> 1 Или Регистр.Формы.Найти("ФормаСписка85") = Неопределено
Или Документ.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Запретить Тогда
ВызватьИсключение "Нужна единственная своя обычная форма списка и непроводимый собственный документ";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойПустойСтенд(СвояТранзакция = Ложь)
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 1 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 1 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 1 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() <> СвояТранзакция Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыLIST_FORM — настоящая default ordinary AccountingList форма/event1
РегистрБухгалтерии.УчебныеБухИтоги85 → Формы → ФормаСписка85 → Модуль, целиком; назначить основной формой списка.
Толстый обычный клиент. Основной Список:РегистрБухгалтерииСписок.УчебныеБухИтоги85, обычное ТабличноеПоле; nativeBeforeOpen2/rowActivate1.
Перем Пульт85;
Перем Подготовлено85;
Процедура ПодготовитьСвоеОкно85(СвойПульт) Экспорт
Если Подготовлено85 = Истина Или Открыта() Или ТипЗнч(СвойПульт) <> Тип("Форма")
Или ТипЗнч(Список) <> Тип("РегистрБухгалтерииСписок.УчебныеБухИтоги85")
Или ЭлементыФормы.Список.Данные <> "Список" Или ЭлементыФормы.Список.Значение <> Список
Или Не ЭлементыФормы.Список.ТолькоПросмотр Тогда
ВызватьИсключение "Переиспользованное/чужое/не ordinary AccountingList окно не принимаем";
КонецЕсли;
Пульт85 = СвойПульт;
Пульт85.ПроверитьСвязь85();
Подготовлено85 = Истина;
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Попытка
Если Подготовлено85 <> Истина Или ТипЗнч(Отказ) <> Тип("Булево") Или ТипЗнч(СтандартнаяОбработка) <> Тип("Булево") Тогда
ВызватьИсключение "List форму открывает только свой проверенный пульт после подготовки";
КонецЕсли;
Пульт85.ПроверитьСвязь85();
Исключение
Отказ = Истина;
Если ТипЗнч(Пульт85) = Тип("Форма") Тогда
Пульт85.ОстановитьСвоеОкно85();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура СписокПриАктивизацииСтроки85(Элемент)
Если Подготовлено85 <> Истина Или Элемент <> ЭлементыФормы.Список
Или ТипЗнч(Элемент) <> Тип("ТабличноеПоле") Или Элемент.Значение <> Список Тогда
Если ТипЗнч(Пульт85) = Тип("Форма") Тогда
Пульт85.ОстановитьСвоеОкно85();
КонецЕсли;
ВызватьИсключение "Нужен настоящий native элемент собственной ordinary формы";
КонецЕсли;
Ключ = Элемент.ТекущаяСтрока;
Данные = Элемент.ТекущиеДанные;
Если Ключ = Неопределено Или Данные = Неопределено Тогда
Возврат;
КонецЕсли;
Пульт85.ПринятьСвоеNativeВыделение85(ЭтаФорма, Элемент, Ключ, Данные);
КонецПроцедурыAPPLICATION — полный собственный обычный startup0
УчебныйБухгалтерскийСписок85 → Модуль обычного приложения, целиком.
Модуль обычного приложения, толстый обычный Windows8.5.1.1343 клиент; actual native startup0.
Процедура ПриНачалеРаботыСистемы()
#Если ТолстыйКлиентОбычноеПриложение Тогда
Уч85БухСписокСервер.ПаспортСвоегоБухСписка85();
Форма = ПолучитьОбщуюФорму("ПультБухСписка85");
Если Форма = Неопределено Или ТипЗнч(Форма) <> Тип("Форма") Или Форма.Открыта() Тогда
ВызватьИсключение "Нужен свой еще не открытый ordinary пульт";
КонецЕсли;
Форма.Открыть();
#Иначе
ВызватьИсключение "Урок только для собственного толстого обычного Windows клиента8.5.1.1343";
#КонецЕсли
КонецПроцедурыРазбор по шагам
Независимая числовая модель: CashDrCapital1000, StockDrCash750, CashDrStock250. Rawtotal2000 не равен cashbalance500; изменение третьей500 дает raw2250, cash750, stock250, capitalcredit1000, затем возврат250 дает исходные числа. Virtual balances проверяются настоящим Query, не вычисленным mockтабличнымрезультатом.
Nativeсоздание документа/набора происходит лишь в authored COMMON при будущем ручном выполнении. Полный wholeRegister query безГДЕ отклоняет лишние/чужие строки даже при одинаковомcount3. Счета реально получаютОбъект, должны быть3разныхпредопределенных/балансовых/безсубконто, виды активный/пассивный проверены.
Main readonly список.Колонки/Отбор/Порядок дают реальные изменяемые объекты; readonly свойства не присваиваются. Обычное поле через actual source-value получает собственное расширение8props, на которого нет Newconstructor.
Реальные callbackCurrentRowAccountingKey/CurrentDataOfList сравниваются со свежим wholeDBsnapshot поregistrar/lineNumber/period/accounts/UUID/sum. Callback не вызывают вручную, повтор одной строки не дает полную доставку. Изменение профиля/DB сбрасывает только owndeliveryepoch, не записи.
Работа подготовленного списка ограничивается ownUUID+realrecorder+строгимdateinterval иPeriodAsc. Каждый переход требует последнегоexpectedprofile ивсеownsource7/GUI4bindings, другойактивныйfilterилиorder не перезаписывается.
Source.Refresh0 — явное перечитывание БД; AutoTrue/period10 — настройка штатного обновления, не измеренная гарантия задержки/атрибуции. Возможное отображение500приAutoFalse ивторойдругойnotification не называется дефектом timerAPI.
Транзакционныйcatch откатывает только ещё активную собственнуюtransaction. Серверныйrethrow не доказывает, что clientstate синхронизирован: всеRPCмаршруты имеют отдельный clientcatch stickyTrue иguard перед повтором. UIизменения не атомарны инеоткатываются автоматически.
Как проверить результат
Вручную nativeGUI firstfull3/2000→day1 one1000→day2 two1000→all3/2000; реальные разные rowevents/refs/счета/UUID/суммы, неодноSQLколичество.
Вручную firstownreplacement250→500:wholeDB3/2250, Cash750/Stock250/CapitalКт1000 иactualGUI3послеRefresh. Затем500→250:wholeDB3/2000, balances500/500/1000 иactualGUIfresh3; timerattributionнеизмерена.
Негативы: wrongFile/currentuserUUID/дополнительныйdoc/account/registerrow/changedperiod/sum/UUID/filter/order/GUIbinding/activeTx/reusedlistform/partialRPC останавливают урок ДО следующей собственной записи. Postcommitexception отдельно описан какunknownoutcome, безretry/delete.
Здесь staticPython/native/rawHBK tests проверяют sourcecontracts/arithmetics/negativepaths. BSLcompiler/defaultFormcache/nativeGUI/currentdata/timer/actualwrites не запускались; expected результаты нужно самостоятельно подтвердить только в своем стенде.
Ожидаемый результат
Ожидаемый будущий ручной результат: один настоящий ownAccountingList/source7/GUI4, три реальные ownпроводки2000→2250→2000, остатки500/500/Кт1000→750/250/Кт1000→500/500/Кт1000, отдельная actual deliveryкаждойстроки/периода. Здесь authoredsource/static only, actual1С/БД/UI/сеть/OS/files provisioning0.
На что обратить внимание
Ordinary AccountingList/AccountingTableBoxExtension — не managed DynamicList ине accumulator; nativefactory0/defaultmetadata/DataValueidentity обязательны.
NewRowShowCheck4305 не используется, неcredit. Readonly sourcefactory/settingsfactory не заменяют assignment этих свойств.
Интервал исключаетобеграницы; датана00:00 не входит. Source.Datefilter иStandardPeriod_beforeOpen различны, даже когдаобаобозначают октябрь.
AccountingRecordKey неустойчив после native set.Write; не сохранять ключи между заменами/phase. CurrentRowdelivery всегда свежая иотдельнаотDBquery.
ReadOnlyTableBox/FilterSettings.EnabledFalse — удобство viewer, не запрет произвольных DBwrites/security. GUIпараметры не означают datasetownership.
АвтообновлениеFalse не гарантируетнеподвижностьUI, True/10сек не доказываютtimerсрабатывание/attribution. Не присваивайте ожидание вместоactual rows.
При частичнойUI/RPCошибке clientstop остаетсяTrue; autoRestore/automaticretry/overwrite/delete чужого илинеожиданного нет. Postcommitfailure не означает отменуtransaction.
Старый frozen accountingTotals урок/source/tests не менялись; новаяordinaryCF не является дописываниемегоmanagedforms/12adminsteps. Всеauthoredmodules должны вставляться целиком в указанныеownlocations.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.