Всем привет.
Собственно задумался над вопросом как отказаться от ввода на основании в упр. формах, чтобы окно формы не появлялось?
В обычных формах было все просто, берем экспортную переменную в виде флага, устанавливаем, проверяем перед открытием и идем в отказ.
В управляемых формах такого сделать не получится, стал думать как можно красивее такое замутить, видел публикацию нашего уважаемого админа Vofki, там в обработке заполнения вызывается исключение
ВызватьИсключение("Упс, произошла какая-то неведомая фигня");
Решение интересное, но думал может есть что-то красивее, чем еррор на экране))Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
// наше условие, при котором документ не должен заполняться и
ДополнительныеСвойства.Вставить("НеОткрыватьФорму", Истина);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
НеОткрыватьФорму = Ложь;
Если ТекущийОбъект.ДополнительныеСвойства.Свойство("НеОткрыватьФорму", НеОткрыватьФорму) Тогда
Отказ = НеОткрыватьФорму;
КонецЕсли;
КонецПроцедуры
Vofka @ Сегодня, 11:09
,
а как? чего-то я туплю... добавил допустим я реквизит на форму, как мне его заполнить из модуля объекта из процедуры "ОбработкаЗаполнения"?
Если УсловиеИстина Тогда
ВводДокументаНаОсновании();
КонецЕсли;
Flexy @ Сегодня, 11:27
,
дык стандартный механизм ввода на основании же, в одном документе есть стандартное меню "Ввести на основании ..." выбираю нужный мне документ, попадаю в процедуру модуля объекта "ОбработкаЗаполнения" нужного мне документа и там мне надо проверить мой документ основание, если по условию не проходит, то не показывать форму и выдать сообщения что нельзя создать документ.
Кажется вы меня не так поняли, я имел в виду что хочу получить что-то вроде параметра "Отказ" по которому я смогу регулировать открывать форму документа или нет, а не отказаться от каких-то окон вообще и заполнять документ программно.
logist @ Сегодня, 11:50
,
Просто думал может есть ещё способ сделать по аналогии с обычными формами, в итоге вообщем все таки добавил реквизит "ДокументОснование" в свой документ и проверяю его по своим условиям в форме "ПриСозданииНаСервере"... а то с утра мозгую как его лучше было сделать, лучше дальше задачу буду делать, а оптимизация если что наступит со временем =)
Bernet @ Сегодня, 11:56
,
Если условие размещаете в "ПриСозданииНаСервере", то не надо добавлять реквизит, т. к. уже есть "Параметры.Основание".
Для управляемых форм можно пойти через одно место)))
1. Добавляем подписку на событие
2. Указываем источник ДокументМенеджер (выбираем наш документ-ы)
3. Указываем событие ОбработкаПолученияФормы
4. Добавляем общую форму "НеОткрыватьФорму" и при открытии указываем Отказ = Истина;
5. Добавляем Параметр сеанса "МойПарметрСеанса". Инициализируем его при старте программы и в обработке заполнения закидываем в него нужные нам параметры
6. В обработчике события ОбработкаПолученияФормы вставляем код который смотрит переданные параметры, а так же данные хранящиеся в нашем параметре
Если получили условие при котором не нужно открывать форму, то выполняем код
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = "ОбщаяФорма.НеОткрыватьФорму";
т.е. мы переопределили форму на ту которая никогда не откроется
З.Ы. Сам не пробовал, чисто теоретически, хотя сомневаюсь что сначала будет вызываться обработка заполнения, нужно пробовать.
Batchir @ Сегодня, 11:06
,
"месье знает толк в извращениях..."
P.S. Кстати, по моему оно будет работать только если вызывать "Форма = ПолучитьФорму()"...Форма.Открыть(). С метода "ОткрытьФорму()" - не взлетает, а жаль.
СтандартнаяОбработка = Ложь;
ВыбраннаяФорма = "ОбщаяФорма.НеОткрыватьФорму";
Batchir @ Сегодня, 12:06
,
АДЪ
это извините за выражение ))) как у вас так мозги работают, да ещё и в понедельник...млин, пойду напьюсь
Но выглядит круто, не спорю
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua