Расширение колонки табличного поля списка записей регистра расчета.ОтображатьСтандартнуюКартинку

Свойства · DisplayDefaultPicture

Тип: Булево. Содержит признак отображения в колонке стандартной картинки.

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

Расширение колонки табличного поля списка записей регистра расчета.ОтображатьСтандартнуюКартинку (Calculation register record list table box column extension.DisplayDefaultPicture)

Расширение колонки табличного поля списка записей регистра расчета (Calculation register record list table box column extension)

ОтображатьСтандартнуюКартинку (DisplayDefaultPicture)

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

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

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

Примечание:
Если Истина, то при выводе свойство КартинкиСтрок колонки табличного поля не используется.
Использование в версии:

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

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

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

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

Один собственный учебный процесс: два вида расчета, два регистратора и три строки. Полная база1250 проверяется до UI, наборA меняется500→600 только после отдельного согласия, затем независимое чтение подтверждает1350 и неизменные500 уБ.

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

Только собственная новая файловая CF Windows8.5.1.1343, толстый обычный клиент. Ручная подготовка и одна явная будущая запись собственногоA; здесь нет запуска1С, созданияCF, записиБД или сетевых обращений.

Подготовка

  1. Все действия ниже выполните самостоятельно только в новой пустой учебной файловой базе Windows8.5.1.1343 по пути C:\1c-labs\OwnCalculationInvoiceViews21_25ecfba2-7f32-40c5-a5b3-bb5e777e4afb\IB. Имя конфигурации УчебныеНачисления85, ОсновнойРежимЗапуска=ОбычноеПриложение, совместимость НеИспользовать. Здесь 1С, база, макеты, запросы и запись не запускались. Не используйте копию рабочей конфигурации.

  2. В Конфигураторе Сервис → Параметры → Общие → Редактирование конфигурации для режима запуска выберите Оба; это настройка редактора, а не выдуманное свойство SupportedRunModes. Создайте одну полную собственную роль с Администрирование и одного пользователя Начисления85Ученик. ПолучитьПользователей требует административных прав. Другие пользователи и сеансы стенда не нужны.

  3. Создайте ПланыВидовРасчета → Начисления85: строковый код длиной10, наименование50, ИспользованиеПериодаДействия=Нет, ЗависимостьОтВидовРасчета=НеИспользовать, БыстрыйВыбор=Да, СпособВыбора=ОбоимиСпособами. Базовых видов расчета, дополнительных реквизитов, табличных частей и истории данных в уроке нет. Список видов расчета должен быть обычным, не управляемым.

  4. Создайте документ Регистратор85 с номером строка10, ручной нумерацией, проведением Разрешить, без табличных частей. Единственный дополнительный реквизит Метка85 типа Строка(40). Позже в движениях документа отметьте только собственный регистр Начисления85. ДокументыA/B в этом уроке сохраняются без проведения; проведение не используется для формирования этих трех строк.

  5. Создайте РегистрРасчета Начисления85: ПВР Начисления85, периодичность Месяц, ПериодДействия=Нет, БазовыйПериод=Нет, график не назначен, перерасчетов нет. Единственное измерение Сотрудник85 типа Строка(20); ресурс Сумма85 типа Число(12,2), реквизит Метка85 типа Строка(40). Документ Регистратор85 — единственный регистратор. В других регистрах никаких данных нет.

  6. Сначала подготовьте данные через стандартный интерфейс собственной базы, пока модули урока и его приложение еще пустые. В ПВР вручную создайте 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 соответственно. Эти действия требуют отдельного вашего согласия на создание именно собственных учебных данных; здесь они не выполнялись.

  7. В стандартных формах наборов только своего регистра вручную запишите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.

  8. Создайте обычную общую форму ПанельНачислений85. Реквизиты Вид85 типа ПланВидовРасчетаСсылка.Начисления85 и Состояние85 типа Строка. ПолеВвода Вид85 связано Данные=Вид85; событие ПриИзменении → ВидПриИзменении85. Кнопки ОткрытьСписок85, ВыбратьВид85, ОткрытьНабор85 назначаются одноименным процедурам Нажатие. ПриОткрытии и ОбработкаВыбора назначаются одноименным событиям формы. Состояние85 — поле просмотра.

  9. В собственном регистре мастером создайте обычные ФормаСписка85 и ФормаНабора85. Главный реквизит формы списка Список85 типа РегистрРасчетаСписок.Начисления85; главный реквизит формы набора Набор85 типа РегистрРасчетаНаборЗаписей.Начисления85. Это настоящие списки и наборы, предоставляемые фабриками регистра, не Новый расширение. В обеих формах ТабличноеПоле Записи85 с Данные=Список85/Набор85 и ТолькоПросмотр=Да; связанные колонки Регистратор, НомерСтроки, ВидРасчета, Сумма85, Сотрудник85, Метка85, Активность, ПериодРегистрации, Сторно. Имя связанной колонки ВидРасчета сохраните точно.

  10. В форме списка реквизит Состояние85 — Строка. ПередОткрытием → одноименная процедура2, ПриОткрытии → одноименная процедура0. Для Записи85 событие ПриАктивизацииСтроки → ПриАктивизацииСтроки85 с первым настоящим Элемент. Список обновляется из базы, фильтр и порядок перечитываются. Числа из полного запроса не считаются доказательством числа видимых строк; выбранная строка поля проверяется отдельно по native ключу и ДанныеСтроки.

  11. В форме набора реквизиты Согласие85 Булево, Результат85 Число(2,0), Состояние85 Строка. Согласие85 — свой флажок, исходно Нет. Кнопки Записать85 и Отмена85 назначаются одноименным обработчикам Нажатие. ПередОткрытием2, ПриОткрытии0, ПередЗаписью1, ПослеЗаписи0 назначаются одноименным событиям именно этой формы. MAIN формы набора изменяет500→600 только в ее памяти; запись выполняется только после флажка согласия и собственной кнопки.

  12. В ПВР мастером создайте обычную ФормаСписка85 с главным реквизитом Список85 типа ПланВидовРасчетаСписок.Начисления85. ТабличноеПоле Виды85 связано с Список85, ТолькоПросмотр=Да, колонки Код и Наименование. ПередОткрытием2 и ПриОткрытии0 — события формы; событие Выбор поля → ВыборВида85 с четырьмя формалами: базовые3 и первым Элемент из ordinary event104. Дважды щелкайте только колонку Наименование. Native ТекущаяСтрока здесь возвращает собственную ссылкуПВР; пользовательский выбор передается владельцу через ОповеститьОВыборе, не прямым вызовом ОбработкаВыбора.

  13. После подготовки трех строк вставьте все полные модули ниже. Общий модуль УчебныеНачисления85: Глобальный=Нет, КлиентОбычноеПриложение=Да, КлиентУправляемоеПриложение=Нет, Сервер=Да, ВызовСервера=Нет, ВнешнееСоединение=Нет, Привилегированный=Нет, повторное использование возвращаемых значений НеИспользовать. Общий модуль только читает и проверяет данные; клиентские методы форм в нем отсутствуют. В модуль набора записей именно своего регистра вставьте SET_MODULE целиком; его native события имеют5 формалов и в иных compiled контекстах отказывают.

  14. Вставьте HUB/LIST/SET_FORM/PVR_FORM в соответствующие четыре модуля форм и APPLICATION в модуль обычного приложения. Для собственной CF разрешите штатное использование модальности; запускайте только толстый обычный клиент. Подготовить85 — собственный экспортный initializer, не native событие. Native handlers вручную не вызывайте. Обновите только свой стенд и войдите одним своим пользователем.

  15. Сначала изучите быстрый выбор вида расчета: Работа дает1000, Премия250. Отдельная форма ПВР позиционируется настоящей ссылкой до открытия. Откройте список регистра: собственныйA и выбранный вид ограничивают записи; программа сверяет параметры, сам список и данные фактической выбранной строки. Политика стандартной картинки перечитывается, но пиксели и внешний вид здесь не проверялись.

  16. Откройте свой набор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 = Истина;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

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

  1. Полный запрос без ГДЕ проверяет все2документа,2вида и3записи, девять полей каждой строки и ключ Регистратор+НомерСтроки. Только фактические ссылки используются для фильтра и записи.

  2. Формы получаются фабриками собственного ПВР, менеджера регистра и настоящего набора. У списка нет самодельного конструктора; расширения приобретаются главными реквизитами и реальными связанными полями.

  3. Работа и Премия выбираются своим вводом или настоящим выбором в подчиненной форме. Ввод и выбор не имитируются прямыми вызовами native обработчиков.

  4. НаборA изменяется сначала в памяти. Отдельное согласие создает однократное разрешение именно этому набору; формы и native модуль набора проверяют источник и каждый этап до записи и после нее.

  5. Возвращенное ЗаписатьВФорме Булево и настоящее ПослеЗаписи без параметров дополняются повторным полным чтением базы. B500 и остальные поля не должны меняться. Неизвестный исход не считается отменой или успехом.

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

  1. Самостоятельно в своем стенде проверьте1250/A750/B500/Работа1000; после разрешенной записи1350/A850/B500/Работа1100. Это ожидаемый результат, не выполненный здесь runtime-тест.

  2. Отдельно проверьте Отмена до записи: новый полный запрос должен снова дать1250. Не вызывайте native callbacks из отладчика и не считайте отсутствие исключения доказательством UI отображения.

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

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

Новичок различает список базы, набор в памяти, строку поля и настоящий результат записи. Итог изменяется только на100 в собственномA; B остается500, а исходные и итоговые данные читаются независимо.

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

  1. ПараметрТекущаяСтрока списка регистра расчета исключен: native2282 объявляет ключ регистра накопления, хотя специализированное поле возвращает ключ регистра расчета. Контракт не угадывается.

  2. ПолучитьДополнение не используется: требуется конкуренция периодов действия старых регистраций, а здесь периоды действия отключены. Legacy менеджер перерасчетов и не имеющие смысла Итог/Свернуть списков зависимостей также не добавлены для количества.

  3. Колонки, Отбор и Порядок списка readonly как контейнеры; используются их собственные методы, а не присваивание контейнеру. ЭлементПорядка.Направление readonly, сортировка задается Порядок.Установить.

  4. Сумма полного запроса не является доказательством количества видимых строк. Native ключ и ДанныеСтроки выбранной строки проверяются отдельно; визуальное отображение и доставка событий здесь не запускались.

  5. ПередЗаписью формы имеет1параметр; ПередЗаписью и ПриЗаписи самого набора имеют5. ПослеЗаписи формы вызывается после окончания транзакции, ПриЗаписи набора до окончания. Статические проверки не подтверждают работу компилятора или фактический runtime.

  6. Отмена до записи и ошибка после возможной записи различаются. Процесс не обещает атомарности нескольких пользовательских действий, автоматического отката после ПослеЗаписи либо безопасного повтора при неизвестном результате.

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

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

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

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

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