Тип: КолонкиСписка. Содержит объект для управления колонками списка. Набор колонок составляется из полей регистра.
Полное описание, параметры и ограничения
РегистрРасчетаСписок.<Имя регистра расчета>.Колонки (CalculationRegisterList.<Calculation register name>.Columns)
РегистрРасчетаСписок.<Имя регистра расчета> (CalculationRegisterList.<Calculation register name>)
Колонки (Columns)
Доступен, начиная с версии 8.0.
Использование:
Только чтение.
Описание:
Тип: КолонкиСписка.
Содержит объект для управления колонками списка. Набор колонок составляется из полей регистра.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Список регистра расчета: свой фильтр, порядок и настоящий ключ строки
Один собственный учебный процесс: два вида расчета, два регистратора и три строки. Полная база1250 проверяется до UI, наборA меняется500→600 только после отдельного согласия, затем независимое чтение подтверждает1350 и неизменные500 уБ.
Где и как запускать
Только собственная новая файловая CF Windows8.5.1.1343, толстый обычный клиент. Ручная подготовка и одна явная будущая запись собственногоA; здесь нет запуска1С, созданияCF, записиБД или сетевых обращений.
Подготовка
Все действия ниже выполните самостоятельно только в новой пустой учебной файловой базе Windows8.5.1.1343 по пути C:\1c-labs\OwnCalculationInvoiceViews21_25ecfba2-7f32-40c5-a5b3-bb5e777e4afb\IB. Имя конфигурации УчебныеНачисления85, ОсновнойРежимЗапуска=ОбычноеПриложение, совместимость НеИспользовать. Здесь 1С, база, макеты, запросы и запись не запускались. Не используйте копию рабочей конфигурации.
В Конфигураторе Сервис → Параметры → Общие → Редактирование конфигурации для режима запуска выберите Оба; это настройка редактора, а не выдуманное свойство SupportedRunModes. Создайте одну полную собственную роль с Администрирование и одного пользователя Начисления85Ученик. ПолучитьПользователей требует административных прав. Другие пользователи и сеансы стенда не нужны.
Создайте ПланыВидовРасчета → Начисления85: строковый код длиной10, наименование50, ИспользованиеПериодаДействия=Нет, ЗависимостьОтВидовРасчета=НеИспользовать, БыстрыйВыбор=Да, СпособВыбора=ОбоимиСпособами. Базовых видов расчета, дополнительных реквизитов, табличных частей и истории данных в уроке нет. Список видов расчета должен быть обычным, не управляемым.
Создайте документ Регистратор85 с номером строка10, ручной нумерацией, проведением Разрешить, без табличных частей. Единственный дополнительный реквизит Метка85 типа Строка(40). Позже в движениях документа отметьте только собственный регистр Начисления85. ДокументыA/B в этом уроке сохраняются без проведения; проведение не используется для формирования этих трех строк.
Создайте РегистрРасчета Начисления85: ПВР Начисления85, периодичность Месяц, ПериодДействия=Нет, БазовыйПериод=Нет, график не назначен, перерасчетов нет. Единственное измерение Сотрудник85 типа Строка(20); ресурс Сумма85 типа Число(12,2), реквизит Метка85 типа Строка(40). Документ Регистратор85 — единственный регистратор. В других регистрах никаких данных нет.
Сначала подготовьте данные через стандартный интерфейс собственной базы, пока модули урока и его приложение еще пустые. В ПВР вручную создайте WORK85/Работа85 и BONUS85/Премия85 без пометки удаления. Создайте документыA85 иB85 от10.10.2026 00:00:00, без проведения и пометки удаления. Их Метка85=25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/A и 25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/B соответственно. Эти действия требуют отдельного вашего согласия на создание именно собственных учебных данных; здесь они не выполнялись.
В стандартных формах наборов только своего регистра вручную запишитеA: строка1 Работа85/500, строка2 Премия85/250; B: строка1 Работа85/500. У всех Активность=Да, Сторно=Нет, ПериодРегистрации=01.10.2026 00:00:00, Сотрудник85=Иван85. Метки строк=25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/A1, /A2, /B1. НомерСтроки задает платформа с1 внутри регистратора, не присваивайте readonly поле кодом. В базе должны быть ровно3 строки. До установки защитных модулей самостоятельно проверьтеA750, B500 и общий1250.
Создайте обычную общую форму ПанельНачислений85. Реквизиты Вид85 типа ПланВидовРасчетаСсылка.Начисления85 и Состояние85 типа Строка. ПолеВвода Вид85 связано Данные=Вид85; событие ПриИзменении → ВидПриИзменении85. Кнопки ОткрытьСписок85, ВыбратьВид85, ОткрытьНабор85 назначаются одноименным процедурам Нажатие. ПриОткрытии и ОбработкаВыбора назначаются одноименным событиям формы. Состояние85 — поле просмотра.
В собственном регистре мастером создайте обычные ФормаСписка85 и ФормаНабора85. Главный реквизит формы списка Список85 типа РегистрРасчетаСписок.Начисления85; главный реквизит формы набора Набор85 типа РегистрРасчетаНаборЗаписей.Начисления85. Это настоящие списки и наборы, предоставляемые фабриками регистра, не Новый расширение. В обеих формах ТабличноеПоле Записи85 с Данные=Список85/Набор85 и ТолькоПросмотр=Да; связанные колонки Регистратор, НомерСтроки, ВидРасчета, Сумма85, Сотрудник85, Метка85, Активность, ПериодРегистрации, Сторно. Имя связанной колонки ВидРасчета сохраните точно.
В форме списка реквизит Состояние85 — Строка. ПередОткрытием → одноименная процедура2, ПриОткрытии → одноименная процедура0. Для Записи85 событие ПриАктивизацииСтроки → ПриАктивизацииСтроки85 с первым настоящим Элемент. Список обновляется из базы, фильтр и порядок перечитываются. Числа из полного запроса не считаются доказательством числа видимых строк; выбранная строка поля проверяется отдельно по native ключу и ДанныеСтроки.
В форме набора реквизиты Согласие85 Булево, Результат85 Число(2,0), Состояние85 Строка. Согласие85 — свой флажок, исходно Нет. Кнопки Записать85 и Отмена85 назначаются одноименным обработчикам Нажатие. ПередОткрытием2, ПриОткрытии0, ПередЗаписью1, ПослеЗаписи0 назначаются одноименным событиям именно этой формы. MAIN формы набора изменяет500→600 только в ее памяти; запись выполняется только после флажка согласия и собственной кнопки.
В ПВР мастером создайте обычную ФормаСписка85 с главным реквизитом Список85 типа ПланВидовРасчетаСписок.Начисления85. ТабличноеПоле Виды85 связано с Список85, ТолькоПросмотр=Да, колонки Код и Наименование. ПередОткрытием2 и ПриОткрытии0 — события формы; событие Выбор поля → ВыборВида85 с четырьмя формалами: базовые3 и первым Элемент из ordinary event104. Дважды щелкайте только колонку Наименование. Native ТекущаяСтрока здесь возвращает собственную ссылкуПВР; пользовательский выбор передается владельцу через ОповеститьОВыборе, не прямым вызовом ОбработкаВыбора.
После подготовки трех строк вставьте все полные модули ниже. Общий модуль УчебныеНачисления85: Глобальный=Нет, КлиентОбычноеПриложение=Да, КлиентУправляемоеПриложение=Нет, Сервер=Да, ВызовСервера=Нет, ВнешнееСоединение=Нет, Привилегированный=Нет, повторное использование возвращаемых значений НеИспользовать. Общий модуль только читает и проверяет данные; клиентские методы форм в нем отсутствуют. В модуль набора записей именно своего регистра вставьте SET_MODULE целиком; его native события имеют5 формалов и в иных compiled контекстах отказывают.
Вставьте HUB/LIST/SET_FORM/PVR_FORM в соответствующие четыре модуля форм и APPLICATION в модуль обычного приложения. Для собственной CF разрешите штатное использование модальности; запускайте только толстый обычный клиент. Подготовить85 — собственный экспортный initializer, не native событие. Native handlers вручную не вызывайте. Обновите только свой стенд и войдите одним своим пользователем.
Сначала изучите быстрый выбор вида расчета: Работа дает1000, Премия250. Отдельная форма ПВР позиционируется настоящей ссылкой до открытия. Откройте список регистра: собственныйA и выбранный вид ограничивают записи; программа сверяет параметры, сам список и данные фактической выбранной строки. Политика стандартной картинки перечитывается, но пиксели и внешний вид здесь не проверялись.
Откройте свой наборA. В памяти он станет850, база пока остается1250. Отмена проверяет исходную базу и пытается закрыть только свой буфер без ЗаписатьВФорме. Если платформа спросит о сохранении, откажитесь от сохранения; при отмененном закрытии модальный вызов панели еще не продолжается. Штатный диалог измененной формы и GUI здесь не проверялись. При следующем открытии исходные1250 снова проверяются. Для записи отдельно отметьте согласие и нажмите Записать. Ожидаются общий1350, A850, B500 и Работа1100. Ложь, ошибка или неизвестный исход переводят форму вСТОП, без автоматического повторения записи. Если база уже изменилась, повторение с исходного состояния запрещено; самостоятельно изучите результат в своем стенде.
Перем Остановка85, Готово85, Этап85, Снимок85, ВыбранныйВид85;
Процедура Подготовить85(Состояние, Этап, Вид) Экспорт
Если Остановка85 <> Неопределено Или Готово85 <> Неопределено Тогда
Остановка85 = Истина;
ВызватьИсключение "Повторная подготовка формы списка запрещена";
КонецЕсли;
Остановка85 = Ложь;
Попытка
Снимок85 = УчебныеНачисления85.ПрочитатьСтенд85(Этап);
Если Состояние.А <> Снимок85.А Или Состояние.Б <> Снимок85.Б
Или (Вид <> Снимок85.Работа И Вид <> Снимок85.Премия)
Или ЭтаФорма.ПараметрОтборПоРегистратору <> Снимок85.А Тогда
ВызватьИсключение "Начальный отбор должен принадлежать своему документуA";
КонецЕсли;
Этап85 = Этап;
ВыбранныйВид85 = Вид;
Готово85 = Истина;
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = Истина;
Если Остановка85 Или Готово85 <> Истина Или ВладелецФормы = Неопределено Тогда
ВызватьИсключение "Нужна подготовленная собственная подчиненная форма списка";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Отказ = Ложь;
КонецПроцедуры
Процедура ПриОткрытии()
Попытка
Если Остановка85 Или Готово85 <> Истина
Или ТипЗнч(Список85) <> Тип("РегистрРасчетаСписок.Начисления85") Тогда
ВызватьИсключение "Основной реквизит должен быть настоящим списком своего регистра";
КонецЕсли;
Колонки = Список85.Колонки;
Если Колонки.Найти("Сумма85") = Неопределено Или Колонки.Найти("ВидРасчета") = Неопределено Тогда
ВызватьИсключение "В списке должны быть настоящие поля своего регистра";
КонецЕсли;
Список85.Отбор.Регистратор.Установить(Снимок85.А, Истина);
Список85.Отбор.ВидРасчета.Установить(ВыбранныйВид85, Истина);
Список85.Порядок.Установить("НомерСтроки Возр");
Список85.Обновить();
Если Не Список85.Отбор.Регистратор.Использование Или Список85.Отбор.Регистратор.Значение <> Снимок85.А
Или Не Список85.Отбор.ВидРасчета.Использование Или Список85.Отбор.ВидРасчета.Значение <> ВыбранныйВид85
Или Список85.Порядок.Количество() <> 1 Или Список85.Порядок.Получить(0).Данные <> "НомерСтроки" Тогда
ВызватьИсключение "Не перечитаны отбор и порядок собственного списка";
КонецЕсли;
Поле = ЭлементыФормы.Записи85;
Если ТипЗнч(Поле) <> Тип("ТабличноеПоле") Или Поле.Данные <> "Список85" Или Не Поле.ТолькоПросмотр Тогда
ВызватьИсключение "Табличное поле должно показывать собственный список только для просмотра";
КонецЕсли;
Колонка = Поле.Колонки.ВидРасчета;
Колонка.ОтображатьСтандартнуюКартинку = Истина;
Если Не Поле.Колонки.ВидРасчета.ОтображатьСтандартнуюКартинку Тогда
ВызватьИсключение "Не прочитана политика штатной картинки связанной колонки";
КонецЕсли;
Итоги = УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Состояние85 = "СуммаA для выбранного вида=" + Строка(УчебныеНачисления85.Итоги85(Итоги, Итоги.А, ВыбранныйВид85)) + ". Выберите показанную строку для отдельной проверки данных поля.";
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПриАктивизацииСтроки85(Элемент)
Попытка
Если Остановка85 Или Готово85 <> Истина Или Элемент <> ЭлементыФормы.Записи85 Тогда
ВызватьИсключение "Строка должна быть активизирована в своем списке";
КонецЕсли;
Ключ = Элемент.ТекущаяСтрока;
Если Ключ = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Ключ) <> Тип("РегистрРасчетаКлючЗаписи.Начисления85") Или Ключ.Регистратор <> Снимок85.А Тогда
ВызватьИсключение "Текущая строка должна возвращать настоящий ключ собственногоA";
КонецЕсли;
Данные = Элемент.ДанныеСтроки(Ключ);
Снятые = УчебныеНачисления85.СнятьСтроку85(Данные);
Если Снятые.Регистратор <> Ключ.Регистратор Или Снятые.НомерСтроки <> Ключ.НомерСтроки
Или Снятые.ВидРасчета <> ВыбранныйВид85 Тогда
ВызватьИсключение "Данные фактической строки не соответствуют ее ключу и отбору";
КонецЕсли;
Состояние = УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Найдена = Ложь;
Для Каждого Строка Из Состояние.Строки Цикл
Если Строка.Регистратор = Ключ.Регистратор И Строка.НомерСтроки = Ключ.НомерСтроки Тогда
Если Найдена Или Строка.Регистратор <> Снятые.Регистратор Или Строка.НомерСтроки <> Снятые.НомерСтроки
Или Строка.Активность <> Снятые.Активность Или Строка.ПериодРегистрации <> Снятые.ПериодРегистрации
Или Строка.ВидРасчета <> Снятые.ВидРасчета Или Строка.Сторно <> Снятые.Сторно
Или Строка.Сотрудник85 <> Снятые.Сотрудник85 Или Строка.Сумма85 <> Снятые.Сумма85
Или Строка.Метка85 <> Снятые.Метка85 Тогда
ВызватьИсключение "Поля фактической строки отличаются от полного свежего источника";
КонецЕсли;
Найдена = Истина;
КонецЕсли;
КонецЦикла;
Если Не Найдена Тогда
ВызватьИсключение "Строка поля отсутствует в полном собственном источнике";
КонецЕсли;
Состояние85 = "Прочитаны настоящие ключ и данные выбранной строки; сумма=" + Строка(Снятые.Сумма85);
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыОбщий модуль: полный собственный источник, строки и границы записи
Своя CF → ОбщиеМодули → УчебныеНачисления85, целиком
Сервер и толстый обычный клиент; только чтение и проверка. Полные flags приведены в подготовке.
Процедура ПроверитьСтенд85() Экспорт
Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnCalculationInvoiceViews21_25ecfba2-7f32-40c5-a5b3-bb5e777e4afb\IB"";" Или Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужна только своя учебная файловая база 8.5.1.1343";
КонецЕсли;
Если Метаданные.Документы.Количество() <> 1 Или Метаданные.Документы.Найти("Регистратор85") = Неопределено
Или Метаданные.ПланыВидовРасчета.Количество() <> 1 Или Метаданные.ПланыВидовРасчета.Найти("Начисления85") = Неопределено
Или Метаданные.РегистрыРасчета.Количество() <> 1 Или Метаданные.РегистрыРасчета.Найти("Начисления85") = Неопределено
Или Метаданные.Справочники.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0
Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0
Или Метаданные.ОбщиеМодули.Количество() <> 1 Или Метаданные.Роли.Количество() <> 1 Тогда
ВызватьИсключение "В учебной конфигурации нужны только собственные документ, ПВР, регистр и общий модуль";
КонецЕсли;
Регистр = Метаданные.РегистрыРасчета.Начисления85;
План = Метаданные.ПланыВидовРасчета.Начисления85;
Если Регистр.ПериодДействия Или Регистр.БазовыйПериод
Или Регистр.ПланВидовРасчета <> План Или Регистр.Перерасчеты.Количество() <> 0
Или План.ИспользованиеПериодаДействия
Или План.ЗависимостьОтВидовРасчета <> Метаданные.СвойстваОбъектов.ИспользованиеБазыПланаВидовРасчета.НеИспользовать Тогда
ВызватьИсключение "В уроке нет периодов действия, базы и перерасчетов";
КонецЕсли;
Если Регистр.Измерения.Количество() <> 1 Или Регистр.Измерения.Найти("Сотрудник85") = Неопределено
Или Регистр.Ресурсы.Количество() <> 1 Или Регистр.Ресурсы.Найти("Сумма85") = Неопределено
Или Регистр.Реквизиты.Количество() <> 1 Или Регистр.Реквизиты.Найти("Метка85") = Неопределено
Или Метаданные.Документы.Регистратор85.Движения.Количество() <> 1
Или Не Метаданные.Документы.Регистратор85.Движения.Содержит(Регистр) Тогда
ВызватьИсключение "Изменились поля своего регистра или состав движений документа";
КонецЕсли;
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
Если Текущий = Неопределено Или Пользователи.Количество() <> 1 Тогда
ВызватьИсключение "В стенде должен быть один учебный пользователь";
КонецЕсли;
Если Текущий.Имя <> "Начисления85Ученик" Или Текущий.УникальныйИдентификатор <> Пользователи[0].УникальныйИдентификатор Тогда
ВызватьИсключение "Это другой учебный пользователь";
КонецЕсли;
КонецПроцедуры
Функция ПрочитатьСтенд85(Этап) Экспорт
ПроверитьСтенд85();
Если Этап <> 0 И Этап <> 1 Тогда
ВызватьИсключение "Неизвестный этап проверки базы";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Номер, Дата, Проведен, ПометкаУдаления, Метка85 ИЗ Документ.Регистратор85";
Документы = Запрос.Выполнить().Выгрузить();
Если Документы.Количество() <> 2 Тогда
ВызватьИсключение "Нужны ровно два собственных подготовленных документа";
КонецЕсли;
А = Неопределено;
Б = Неопределено;
Для Каждого Документ Из Документы Цикл
Если ТипЗнч(Документ.Ссылка) <> Тип("ДокументСсылка.Регистратор85")
Или ТипЗнч(Документ.Номер) <> Тип("Строка") Или ТипЗнч(Документ.Дата) <> Тип("Дата")
Или ТипЗнч(Документ.Проведен) <> Тип("Булево") Или Документ.Проведен
Или ТипЗнч(Документ.ПометкаУдаления) <> Тип("Булево") Или Документ.ПометкаУдаления
Или Документ.Дата <> Дата(2026, 10, 10) Тогда
ВызватьИсключение "Изменился документ собственного стенда";
КонецЕсли;
Если Документ.Номер = "A85" И Документ.Метка85 = "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/A" И А = Неопределено Тогда
А = Документ.Ссылка;
ИначеЕсли Документ.Номер = "B85" И Документ.Метка85 = "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/B" И Б = Неопределено Тогда
Б = Документ.Ссылка;
Иначе
ВызватьИсключение "Документ не принадлежит этому учебному сценарию";
КонецЕсли;
КонецЦикла;
Если А = Неопределено Или Б = Неопределено Или А = Б Тогда
ВызватьИсключение "Не найдена собственная пара документов";
КонецЕсли;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Код, Наименование, ПометкаУдаления ИЗ ПланВидовРасчета.Начисления85";
Виды = Запрос.Выполнить().Выгрузить();
Если Виды.Количество() <> 2 Тогда
ВызватьИсключение "Подготовьте ровно два собственных вида расчета";
КонецЕсли;
Работа = Неопределено;
Премия = Неопределено;
Для Каждого Вид Из Виды Цикл
Если ТипЗнч(Вид.Ссылка) <> Тип("ПланВидовРасчетаСсылка.Начисления85") Или Вид.ПометкаУдаления Тогда
ВызватьИсключение "Изменился собственный вид расчета";
КонецЕсли;
Если Вид.Код = "WORK85" И Вид.Наименование = "Работа85" И Работа = Неопределено Тогда
Работа = Вид.Ссылка;
ИначеЕсли Вид.Код = "BONUS85" И Вид.Наименование = "Премия85" И Премия = Неопределено Тогда
Премия = Вид.Ссылка;
Иначе
ВызватьИсключение "Это другой вид расчета";
КонецЕсли;
КонецЦикла;
Если Работа = Неопределено Или Премия = Неопределено Или Работа = Премия Тогда
ВызватьИсключение "Не найдена собственная пара видов расчета";
КонецЕсли;
Запрос.Текст = "ВЫБРАТЬ Регистратор, НомерСтроки, Активность, ПериодРегистрации, ВидРасчета, Сторно, Сотрудник85, Сумма85, Метка85 ИЗ РегистрРасчета.Начисления85";
Строки = Запрос.Выполнить().Выгрузить();
Если Строки.Количество() <> 3 Тогда
ВызватьИсключение "В регистре должны находиться ровно три свои строки";
КонецЕсли;
Снимок = Новый Массив;
Для Каждого Строка Из Строки Цикл
Снимок.Добавить(СнятьСтроку85(Строка));
КонецЦикла;
Состояние = Новый ФиксированнаяСтруктура("А,Б,Работа,Премия,Строки", А, Б, Работа, Премия, Новый ФиксированныйМассив(Снимок));
ПроверитьСтроки85(Состояние.Строки, Состояние, Этап, Ложь);
Возврат Состояние;
КонецФункции
Функция СнятьСтроку85(Строка) Экспорт
Если ТипЗнч(Строка.Регистратор) <> Тип("ДокументСсылка.Регистратор85")
Или ТипЗнч(Строка.НомерСтроки) <> Тип("Число") Или ТипЗнч(Строка.Активность) <> Тип("Булево")
Или ТипЗнч(Строка.ПериодРегистрации) <> Тип("Дата")
Или ТипЗнч(Строка.ВидРасчета) <> Тип("ПланВидовРасчетаСсылка.Начисления85")
Или ТипЗнч(Строка.Сторно) <> Тип("Булево") Или ТипЗнч(Строка.Сотрудник85) <> Тип("Строка")
Или ТипЗнч(Строка.Сумма85) <> Тип("Число") Или ТипЗнч(Строка.Метка85) <> Тип("Строка") Тогда
ВызватьИсключение "Нарушены типы полей своей строки";
КонецЕсли;
Возврат Новый ФиксированнаяСтруктура("Регистратор,НомерСтроки,Активность,ПериодРегистрации,ВидРасчета,Сторно,Сотрудник85,Сумма85,Метка85", Строка.Регистратор, Строка.НомерСтроки, Строка.Активность, Строка.ПериодРегистрации, Строка.ВидРасчета, Строка.Сторно, Строка.Сотрудник85, Строка.Сумма85, Строка.Метка85);
КонецФункции
Процедура ПроверитьСтроки85(Строки, Состояние, Этап, ТолькоА) Экспорт
Если ТипЗнч(Строки) <> Тип("ФиксированныйМассив") Или Строки.Количество() <> ?(ТолькоА, 2, 3) Тогда
ВызватьИсключение "Изменилось полное число своих строк";
КонецЕсли;
ВиденыА1 = Ложь;
ВиденыА2 = Ложь;
ВиденыБ1 = Ложь;
Для Каждого Строка Из Строки Цикл
Если ТипЗнч(Строка) <> Тип("ФиксированнаяСтруктура") Или Строка.Количество() <> 9
Или Не Строка.Активность Или Строка.Сторно
Или Строка.ПериодРегистрации <> Дата(2026, 10, 1) Или Строка.Сотрудник85 <> "Иван85" Тогда
ВызватьИсключение "Изменились общие поля своей строки";
КонецЕсли;
Строка = СнятьСтроку85(Строка);
Если Строка.Регистратор = Состояние.А И Строка.НомерСтроки = 1 И Не ВиденыА1
И Строка.ВидРасчета = Состояние.Работа И Строка.Сумма85 = ?(Этап = 0, 500, 600)
И Строка.Метка85 = "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/A1" Тогда
ВиденыА1 = Истина;
ИначеЕсли Строка.Регистратор = Состояние.А И Строка.НомерСтроки = 2 И Не ВиденыА2
И Строка.ВидРасчета = Состояние.Премия И Строка.Сумма85 = 250
И Строка.Метка85 = "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/A2" Тогда
ВиденыА2 = Истина;
ИначеЕсли Не ТолькоА И Строка.Регистратор = Состояние.Б И Строка.НомерСтроки = 1 И Не ВиденыБ1
И Строка.ВидРасчета = Состояние.Работа И Строка.Сумма85 = 500
И Строка.Метка85 = "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb/B1" Тогда
ВиденыБ1 = Истина;
Иначе
ВызватьИсключение "Не совпали ключ, вид расчета, сумма или собственная метка";
КонецЕсли;
КонецЦикла;
Если Не ВиденыА1 Или Не ВиденыА2 Или (Не ТолькоА И Не ВиденыБ1) Тогда
ВызватьИсключение "Не прочитаны все собственные строки";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьНабор85(Набор, Состояние, Этап) Экспорт
Если ТипЗнч(Набор) <> Тип("РегистрРасчетаНаборЗаписей.Начисления85") Или Набор.Количество() <> 2
Или Не Набор.Отбор.Регистратор.Использование Или Набор.Отбор.Регистратор.Значение <> Состояние.А Тогда
ВызватьИсключение "Набор должен принадлежать только собственному документу A";
КонецЕсли;
Строки = Новый Массив;
Для Каждого Строка Из Набор Цикл
Строки.Добавить(СнятьСтроку85(Строка));
КонецЦикла;
ПроверитьСтроки85(Новый ФиксированныйМассив(Строки), Состояние, Этап, Истина);
КонецПроцедуры
Функция Итоги85(Состояние, Регистратор = Неопределено, Вид = Неопределено) Экспорт
Сумма = 0;
Для Каждого Строка Из Состояние.Строки Цикл
Если (Регистратор = Неопределено Или Строка.Регистратор = Регистратор)
И (Вид = Неопределено Или Строка.ВидРасчета = Вид) Тогда
Сумма = Сумма + Строка.Сумма85;
КонецЕсли;
КонецЦикла;
Возврат Сумма;
КонецФункции
Процедура ПроверитьРазрешение85(Набор, Этап) Экспорт
ПроверитьСтенд85();
Разрешение = Неопределено;
Если Не Набор.ДополнительныеСвойства.Свойство("СвояЗапись85", Разрешение)
Или ТипЗнч(Разрешение) <> Тип("Структура") Или Разрешение.Количество() <> 3 Тогда
ВызватьИсключение "Нет отдельного согласия на собственную учебную запись";
КонецЕсли;
Если Разрешение.Метка <> "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb" Или Разрешение.Этап <> Этап
Или ТипЗнч(Разрешение.Состояние) <> Тип("ФиксированнаяСтруктура") Тогда
ВызватьИсключение "Разрешение уже использовано либо принадлежит другой операции";
КонецЕсли;
Свежий = ПрочитатьСтенд85(?(Этап = "готово", 0, 1));
Если Разрешение.Состояние.Количество() <> 5 Или Разрешение.Состояние.А <> Свежий.А
Или Разрешение.Состояние.Б <> Свежий.Б Или Разрешение.Состояние.Работа <> Свежий.Работа
Или Разрешение.Состояние.Премия <> Свежий.Премия Тогда
ВызватьИсключение "Разрешение не совпадает с фактическими собственными ссылками базы";
КонецЕсли;
ПроверитьСтроки85(Разрешение.Состояние.Строки, Свежий, 0, Ложь);
ПроверитьНабор85(Набор, Свежий, 1);
КонецПроцедурыМодуль набора: настоящие события записи с пятью параметрами
Своя CF → РегистрыРасчета → Начисления85 → МодульНабораЗаписей, целиком
Native сервер/толстый клиент; тело только с compiled символом ТолстыйКлиентОбычноеПриложение собственной файловой CF. Иные контексты отказывают до клиентского процесса.
Процедура ПередЗаписью(Отказ, Замещение, ТолькоЗапись, ЗаписьФактическогоПериодаДействия, ЗаписьПерерасчетов)
Отказ = Истина;
#Если ТолстыйКлиентОбычноеПриложение Тогда
Если Не Замещение Тогда
ВызватьИсключение "Дописывание строк в этом учебном процессе запрещено";
КонецЕсли;
УчебныеНачисления85.ПроверитьРазрешение85(ЭтотОбъект, "готово");
Разрешение = ЭтотОбъект.ДополнительныеСвойства.СвояЗапись85;
Разрешение.Этап = "начато";
Отказ = Ложь;
#Иначе
Отказ = Истина;
#КонецЕсли
КонецПроцедуры
Процедура ПриЗаписи(Отказ, Замещение, ТолькоЗапись, ЗаписьФактическогоПериодаДействия, ЗаписьПерерасчетов)
Отказ = Истина;
#Если ТолстыйКлиентОбычноеПриложение Тогда
УчебныеНачисления85.ПроверитьРазрешение85(ЭтотОбъект, "начато");
Разрешение = ЭтотОбъект.ДополнительныеСвойства.СвояЗапись85;
Разрешение.Этап = "записано";
Отказ = Ложь;
#Иначе
Отказ = Истина;
#КонецЕсли
КонецПроцедурыМодуль обычного приложения: открыть только свою панель
Своя CF → Модуль обычного приложения, целиком
Только толстый обычный клиент этой учебной файловой CF.
Процедура ПриНачалеРаботыСистемы()
#Если ТолстыйКлиентОбычноеПриложение Тогда
УчебныеНачисления85.ПроверитьСтенд85();
Форма = ПолучитьОбщуюФорму("ПанельНачислений85");
Если Форма.ВладелецФормы <> Неопределено Тогда
ВызватьИсключение "Откройте самостоятельную учебную панель";
КонецЕсли;
Форма.Открыть();
#Иначе
ВызватьИсключение "Нужен толстый обычный клиент собственной файловой базы";
#КонецЕсли
КонецПроцедурыПанель начислений: быстрый выбор своего вида и открытие набораA
Своя CF → Общие → ОбщиеФормы → ПанельНачислений85 → Модуль целиком
Только толстый обычный клиент; этот модуль полностью дополняет текущий MAIN.
Перем Остановка85, Этап85, СвойСнимок85, ФормаВидов85, ФормаСписка85;
Процедура ПриОткрытии()
Если Остановка85 <> Неопределено Или Этап85 <> Неопределено Тогда
Остановка85 = Истина;
ВызватьИсключение "Повторное открытие не снимает остановку";
КонецЕсли;
Остановка85 = Ложь;
Попытка
#Если ТолстыйКлиентОбычноеПриложение Тогда
СвойСнимок85 = УчебныеНачисления85.ПрочитатьСтенд85(0);
Если ВладелецФормы <> Неопределено Тогда
ВызватьИсключение "Откройте самостоятельную собственную общую форму";
КонецЕсли;
Типы = ПланыВидовРасчета.ТипВсеСсылки();
Если Типы.Типы().Количество() <> 1 Или Не Типы.СодержитТип(Тип("ПланВидовРасчетаСсылка.Начисления85")) Тогда
ВызватьИсключение "Типы ссылок должны принадлежать только своему ПВР";
КонецЕсли;
Вид85 = СвойСнимок85.Работа;
Поле = ЭлементыФормы.Вид85;
Если ТипЗнч(Поле) <> Тип("ПолеВвода") Или Поле.Данные <> "Вид85" Тогда
ВызватьИсключение "Поле ввода должно быть связано со своей ссылкой на вид расчета";
КонецЕсли;
Поле.БыстрыйВыбор = Истина;
Если Не Поле.БыстрыйВыбор Или Поле.Значение <> СвойСнимок85.Работа Тогда
ВызватьИсключение "Не прочитан собственный вид расчета в быстром выборе";
КонецЕсли;
Этап85 = 0;
Состояние85 = "База1250; документA750; Работа1000. Записи пока не изменялись.";
#Иначе
ВызватьИсключение "Нужен толстый обычный клиент";
#КонецЕсли
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ОткрытьСписок85(Элемент)
Попытка
Если Остановка85 Или Элемент <> ЭлементыФормы.ОткрытьСписок85 Тогда
ВызватьИсключение "Нужна своя команда неостановленной формы";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
ФормаСписка85 = РегистрыРасчета.Начисления85.ПолучитьФормуСписка("ФормаСписка85", ЭтаФорма, Новый УникальныйИдентификатор);
Если ФормаСписка85 = Неопределено Или ФормаСписка85.ВладелецФормы <> ЭтаФорма Тогда
ВызватьИсключение "Не получена своя форма списка с настоящим владельцем";
КонецЕсли;
ФормаСписка85.ПараметрОтборПоРегистратору = СвойСнимок85.А;
ФормаСписка85.Подготовить85(СвойСнимок85, Этап85, Вид85);
ФормаСписка85.Открыть();
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ВыбратьВид85(Элемент)
Попытка
Если Остановка85 Или Элемент <> ЭлементыФормы.ВыбратьВид85 Тогда
ВызватьИсключение "Нужна своя команда выбора";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
ФормаВидов85 = ПланыВидовРасчета.Начисления85.ПолучитьФормуСписка("ФормаСписка85", ЭтаФорма, Новый УникальныйИдентификатор);
Если ФормаВидов85 = Неопределено Или ФормаВидов85.ВладелецФормы <> ЭтаФорма Тогда
ВызватьИсключение "Не получена собственная форма видов расчета";
КонецЕсли;
ФормаВидов85.ПараметрТекущаяСтрока = Вид85;
ФормаВидов85.Подготовить85(СвойСнимок85, Этап85);
ФормаВидов85.Открыть();
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ВидПриИзменении85(Элемент)
Попытка
Если Остановка85 Или Элемент <> ЭлементыФормы.Вид85
Или (Вид85 <> СвойСнимок85.Работа И Вид85 <> СвойСнимок85.Премия) Тогда
ВызватьИсключение "Изменение должно прийти от своего ввода с подготовленной ссылкой";
КонецЕсли;
Состояние = УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Состояние85 = "Всего=" + Строка(УчебныеНачисления85.Итоги85(Состояние)) + "; выбранный вид=" + Строка(УчебныеНачисления85.Итоги85(Состояние, , Вид85));
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)
Попытка
Если Остановка85 Или Источник <> ФормаВидов85
Или ТипЗнч(ЗначениеВыбора) <> Тип("ПланВидовРасчетаСсылка.Начисления85")
Или (ЗначениеВыбора <> СвойСнимок85.Работа И ЗначениеВыбора <> СвойСнимок85.Премия) Тогда
ВызватьИсключение "Выбор должен прийти из собственной формы с одним своим видом расчета";
КонецЕсли;
Состояние = УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Вид85 = ЗначениеВыбора;
Состояние85 = "Принята настоящая ссылка; сумма выбранного вида=" + Строка(УчебныеНачисления85.Итоги85(Состояние, , Вид85));
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ОткрытьНабор85(Элемент)
Попытка
Если Остановка85 Или Этап85 <> 0 Или Элемент <> ЭлементыФормы.ОткрытьНабор85 Тогда
ВызватьИсключение "Изменение своегоA разрешено только один раз в исходном состоянии";
КонецЕсли;
Состояние = УчебныеНачисления85.ПрочитатьСтенд85(0);
Набор = РегистрыРасчета.Начисления85.СоздатьНаборЗаписей();
Если Набор.Количество() <> 0 Тогда
ВызватьИсключение "Фабрика должна вернуть новый пустой набор";
КонецЕсли;
Набор.Отбор.Регистратор.Установить(Состояние.А, Истина);
Набор.Прочитать();
УчебныеНачисления85.ПроверитьНабор85(Набор, Состояние, 0);
ФормаНабора = Набор.ПолучитьФорму("ФормаНабора85", ЭтаФорма, Новый УникальныйИдентификатор);
Если ФормаНабора = Неопределено Или ФормаНабора.ВладелецФормы <> ЭтаФорма Тогда
ВызватьИсключение "Не получена форма этого собственного набора";
КонецЕсли;
ФормаНабора.Подготовить85(Состояние);
ФормаНабора.ОткрытьМодально();
Итог = УчебныеНачисления85.ПрочитатьСтенд85(ФормаНабора.Результат85);
Этап85 = ФормаНабора.Результат85;
Состояние85 = "Всего=" + Строка(УчебныеНачисления85.Итоги85(Итог)) + "; A=" + Строка(УчебныеНачисления85.Итоги85(Итог, Итог.А)) + "; Б=" + Строка(УчебныеНачисления85.Итоги85(Итог, Итог.Б));
Исключение
Остановка85 = Истина;
Состояние85 = "СТОП: исход записи неизвестен; повторная запись автоматически не выполняется.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыНаборA: изменение в памяти, отдельное согласие и проверка записи
Своя CF → РегистрыРасчета → Начисления85 → Формы → ФормаНабора85 → Модуль целиком
Только толстый обычный клиент; этот модуль полностью дополняет текущий MAIN.
Перем Остановка85, Этап85, Снимок85;
Процедура Подготовить85(Состояние) Экспорт
Если Остановка85 <> Неопределено Или Этап85 <> Неопределено Тогда
Остановка85 = Истина;
ВызватьИсключение "Повторная подготовка не снимает остановку";
КонецЕсли;
Остановка85 = Ложь;
Попытка
Снимок85 = УчебныеНачисления85.ПрочитатьСтенд85(0);
Если Состояние.А <> Снимок85.А Или Состояние.Б <> Снимок85.Б Тогда
ВызватьИсключение "Это другие собственные документы";
КонецЕсли;
УчебныеНачисления85.ПроверитьНабор85(Набор85, Снимок85, 0);
Согласие85 = Ложь;
Результат85 = 0;
Этап85 = 0;
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = Истина;
Если Остановка85 Или Этап85 <> 0 Или ВладелецФормы = Неопределено Тогда
ВызватьИсключение "Нужна новая подготовленная собственная форма набора";
КонецЕсли;
УчебныеНачисления85.ПроверитьНабор85(Набор85, Снимок85, 0);
Отказ = Ложь;
КонецПроцедуры
Процедура ПриОткрытии()
Попытка
Если Остановка85 Или Этап85 <> 0 Тогда
ВызватьИсключение "Форма уже остановлена или подготовлена повторно";
КонецЕсли;
Поле = ЭлементыФормы.Записи85;
Если ТипЗнч(Поле) <> Тип("ТабличноеПоле") Или Поле.Данные <> "Набор85" Или Не Поле.ТолькоПросмотр Тогда
ВызватьИсключение "Табличное поле должно показывать только собственный подготовленный набор";
КонецЕсли;
Колонка = Поле.Колонки.ВидРасчета;
Колонка.ОтображатьСтандартнуюКартинку = Истина;
Если Не Поле.Колонки.ВидРасчета.ОтображатьСтандартнуюКартинку Тогда
ВызватьИсключение "Не перечитана штатная политика колонки набора";
КонецЕсли;
УчебныеНачисления85.ПроверитьНабор85(Набор85, Снимок85, 0);
Для Каждого Запись Из Набор85 Цикл
Если Запись.НомерСтроки = 1 И Запись.ВидРасчета = Снимок85.Работа Тогда
Запись.Сумма85 = 600;
КонецЕсли;
КонецЦикла;
УчебныеНачисления85.ПроверитьНабор85(Набор85, Снимок85, 1);
УчебныеНачисления85.ПрочитатьСтенд85(0);
Этап85 = 1;
Состояние85 = "В памятиA850, в базеA750 и всего1250. Для единственной записи отметьте согласие и нажмите Записать; Отмена не записывает.";
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура Записать85(Элемент)
Попытка
Если Остановка85 Или Этап85 <> 1 Или Элемент <> ЭлементыФормы.Записать85
Или ТипЗнч(Согласие85) <> Тип("Булево") Или Не Согласие85 Тогда
ВызватьИсключение "Нужно отдельное явное согласие на запись только своегоA";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(0);
УчебныеНачисления85.ПроверитьНабор85(Набор85, Снимок85, 1);
Разрешение = Новый Структура("Метка,Этап,Состояние", "25ecfba2-7f32-40c5-a5b3-bb5e777e4afb", "готово", Снимок85);
Набор85.ДополнительныеСвойства.Вставить("СвояЗапись85", Разрешение);
Записано = ЭтаФорма.ЗаписатьВФорме();
Если ТипЗнч(Записано) <> Тип("Булево") Или Не Записано Или Этап85 <> 2 Или Результат85 <> 1 Тогда
ВызватьИсключение "Запись отказана либо ее окончательный результат не подтвержден";
КонецЕсли;
Итоги = УчебныеНачисления85.ПрочитатьСтенд85(1);
Если УчебныеНачисления85.Итоги85(Итоги) <> 1350 Или УчебныеНачисления85.Итоги85(Итоги, Итоги.Б) <> 500 Тогда
ВызватьИсключение "Не подтверждены полный итог1350 и неизменный документБ500";
КонецЕсли;
Состояние85 = "Подтверждено: A850, Б500, всего1350. Повторная запись запрещена.";
Исключение
Остановка85 = Истина;
Результат85 = -1;
Состояние85 = "СТОП: неизвестный исход; запись или обработчики могли завершиться частично. Автоматического повтора нет.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Отказ = Истина;
Попытка
Если Остановка85 Или Этап85 <> 1 Или Не Согласие85 Тогда
ВызватьИсключение "Стандартная запись без своего согласия и разрешения запрещена";
КонецЕсли;
УчебныеНачисления85.ПроверитьРазрешение85(Набор85, "готово");
Отказ = Ложь;
Исключение
Остановка85 = Истина;
Результат85 = -1;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПослеЗаписи()
Попытка
Если Остановка85 Или Этап85 <> 1 Тогда
ВызватьИсключение "Форма не ожидает завершения своей записи";
КонецЕсли;
УчебныеНачисления85.ПроверитьРазрешение85(Набор85, "записано");
УчебныеНачисления85.ПрочитатьСтенд85(1);
Набор85.ДополнительныеСвойства.Удалить("СвояЗапись85");
Этап85 = 2;
Результат85 = 1;
Исключение
Остановка85 = Истина;
Результат85 = -1;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура Отмена85(Элемент)
Попытка
Если Остановка85 Или Этап85 <> 1 Или Элемент <> ЭлементыФормы.Отмена85 Тогда
ВызватьИсключение "Отмена разрешена только до собственной записи";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(0);
Результат85 = 0;
ЭтаФорма.Закрыть();
Исключение
Остановка85 = Истина;
Результат85 = -1;
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыСписок видов расчета: настоящая начальная ссылка и пользовательский выбор
Своя CF → ПланыВидовРасчета → Начисления85 → Формы → ФормаСписка85 → Модуль целиком
Только толстый обычный клиент; этот модуль полностью дополняет текущий MAIN.
Перем Остановка85, Готово85, Снимок85, Этап85;
Процедура Подготовить85(Состояние, Этап) Экспорт
Если Остановка85 <> Неопределено Или Готово85 <> Неопределено Тогда
Остановка85 = Истина;
ВызватьИсключение "Повторная подготовка формы видов расчета запрещена";
КонецЕсли;
Остановка85 = Ложь;
Попытка
Снимок85 = УчебныеНачисления85.ПрочитатьСтенд85(Этап);
Если Состояние.Работа <> Снимок85.Работа Или Состояние.Премия <> Снимок85.Премия
Или (ЭтаФорма.ПараметрТекущаяСтрока <> Снимок85.Работа И ЭтаФорма.ПараметрТекущаяСтрока <> Снимок85.Премия) Тогда
ВызватьИсключение "Начальная строка должна быть своим настоящим видом расчета";
КонецЕсли;
Этап85 = Этап;
Готово85 = Истина;
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = Истина;
Если Остановка85 Или Готово85 <> Истина Или ВладелецФормы = Неопределено Тогда
ВызватьИсключение "Нужна подготовленная форма со своим владельцем";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Отказ = Ложь;
КонецПроцедуры
Процедура ПриОткрытии()
Попытка
Если Остановка85 Или Готово85 <> Истина
Или ТипЗнч(Список85) <> Тип("ПланВидовРасчетаСписок.Начисления85") Тогда
ВызватьИсключение "Основным реквизитом должен быть настоящий список своегоПВР";
КонецЕсли;
Поле = ЭлементыФормы.Виды85;
Если ТипЗнч(Поле) <> Тип("ТабличноеПоле") Или Поле.Данные <> "Список85" Или Не Поле.ТолькоПросмотр Тогда
ВызватьИсключение "Список видов расчета должен показываться только в своем поле";
КонецЕсли;
Колонка = Поле.Колонки.Наименование;
Колонка.ОтображатьСтандартнуюКартинку = Истина;
Если Не Поле.Колонки.Наименование.ОтображатьСтандартнуюКартинку Тогда
ВызватьИсключение "Не прочитана политика штатной картинки вида расчета";
КонецЕсли;
РежимВыбора = Истина;
ЗакрыватьПриВыборе = Истина;
УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Процедура ВыборВида85(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Попытка
Если Остановка85 Или Готово85 <> Истина Или Элемент <> ЭлементыФормы.Виды85
Или Колонка <> Элемент.Колонки.Наименование
Или ТипЗнч(ВыбраннаяСтрока) <> Тип("ПланВидовРасчетаСсылка.Начисления85")
Или ВыбраннаяСтрока <> Элемент.ТекущаяСтрока
Или (ВыбраннаяСтрока <> Снимок85.Работа И ВыбраннаяСтрока <> Снимок85.Премия) Тогда
ВызватьИсключение "Выбирайте один собственный вид расчета в его настоящей колонке";
КонецЕсли;
УчебныеНачисления85.ПрочитатьСтенд85(Этап85);
ЭтаФорма.ОповеститьОВыборе(ВыбраннаяСтрока);
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыРазбор по шагам
Полный запрос без ГДЕ проверяет все2документа,2вида и3записи, девять полей каждой строки и ключ Регистратор+НомерСтроки. Только фактические ссылки используются для фильтра и записи.
Формы получаются фабриками собственного ПВР, менеджера регистра и настоящего набора. У списка нет самодельного конструктора; расширения приобретаются главными реквизитами и реальными связанными полями.
Работа и Премия выбираются своим вводом или настоящим выбором в подчиненной форме. Ввод и выбор не имитируются прямыми вызовами native обработчиков.
НаборA изменяется сначала в памяти. Отдельное согласие создает однократное разрешение именно этому набору; формы и native модуль набора проверяют источник и каждый этап до записи и после нее.
Возвращенное ЗаписатьВФорме Булево и настоящее ПослеЗаписи без параметров дополняются повторным полным чтением базы. B500 и остальные поля не должны меняться. Неизвестный исход не считается отменой или успехом.
Как проверить результат
Самостоятельно в своем стенде проверьте1250/A750/B500/Работа1000; после разрешенной записи1350/A850/B500/Работа1100. Это ожидаемый результат, не выполненный здесь runtime-тест.
Отдельно проверьте Отмена до записи: новый полный запрос должен снова дать1250. Не вызывайте native callbacks из отладчика и не считайте отсутствие исключения доказательством UI отображения.
Попытка повторной записи, другой пользователь, путь, источник, ключ, метка, ресурс или лишняя строка должна приводить к отказу. После ошибки автоматической повторной записи нет.
Ожидаемый результат
Новичок различает список базы, набор в памяти, строку поля и настоящий результат записи. Итог изменяется только на100 в собственномA; B остается500, а исходные и итоговые данные читаются независимо.
На что обратить внимание
ПараметрТекущаяСтрока списка регистра расчета исключен: native2282 объявляет ключ регистра накопления, хотя специализированное поле возвращает ключ регистра расчета. Контракт не угадывается.
ПолучитьДополнение не используется: требуется конкуренция периодов действия старых регистраций, а здесь периоды действия отключены. Legacy менеджер перерасчетов и не имеющие смысла Итог/Свернуть списков зависимостей также не добавлены для количества.
Колонки, Отбор и Порядок списка readonly как контейнеры; используются их собственные методы, а не присваивание контейнеру. ЭлементПорядка.Направление readonly, сортировка задается Порядок.Установить.
Сумма полного запроса не является доказательством количества видимых строк. Native ключ и ДанныеСтроки выбранной строки проверяются отдельно; визуальное отображение и доставка событий здесь не запускались.
ПередЗаписью формы имеет1параметр; ПередЗаписью и ПриЗаписи самого набора имеют5. ПослеЗаписи формы вызывается после окончания транзакции, ПриЗаписи набора до окончания. Статические проверки не подтверждают работу компилятора или фактический runtime.
Отмена до записи и ошибка после возможной записи различаются. Процесс не обещает атомарности нескольких пользовательских действий, автоматического отката после ПослеЗаписи либо безопасного повтора при неизвестном результате.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.