Документооборот КОРП, ДГУ
22.02.2016
Для подготовки, учета, организации и последующего анализа совещаний, обсуждений, заседаний и других коллективных собраний в "1С:Документообороте" предусмотрен механизм Мероприятий. Использование данного механизма позволит сократить время на подготовку мероприятий, упростит процедуру подбора и оповещения участников, обеспечит учет и контроль исполнения принятых решений.
Используемые метаданные отнесены к подсистеме Мероприятия.
Основная логика работы сосредоточена в общих модулях. Список общих модулей:
За использование мероприятий в целом отвечает функциональная опция ИспользоватьУправлениеМероприятиями. Значение данной функциональной опции привязано к константе ИспользоватьУправлениеМероприятиями.
За возможность работы с конкретным мероприятием как протокольным отвечает функциональная опция УчитыватьКакПротокольноеМероприятие. Данная функциональная опция хранится в реквизите ПротокольноеМероприятие элемента справочника ВидыМероприятий. Для использования данной функциональной опции на форме производится вызов УстановитьПараметрыФункциональныхОпцийФормы с указанием требуемого параметра.
За возможность указания куратора у мероприятия отвечает функциональная опция УчитыватьКуратора. Данная функциональная опция хранится в реквизите ВедетКуратор элемента справочника ВидыМероприятий. Для использования данной функциональной опции на форме необходимо произвести вызов УстановитьПараметрыФункциональныхОпцийФормы с указанием требуемого параметра.
Функциональная опция ИспользоватьРаздельноеИсполнениеПунктовПротоколаМероприятия предназначена для определения способа работы с пунктами протокола мероприятий. Значение данной функциональной опции привязано к константе ИспользоватьРаздельноеИсполнениеПунктовПротоколаМероприятия. При установке в Ложь для пунктов протокола не доступна детальная настройка исполнения – операция "Исполнить протокол" направить все пункты на исполнение в одном процессе. При установке в Истина для пунктов протокола становится доступна детальная настройка исполнения – операция "Исполнить протокол" направит по каждому пункту процесс исполнения в соответствии с настройками, будет доступно отслеживание состояния исполнения каждого отдельного пункта.
Критерий отбора МероприятияПоПроекту предназначен для отображения списка мероприятий по конкретному проекту.
Общая картинка КоллекцияСостоянияМероприятия предназначена для отображения состояния мероприятия в списках.
Справочник ВидыМероприятий предназначен для разделения мероприятий по различным видам. К реквизитам данного справочника привязываются некоторые функциональные опции мероприятий. В разрезе данного справочника можно настраивать состав дополнительных реквизитов и сведений мероприятий.
Справочник Мероприятия является главным метаданным, используемым механизмом мероприятий. Именно в нем содержится информация о мероприятиях. К данному справочнику относятся следующие формы, используемые для работы мероприятий:
Справочник ПапкиМероприятий является ещё одним метаданным, в разрезе которого можно классифицировать мероприятия. Появление данного справочника, вместо обычных групп справочника мероприятия, связано с особенностями работы системы прав доступа – для возможности настройки ограничения прав в разрезе папок.
Справочник ПротоколыМероприятий предназначен для хранения информации по пунктам протоколов мероприятий.
При включении раздельного исполнение пунктов протокола именно в разрезе элементов данного справочника запускаются процессы исполнения.Перечисление СостоянияМероприятий содержит в себе состояния, которые могут быть установлены для мероприятия. В данном перечисление объединены состояния материалов, приглашений, протокола, программы и самого мероприятия.
Перечисление СостоянияПриглашения содержит в себе возможные состояния приглашения для участников мероприятий – приняли они приглашение или нет.
Перечисление СостоянияПротоколовМероприятий содержит в себе возможные состояния исполнения пунктов протоколов – исполнены они или нет.
Перечисление ТипыПрограммыПротокола содержит в себе возможные способы ведения программы и протокола мероприятия – в таблице в мероприятии, в файлах мероприятия, в отдельном документе.
Перечисление ТипыРешенийПротокола содержит в себе возможные варианты принятия решения в протоколе – принято или не принято решение.
Регистр сведений ДанныеМероприятий содержит в себе текстовое представление участников мероприятия. Предназначен для отображения строкового представления участников в списке мероприятий.
Регистр сведений ИсторияСостоянийМероприятий хранит историю изменения состояний мероприятий.
Регистр сведений ИсторияСостоянийПротоколовМероприятий хранит историю изменения состояний пунктов протокола мероприятий.
Регистр сведений СостоянияМероприятий хранит актуальные состояния мероприятия.
Регистр сведений УчастникиМероприятия хранит информацию о составе участников мероприятия и состояния приглашения данных участников.
Среди мероприятий можно выделить довольный крупный класс мероприятий – протокольное мероприятие. Для мероприятий данного класса доступны некоторые возможности, которые недоступны для обычных мероприятий:
Является ли мероприятие протокольным или нет определяется в виде мероприятия, в реквизите ПротокольноеМероприятие. Управление видимостью реквизитов на форме выполняется с помощью функциональной опции УчитыватьКакПротокольноеМероприятие. Для использования данной функциональной опции на форме необходимо произвести вызов УстановитьПараметрыФункциональныхОпцийФормы с указанием требуемого параметра.
Копировать в буфер обменаУстановитьПараметрыФункциональныхОпцийФормы(Новый Структура("ВидМероприятия", ВидМероприятия));
Секретарь и председатель протокольного мероприятия обладают такими же правами, как и организатор. Секретарь и председатель играют особою роль в операциях протокольного мероприятия. Например, задача подготовки протокола направляется секретарю мероприятия. Данная логика прописана в процедуре ЗаполнитьБизнесПроцессПоМероприятию общего модуля УправлениеМероприятиями.
Для протокола доступна команда заполнения протокола по программе или по предыдущему мероприятию. Логика заполнения протокола по программе прописана в процедуре ЗаполнитьПротокол общего модуля УправлениеМероприятиями. Логика заполнения протокола по предыдущему мероприятию прописана в процедуре ЗаполнитьПротоколНаОснованииПредыдущего общего модуля УправлениеМероприятиями.
Состав протокола мероприятия хранится в табличной части Протокол элемента справочника Мероприятия – хранится номер пункта программы, к которому относится пункт протокола, ссылка на пункт протокола, порядок пунктов протокола. Остальные значащие данные хранятся по ссылке в элементе справочника ПротоколыМероприятий. При этом в элемента справочника ПротоколыМероприятий тоже хранится номер пункта программы.
При изменении номера пункта программы у пункта протокола из карточки пункта протокола – номер пункта программы меняется и в программе мероприятия. Данная логика прописана в процедуре ПриИзмененииНомераПунктаПрограммы в модуле объекта справочника ПротоколыМероприятий.
При изменении номера пункта программы у пункта протокола из карточки мероприятия (например, при перемещении пунктов программы) – меняется и номер пункта в элементе справочника ПротоколыМероприятий. Данная логика прописана в процедуре ПриЗаписиНаСервере в форме ФормаЭлемента справочника Мероприятия. Участок кода выделен комментарием // Изменение номеров пунктов протокола.
При использовании функциональной опции ИспользоватьРаздельноеИсполнениеПунктовПротоколаМероприятия по каждому пункту протокола запускается отдельный процесс исполнения. При этом редактирование пункта протокола и процесса исполнения недоступно. В случае прерывание процесса или изменения состояние пункта протокола вручную становится возможность редактирования. Логика доступности редактирования пункта протокола в зависимости от состояния исполениня прописана в процедуре УстановитьДоступностьПоСостоянию формы ФормаЭлемента справочника ПротоколыМероприятий. Логика доступности редактирования процесса исполнения в зависимости от исполнения по пункту протокола прописана в процедуре УстановитьДоступностьПоПротоколу формы ФормаБизнесПроцесса бизнес-процесса Исполнение.
При изменении состояния исполнения отдельного пункта протокола может измениться состояние исполнения мероприятия в целом – в зависимости от общего состояния исполнения протокола. Данная логика прописана в процедуре ПроверитьИзменениеСостоянияМероприятия модуля объекта справочника ПротоколыМероприятий. Данная процедура выполняется, в том числе, и при изменение состояния пункта протокола мероприятия в распределенной информационной базе – для поддержания случая одновременного изменения состояний пунктов протокола в различных узлах распределенной информационной базы.
Для мероприятий предусмотрен определенный набор операций. Операции мероприятия отличаются от обычных процессов по мероприятиям. Для этого у бизнес-процесса заполняется реквизит ЭтапОбработкиПредмета – это позволяет отличить разные однотипные процессы по мероприятию (например, исполнение "Исполнить протокол" от исполнения "Провести мероприятие".
Логика заполнения данных бизнес-процессов при использовании операций мероприятия прописана в процедуре ЗаполнитьБизнесПроцессПоМероприятию общего модуля УправлениеМероприятиями.
Во время выполнения бизнес-процессов операций мероприятия происходит изменение состояний мероприятия. Данная логика прописана в процедуре УстановитьСостояниеМероприятияИзБизнесПроцесса общего модуля УправлениеМероприятиями.
Доступны следующие операции мероприятия:
Для мероприятия можно определить набор его состояний. Для мероприятия доступно состояние мероприятия, состояние программы, состояние приглашения, состояние материалов, состояние протокола.
В зависимости от состояния мероприятия меняется цвет текста мероприятия в списке и картинка состояния. Набор доступных картинок состояний определен в общей картинке КоллекцияСостоянияМероприятия. Условия отображения в списке устанавливаются в условном оформлении соответствующих списков. Определение индекса картинки выполняется в запросах соответствующих динамических списках в реквизите СостояниеМероприятия.
В зависимости от состояния мероприятия устанавливается доступность его реквизитов. После отправки приглашений становятся недоступными для редактирования реквизиты, важные для приглашения. После отправки протокола на согласование становятся недоступны для изменения важные реквизиты протокола. Данная логика прописана в процедуре УстановитьДоступностьПоСостоянию формы ФормаЭлемента справочника Мероприятия и в процедуре УстановитьДоступностьПоСостоянию формы ФормаЭлемента справочника ПротоколыМероприятий.
Состояния мероприятия хранятся в регистре сведений СостоянияМероприятий. Измерения данного регистра не обеспечивают необходимую уникальность, в связи с чем используется особая обработка при записи состояния в процедуре ЗаписатьСостояниеМероприятия в общем модуле УправлениеМероприятиями – сначала считывается запись со старым значением состояния данного типа, затем записывается с новым значением. Так же используется особая обработка удаления состояния мероприятия в процедуре УдалитьСостоянияМероприятия общего модуля УправлениеМероприятиями. Для получения состояния мероприятия определенного типа используется процедура ПолучитьСостояниеМероприятия общего модуля УправлениеМероприятиями.
Типы состояний мероприятия определяются с помощью функции ПолучитьСоответствиеСостояний в общем модуле УправлениеМероприятиямиКлиентСервер:
Мероприятия тесно взаимодействую с календарем. При одновременном включении управления мероприятиями и работа с календарем происходит первоначальное заполнение календарей пользователей данными мероприятий. Данная логика прописана в процедуре ЗаполнитьРабочийКалендарьМероприятиями формы Делопроизводство обработки НастройкаПрограммы и в процедуре ЗаполнитьРабочийКалендарьМероприятиями формы ОбщиеНастройки обработки НастройкаПрограммы.
При создании нового мероприятия, изменение мероприятия или изменения состава участников происходит создание или обновление записей в календарях участников. Это обеспечивается с помощью подписок на события КалендарьПередЗаписьюПредмета, КалендарьПередЗаписьюУчастников, КалендарьПриЗаписиПредмета, КалендарьПриЗаписиУчастников. В актуальном состояние поддерживается факт участия в мероприятие, состояние приглашения, наименование мероприятия, дата проведения. При удалении мероприятия удаляются и связанные записи календаря. Права доступа на чтение связанных записей календаря такие же, как и на мероприятие. Логика обработки изменения реквизитов мероприятия прописана в процедуре ОбработатьИзменениеРеквизитовПредмета общего модуля РаботаСРабочимКалендаремСервер. Логика обработки изменения состояний приглашения участников прописана в процедуре ОбновитьСостоянияЗаписейКалендаря общего модуля РаботаСРабочимКалендаремСервер.
В мероприятиях используются данные о доступности участников из календаря. Для подбора свободного времени участников используется форма ВыборВремени справочника ЗаписиРабочегоКалендаря. Помимо подбор доступного времени возможно просто проверить состояние занятости участников мероприятия. Это выполняется с помощью процедуры ОткрытьФормуЗанятостиПользователей общего модуля РаботаСРабочимКалендаремКлиент.
Кроме того доступность участников мероприятий проверяется при направлении приглшения на мероприятие и приема приглашения на мероприятие. Это выполняется с помощью функции ПроверитьДоступностьПользователей общего модуля РаботаСРабочимКалендаремКлиент.
При включенной возможности бронирования помещений при указании помещения у мероприятия происходит автоматическая попытка брони данного помещения. Перед записью мероприятия в форме элемента выполняется проверка с помощью функции ВозможнаБроньПомещения общего модуля БронированиеПомещений, которая выполняет проверку возможности брони и сообщает о проблемах пользователю. Это необходимо для того, чтобы выводить пользователю предупреждение в удобном виде, а не стандартным окном исключений.
Взаимодействие с механизмом бронирований обеспечивается с помощью подписок на события БронированиеПередЗаписьюПредмета и БронированиеПриЗаписиПредмета.
При указании у мероприятия помещения происходит попытка бронирования данного помещение. Если помещение не удастся забронировать, то мероприятие не будет заведено. Бронирование помещения по мероприятию обрабатывается в процедурах БронированиеПередЗаписьюПредмета и БронированиеПриЗаписиПредмета общего модуля БронированиеПомещений.
Если организатор мероприятия ввел брони заранее – тогда для них будет установлена связь с мероприятием. Если не вводил брони заранее – новые брони будут созданы новые. Данная логика прописана в процедуре ЗабронироватьПомещение общего модуля БронированиеПомещений.
При пометке мероприятия на удаление, очистки даты или изменения помещения происходит удаления созданных автоматически броней и очистка установленных связей. Введенные вручную брони при этом не спадают. При переносе мероприятия на другую дату – происходит корректировка броней – созданные автоматически брони, не попадающие в новое время, удаляются, а для установленных связей очищается связь. Данная логика прописана в процедуре ОбработатьИзменениеРеквизитовПредмета общего модуля БронированиеПомещений.
В мероприятиях используется проверка отсутствий участников. Это происходит при изменение мероприятия и при отправке приглашений.
Если во время работы с мероприятием менялась дата проведения или состав участников, тогда будет выполнена проверка отсутствия участников перед записью мероприятия в процедуре ПередЗаписью формы ФормаЭлемента справочника Мероприятия с помощью функции ПроверитьОтсутствиеПоМероприятию общего модуля ОтсутствияКлиент.
При отправке приглашения на мероприятие выполняется проверка отсутствия участников, которым отправляется приглашение. Это выполняется в процедуре ПередЗаписью в форме ФормаБизнесПроцесса бизнес-процесса Приглашение с помощью функции ПроверитьОтсутствиеПоПроцессуПередЗаписью общего модуля ОтсутствияКлиент. Так же проверка выполняется в форме процедуре ОК формы ФормаИзменениеПараметров бизнес-процесса Приглашение с помощью функции ПроверитьОтсутствиеПоПроцессу общего модуля ОтсутствияКлиент.
Для переопределения поведения заполнения мероприятий на основании других данных предусмотрены процедуры ОбработкаЗаполнения и ОбработкаЗаполненияДополнительныхРеквизитов в общем модуле УправлениеМероприятиямиПереопределяемый. С помощью них можно прописать желаемое поведение, с заполнением мероприятия и его дополнительных реквизитов.
Для примера добавим заполнение мероприятия на основании писем. Допустим что письма будут иметь определенный формат текста. Добавим обработку для заполнения реквизитов мероприятия на основании текстов писем. По умолчанию текст письма помещается в реквизит Описание у мероприятия. Будем обрабатывать данный текст и извлекать из него необходимые данные.
Для заполнения реквизитов, в процедуре ОбработкаЗаполнения общего модуля УправлениеМероприятиямиПереопределяемый добавим вызов обработки заполнения на основании писем.
Копировать в буфер обменаПроцедура ОбработкаЗаполнения(Мероприятие, ДанныеЗаполнения, СтандартнаяОбработка) Экспорт ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения); Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ВходящееПисьмо") Или ТипДанныхЗаполнения = Тип("ДокументСсылка.ИсходящееПисьмо") Тогда ОбработкаЗаполненияНаОснованииПисьма(Мероприятие, ДанныеЗаполнения, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры
Добавим в общий модуль УправлениеМероприятиямиПереопределяемый новую процедуру ОбработкаЗаполненияНаОснованииПисьма, в которой разместим логику заполнения на основании писем. Для примера будем заполнять реквизит Организатор у мероприятия.
Копировать в буфер обменаПроцедура ОбработкаЗаполненияНаОснованииПисьма(Мероприятие, Письмо, СтандартнаяОбработка) // Описание мероприятия при создании на основании письма уже содержит текст письма. // Анализируем описание мероприятия и заполняем организатора. ЗаполнитьОрганизатора(Мероприятие); КонецПроцедуры
Добавим в общий модуль УправлениеМероприятиямиПереопределяемый новую процедуру ЗаполнитьОрганизатора, в которой разместим логику заполнения реквизита организатор. Логика заполнения следующее – в описание мероприятия ищем специальную текстовую метку "Название партнера:", и считаем что после нее указано название партнера, который выступает организатором мероприятия. Логику получения текстового представления партнера из текста вынесем в отдельную функцию ПолучитьТекстовоеОписаниеРеквизита. Считаем, что все партнеры заведены в справочнике Корреспонденты. Поиск корреспондента по текстовому описанию вынесем в отдельную функцию НайтиКорреспондента.
Копировать в буфер обменаПроцедура ЗаполнитьОрганизатора(Мероприятие) ТекстовоеОписаниеПартнера = ПолучитьТекстовоеОписаниеРеквизита(Мероприятие.Описание, "Название партнера:" ); Если ТекстовоеОписаниеПартнера = "" Тогда Возврат; КонецЕсли; НайденныйКорреспондент = НайтиКорреспондента(ТекстовоеОписаниеПартнера); Если Не ЗначениеЗаполнено(НайденныйКорреспондент) Тогда Возврат; КонецЕсли; Мероприятие.Организатор = НайденныйКорреспондент; КонецПроцедуры
В функции ПолучитьТекстовоеОписаниеРеквизита будем выполнять поиск текстового маркера в переданном тексте. Значением по данному маркеру будем считать весь оставшийся текст в строке.
Копировать в буфер обменаФункция ПолучитьТекстовоеОписаниеРеквизита(ОбрабатываемыйТекст, СтрокаМаркера) ПозицияНачалаМаркера = Найти(ОбрабатываемыйТекст, СтрокаМаркера); Если ПозицияНачалаМаркера = 0 Тогда Возврат ""; КонецЕсли; ДлинаСтроки = СтрДлина(ОбрабатываемыйТекст); ПозицияКонцаМаркера = ПозицияНачалаМаркера + СтрДлина(СтрокаМаркера) - 1; Если ПозицияКонцаМаркера = ДлинаСтроки Тогда Возврат ""; КонецЕсли; ПозицияНачалаЗначения = ПозицияКонцаМаркера + 1; ПозицияКонцаЗначения = РаботаСоСтроками.НайтиПосле(ОбрабатываемыйТекст, Символы.ПС, ПозицияКонцаМаркера); Если ПозицияНачалаЗначения = ПозицияКонцаЗначения Тогда Возврат ""; КонецЕсли; Если ПозицияКонцаЗначения = 0 Тогда Возврат СокрЛП(Сред(ОбрабатываемыйТекст, ПозицияНачалаЗначения)); КонецЕсли; РазмерЗначения = ПозицияКонцаЗначения - ПозицияНачалаЗначения; Возврат СокрЛП(Сред(ОбрабатываемыйТекст, ПозицияНачалаЗначения, РазмерЗначения)); КонецФункции
В функции НайтиКорреспондента будем выполнять поиск корреспондента в справочнике Корреспонденты по наименованию. Для того, чтобы избежать исключения при поиске по наименованию, в случае отсутствия прав на объект, будем выполнять поиск в привилегированном режиме. При этом, после нахождения корреспондента, необходимо проверить наличие прав на чтение, чтобы избежать нарушения прав доступа.
Копировать в буфер обменаФункция НайтиКорреспондента (Наименование ) УстановитьПривилегированныйРежим (Истина); НайденныйКорреспондент = Справочники .Корреспонденты .НайтиПоНаименованию (Наименование , Ложь); Если Не ЗначениеЗаполнено (НайденныйКорреспондент ) Тогда Возврат Неопределено; КонецЕсли; Если Не ДокументооборотПраваДоступа .ПолучитьПраваПоОбъекту (НайденныйКорреспондент ).Чтение Тогда Возврат Неопределено; КонецЕсли; Возврат НайденныйКорреспондент ; КонецФункции
Для заполнения дополнительных реквизитов, в процедуре ОбработкаЗаполненияДополнительныхРеквизитов добавим вызов обработки заполнения на основании письма.
Копировать в буфер обменаПроцедура ОбработкаЗаполненияДополнительныхРеквизитов(Форма, Мероприятие, ДанныеЗаполнения) Экспорт Если Не Форма.Свойства_ИспользоватьСвойства Тогда Возврат; КонецЕсли; Если ЗначениеЗаполнено(Мероприятие.Ссылка) Тогда Возврат; КонецЕсли; ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения); Если ТипДанныхЗаполнения = Тип("ДокументСсылка.ВходящееПисьмо") Или ТипДанныхЗаполнения = Тип("ДокументСсылка.ИсходящееПисьмо") Тогда ОбработкаЗаполненияДополнительныхРеквизитовНаОснованииПисьма(Форма, Мероприятие, ДанныеЗаполнения); КонецЕсли; КонецПроцедуры
В процедуре ОбработкаЗаполненияДополнительныхРеквизитовНаОснованииПисьма добавим вызов заполнения нужны дополнительных реквизитов. Будем считать что существует дополнительный реквизит КодПартнера, который должен быть указан в письме и должен храниться в дополнительных реквизитах мероприятия.
Копировать в буфер обменаПроцедура ОбработкаЗаполненияДополнительныхРеквизитовНаОснованииПисьма(Форма, Мероприятие, Письмо) // Описание мероприятия при создании на основании письма уже содержит текст письма. // Анализируем описание мероприятие и заполняем реквизиты сертификации на статус СП. ЗаполнитьКодПартнера(Форма, Мероприятие); КонецПроцедуры
В процедуре ЗаполнитьКодПартнера разместим логику получения кода партнера из текста по специальной метке, и вызов заполнения дополнительного реквизита. Функцию ПолучитьТекстовоеОписаниеРеквизита мы уже написали ранее. Процедуру ЗаполнитьЗначениеДополнительногоРеквизита добавим в дальнейшем.
Копировать в буфер обменаПроцедура ЗаполнитьКодПартнера(Форма, Мероприятие) КодПартнера = ПолучитьТекстовоеОписаниеРеквизита(Мероприятие.Описание, "Код партнера:"); Если КодПартнера = "" Тогда Возврат; КонецЕсли; ЗаполнитьЗначениеДополнительногоРеквизита(Форма, "Код партнера", КодПартнера); КонецПроцедуры
В процедуре ЗаполнитьЗначениеДополнительногоРеквизита разместим логику заполнения дополнительного реквизита на форме, в соответствии с используемой подсистемой дополнительных свойств БСП.
Копировать в буфер обменаПроцедура ЗаполнитьЗначениеДополнительногоРеквизита( Форма, НаименованиеСвойства, Значение) СтруктураПоиска = Новый Структура( "Наименование" , НаименованиеСвойства); МассивСтрок = Форма. Свойства_ОписаниеДополнительныхРеквизитов. НайтиСтроки( СтруктураПоиска); Если МассивСтрок. Количество() = 0 Тогда Возврат; КонецЕсли; ОписаниеСвойства = МассивСтрок[0]; Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = Значение; КонецПроцедуры
В результате получилась возможность заполнять на основании текста письма реквизиты в мероприятии. В данном коде добавили поддержку реквизита Организатор и дополнительного реквизита Код партнера. Рассмотрим пример работы. Пускай используется заявка на мероприятие, приведенная на рисунке.
Пример заявки на мероприятие:
При создании мероприятия на основании данного письма, окажутся заполнены реквизиты Организатор и дополнительный реквизит Код партнера. Пример заполненного мероприятия приведен на рисунке. Дополнительный реквизит был вынесен на главную страницу с помощью команды "Изменить форму".
Мероприятие при создании на основании: