ПослеЗаписи: обычная форма УчебноеСогласование

Учебные задачи

Показываем подтверждение после окончания транзакции записи собственной карточки из обычной формы.

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

Основной код — модуль собственной обычной объектной формы, толстый клиент; открытие — модуль другой обычной учебной формы.

Подготовка

  1. Работайте в отдельной пустой учебной конфигурации. Создайте справочник УчебныеИсполнители и предопределённый элемент Демонстрационный с наименованием Учебный исполнитель.

  2. Создайте задачу УчебныеСогласования: строковый номер длиной 12, автонумерация, наименование длиной 100. Добавьте реквизит адресации Исполнитель типа СправочникСсылка.УчебныеИсполнители и выберите его основным реквизитом адресации. Здесь используется прямая адресация; регистр ролевой адресации не нужен.

  3. Создайте параметр сеанса УчебныйИсполнитель того же ссылочного типа. В свойстве задачи Текущий исполнитель выберите этот параметр. Запросы урока передают исполнителя явно и не зависят от начального значения параметра сеанса.

  4. Создайте бизнес-процесс УчебноеСогласование со строковым номером длиной 12 и автонумерацией. В свойстве Задача выберите УчебныеСогласования. Карта маршрута: Старт (начало) → Согласовать (действие) → Завершение. В точке Согласовать задайте адресацию Исполнитель = Демонстрационный, Групповая = Ложь.

  5. И у задачи, и у бизнес-процесса создайте обычные реквизиты КомментарийУчебный (Строка 100), Сумма (Число 12.2), Подтверждено (Булево), ЗапретУдаления (Булево). Добавьте табличную часть Детали с колонками Наименование (Строка 100) и Количество (Число 10.0).

  6. Создайте общий реквизит УчебныйИсточник типа Строка 20, Разделение данных = Не использовать. Включите только учебную задачу и бизнес-процесс в его состав. Это не разделитель и не настройка рабочей конфигурации.

  7. В модуле объекта бизнес-процесса разместите отдельный обработчик СогласоватьПриСозданииЗадач из дополнительного блока. В свойствах точки Согласовать назначьте его событию ПриСозданииЗадач. Платформа записывает сформированные задачи после обработчика; внутри него Записать не вызывается.

  8. Обновите учебную базу. Создайте серверный общий модуль УчебныеПроцессы: поместите туда функцию ПодготовитьУчебныйПроцесс из отдельного блока и процедуру ВыполнитьПример() Экспорт. Основной код без заголовка вставляйте в тело этой процедуры и вызывайте её из серверной команды своей обработки.

  9. Каждый запуск подготовки действительно создаёт новый учебный бизнес-процесс и его задачу. Не используйте рабочую базу. Табличные части и обычные реквизиты заполняются только у этих новых объектов; ничего не отправляется по сети.

  10. У серверного общего модуля УчебныеПроцессы включите Вызов сервера: обычная клиентская форма вызывает его экспортную функцию. В модуле функции не ставьте клиентские директивы.

  11. У БизнесПроцесс УчебноеСогласование создайте именно обычную объектную форму УчебнаяОбычная, не управляемую и не форму списка. Основной реквизит формы назовите Объект, тип — объект данного собственного метаданного.

  12. Выведите Объект.Сумма и Объект.КомментарийУчебный на форму. Оставьте штатные команды записи. Добавьте надпись УчебноеПояснение без связи с данными.

  13. В модуле этой формы назначьте событие ПослеЗаписи основной процедуре из примера. Процедуры соседних событий размещаются отдельно, каждая только один раз.

  14. В отдельной внешней обработке создайте обычную форму и кнопку ОткрытьСвойОбъект; последний дополнительный блок назначьте её обработчиком. Это настоящий производитель объекта, который получает его именованную форму.

  15. Запуск — толстый клиент, обычные формы, отдельная учебная конфигурация. Директивы &НаКлиенте / &НаСервере в модуль обычной формы не добавляются.

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

Процедура ПослеЗаписи()
    СохраненнаяСумма = Объект.Сумма;
    Сообщить("Транзакция записи собственной карточки завершена");
    Сообщить("Сохранено: " + Строка(СохраненнаяСумма));
КонецПроцедуры
Серверный общий модуль УчебныеПроцессы: реальное создание процесса и задачи
Функция ПодготовитьУчебныйПроцесс(ЗапуститьМаршрут = Истина) Экспорт
    Процесс = БизнесПроцессы.УчебноеСогласование.СоздатьБизнесПроцесс();
    Процесс.Дата = Дата(2026, 10, 14, 10, 0, 0);
    Процесс.КомментарийУчебный = "Согласовать учебную покупку";
    Процесс.Сумма = 100;
    Процесс.Подтверждено = Ложь;
    Процесс.УчебныйИсточник = "ПРИМЕР";
    Деталь = Процесс.Детали.Добавить();
    Деталь.Наименование = "Книга";
    Деталь.Количество = 2;
    Процесс.Записать();
    Если Не ЗапуститьМаршрут Тогда
        Возврат Новый Структура("Процесс,Задача", Процесс.Ссылка, Задачи.УчебныеСогласования.ПустаяСсылка());
    КонецЕсли;
    Процесс.Старт();
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Задача.УчебныеСогласования ГДЕ БизнесПроцесс = &Процесс";
    Запрос.УстановитьПараметр("Процесс", Процесс.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Не Выборка.Следующий() Тогда
        ВызватьИсключение "Маршрут не создал учебную задачу: проверьте подготовку";
    КонецЕсли;
    Возврат Новый Структура("Процесс,Задача", Процесс.Ссылка, Выборка.Ссылка);
КонецФункции
Модуль объекта бизнес-процесса: назначенный обработчик точки Согласовать
Процедура СогласоватьПриСозданииЗадач(ТочкаМаршрута, ФормируемыеЗадачи, Отказ)
    Для Каждого НоваяЗадача Из ФормируемыеЗадачи Цикл
        НоваяЗадача.КомментарийУчебный = "Проверить учебную покупку";
        НоваяЗадача.Сумма = 100;
        НоваяЗадача.УчебныйИсточник = "ПРИМЕР";
        Деталь = НоваяЗадача.Детали.Добавить();
        Деталь.Наименование = "Книга";
        Деталь.Количество = 2;
    КонецЦикла;
КонецПроцедуры
Отдельная обычная учебная форма: собственный объект и его точная форма
Процедура ОткрытьСвойОбъект(Кнопка)
    Контекст = УчебныеПроцессы.ПодготовитьУчебныйПроцесс(Ложь);
    Ссылка = Контекст.Процесс;
    СвойОбъект = Ссылка.ПолучитьОбъект();
    ФормаОбъекта = СвойОбъект.ПолучитьФорму("УчебнаяОбычная");
    ФормаОбъекта.Открыть();
КонецПроцедуры

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

  1. Открываем точную обычную форму собственного объекта, созданного дополнительным кодом.

  2. Платформа вызывает назначенный обработчик своей формы с параметрами установленной справки.

  3. Показываем подтверждение после окончания транзакции записи собственной карточки из обычной формы.

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

  1. Запишите 25: сообщение подтверждает завершение записи и показывает 25.

  2. Если ПередЗаписью / ПриЗаписи отменили запись, этот обработчик успешного завершения не должен её подтверждать.

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

Событие проверяется в настоящей собственной объектной форме толстого клиента.

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

  1. Этот пример не предназначен для управляемой формы: контексты и последовательности событий различаются.

  2. Правило формы не защищает программную запись без этой формы; общие правила данных размещают в модуле объекта.

  3. Не вызывайте Записать повторно внутри ПередЗаписью, ПриЗаписи или ПослеЗаписи; здесь нет рекурсивной записи.

  4. ПриИзмененииДанных означает инициализацию / перечитывание / смену объекта, а не пользовательское ПриИзменении отдельного поля.

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

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

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

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

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