|
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) Безусловно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |