Имя: Пароль:
1C
1C 7.7
v7: Как закрыть форму?
,
0 Dolly_EV
 
02.04.13
05:49
Из формы отчета перед формированием (отчета) открывается другая форма (не модально), проверочная... Как в случае успеха (можно формировать отчет дальше) закрыть эту проверочную форму? сейчас она торчит, пока отчет не сформируется...Модально проверочную открывать нельзя.
1 Mikeware
 
02.04.13
05:56
Дык конт.Закрыть() ?
где конт - контекст открытой формы... не?
2 Dolly_EV
 
02.04.13
05:58
Делаю... висит, с ц у к о, пока отчет не отработает...
3 ЧеловекДуши
 
02.04.13
06:02
(2) Не могёт этого быть, если ты только тут же, после команды "конт.Закрыть()" запускаешь формирования отчета :)
4 ЧеловекДуши
 
02.04.13
06:02
+ Попробуй запускать свой отчет через ожидание :)
5 mishaPH
 
02.04.13
06:03
(2) какой отчет не отработает? проверочный или основной
6 ЧеловекДуши
 
02.04.13
06:08
+(2) Ну или как вариант, формируй отчет, после того, как закроют вторую форму, или как только она закроется.

Если ТипЗначения(КонтФормы2) = 100 Тогда // Она еще открыта:(
Иначе
//Ура, запускаемся :)
КонецЕсли;
7 Dolly_EV
 
02.04.13
06:10
В том и дело, что проверка происходит в начале процедуры формирования отчета
8 Dolly_EV
 
02.04.13
06:11
(6) не подойдет, т.к. в процедуре формирования отчета не виден Конт открытой проверочной формы (через класс, мутно всё)... хотя ... попробовать надо
9 Dolly_EV
 
02.04.13
06:14
(6) Если ТипЗначения()=100 Тогда
10 Dolly_EV
 
02.04.13
06:14
Тогда
  ЧТО??? )))
11 Dolly_EV
 
02.04.13
06:15
(4) через Ожидание - это вообще жесть))) и так извратился дальше некуда
12 mishaPH
 
02.04.13
06:15
автор. в проверочном отчете ставь при открытии СтатусВозврата(0) тогда форма того отчета не будет открываться вообще
13 Dolly_EV
 
02.04.13
06:24
(12) Хех)) так ее НАДО открывать...Но потом, если все Ок, надо закрыть и формировать отчет, а если НЕ Ок - оставить висеть открытой и НЕ формировать отчет. Проблема еще в том, что чтобы проверить, что все Ок, открыть ее надо обязательно :-(... В общем не особо она и мешает, но юзера будет вводить в заблуждение, особенно на долгих отчетах - не понятно, формируется он или нет
14 Рэйв
 
02.04.13
06:26
(13)А какой признак, что все ОК? На кнопку на форме жмут или чего?
15 Dolly_EV
 
02.04.13
06:28
(14) нет, проверка прав доступа, фильтр отчета сравнивается с фильтром пользователя
16 Рэйв
 
02.04.13
06:29
(15)А зачем тебе для этого форму какую то открывать?  Если на ней никто ничего не делает интерактивно(ну там не жмет кнопочки, не щелкает тумблеры) то и смысла в ней нет
17 Dolly_EV
 
02.04.13
06:35
(16) на ней показывается, какие ограничения у юзера установлены, чтоб он понял, какие фильтры в отчете ему установить, что сработало... Можно конечно в ПриОткрытии() не открывать, а про ограничения сообщать... так оно и было раньше. Но так - красивше - юзер наглядно видит, что надо в фильтрах поставить...
18 mishaPH
 
02.04.13
06:36
(13)

Процедура ПриОткрытии()
   СтатусВозврата(СформироватьОтчет());
КонецПроцедуры


сформитровать делаешь функцией с возвратом 1 или 0
19 Рэйв
 
02.04.13
06:36
(17)Сделай еще красивше. Поставь все фильтры за него и не надо никакой формы открывать.
20 Dolly_EV
 
02.04.13
06:45
(19) Там разночтения возникнуть могут))) Т.е. у юзера фильтр по правам шире, чем ему в данный момент сформировать надо...
В общем, хочу, чтоб форма открывалась и закрывалась))
21 Dolly_EV
 
02.04.13
06:46
(18) не понял... или ты не понял?)
вот код урезанный:

//======================================================================
Процедура Сформировать() // процедура в Отчете
   //** проверка доступа
   СписПроверок=СоздатьОбъект("СписокЗначений");
   СписПроверок.ДобавитьЗначение("Номенклатура","Номенклатура");
   // ...
   Если торгПроверкаДоступа(ОбъектМФ,СписПроверок)=0 тогда
       Возврат;
   КонецЕсли;
   
   // формируем отчет...
   
КонецПроцедуры

//======================================================================
Функция торгПроверкаДоступа(п_МФ,п_СписФильтров) Экспорт
   // Проверка возможности формирования отчета пользователем по элементам справочников:
   
   // п_МФ - ОбъектМФ из проверяемого отчета ИЛИ СписокЗначений, содержащий Списки для проверки
   // п_СписФильтров  - Список строк - проверяемых фильтров
   // Возврат 0 = нельзя, 1 = можно
   
   //** Получаем ограничения пользователя
   Юзер=СоздатьОбъект("Справочник.Пользователи");
   Если Юзер.НайтиЭлемент(глПользователь)=0 Тогда
       Возврат 0; // нет юзера - вопиющий косяк
   КонецЕсли;
   
   ОбъектМФ=СоздатьОбъект("МножественныйФильтр");
   спМФ=СоздатьОбъект("СписокЗначений");
   спМФ.Установить("НеОткрыватьФорму",1); //Вот так все Ок, но форма совсем не открывается, даже когда надо :-(
   спМФ.Установить("ЗаголовокФормы","Ограничения пользователя: "+СокрЛП(Юзер.Наименование));
   спМФ.Установить("ЗаголовокФормыЗамещать",0);
   спМФ.Установить("НЕДоступностьФормы",1);
   //спМФ.Установить("Модально",1);
   
   ОбъектМФ.Открыть(0,спМФ); // Вот здесь открывается форма!
   
   // Далее - получение списков фильтров Юзера
   ОбъектМФ.Добавить("Справочник.Номенклатура","Номенклатура","Номенклатура","");
   // ...
   ОбъектМФ.мфФлагХранения=1;
   ОбъектМФ.ВосстановитьЗначенияМФ(Юзер.ТекущийЭлемент());
   
   //** ПРОВЕРЯЕМ
   лРеж=1;
   Если СписТовНадо=1 Тогда Если торгПроверкаДоступаПроверкаСписка(Юзер,СписТов,СпТов,"Номенклатура")=0 Тогда    лРеж=0;    КонецЕсли; КонецЕсли;
   Если СписКлнНадо=1 Тогда Если торгПроверкаДоступаПроверкаСписка(Юзер,СписКлн,СпКлн,"Контрагенты")=0 Тогда    лРеж=0;    КонецЕсли; КонецЕсли;
   Если СписТПНадо=1 Тогда Если торгПроверкаДоступаПроверкаСписка(Юзер,СписТП,СпТП,"Проекты")=0 Тогда    лРеж=0;    КонецЕсли; КонецЕсли;
   Если СписСклНадо=1 Тогда Если торгПроверкаДоступаПроверкаСписка(Юзер,СписСкл,СпСкл,"Склады")=0 Тогда    лРеж=0;    КонецЕсли; КонецЕсли;
   Если СписТПДопНадо=1 Тогда Если торгПроверкаДоступаПроверкаСписка(Юзер,СписТПДоп,СпТПДоп,"Проекты (дополнительно)")=0 Тогда    лРеж=0;    КонецЕсли; КонецЕсли;
   
   Если лРеж=1 Тогда
       ОбъектМФ.Конт.Форма.Закрыть(0); // вот здесь прога НЕ ждет и срабатывает далее... и форма висит, пока не сформируется отчет...
   Иначе
       Возврат 0;
   КонецЕсли;
   
   //если не выкинули с "0" раньше, значит все Ок - можно по всем статьям
   Возврат 1;
   
КонецФункции //торгПроверкаДоступа
22 Рэйв
 
