Устанавливает на основе переданного объекта свойства ПутьКДанным и КлючДанных. Для установки свойства ПутьКДанным используется установленное автоматически или методом УстановитьСоответствиеОбъектаИФормы соответствие объекта и реквизита формы. Для установки свойства КлючДанных используется ссылка объекта или значение регистратора для наборов записей.
Синтаксис
УстановитьДанные(<Объект>)Полное описание, параметры и ограничения
СообщениеПользователю.УстановитьДанные (UserMessage.SetData)
СообщениеПользователю (UserMessage)
УстановитьДанные (SetData)
Доступен, начиная с версии 8.2.
Синтаксис:
УстановитьДанные(<Объект>)
Параметры:
<Объект> (обязательный)
Тип: Произвольный.
Объект, с которым должно быть связано сообщение.
Описание:
Устанавливает на основе переданного объекта свойства ПутьКДанным и КлючДанных.
Для установки свойства ПутьКДанным используется установленное автоматически или методом УстановитьСоответствиеОбъектаИФормы соответствие объекта и реквизита формы.
Для установки свойства КлючДанных используется ссылка объекта или значение регистратора для наборов записей.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Заполнить собственный черновик структурой и проверить обязательные поля
Один собственный новый объект получает тему и количество через настоящий ОбработкаЗаполнения. ПроверитьЗаполнение проверяет два подготовленных обязательных реквизита и вызывает отдельный обработчик для ограничения количества.
Где и как запускать
Полный отдельный МОДУЛЬ ОБЪЕКТА Документы → УчебныйЧерновик85. ЭтотОбъект — его настоящий модульный контекст; отдельный вызывающий серверный общий модуль дан в supportingModules и подготовке. Платформа 8.5.1.1343; здесь не запускался.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу на 8.5.1.1343. Корень конфигурации назовите УчебноеЗаполнение85. Не используйте типовую базу и не добавляйте объекты в рабочие конфигурации.
Документы → Добавить → УчебныйЧерновик85. Проведение=Запретить. Не создавайте движений, табличных частей, форм, оснований ввода и дополнительных реквизитов. Историю данных выключите. Остальные прикладные объекты не добавляйте.
В собственном документе создайте ровно два реквизита: Тема — единственный тип Строка, длина 40, переменная длина; Количество — единственный тип Число, разрядность 3, дробная часть 0, знак Неотрицательный.
У обоих реквизитов установите в Конфигураторе Проверка заполнения=Показывать ошибку. В BSL это значение перечисления ПроверкаЗаполнения.ВыдаватьОшибку, а не выдуманное ПоказыватьОшибка.
Для стандартных реквизитов документа проверка заполнения должна быть Не проверять. Код обходит Описание.СтандартныеРеквизиты и подтверждает этот контракт; если он не выполняется, исправьте только свою учебную подготовку до запуска опыта.
В Документы → УчебныйЧерновик85 → Модуль объекта вставьте только основной полный code этого урока. Он содержит Перем, экспортный исполнитель, оба нативных обработчика и все вспомогательные процедуры. Не переносите его в общий модуль.
Модуль менеджера документа, модули приложения/сеанса, формы документа и все прочие модули конфигурации остаются пустыми. Подписок на события, расширений конфигурации и внешних обработчиков документов нет. Код содержат только явно предоставленные модуль объекта, серверный общий модуль и модуль собственной формы запуска.
Создайте общий модуль УчебныйЗапускЗаполнения85: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь; клиентские и внешнее соединение выключены; повторное использование возвращаемых значений Не использовать. Полный текст находится отдельно в supportingModules и продублирован далее.
Полный вызывающий серверный общий модуль; вставьте его отдельно в Общие → Общие модули → УчебныйЗапускЗаполнения85 → Модуль:
Процедура ВыполнитьПример() Экспорт
ПроверитьУчебнуюСхему();
Черновик = Документы.УчебныйЧерновик85.СоздатьДокумент();
Черновик.ВыполнитьУчебноеЗаполнение();
Если Не Черновик.ЭтоНовый() Тогда
ВызватьИсключение "Собственный черновик оказался записан";
КонецЕсли;
Сообщить("Черновик остался в памяти: " + Черновик.Тема + ", количество " + Строка(Черновик.Количество));
КонецПроцедурыПроцедура ПроверитьУчебнуюСхему()
Если Метаданные.Документы.Количество() <> 1 Или Метаданные.Справочники.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Тогда
ВызватьИсключение "Нужна собственная пустая конфигурация УчебноеЗаполнение85";
КонецЕсли;
Описание = Метаданные.Документы.Найти("УчебныйЧерновик85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Не найден собственный УчебныйЧерновик85";
КонецЕсли;
Свойства = Метаданные.СвойстваОбъектов;
Если Описание.Проведение <> Свойства.Проведение.Запретить
Или Описание.Реквизиты.Количество() <> 2 Или Описание.ТабличныеЧасти.Количество() <> 0 Тогда
ВызватьИсключение "Собственный документ должен иметь два реквизита, без проведения и табличных частей";
КонецЕсли;
Тема = Описание.Реквизиты.Найти("Тема");
Количество = Описание.Реквизиты.Найти("Количество");
Если Тема = Неопределено Или Количество = Неопределено Тогда
ВызватьИсключение "Не найдены оба собственных реквизита";
КонецЕсли;
Если Тема.Тип.Типы().Количество() <> 1 Или Не Тема.Тип.СодержитТип(Тип("Строка")) Тогда
ВызватьИсключение "Тема должна иметь единственный тип Строка";
КонецЕсли;
Если Тема.Тип.КвалификаторыСтроки.Длина <> 40
Или Тема.Тип.КвалификаторыСтроки.ДопустимаяДлина <> ДопустимаяДлина.Переменная
Или Тема.ПроверкаЗаполнения <> ПроверкаЗаполнения.ВыдаватьОшибку Тогда
ВызватьИсключение "Длина и обязательность темы отличаются от подготовки";
КонецЕсли;
Если Количество.Тип.Типы().Количество() <> 1 Или Не Количество.Тип.СодержитТип(Тип("Число")) Тогда
ВызватьИсключение "Количество должно иметь единственный тип Число";
КонецЕсли;
Если Количество.Тип.КвалификаторыЧисла.Разрядность <> 3
Или Количество.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 0
Или Количество.Тип.КвалификаторыЧисла.ДопустимыйЗнак <> ДопустимыйЗнак.Неотрицательный
Или Количество.ПроверкаЗаполнения <> ПроверкаЗаполнения.ВыдаватьОшибку Тогда
ВызватьИсключение "Тип и обязательность количества отличаются от подготовки";
КонецЕсли;
Для Каждого СтандартныйРеквизит Из Описание.СтандартныеРеквизиты Цикл
Если СтандартныйРеквизит.ПроверкаЗаполнения <> ПроверкаЗаполнения.НеПроверять Тогда
ВызватьИсключение "В этом опыте автоматическая проверка включена только для Тема и Количество";
КонецЕсли;
КонецЦикла;
КонецПроцедурыОбновите конфигурацию только своей учебной базы. Создайте собственную внешнюю обработку УчебныйПускЗаполнения85 с одной пустой управляемой формой Форма. В редакторе формы добавьте команду Выполнить, назначьте ей действие Выполнить и перетащите команду на форму как кнопку. В модуль формы вставьте полный отдельный текст далее и нажмите кнопку в учебной базе.
Полный модуль собственной управляемой формы запуска; не переносите его в объектный или общий модуль:
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Собственный опыт заполнения завершён");
КонецПроцедуры&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныйЗапускЗаполнения85.ВыполнитьПример();
КонецПроцедурыОсновной code — модуль объекта; supportingModules[0].code — отдельный серверный общий модуль, supportingModules[1].code — отдельная управляемая форма запуска. Эти три контекста нельзя склеить в один исполняемый файл. ЭтотОбъект не объявляйте как локальную переменную, параметр или модульную Перем.
Вызов СоздатьДокумент создаёт только свой новый объект в памяти. Заполнить и ПроверитьЗаполнение не заменяют Записать; модуль не записывает и не проводит документ. Никаких реальных документов, БД, файлов, сети, почты или печати здесь не используют.
Код сверяется со справкой установленной 8.5.1.1343, но здесь в 1С не запускался. Python-модель фиксированных структур и статические валидаторы не являются выполнением событий платформы.
Перем ВызововЗаполнения;
Перем ВызововПроверки;
Процедура ВыполнитьУчебноеЗаполнение() Экспорт
ПроверитьУчебныйЧерновик();
Если ЭтотОбъект.Тема <> "" Или ЭтотОбъект.Количество <> 0 Тогда
ВызватьИсключение "Исполнитель должен получить собственный новый пустой экземпляр";
КонецЕсли;
ВызововЗаполнения = 0;
ВызововПроверки = 0;
ПроверитьПолныйЧерновик("", 0);
ПроверитьРезультатЗаполнения(Ложь, 1);
ПроверитьОтказЗаполнения(Неопределено, "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема", "Азбука"), "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема,Количество", "Азбука", "3"), "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема,Количество", "Азбука", 0), "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема,Количество", "Азбука", 11), "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема,Количество", "Азбука", 1.5), "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема,Количество", "12345678901234567890123456789012345678901", 3), "", 0);
ПроверитьОтказЗаполнения(Новый Структура("Тема,Количество", "", 3), "", 0);
ЭтотОбъект.Заполнить(Новый Структура("Тема,Количество", "Азбука", 3));
ПроверитьПолныйЧерновик("Азбука", 3);
ПроверитьРезультатЗаполнения(Истина, 2);
ЭтотОбъект.Заполнить(Новый Структура("Тема,Количество", "Азбука", 1));
ПроверитьПолныйЧерновик("Азбука", 1);
ПроверитьРезультатЗаполнения(Истина, 3);
ЭтотОбъект.Заполнить(Новый Структура("Тема,Количество", "Азбука", 10));
ПроверитьПолныйЧерновик("Азбука", 10);
ПроверитьРезультатЗаполнения(Истина, 4);
ПроверитьОтказЗаполнения(Новый Структура("Тема", "Другое"), "Азбука", 10);
ЭтотОбъект.Количество = 0;
ПроверитьРезультатЗаполнения(Ложь, 5);
ПроверитьПолныйЧерновик("Азбука", 0);
ЭтотОбъект.Тема = "";
ЭтотОбъект.Количество = 3;
ПроверитьРезультатЗаполнения(Ложь, 6);
ПроверитьПолныйЧерновик("", 3);
ЭтотОбъект.Тема = "Азбука";
ЭтотОбъект.Количество = 11;
ПроверитьРезультатЗаполнения(Ложь, 7);
ПроверитьПолныйЧерновик("Азбука", 11);
ЭтотОбъект.Заполнить(Новый Структура("Тема,Количество", "Азбука", 10));
ПроверитьРезультатЗаполнения(Истина, 8);
ПроверитьПолныйЧерновик("Азбука", 10);
Если ВызововЗаполнения <> 13 Или ВызововПроверки <> 8 Тогда
ВызватьИсключение "Не совпало число реальных входов в два обработчика";
КонецЕсли;
Сообщить("ОбработкаЗаполнения: 13 входов; ОбработкаПроверкиЗаполнения: 8 входов");
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПроверитьУчебныйЧерновик();
Если ВызововЗаполнения = Неопределено Тогда
ВызововЗаполнения = 0;
КонецЕсли;
ВызововЗаполнения = ВызововЗаполнения + 1;
Если ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") Тогда
ВызватьИсключение "Наш обработчик принимает только собственную структуру";
КонецЕсли;
НоваяТема = Неопределено;
НовоеКоличество = Неопределено;
Если Не ДанныеЗаполнения.Свойство("Тема", НоваяТема)
Или Не ДанныеЗаполнения.Свойство("Количество", НовоеКоличество) Тогда
ВызватьИсключение "Нужны оба свойства: Тема и Количество";
КонецЕсли;
Если ДанныеЗаполнения.Количество() <> 2 Тогда
ВызватьИсключение "Наша структура должна содержать ровно два свойства";
КонецЕсли;
Если ТипЗнч(НоваяТема) <> Тип("Строка") Или ТипЗнч(НовоеКоличество) <> Тип("Число") Тогда
ВызватьИсключение "Тема должна быть строкой, количество числом";
КонецЕсли;
Если Не ЗначениеЗаполнено(НоваяТема) Или СтрДлина(НоваяТема) > 40 Тогда
ВызватьИсключение "Нужна непустая тема не длиннее 40 символов";
КонецЕсли;
Если НовоеКоличество < 1 Или НовоеКоличество > 10 Или НовоеКоличество <> Цел(НовоеКоличество) Тогда
ВызватьИсключение "Количество нашего черновика должно быть целым от 1 до 10";
КонецЕсли;
ЭтотОбъект.Тема = НоваяТема;
ЭтотОбъект.Количество = НовоеКоличество;
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ПроверитьУчебныйЧерновик();
Если ВызововПроверки = Неопределено Тогда
ВызововПроверки = 0;
КонецЕсли;
ВызововПроверки = ВызововПроверки + 1;
Если ПроверяемыеРеквизиты.Количество() <> 2
Или ПроверяемыеРеквизиты.Найти("Тема") = Неопределено
Или ПроверяемыеРеквизиты.Найти("Количество") = Неопределено Тогда
ВызватьИсключение "Платформа должна проверить ровно собственные Тема и Количество";
КонецЕсли;
Если ЭтотОбъект.Количество > 10 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Количество учебного черновика не должно превышать 10";
Сообщение.Поле = "Количество";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьУчебныйЧерновик()
ПроверитьУчебнуюСхему();
Если ЭтотОбъект.Метаданные().Имя <> "УчебныйЧерновик85" Или Не ЭтотОбъект.ЭтоНовый() Тогда
ВызватьИсключение "Нужен только собственный новый УчебныйЧерновик85";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьПолныйЧерновик(ОжидаемаяТема, ОжидаемоеКоличество)
Если ЭтотОбъект.Тема <> ОжидаемаяТема Или ЭтотОбъект.Количество <> ОжидаемоеКоличество
Или Не ЭтотОбъект.ЭтоНовый() Тогда
ВызватьИсключение "Полный состав или новый статус собственного черновика не совпал";
КонецЕсли;
Сообщить("Проверен черновик: " + ЭтотОбъект.Тема + ", количество " + Строка(ЭтотОбъект.Количество));
КонецПроцедуры
Процедура ПроверитьОтказЗаполнения(НеверныеДанные, ОжидаемаяТема, ОжидаемоеКоличество)
БылоВызовов = ВызововЗаполнения;
Отклонено = Ложь;
Попытка
ЭтотОбъект.Заполнить(НеверныеДанные);
Исключение
Отклонено = Истина;
КонецПопытки;
Если Не Отклонено Или ВызововЗаполнения <> БылоВызовов + 1 Тогда
ВызватьИсключение "Неверный ввод должен попасть в собственный обработчик и быть отклонён";
КонецЕсли;
ПроверитьПолныйЧерновик(ОжидаемаяТема, ОжидаемоеКоличество);
Сообщить("Неверный ввод отклонён собственным ОбработкаЗаполнения");
КонецПроцедуры
Процедура ПроверитьРезультатЗаполнения(ОжидаемыйРезультат, ОжидаемоВызовов)
Результат = ЭтотОбъект.ПроверитьЗаполнение();
Если Результат <> ОжидаемыйРезультат Или ВызововПроверки <> ОжидаемоВызовов Тогда
ВызватьИсключение "Не совпали результат проверки или число входов в событие";
КонецЕсли;
Сообщить("ПроверитьЗаполнение: " + Строка(Результат));
КонецПроцедуры
Процедура ПроверитьУчебнуюСхему()
Если Метаданные.Документы.Количество() <> 1 Или Метаданные.Справочники.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Тогда
ВызватьИсключение "Нужна собственная пустая конфигурация УчебноеЗаполнение85";
КонецЕсли;
Описание = Метаданные.Документы.Найти("УчебныйЧерновик85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Не найден собственный УчебныйЧерновик85";
КонецЕсли;
Свойства = Метаданные.СвойстваОбъектов;
Если Описание.Проведение <> Свойства.Проведение.Запретить
Или Описание.Реквизиты.Количество() <> 2 Или Описание.ТабличныеЧасти.Количество() <> 0 Тогда
ВызватьИсключение "Собственный документ должен иметь два реквизита, без проведения и табличных частей";
КонецЕсли;
Тема = Описание.Реквизиты.Найти("Тема");
Количество = Описание.Реквизиты.Найти("Количество");
Если Тема = Неопределено Или Количество = Неопределено Тогда
ВызватьИсключение "Не найдены оба собственных реквизита";
КонецЕсли;
Если Тема.Тип.Типы().Количество() <> 1 Или Не Тема.Тип.СодержитТип(Тип("Строка")) Тогда
ВызватьИсключение "Тема должна иметь единственный тип Строка";
КонецЕсли;
Если Тема.Тип.КвалификаторыСтроки.Длина <> 40
Или Тема.Тип.КвалификаторыСтроки.ДопустимаяДлина <> ДопустимаяДлина.Переменная
Или Тема.ПроверкаЗаполнения <> ПроверкаЗаполнения.ВыдаватьОшибку Тогда
ВызватьИсключение "Длина и обязательность темы отличаются от подготовки";
КонецЕсли;
Если Количество.Тип.Типы().Количество() <> 1 Или Не Количество.Тип.СодержитТип(Тип("Число")) Тогда
ВызватьИсключение "Количество должно иметь единственный тип Число";
КонецЕсли;
Если Количество.Тип.КвалификаторыЧисла.Разрядность <> 3
Или Количество.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 0
Или Количество.Тип.КвалификаторыЧисла.ДопустимыйЗнак <> ДопустимыйЗнак.Неотрицательный
Или Количество.ПроверкаЗаполнения <> ПроверкаЗаполнения.ВыдаватьОшибку Тогда
ВызватьИсключение "Тип и обязательность количества отличаются от подготовки";
КонецЕсли;
Для Каждого СтандартныйРеквизит Из Описание.СтандартныеРеквизиты Цикл
Если СтандартныйРеквизит.ПроверкаЗаполнения <> ПроверкаЗаполнения.НеПроверять Тогда
ВызватьИсключение "В этом опыте автоматическая проверка включена только для Тема и Количество";
КонецЕсли;
КонецЦикла;
КонецПроцедурыУчебныйЗапускЗаполнения85
Конфигуратор → Общие → Общие модули → УчебныйЗапускЗаполнения85 → Модуль
Полный отдельный серверный общий модуль УчебныйЗапускЗаполнения85; здесь не запускался.
Процедура ВыполнитьПример() Экспорт
ПроверитьУчебнуюСхему();
Черновик = Документы.УчебныйЧерновик85.СоздатьДокумент();
Черновик.ВыполнитьУчебноеЗаполнение();
Если Не Черновик.ЭтоНовый() Тогда
ВызватьИсключение "Собственный черновик оказался записан";
КонецЕсли;
Сообщить("Черновик остался в памяти: " + Черновик.Тема + ", количество " + Строка(Черновик.Количество));
КонецПроцедуры
Процедура ПроверитьУчебнуюСхему()
Если Метаданные.Документы.Количество() <> 1 Или Метаданные.Справочники.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Тогда
ВызватьИсключение "Нужна собственная пустая конфигурация УчебноеЗаполнение85";
КонецЕсли;
Описание = Метаданные.Документы.Найти("УчебныйЧерновик85");
Если Описание = Неопределено Тогда
ВызватьИсключение "Не найден собственный УчебныйЧерновик85";
КонецЕсли;
Свойства = Метаданные.СвойстваОбъектов;
Если Описание.Проведение <> Свойства.Проведение.Запретить
Или Описание.Реквизиты.Количество() <> 2 Или Описание.ТабличныеЧасти.Количество() <> 0 Тогда
ВызватьИсключение "Собственный документ должен иметь два реквизита, без проведения и табличных частей";
КонецЕсли;
Тема = Описание.Реквизиты.Найти("Тема");
Количество = Описание.Реквизиты.Найти("Количество");
Если Тема = Неопределено Или Количество = Неопределено Тогда
ВызватьИсключение "Не найдены оба собственных реквизита";
КонецЕсли;
Если Тема.Тип.Типы().Количество() <> 1 Или Не Тема.Тип.СодержитТип(Тип("Строка")) Тогда
ВызватьИсключение "Тема должна иметь единственный тип Строка";
КонецЕсли;
Если Тема.Тип.КвалификаторыСтроки.Длина <> 40
Или Тема.Тип.КвалификаторыСтроки.ДопустимаяДлина <> ДопустимаяДлина.Переменная
Или Тема.ПроверкаЗаполнения <> ПроверкаЗаполнения.ВыдаватьОшибку Тогда
ВызватьИсключение "Длина и обязательность темы отличаются от подготовки";
КонецЕсли;
Если Количество.Тип.Типы().Количество() <> 1 Или Не Количество.Тип.СодержитТип(Тип("Число")) Тогда
ВызватьИсключение "Количество должно иметь единственный тип Число";
КонецЕсли;
Если Количество.Тип.КвалификаторыЧисла.Разрядность <> 3
Или Количество.Тип.КвалификаторыЧисла.РазрядностьДробнойЧасти <> 0
Или Количество.Тип.КвалификаторыЧисла.ДопустимыйЗнак <> ДопустимыйЗнак.Неотрицательный
Или Количество.ПроверкаЗаполнения <> ПроверкаЗаполнения.ВыдаватьОшибку Тогда
ВызватьИсключение "Тип и обязательность количества отличаются от подготовки";
КонецЕсли;
Для Каждого СтандартныйРеквизит Из Описание.СтандартныеРеквизиты Цикл
Если СтандартныйРеквизит.ПроверкаЗаполнения <> ПроверкаЗаполнения.НеПроверять Тогда
ВызватьИсключение "В этом опыте автоматическая проверка включена только для Тема и Количество";
КонецЕсли;
КонецЦикла;
КонецПроцедурыУчебныйПускЗаполнения85.Форма
Собственная внешняя обработка УчебныйПускЗаполнения85 → Управляемая форма Форма → Модуль
Полный отдельный модуль собственной управляемой формы с предоставленным клиентским и серверным обработчиками; здесь не запускался.
&НаКлиенте
Процедура Выполнить(Команда)
ВыполнитьНаСервере();
Сообщить("Собственный опыт заполнения завершён");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
УчебныйЗапускЗаполнения85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Сначала подготовить именно собственную пустую схему из двух реквизитов. Проверить версию, конфигурацию, единственный документ, отсутствие табличных частей и подписок, readonly типы/квалификаторы и флаги ПроверкаЗаполнения.
Отдельный серверный общий модуль выполняет эту защиту до СоздатьДокумент, затем вызывает экспортный ВыполнитьУчебноеЗаполнение у своего экземпляра. Основной текст находится в модуле объекта, поэтому ЭтотОбъект обозначает этот экземпляр.
Первый ПроверитьЗаполнение получает Ложь у пустых Тема и Количество. Наш callback только считает вход и оставляет массив двух путей без изменений; незаполненность проверяет платформа по подготовленным флагам.
Заполнить инициирует ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка). Переданное значение попадает в первый параметр. ТекстЗаполнения здесь не используется; стандартная обработка явно выключена.
Метод Заполнить допускает произвольное основание, но собственный алгоритм принимает ровно Структура с двумя ключами Тема и Количество. Проверить наличие, типы, непробельную тему до 40 символов и целое количество 1..10 до присваивания реквизитам.
Восемь неверных входов — Неопределено, отсутствие Количество, строковое число,0,11,1.5, тема длиной 41 и пустая тема — должны войти в реальный callback и вызвать исключение. После каждого оба собственных реквизита остаются пустыми.
Заполнить структурой Азбука/3: проверить оба реквизита и новый статус. ПроверитьЗаполнение возвращает Истина и вызывает свой отдельный callback второй раз.
Проверить нижнюю и верхнюю бизнес-границы: заполнение Азбука/1 и Азбука/10 успешно, обе проверки дают Истина. Отсутствующий ключ при уже заполненном черновике не должен частично заменить тему на Другое.
Присвоить только собственному черновику Количество=0. Число 0 отличается от корректных положительных количеств, но является значением по умолчанию числового типа: автоматическая проверка обязательности возвращает Ложь.
Отдельно оставить Количество=3, а Тема="": автоматическая проверка темы возвращает Ложь. Эти случаи не устанавливают Отказ в нашем обработчике и не подменяют результат произвольным булевым присваиванием.
Задать собственное Количество=11 при непустой теме. Число заполнено по системной проверке; собственный ОбработкаПроверкиЗаполнения устанавливает Отказ=Истина и отправляет понятное сообщение. Метод возвращает Ложь по этому дополнительному правилу.
Массив ПроверяемыеРеквизиты не очищается и не редактируется: все системные проверки остаются. Проверить наличие ровно Тема и Количество; неожиданная схема вызывает явное исключение.
Последнее корректное заполнение Азбука/10 восстанавливает свои два реквизита. Проверка даёт Истина; проверить 13 реальных входов в заполнение,8 входов в проверку и новый статус. Документ остаётся без записи.
Как проверить результат
Последовательность результатов восьми вызовов ПроверитьЗаполнение: Ложь,Истина,Истина,Истина,Ложь,Ложь,Ложь,Истина.
При пустом объекте ожидаются сообщения обязательности Тема и Количество; затем отдельно при количестве 0 — сообщение Количество, при пустой теме — сообщение Тема. Точный текст системного сообщения определяется платформой.
При количестве 11 ожидается собственное сообщение Количество учебного черновика не должно превышать 10; массив системно проверяемых путей сохраняется.
Девять негативных попыток заполнения дают сообщения нашего отказа и сохраняют обе прежние величины. Четыре успешных заполнения дают 3,1,10,10; итог Азбука/10.
Итоговые счётчики: 13 входов ОбработкаЗаполнения,8 входов ОбработкаПроверкиЗаполнения. Каждый контроль состава проверяет Тема,Количество и ЭтоНовый.
Нарушьте в своей копии схемы обязательность, тип, длину или разрядность: начальная защита должна остановить сценарий до создания черновика. Изменения схемы этот модуль сам не выполняет.
Ожидаемый результат
Полный объектный модуль, отдельный серверный общий модуль и отдельная форма запуска задают настоящий маршрут собственного заполнения и проверки. Проверяются оба реквизита, отрицательные входы, числовые границы и различие системного контроля обязательности от собственного Отказ.
На что обратить внимание
Нативное Заполнить само по себе не обещает заполнить наши поля по совпадению имён. В данном опыте весь алгоритм явно написан в ОбработкаЗаполнения, стандартная обработка выключена.
СтандартнаяОбработка=Ложь не отменяет действие. Неверное основание наш callback отклоняет исключением; все проверки стоят до двух присваиваний. Это не обещание транзакционного отката при произвольной ошибке после присваивания.
ОбработкаЗаполнения в установленной 8.5.1.1343 имеет три параметра. Нельзя копировать сюда встречающийся в другой конфигурации обработчик с двумя параметрами без сверки.
ПроверитьЗаполнение не записывает документ и не проверяет бизнес-правила автоматически. Обязательность задана метаданными, верхняя граница 10 реализована собственным event; его Отказ связан с реальным результатом метода.
ЭтотОбъект readonly: модуль читает сам контекст и меняет его собственные реквизиты, не присваивает другое значение свойству ЭтотОбъект. В общем модуле этот контекст не возникает.
Сообщение связано с собственным объектом и полем Количество, однако объект не открыт в форме. Переход к конкретному полю формы и визуальное позиционирование сообщения здесь не обещаются.
В исходной справке event проверки есть пример удаления путей; здесь такой алгоритм не используется. Очистка массива подавила бы системную проверку и изменила смысл урока.
Условия пустых остальных модулей и отсутствия расширений задаются подготовкой нового стенда. Код проверяет доступную схему и подписки, но не анализирует тексты сторонних модулей и не выдаёт это за runtime-доказательство.
Нативная справка описывает отключение безопасного режима на время этих обработчиков; пример должен выполняться только с полностью предоставленным собственным кодом в подготовленном новом стенде.
Здесь выполнены только Python-модели и статическая сверка установленной справки. Счётчики событий и ожидаемые сообщения — проверки для последующего запуска в вашей учебной 1С, не уже полученные runtime-результаты.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Проверить свой черновик штатным событием и вычислить сводку в модуле набора
ЭтотОбъект используется только в настоящем модуле собственной последовательности. Штатная ПроверитьЗаполнение вызывает полный пользовательский обработчик; при успехе вычисляются количество и границы дат, а при ошибке сводка не выдаётся. Отдельный полный вызывающий модуль проверяет пять состояний и след вызовов события.
Где и как запускать
Полный основной модуль набора собственной последовательности УчебнаяОчередь85 новой конфигурации УчебныеПоследовательности85. Два других полных модуля перечислены отдельно. Точная 8.5.1.1343; 1С здесь не запускалась.
Подготовка
Создайте новую отдельную пустую базу 8.5.1.1343, не копию рабочей УТ/КА2. Имя конфигурации УчебныеПоследовательности85, язык встроенного языка Русский, ОсновнойРежимЗапуска=УправляемоеПриложение, режим совместимости Не использовать. Расширений, подписок и обработчиков записи нет.
В Документы создайте единственный документ УчебнаяРегистрация85: проведение запрещено, реквизитов и табличных частей нет, движения регистров не назначены, модули объекта и менеджера пусты. Документы этого вида в уроке не создаются и не записываются.
В Последовательности создайте единственную УчебнаяОчередь85. В составе Документы выберите только свой УчебнаяРегистрация85. Измерений, зависимых регистров в составе Движения и дополнительных индексов нет. ПеремещениеГраницыПриПроведении=НеПеремещать. В модуль набора вставляется ПОЛНЫЙ основной модуль этого урока со своим экспортным расчётом и ОбработкаПроверкиЗаполнения. Своих измерений нет; никаких дополнительных правил Показывать ошибку или общих реквизитов не добавляйте. Структура записей поэтому содержит только Период и Регистратор.
Не создавайте в стенде справочников и регистров. Для учебного пользователя разрешите собственные метаданные, общую форму и команды. Обновите только эту новую конфигурацию. Проверка имени и состава схемы выполняется до создания набора; она не доказывает отсутствия записей базы и не делает рабочую базу безопасной.
В Общие → Общие модули создайте УчебнаяПроверкаПоследовательности85: Сервер=Истина, ВызовСервера=Ложь, Глобальный=Ложь, Привилегированный=Ложь, клиентские флаги выключены. Вставьте только полный отдельный блок вызывающего модуля, не основной код события набора.
В собственной общей форме УчебныйЗапускПоследовательности85 создайте команду ВыполнитьУрок, действие ВыполнитьУрок, ИзменяетСохраняемыеДанные=Ложь. Её полный модуль — отдельный блок запуска этого урока. Он вызывает УчебнаяПроверкаПоследовательности85 через &НаСервереБезКонтекста; не используйте модуль формы предыдущего урока.
В Общие → Общие команды создайте ОткрытьНаборПоследовательности85 без параметра и включите в свой учебный раздел. Полный модуль общей команды:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("ОбщаяФорма.УчебныйЗапускПоследовательности85");
КонецПроцедуры
Откройте свою форму этой командой и выполните её кнопку. Два вспомогательных модуля не вставляйте в основной серверный модуль.Плановые ссылки создаются ПолучитьСсылку на собственные новые UUID. Непустая ссылка не означает существующий документ; реквизиты ссылок не читаются. Это идентификаторы собственных незаписанных черновых строк, не готовые записи для сохранения в базу.
Здесь нет Прочитать, Записать, проведения, восстановления или изменения границы. Добавить/Загрузить/Удалить/Очистить действуют только на принадлежащий уроку экземпляр набора в памяти. Этот пример нельзя превращать в исправление последовательности добавлением Записать.
Статически проверены исходный код и установленная справка. Компиляция и выполнение в 1С здесь не проверялись; ожидаемые результаты далее нужно подтвердить самостоятельным запуском только в подготовленной новой учебной базе.
Основной полный код вставьте в Конфигуратор → Последовательности → УчебнаяОчередь85 → Модуль набора записей. Здесь ЭтотОбъект действительно обозначает текущий созданный набор. Не вставляйте его в общий модуль и не заменяйте ЭтотОбъект входным параметром.
ОбработкаПроверкиЗаполнения — штатная процедура модуля набора с двумя точными параметрами Отказ и ПроверяемыеРеквизиты. Не вызывайте её вручную: вызов ЭтотОбъект.ПроверитьЗаполнение запускает событие платформы. Массив штатных проверок не очищается и не подменяется.
Наши дополнительные правила относятся к учебной сводке: хотя бы одна строка, каждая дата не раньше 01.01.2026 и непустой плановый идентификатор собственного документа. Это не универсальные требования последовательности и не проверка существования документа по ссылке.
СообщениеПользователю привязывается к своему набору через УстановитьДанные(ЭтотОбъект). В пути поля индекс начинается с нуля, а в тексте для человека номер строки начинается с единицы. Отображение/навигация сообщения в форме требуют отдельного ручного опыта; здесь проверяется логика возврата и состав сводки.
Функция ПроверитьИСоздатьСводку85() Экспорт
Если ЭтотОбъект.Метаданные() <> Метаданные.Последовательности.УчебнаяОчередь85 Тогда
ВызватьИсключение "Этот модуль должен принадлежать своей УчебнаяОчередь85";
КонецЕсли;
ПроверкаУспешна = ЭтотОбъект.ПроверитьЗаполнение();
Если ТипЗнч(ПроверкаУспешна) <> Тип("Булево") Тогда
ВызватьИсключение "Метод проверки должен вернуть Булево";
КонецЕсли;
Если Не ПроверкаУспешна Тогда
Возврат Неопределено;
КонецЕсли;
ПервыйПериод = Неопределено;
ПоследнийПериод = Неопределено;
КоличествоСтрок = 0;
Для Каждого Запись Из ЭтотОбъект Цикл
Если КоличествоСтрок = 0 Тогда
ПервыйПериод = Запись.Период;
ПоследнийПериод = Запись.Период;
Иначе
Если Запись.Период < ПервыйПериод Тогда
ПервыйПериод = Запись.Период;
КонецЕсли;
Если Запись.Период > ПоследнийПериод Тогда
ПоследнийПериод = Запись.Период;
КонецЕсли;
КонецЕсли;
КоличествоСтрок = КоличествоСтрок + 1;
КонецЦикла;
Если КоличествоСтрок <> ЭтотОбъект.Количество() Или КоличествоСтрок = 0 Тогда
ВызватьИсключение "Пустой или несогласованный черновик не должен получить сводку";
КонецЕсли;
Возврат Новый Структура("Количество,ПервыйПериод,ПоследнийПериод", КоличествоСтрок, ПервыйПериод, ПоследнийПериод);
КонецФункции
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЭтотОбъект.ДополнительныеСвойства.Свойство("КоличествоУчебныхПроверок", Счётчик) Тогда
Счётчик = 0;
КонецЕсли;
Если ТипЗнч(Счётчик) <> Тип("Число") Тогда
ВызватьИсключение "Собственный диагностический счётчик должен иметь тип Число";
КонецЕсли;
Если Счётчик < 0 Или Счётчик <> Цел(Счётчик) Тогда
ВызватьИсключение "Собственный счётчик должен быть неотрицательным целым";
КонецЕсли;
ЭтотОбъект.ДополнительныеСвойства.Вставить("КоличествоУчебныхПроверок", Счётчик + 1);
Если ЭтотОбъект.Количество() = 0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Учебная сводка требует хотя бы одну собственную строку";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
ИндексСтроки = 0;
Для Каждого Запись Из ЭтотОбъект Цикл
Если ТипЗнч(Запись.Период) <> Тип("Дата") Или ТипЗнч(Запись.Регистратор) <> Тип("ДокументСсылка.УчебнаяРегистрация85") Тогда
ВызватьИсключение "Нарушены подготовленные типы полей своей очереди";
КонецЕсли;
Если Запись.Период < Дата(2026, 1, 1) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("В собственной строке %1 период должен быть не раньше 01.01.2026", ИндексСтроки + 1);
Сообщение.Поле = "[" + Строка(ИндексСтроки) + "].Период";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
Если Запись.Регистратор = Документы.УчебнаяРегистрация85.ПустаяСсылка() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон("В собственной строке %1 нужен непустой плановый идентификатор", ИндексСтроки + 1);
Сообщение.Поле = "[" + Строка(ИндексСтроки) + "].Регистратор";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
ИндексСтроки = ИндексСтроки + 1;
КонецЦикла;
КонецПроцедурыУчебнаяПроверкаПоследовательности85
Конфигуратор → Общие → Общие модули → УчебнаяПроверкаПоследовательности85 → Модуль
Полный отдельный серверный общий модуль: создаёт свой набор и проверяет пять состояний. Не модуль самого набора.
Процедура ВыполнитьПример() Экспорт
Если Метаданные.Последовательности.Количество() <> 1 Или Метаданные.Документы.Количество() <> 1 Тогда
ВызватьИсключение "В своём стенде нужны ровно одна последовательность и один вид документа";
КонецЕсли;
МетаОчереди = Метаданные.Последовательности.Найти("УчебнаяОчередь85");
МетаДокумента = Метаданные.Документы.Найти("УчебнаяРегистрация85");
Если МетаОчереди = Неопределено Или МетаДокумента = Неопределено Тогда
ВызватьИсключение "Не подготовлена собственная схема урока";
КонецЕсли;
Если МетаОчереди.Измерения.Количество() <> 0 Или МетаОчереди.Движения.Количество() <> 0
Или МетаОчереди.Документы.Количество() <> 1 Тогда
ВызватьИсключение "Нужна собственная очередь без измерений и зависимых регистров";
КонецЕсли;
Участвует = Ложь;
Для Каждого МетаУчастника Из МетаОчереди.Документы Цикл
Участвует = МетаУчастника = МетаДокумента;
КонецЦикла;
Если Не Участвует Тогда
ВызватьИсключение "Единственный участник должен быть своим УчебнаяРегистрация85";
КонецЕсли;
Если МетаОчереди.ПеремещениеГраницыПриПроведении <> Метаданные.СвойстваОбъектов.ПеремещениеГраницыПриПроведении.НеПеремещать Тогда
ВызватьИсключение "Проверьте подготовку политики границы собственной очереди";
КонецЕсли;
Набор = Последовательности.УчебнаяОчередь85.СоздатьНаборЗаписей();
Если Набор.Количество() <> 0 Или Набор.Метаданные() <> МетаОчереди Тогда
ВызватьИсключение "Ожидался новый пустой набор собственной последовательности";
КонецЕсли;
Ссылки = Новый Массив;
Для Номер = 1 По 3 Цикл
Ссылки.Добавить(Документы.УчебнаяРегистрация85.ПолучитьСсылку(Новый УникальныйИдентификатор));
КонецЦикла;
Сводка = Набор.ПроверитьИСоздатьСводку85();
Если Сводка <> Неопределено Тогда
ВызватьИсключение "Пустой черновик не должен дать сводку";
КонецЕсли;
ПроверитьСвойСчётчик(Набор, 1);
ДобавитьСвоюЗапись(Набор, Дата(2026, 1, 1), Ссылки[0]);
ДобавитьСвоюЗапись(Набор, Дата(2026, 2, 1), Ссылки[1]);
ДобавитьСвоюЗапись(Набор, Дата(2026, 3, 1), Ссылки[2]);
Сводка = Набор.ПроверитьИСоздатьСводку85();
ПроверитьСвоюСводку(Сводка);
ПроверитьСвойСчётчик(Набор, 2);
Набор[0].Период = Дата(2025, 12, 31);
Если Набор.ПроверитьИСоздатьСводку85() <> Неопределено Тогда
ВызватьИсключение "Неверная учебная дата не должна получить сводку";
КонецЕсли;
ПроверитьСвойСчётчик(Набор, 3);
Набор[0].Период = Дата(2026, 1, 1);
Набор[1].Регистратор = Документы.УчебнаяРегистрация85.ПустаяСсылка();
Если Набор.ПроверитьИСоздатьСводку85() <> Неопределено Тогда
ВызватьИсключение "Пустой учебный регистратор не должен получить сводку";
КонецЕсли;
ПроверитьСвойСчётчик(Набор, 4);
Набор[1].Регистратор = Ссылки[1];
Сводка = Набор.ПроверитьИСоздатьСводку85();
ПроверитьСвоюСводку(Сводка);
ПроверитьСвойСчётчик(Набор, 5);
Для ИндексСтроки = 0 По 2 Цикл
ПроверитьСвоюЗапись(Набор[ИндексСтроки], Дата(2026, ИндексСтроки + 1, 1), Ссылки[ИндексСтроки]);
КонецЦикла;
Сообщить("Пять вызовов штатной проверки и полный исходный состав подтверждены; записи базы не было");
КонецПроцедуры
Процедура ДобавитьСвоюЗапись(Набор, Период, Регистратор)
Если ТипЗнч(Период) <> Тип("Дата") Или ТипЗнч(Регистратор) <> Тип("ДокументСсылка.УчебнаяРегистрация85") Тогда
ВызватьИсключение "Переданы неверные собственные ключи строки";
КонецЕсли;
Запись = Набор.Добавить();
Запись.Период = Период;
Запись.Регистратор = Регистратор;
КонецПроцедуры
Процедура ПроверитьСвоюЗапись(Запись, Период, Регистратор)
Если ТипЗнч(Запись.Период) <> Тип("Дата") Или ТипЗнч(Запись.Регистратор) <> Тип("ДокументСсылка.УчебнаяРегистрация85") Тогда
ВызватьИсключение "Типы фактической собственной записи не совпали";
КонецЕсли;
Если Запись.Период <> Период Или Запись.Регистратор <> Регистратор Тогда
ВызватьИсключение "Период или регистратор собственной записи не совпал";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвойСчётчик(Набор, Ожидание)
Если Не Набор.ДополнительныеСвойства.Свойство("КоличествоУчебныхПроверок", Счётчик) Тогда
ВызватьИсключение "Обработчик штатной проверки не оставил свой диагностический счётчик";
КонецЕсли;
Если ТипЗнч(Счётчик) <> Тип("Число") Или Счётчик <> Ожидание Тогда
ВызватьИсключение "Количество настоящих вызовов своего обработчика не совпало";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСвоюСводку(Сводка)
Если ТипЗнч(Сводка) <> Тип("Структура") Тогда
ВызватьИсключение "Исправный собственный черновик должен вернуть структуру сводки";
КонецЕсли;
Если ТипЗнч(Сводка.Количество) <> Тип("Число") Или ТипЗнч(Сводка.ПервыйПериод) <> Тип("Дата")
Или ТипЗнч(Сводка.ПоследнийПериод) <> Тип("Дата") Тогда
ВызватьИсключение "Типы трёх показателей собственной сводки не совпали";
КонецЕсли;
Если Сводка.Количество <> 3 Или Сводка.ПервыйПериод <> Дата(2026, 1, 1)
Или Сводка.ПоследнийПериод <> Дата(2026, 3, 1) Тогда
ВызватьИсключение "Полный состав показателей собственной сводки не совпал";
КонецЕсли;
КонецПроцедурыУчебныйЗапускПоследовательности85
Конфигуратор → Общие → Общие формы → УчебныйЗапускПоследовательности85 → Модуль формы
Полный отдельный модуль своей управляемой формы. Команда вызывает предоставленный серверный модуль; здесь не запускалась.
&НаКлиенте
Процедура ВыполнитьУрок(Команда)
ВыполнитьУрокНаСервере();
Сообщить("Пять учебных состояний проверены; набор в базу не записывался");
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьУрокНаСервере()
УчебнаяПроверкаПоследовательности85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
Разместить основной модуль именно в собственной последовательности, вызывающий модуль и форму запуска — отдельно. Проверить всю новую подготовленную конфигурацию перед ручным опытом.
Создать новый пустой набор и вызвать его экспортный расчёт. ПроверитьЗаполнение запускает настоящий обработчик; пустота вызывает отказ, сводка Неопределено, диагностический счётчик 1.
Добавить свои три строки января/февраля/марта со своими непустыми плановыми ссылками. Штатная проверка проходит; сводка содержит ровно 3,01.01.2026,01.03.2026, счётчик 2.
Изменить только первую дату на 31.12.2025. Свой обработчик сообщает поле [0].Период и ставит Отказ=Истина; расчёт возвращает Неопределено, счётчик 3.
Исправить первую дату и сделать регистратор второй строки своей пустой ссылкой. Сообщение относится к [1].Регистратор, сводка снова отсутствует, счётчик 4.
Вернуть вторую собственную плановую ссылку. Повторная настоящая проверка даёт исходную полную сводку, счётчик 5. Сверить все даты и все ссылки трёх строк, а не только количество.
Не складывать уже проверенные периоды как суммы и не читать дату документов через плановые ссылки. Минимум/максимум вычисляются из конкретных дат строк в памяти.
Сообщения и булево штатной проверки не означают, что очередь записана или граница восстановлена. Ни одной операции записи/чтения базы в модулях нет.
Как проверить результат
Пять состояний: пусто→нет сводки; три исправные строки→полная сводка; плохая дата→нет; пустой регистратор→нет; исправление→полная исходная сводка.
После каждого состояния собственный счётчик настоящих вызовов ОбработкаПроверкиЗаполнения равен 1/2/3/4/5. Он не увеличивается ручным вызовом события из вызывающего модуля.
Обе исправные сводки имеют точные типы Число/Дата/Дата и значения 3,01.01.2026,01.03.2026. В конце все три исходные даты и плановые ссылки восстановлены.
Весь объект изменялся только в памяти, а пути сообщений используют реальные Период/Регистратор и нулевые индексы. Компиляция и запуск 1С здесь не подтверждены.
Ожидаемый результат
Законченный пример пользовательской проверки и расчёта сводки на своём реальном экземпляре набора, с полным штатным событием, диагностикой пяти вызовов и отсутствием записи базы.
На что обратить внимание
ЭтотОбъект readonly и принадлежит модулю набора. Его нельзя присваивать, объявлять параметром общего модуля или считать неизвестным внешним источником.
Дата ≥01.01.2026 и непустой идентификатор — правила данного учебного расчёта, не встроенный универсальный контракт 1С. Плановая ссылка не доказывает существование документа.
ПроверитьЗаполнение возвращает Булево и вызывает ОбработкаПроверкиЗаполнения по установленной справке. Прямой ручной вызов процедуры события не был бы демонстрацией этого метода.
ПроверяемыеРеквизиты не очищается: пользовательская проверка дополняет, а не отключает штатную. Непредвиденные ошибки API не перехватываются под видом ожидаемого отказа.
Отказ не сбрасывается в Ложь в конце обработчика. При любой обнаруженной ошибке расчёт не выдаёт успешную сводку.
Безопасный режим на время исполнения этого штатного обработчика отключается по native замечанию (кроме обработчиков расширений). Поэтому стенд отдельный, модули только предоставленные, внешних операций в событии нет.
Статические Python-проверки не запускают событие платформы. Диагностический счётчик и сообщения нужно подтвердить при будущем самостоятельном ручном испытании своей базы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.