Немного поискав в истории не нашел ничего похожего. Возможно плохо искал.
Это только идея. Ее можно развивать дальше. но я ограничился простым механизмом.
Для управляемых форм можно придумать более изящное решение.
Проблема:
Конфигурация УПП. Работают на обычных формах. На основании документов необходимо вводить запись в регистре. Ну франч соответственно сделал кнопку в меню Ввод на основании. При очередном обновлении я запарился вручную переносить изменения типовой формы в измененную.
Описание идеи:
Платформа сама заполняет этот пункт меню из объектов, в которых указано что они вводятся на основании. Решил использовать его для создания программного списка создания на основании.
Что решил сделать:
1 Я решил добавить свой справочник "Дополнительный ввод на основании".
2 Для него указываю на основании каких объектов он должен создаваться
3 Добавляю предопределенные значения в справочник. Они означают конкретный вид Ввода на основании
4 Для справочника добавил табличную часть "Объекты". В ней указывается перечень видов объекта для которых используется заполнение. Используется как ограничение.
Если НЕ Предопределенный Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
5 В обработке заполнения написал:
5.1 Выборку заполнения для конкретного объекта
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| AVA_ДополнительныйВводНаОснованииОбъекты.Ссылка,
| AVA_ДополнительныйВводНаОснованииОбъекты.Ссылка.Наименование КАК Наименование
|ИЗ
| Справочник.AVA_ДополнительныйВводНаОсновании.Объекты КАК AVA_ДополнительныйВводНаОснованииОбъекты
|ГДЕ
| ТИПЗНАЧЕНИЯ(AVA_ДополнительныйВводНаОснованииОбъекты.ПустаяСсылкаОбъекта) = ТИПЗНАЧЕНИЯ(&Объект)";
Запрос.УстановитьПараметр("Объект", ДанныеЗаполнения);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Сообщить("Для данного вида объекта нет дополнительного ввода на основании", СтатусСообщения.Внимание);
Возврат;
КонецЕсли;
5.2 Открыть форму выбора вида ввода на основании
Выборка = Результат.Выбрать();
спВвода = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
спВвода.Добавить(Выборка.Ссылка, Выборка.Наименование);
КонецЦикла;
ВыборПунктаВводНаОсновании = спВвода.ВыбратьЭлемент("Что хотите ввести на основании?");
Если ВыборПунктаВводНаОсновании <> Неопределено
Тогда
ОсуществитьДополнительныйВводНаОсновании(ДанныеЗаполнения, ВыборПунктаВводНаОсновании.Значение);
КонецЕсли;
5.3 Ну и процедура обработки выбранного вида ввода на основании
Процедура ОсуществитьДополнительныйВводНаОсновании(ДанныеЗаполнения, ВидЗаполненияСсылка)
предСсылки = Справочники.AVA_ДополнительныйВводНаОсновании;
Если ВидЗаполненияСсылка = предСсылки.АС_ВременноЗамещающие Тогда
ВременноЗамещающие_ВводНаОсновании(ДанныеЗаполнения);
КонецЕсли;
КонецПроцедуры
Процедура ВременноЗамещающие_ВводНаОсновании(ДанныеЗаполнения)
//Документ Кадровое пермещение
//Документ Прием на работу в организацию
//Документ Увольнение из организации
Форма = РегистрыСведений.АС_ВременноЗамещающие.ПолучитьФорму("ФормаГрупповогоДобавления");
Форма.Основание = ДанныеЗаполнения; Форма.Открыть();
КонецПроцедуры
Дополнительно для пользователей в ролях необходимо указать для данного справочника:
- Чтение
- Добавление
а то не хватит прав
Тут возможные ошибки, к примеру: если заполнение будет с сервера, то ни о каком открытии формы не может быть речи.
Возможны и другие ошибки. Это только идея. Возможно, кому-нибудь пригодится.