Подскажите пожалуйста, как определить владельца формы выбора справочника, т.е. из какого объекта была вызвана данная форма ?
На обычных формах.
Есть документ, в этом документе поле табличного документа, при нажатие на ячейку открывается форма выбора справочника и мне необходимо в данную форму передать отбор по учреждению, которое указано в данном документе. Т.е. если я определю из какого документа была открыта форма, в отбор я смогу передать значение реквизита Учреждение , данного документа.
интересует способ без использования обработок расшифровки и процедур типа - начало выбора.
Есть у кого-нибудь какие идеи?
На обычных формах.
Есть документ, в этом документе поле табличного документа, при нажатие на ячейку открывается форма выбора справочника и мне необходимо в данную форму передать отбор по учреждению, которое указано в данном документе. Т.е. если я определю из какого документа была открыта форма, в отбор я смогу передать значение реквизита Учреждение , данного документа.
интересует способ без использования обработок расшифровки и процедур типа - начало выбора.
Есть у кого-нибудь какие идеи?
По теме из базы знаний
- Подбор в управляемой форме - что может быть проще?
- Не спеша, эффективно и правильно – путь разработки. Часть 1. Парадигма
- Расшифровка СКД. Фильтр отчета по диапазону чисел. Переопределение обработки расшифровки. Не модальный режим
- Решение задач на Управляемые формы из Сборника задач для подготовки к экзамену 1С:Специалист по платформе
- Модель состояния для MVC
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(6) Владелец "видим" только на клиенте, вернее он не видим в обработке создания формы.
Я делаю примерно так
Можете делать как я или изобретать свой костыль.
Я делаю примерно так
&НаКлиенте
Процедура ПриОткрытииНаКлиенте(Отказ)
Если НЕ ВладелецФормы.ПроверитьЗаполнение() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
// ИсточникФормы - реквизит этой формы того же типа, что и Объект в форме владельца.
// После копирования данных объекта из формы владельца - мы получим доступ к значениям
// этой копии в любом контексте этой формы через реквизит ИсточникФормы.
КопироватьДанныеФормы(ВладелецФормы.Объект, ИсточникФормы);
ПриОткрытииНаСервере(Отказ);
....
КонецПроцедуры
ПоказатьМожете делать как я или изобретать свой костыль.
ВладелецФормы.Родитель.Родитель.Родитель.Родитель.Объект.Ссылка
В моем случае открывалась форма выбора справочника "СпецификацииНоменклатуры" из документа "ОтчетПроизводстваЗаСмену" в конфигурации Бухгалтерия (управляемые формы)
В моем случае открывалась форма выбора справочника "СпецификацииНоменклатуры" из документа "ОтчетПроизводстваЗаСмену" в конфигурации Бухгалтерия (управляемые формы)
Я сделал функцию в самописном общем модуле FormClient, для решения этой задачи
В моем случае поиск объекта: "ЭтаФорма.ВладелецФормы.Родитель.ВладелецФормы.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Объект.Ссылка" занял 9 итераций, если же форма открывается из формы списка, то функция возвращает "Неопределено" за 1 итерацию.
P.S. Я использую английские названия для своих общих модулей, с целью исключения конфликта с БСП, а английский синтаксис позволяет сократить код, и упрощает его чтение ИМХО.
// *************************************************************************************************
// Функция ищет владельца заданного типа в переданной форме
//
// Параметры:
// Форма - клиентская форма
// ИскомыйТип - необязательный параметр, тип объекта для поиска, если не задан,
// функция вернет первый найденный объект
//
// Возвращает: Ссылка на найденный объект / неопределено, если владелец не найден
//
// Пример: Ссылка = FormClient.НайтиВладельцаФормыПоТипу(ЭтаФорма, "СправочникСсылка.Контрагенты");
// Ссылка = FormClient.НайтиВладельцаФормыПоТипу(ЭтаФорма);
// *************************************************************************************************
Function НайтиВладельцаФормыПоТипу(Форма, ИскомыйТип = Undefined) Export
ОбъектПоиска = Форма.ВладелецФормы.Родитель;
While true Do
// Ищем ссылку на объект искомого типа
Try If TypeOf(ОбъектПоиска.Объект.Ссылка) = Type(ИскомыйТип) ИЛИ ИскомыйТип = Undefined Then
// Ссылкаа на объект найдена, прерываем цикл
ОбъектПоиска = ОбъектПоиска.Объект.Ссылка;
break;
EndIf;
Except
// В этой итерации ссылка не обнаружена, ищем ссылку на владельца формы
Try ОбъектПоиска = ОбъектПоиска.ВладелецФормы;
Except
// В этой итерации владелец формы не обнаружен, ищем родителя
Try ОбъектПоиска = ОбъектПоиска.Родитель;
// Не найден ни объект, ни владелец формы, ни родитель, прерываем поиск
Except
ОбъектПоиска = Undefined;
break;
EndTry;
EndTry;
EndTry;
EndDo;
return ОбъектПоиска;
EndFunction // НайтиВладельцаФормыПоТипу()
ПоказатьВ моем случае поиск объекта: "ЭтаФорма.ВладелецФормы.Родитель.ВладелецФормы.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Объект.Ссылка" занял 9 итераций, если же форма открывается из формы списка, то функция возвращает "Неопределено" за 1 итерацию.
P.S. Я использую английские названия для своих общих модулей, с целью исключения конфликта с БСП, а английский синтаксис позволяет сократить код, и упрощает его чтение ИМХО.
(9)При определенных условиях, когда форма отрывалась из другой формы с передачей владельца формы как параметр, алгоритм не находил владельца. Вот исправленный вариант, лишенный этих недостатков
// *************************************************************************************************
// Функция ищет владельца переданной клиентской формы
//
// Параметры:
// Форма - клиентская форма
//
// Возвращает: Ссылка на найденный объект / неопределено, если владелец не найден
//
// Пример: Ссылка = FormClient.НайтиВладельцаФормыПоТипу(ЭтаФорма);
// *************************************************************************************************
Function НайтиОбъектВладелецФормы(Форма) Export
Try ОбъектПоиска = Форма.ВладелецФормы;
Except Return Undefined;
EndTry;
While true Do
// Ищем ссылку на объект владелец формы
Try ОбъектПоиска = ОбъектПоиска.Объект.Ссылка;
Return ОбъектПоиска;
Except
// В этой итерации ссылка не обнаружена, ищем владельца формы
Try ОбъектПоиска = ОбъектПоиска.ВладелецФормы;
Except
// В этой итерации владелец формы не обнаружен, ищем родителя
Try ОбъектПоиска = ОбъектПоиска.Родитель;
// Не найден ни объект, ни владелец формы, ни родитель, прерываем поиск
Except Return Undefined;
EndTry;
EndTry;
EndTry;
EndDo;
EndFunction // НайтиВладельцаФормыПоТипу()
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот