Имя: Пароль:
1C
1C 7.7
v7: ОткрытьФорму немодально и узнать когда она закрылась
0 NDIS HH
 
27.04.13
16:45
Модуль формы справочника Аналоги.
ОткрытьФорму(ЭлемСпрНоменклатура);

ПриЗакрытии справочника Номенклатура нужно вызвать процедуру в модуле формы спр Аналоги.
1 Rie
 
27.04.13
16:46
(0) Вставь в ПриЗакрытии формы справочника Номенклатура нужные действия.
2 Torquader
 
27.04.13
16:48
Просто так данный момент не реализуется, так как связи между формами нет.
Можно в справочник Номенклатура передать контекст формы справочника-родителя, тогда через него можно будет выполнить какие-то действия с данными справочника Аналоги.
3 NDIS HH
 
27.04.13
16:51
(1) И все параметры процедуры в СпрНоменклатуру передать...
А в первом модуле никак нельзя?

Здесь где-то было как при немодальном открытии отследить момент закрытия. Вроде бы с Формексом. Сейчас не смог найти.
4 Rie
 
27.04.13
16:52
(3) Проверка на ТипЗначения(Конт)<>100? Ну не будешь же в цикле такую проверку крутить-то...
5 Torquader
 
27.04.13
16:58
Если справочник сохранён, то можно сделать "фикус" - то есть передать ссылку ТекущийЭлемент() в нужную форму, а потом из формы сделать ОткрытьФорму(ПереданныйЭлемент,КодДействия) - если форму справочника закроют, то она откроется заново, а если нет - то можно отловить вызов в ПриПовторномОткрытии.
6 Rie
 
27.04.13
17:00
Как универсальный механизм - можно передавать контекст открывающей формы открываемой. И ПриЗакрытии открываемой делать фиктивное закрытие открывающей - а та уж сама пусть думает, что ей в таком случае сделать надо.
7 Torquader
 
27.04.13
17:02
(6) Там есть проблема в том, что в ПриЗакрытии мы не можем передать команду - её придётся пихать во внешнюю переменную в глобальном модуле.
8 Rie
 
27.04.13
17:03
(7) Почему в глобальном модуле? Реквизит формы для этого прекрасно сгодится.
9 Rie
 
27.04.13
17:04
+(8) Если уж мы над формой измываемся, то добавить ей реквизит  (например, список значений - чтобы команда с параметрами была) ВместоЗакрытия - это святое :-)
10 Torquader
 
27.04.13
17:10
(8) Если список, то он может и не быть реквизитом формы - достаточно, чтобы он был переменной модуля - мы его передаём в параметре в другую форму и запоминаем в текущей - и можем обмениваться данными между формами, а команды отправлять через ложное закрытие или ещё лучше через ТаФорма.Обновить();
11 Rie
 
27.04.13
17:14
(10) Невидимый список на форме никому мешать не будет. А работать с ним удобнее. Можно, к примеру, в глобальный модуль вставить подпрограммы для фиктивного закрытия (к переменным модуля у них доступа нет - а к реквизитам формы доберутся).
12 NDIS HH
 
27.04.13
17:17
(11) мама
13 Torquader
 
27.04.13
17:17
(11) Если мы уже правим глобальный модуль, то лучше туда вставить переменную с таблицей открытых форм, тогда можно будет и подписку на события сделать.
14 Torquader
 
27.04.13
17:19
(12) Ну и чего ты испугался ?
Если страшно, то закрывай конфигуратор и больше к нему не подходи.
15 Rie
 
27.04.13
17:21
(13) Хороший вариант.
16 NDIS HH
 
27.04.13
17:25
(10) ТаФорма.Обновить() вы предлагаете разместитить в ПриЗакрытии() открываемой формы? А "ТаФорма" это что будет?
17 Rie
 
27.04.13
17:27
(16) Контекст открывающей формы, переданный через Параметр при  открытии.
18 NDIS HH
 
27.04.13
17:31
(17) А, вот в Формексе есть ПослеОбновленияФормы() - должна отработать? (Ещё кстати есть ПриАктивацииОкна)
19 Fynjy
 
27.04.13
17:36
Если ОткрытьФормуМодально("Справочник.Валюты") = 0 Тогда
   КонецЕсли;
   Сообщить("О ля исполнение то кода остановлена, до закрытия формы, а ламеры с Мисты и не знают ... ");
20 Torquader
 
27.04.13
17:49
// В форме справочника Аналоги:
Перем мтзОбменНоменклатура;

Процедура мпОткрытиеСправочникаНоменклатура(пспрСсылкаЭлемент,пстрКоманда)
   Если ТипЗначенияСтр(мтзОбменНоменклатура)="ТаблицаЗначений" Тогда
       // уже открыли, проверим, что она жива
       лч=0;
       Если мтзОбменНоменклатура.НайтиЗначение("ФормаНоменклатура",лч,1)=1 Тогда
           лФорма=мтзОбменНоменклатура.ПолучитьЗначение(лч,2);
           Если ТипЗначения(лФорма)=100 Тогда
               // форма у нас уже открыта - можно передавать команду
               лч=0;
               Если мтзОбменНоменклатура.НайтиЗначение("КомандаДляНоменклатуры",лч,1)=1 Тогда
                   мтзОбменНоменклатура.УстановитьЗначение(лч,2,пстрКоманда);
               Иначе
                   мтзОбменНоменклатура.НоваяСтрока();
                   мтзОбменНоменклатура.Имя="КомандаДляНоменклатуры";
                   мтзОбменНоменклатура.Значение=пстрКоманда;
               КонецЕсли;
               лФорма.Закрыть(0);
               Возврат;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   // иначе или таблица не создана или форма уже закрыта
   мтзОбменНоменклатура=СоздатьОбъект("ТаблицаЗначений");
   мтзОбменНоменклатура.НоваяКолонка("Имя");
   мтзОбменНоменклатура.НоваяКолонка("Значение");
   мтзОбменНоменклатура.НоваяСтрока();
   мтзОбменНоменклатура.Имя="ФормаАналоги";
   мтзОбменНоменклатура.УстановитьЗначение(1,2,Контекст);
   мтзОбменНоменклатура.НоваяСтрока();
   мтзОбменНоменклатура.Имя="КомандаДляНоменклатуры";
   мтзОбменНоменклатура.Значение=пстрКоманда;
   лФорма=мтзОбменНоменклатура;
   ОткрытьФорму(пспрСсылкаЭлемент,лФорма);
   мтзОбменНоменклатура.НоваяСтрока();
   мтзОбменНоменклатура.Имя="ФормаНоменклатура";
   мтзОбменНоменклатура.Значение=лФорма;
КонецПроцедуры

Процедура ПриЗакрытии()
   // проверяем, что у нас передана команда
   Если ТипЗначенияСтр(мтзОбменНоменклатура)="ТаблицаЗначений" Тогда
       лч=0;
       Если мтзОбменНоменклатура.НайтиЗначение("КомандаДляАналогов",лч,1)=1 Тогда
           лстрКоманда=мтзОбменНоменклатура.ПолучитьЗначение(лч,2);
           Если ПустаяСтрока(лстрКоманда)=0 Тогда
               СтатусВозврата(0);
               // обрабатываем полученную команду
               мпОбработатьКоманду(лстрКоманда);
               мтзНоменклатура.УстановитьЗначение(лч,2,"");
               Возврат;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   // здесь дальнейшая обработка нормального закрытия
КонецПроцедуры

// в справочнике Номенклатура
Перем мтзОбменАналоги;

Процедура ПриОткрытии()
   лтзОбмен=Форма.Параметр;
   Если ТипЗначенияСтр(лтзОбмен)="ТаблицаЗначений" Тогда
       мтзОбменАналоги=лтзОбмен;
       лч=0;
       Если мтзОбменАналоги.НайтиЗначение("КомандаДляНоменклатуры",лч,1)=1 Тогда
           лстрКоманда=мтзОбменАналоги.ПолучитьЗначение(лч,2);
           Если ПустаяСтрока(лстрКоманда)=0 Тогда
               мпОбработатьКоманду(лстрКоманда);
               мтзОбменАналоги.УстановитьЗначение(лч,2,"");
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Процедура ПриЗакрытии()
   Если ТипЗначенияСтр(мтзОбменАналоги)="ТаблицаЗначений" Тогда
       лч=0;
       Если мтзОбменАналоги.НайтиЗначение("КомандаДляНоменклатуры",лч,1)=1 Тогда
           лстрКоманда=мтзОбменАналоги.ПолучитьЗначение(лч,2);
           Если ПустаяСтрока(лстрКоманда)=0 Тогда
               СтатусВозврата(0);
               // выполняем команду
               мпОбработатьКоманду(лстрКоманда);
               мтзОбменАналоги.УстановитьЗначение(лч,2,"");
               Возврат;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   // здесь продолжение обработки закрытия
   // например -передача команды обратно
   лстрКоманда="ЗакрытиеНоменклатуры";
   Если ТипЗначенияСтр(мтзОбменАналоги)="ТаблицаЗначений" Тогда
       лч=0;
       Если мтзОбменАналоги.НайтиЗначение("КомандаДляАналогов",лч,1)=1 Тогда
           мтзОбменАналоги.УстановитьЗначение(лч,2,лстрКоманда);
       Иначе
           мтзОбменАналоги.НоваяСтрока();
           мтзОбменАналоги.Имя="КомандаДляАналогов";
           мтзОбменАналоги.Значение=лстрКоманда;
       КонецЕсли;
       // передаём команду
       лч=0;
       Если мтзОбменАналоги.НайтиЗначение("ФормаАналогов",лч,1)=1 Тогда
           лФорма=мтзОбменАналоги.ПолучитьЗначение(лч,2);
           // проверяем, что она ещё открыта
           Если ТипЗначения(лФорма)=100 Тогда
               лФорма.Закрыть(0);
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры
21 Rie
 
27.04.13
19:20
(18) Не выёживайся. Твоя задача решается штатными средствами 1С.
22 Ёпрст
 
27.04.13
21:36
23 NDIS HH
 
29.04.13
11:42
(22) А, это как в вашей подборке чекбоксов...

Видишь суслика? А он есть!
24 Ёпрст
 
29.04.13
11:43
главное - результат.
Чего не устраивает ?
И никаких ВК.
25 NDIS HH
 
29.04.13
11:44
(22) Ну в ТиС так же формируется информационная строка - что ж это я...
26 NDIS HH
 
29.04.13
11:45
(24) Безусловно.