02.04.13
06:50
(20)Имхо красивше будет не форму открывать, а добавить закладку. Захотел - зашел посмотрел, не захотел, не зашел - так запускай
23 Dolly_EV
 
02.04.13
06:56
(22) в отчеты - закладку с правами? не не гут... и писанины много
24 mishaPH
 
02.04.13
06:56
(22) Действительно зпчем лепить 2 отчета вообще. Если один проверочный. Сделай проверку в текущем отчете
25 Рэйв
 
02.04.13
06:57
(23)Твоя задумка вообще не гуд, что ж теперь:-)
26 Dolly_EV
 
02.04.13
06:59
В общем нет мыслей больше?... тогда не бум вообще форму открывать
27 Рэйв
 
02.04.13
07:01
Самое правильное  в твоем случае- это давать выбирать только разрешенный набор фильтров. Т.е. не юзер думает что ему можно выбрать, а ты даешь выбрать только то что надо
28 Рэйв
 
02.04.13
07:01
А все остальное - не гуд, с какой стороны не посмотри:-)
29 Dolly_EV
 
02.04.13
07:11
(28) Не только давать выбирать, но и заставлять выбирать, если ничего не выбрано... ну и фильтр в 4-х состояниях (вкл/искл/пусто/НЕпусто) - только "вкл"

все остальное - это уж на вкус и цвет.
30 ЧеловекДуши
 
02.04.13
07:20
(29) Если ты форму открываешь не модально, то при выводе твоей формы должен сразу запуститься отчет, или я чего то не уловил?
31 big
 
02.04.13
07:36
Процедура ПриПовторномОткрытии()
   Если Форма.Параметр = "закрыть_нах";
   Форма.Закрыть();
КонецПроцедуры
32 Dolly_EV
 
02.04.13
07:44
(30) правильно уловил, только хочется, чтобы форма сначала закрывалась, а потом - формирование отчета. Это если можно. А если нельзя - форма открывалась - и висела до закрытия самим юзером (что работает)
33 Dolly_EV
 
02.04.13
07:45
(31) что это дает? где здесь повторное открытие?
34 ЧеловекДуши
 
02.04.13
07:52
(32) Тогда, зачем тебе вообще форма, если пользователь не уловит её информативность? :)
35 Dolly_EV
 
02.04.13
08:06
(34) если все Ок - оно и не надо.. информативности)) Особенность в том, что эта же форма используется для получения фильтров (ограничений) пользователя
36 big
 
02.04.13
08:10
(33) Эта процедура находится в твоей открываемой форме. Если её открыть ещё раз (т.е. из отчета) и передать в параметре команду, то можно отработать эту команду
37 ЧеловекДуши
 
02.04.13
08:39
(35) Дак, тогда и проверяй, свое "ОК" в процедуре "ПриОткрытии()" И если не ОК, то отобрази пользователю форму.
А если ОК, то и видеть её не надо :)

Так же, если не Ок, то после можно воспользоваться кодом из (6)
38 Dolly_EV
 
02.04.13
08:52
(37) -> (35) Особенность в том, что эта же форма используется для получения фильтров (ограничений) пользователя. Т.е. ее открыть надо по-любому :-((
39 mishaPH
 
02.04.13
09:10
(38) В таком случае не надо заниматься фигней в отдельными формама. переноси функционал в глобальник и используй везде, где надо.
40 Dolly_EV
 
02.04.13
09:28
Функция торгПроверкаДоступа(п_МФ,п_СписФильтров) Экспорт
как раз в глобальнике. ОбъектМФ - класс "МножественныйФильтр"
Ладно. вопрос закрыт. не бум вообще  открывать форму и все тут.
41 Ёпрст
 
02.04.13
09:39
(0) це же элементарно, ватсон!
42 Dolly_EV
 
02.04.13
09:49
(41) колись?
43 Dolly_EV
 
02.04.13
10:24
(41) и ушел... элементарно, элементарно...
44 Ёпрст
 
02.04.13
10:45
принцип как тут - формула текста на форме
http://infostart.ru/public/16514/
AdBlock убивает бесплатный контент. 1Сергей