Всем привет! У меня у регистра сведений есть есть несколько форм записи и в зависимости от условий нужно открывать свою разновидность формы записи. Так вот как переназначить форму записи в зависимости от условий? В обычном приложении достаточно было при открытии выставить Отказ = Истина и открыть нужную форму, а в управляемом режиме такая схема не работает - если взвести отказ, то форма которую открыли программно, тоже не открывается. Так же пробовал вместо отказа закрывать основную форму после открытия дополнительной - тоже не работает. Такое ощущение, что теперь если взвести отказ или закрыть окно при открытии формы, то вообще никакой код не выполняется. Сейчас делаю так:
Открываются обе формы, если же раскомментировать Отказ = Истина или Закрыть(), то не открывается ни одна форма. Как правильно поступить?
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Условие = ИстинаТогда
//Отказ = Истина;
ПараметрыФормы = Новый Структура("Ключ", Запись.ИсходныйКлючЗаписи);
ОткрытьФорму(
"РегистрСведений.ИмяРегистра.Форма.ФормаЗаписи_Дополнительная",
ПараметрыФормы,
Неопределено
);
//Закрыть();
Возврат;
КонецЕсли;
//Какой-то код...
КонецПроцедуры
ПоказатьОткрываются обе формы, если же раскомментировать Отказ = Истина или Закрыть(), то не открывается ни одна форма. Как правильно поступить?
По теме из базы знаний
Найденные решения
(1) попробуйте так
Если Условие = Истина Тогда
Отказ = Истина;
ПараметрыФормы = Новый Структура("Ключ", Запись.ИсходныйКлючЗаписи);
ОткрытьФорму("РегистрСведений.ИмяРегистра.Форма.ФормаЗаписи_Дополнительная",
ПараметрыФормы,
ВладелецФормы
);
//Закрыть();
//Возврат;
КонецЕсли;
Показать
(23) Кому интересно, конечный вариант в модуле менеджера регистра выглядит примерно так:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаСписка" Тогда
Если Условие = Истина Тогда
ВыбраннаяФорма = "ФормаСписка_Доп";
СтандартнаяОбработка = Ложь;
КонецЕсли;
ИначеЕсли ВидФормы = "ФормаЗаписи" Тогда
Если Условие = Истина Тогда
ВыбраннаяФорма = "ФормаЗаписи_Доп";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) у меня в одном месте сделано так:
PS ПараметрыОкна - это реквизит формы с типом "произвольный".
туда записывается заполненная структура в процедуре ПриСозданииНаСервере()
Процедура ПриОткрытии(Отказ)
ОткрытьФорму(ПараметрыОкна.ИмяФормы,
ПараметрыОкна.Параметры,,
ПараметрыОкна.Уникальность,
ПараметрыОкна.Окно);
Закрыть();
КонецПроцедуры
туда записывается заполненная структура в процедуре ПриСозданииНаСервере()
(3)
вам зачем?
для вас важно только одно:
Отказ = Истина; в начале процедуры ПриОткрытии()
надо заменить на Закрыть(); в конце...
PS если всё же хотите знать, то ПараметрыОкна - реквизит формы который заполняется в обработчике ПриСозданииНаСервере()
это сделано что бы не делать ещё одного серверного вызова в обработчике ПриОткрытии(),
а при запуске ПриОткрытии(), уже все данные известны, осталось только открыть нужную форму.
Что за переменная ПараметрыОкна? Что там за значения?
вам зачем?
для вас важно только одно:
Отказ = Истина; в начале процедуры ПриОткрытии()
надо заменить на Закрыть(); в конце...
PS если всё же хотите знать, то ПараметрыОкна - реквизит формы который заполняется в обработчике ПриСозданииНаСервере()
это сделано что бы не делать ещё одного серверного вызова в обработчике ПриОткрытии(),
а при запуске ПриОткрытии(), уже все данные известны, осталось только открыть нужную форму.
(4) Почитай, что я написал в самом начале - я так делал, эффект одинаковый. Вот текущий вариант:
Перенес проверку условия в конец процедуры, ничего не изменилось, ни одна форма не открылась. Поэтому и спрашиваю, что в параметрах, может что то с уникальностью подкрутить нужно.
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//Какой-то код...
Если Условие = ИстинаТогда
//Отказ = Истина;
ПараметрыФормы = Новый Структура("Ключ", Запись.ИсходныйКлючЗаписи);
ОткрытьФорму(
"РегистрСведений.ИмяРегистра.Форма.ФормаЗаписи_Дополнительная",
ПараметрыФормы,
Неопределено
);
//Закрыть();
Возврат;
КонецЕсли;
КонецПроцедуры
ПоказатьПеренес проверку условия в конец процедуры, ничего не изменилось, ни одна форма не открылась. Поэтому и спрашиваю, что в параметрах, может что то с уникальностью подкрутить нужно.
(1) попробуйте так
Если Условие = Истина Тогда
Отказ = Истина;
ПараметрыФормы = Новый Структура("Ключ", Запись.ИсходныйКлючЗаписи);
ОткрытьФорму("РегистрСведений.ИмяРегистра.Форма.ФормаЗаписи_Дополнительная",
ПараметрыФормы,
ВладелецФормы
);
//Закрыть();
//Возврат;
КонецЕсли;
Показать
(8)
скорее всего, в 1С заложено, что при закрытии окна закрываются все дочерние.
а так как вы не указали родителя, то родителем стало текущее окно.
При взводе отказа и указании владельца формы открылась одна форма - дополнительная! Блин, и как я должен был догадаться? Как это вообще связано?
скорее всего, в 1С заложено, что при закрытии окна закрываются все дочерние.
а так как вы не указали родителя, то родителем стало текущее окно.
(21)
Спасибо за уточнение. Попробовал программно открыть форму через конструкцию
Все отработало как надо, обработчик в модуле менеджера сработал, а вот если вызвать с точным указанием формы
то обработчик не срабатывает и форма не переназначается, но мне кажется так даже правильнее, ведь если в явном виде указывают какая форма требуется, то она и должна открыться.
срабатывает этот обработчик только при автоматическом открытии форм из динамических списков
Спасибо за уточнение. Попробовал программно открыть форму через конструкцию
ОткрытьФорму("РегистрСведений.ИмяРегистра.ФормаСписка");
Все отработало как надо, обработчик в модуле менеджера сработал, а вот если вызвать с точным указанием формы
ОткрытьФорму("РегистрСведений.ИмяРегистра.Форма.ФормаСписка");
то обработчик не срабатывает и форма не переназначается, но мне кажется так даже правильнее, ведь если в явном виде указывают какая форма требуется, то она и должна открыться.
(23) Кому интересно, конечный вариант в модуле менеджера регистра выглядит примерно так:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаСписка" Тогда
Если Условие = Истина Тогда
ВыбраннаяФорма = "ФормаСписка_Доп";
СтандартнаяОбработка = Ложь;
КонецЕсли;
ИначеЕсли ВидФормы = "ФормаЗаписи" Тогда
Если Условие = Истина Тогда
ВыбраннаяФорма = "ФормаЗаписи_Доп";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот