![]() |
|
v7: Форма.Параметр Форма.Закрыть() Как передать параметр из закрываемой формы | ☑ | ||
---|---|---|---|---|
0
lmlg1
17.11.16
✎
19:36
|
Доброго времени суток, уважаемые форумчане!
1сv7.7 Старая конфа, нужно кой чего дописать Задача: Обработка1(o1) и Обработка2(о2) внешние Нужно чтобы Обработка1 запускала Обработку2 с передаваемым в О2 параметром. о2 открывается и в процедуре приОткрытии() по условиям переданного в о2 параметра запускается та или иная функция(ф1). Тут вроде все понятно. Теперь вопросы: как закрыть форму о2 и обратно в о1 передать результат ф1? О1 Функция ОтправитьЗапросОстатки() //lm Рез=0; Результат="ОтправитьЗапросОстатки"; Если (ОткрытьФорму("Отчет",Результат,ПутьФ+"О2.ert")=1) тогда// Если (нрег(СокрЛП(Результат)) = нрег("ГрупповойКонтекст")) тогда// Рез=Результат.Форма.Параметр; //Результат.Форма.Закрыть(); КонецЕСли; // КонецЕСли; //; Возврат Рез; КонецФункции // обработка2 o2 Процедура ПриОткрытии() Авто=0; Если (СокрЛП(Форма.Параметр)="ОтправитьЗапросОстатки") тогда// Ост=0; Ост2=0; СпиДок=СоздатьОбъект("СписокЗначений"); Ост=ОтправитьЗапросОстатки(); //04.8441 20161112-4 Спидок.ДобавитьЗначение(Ост); Ост2=ОтправитьЗапросОстаткиR2(); //04.8441 20161112-4 Спидок.ДобавитьЗначение(Ост2); Форма.Параметр=СпиДок; Авто=1; КонецЕСли; //lm Если (Авто=1) тогда// Форма.Закрыть(); //04.8441 20161112-4 СтатусВозврата(0); //Спорная строка КонецЕСли; // КонецПроцедуры; Если оставляю спорную строку(третья снизу СтатусВозврата(0);), то форма о2 закрывается, но не передает параметр. Если убираю спорную строку, то Форма НЕ закрывается, но передает параметр. Как сделать чтобы и форма закрылась и параметр передался? Форма.Закрыть(0)-пробовал, НЕ помогает. Заранее благодарен за ответ |
|||
1
Torquader
17.11.16
✎
19:55
|
И чего может быть сложного ?
Если мы в параметре передаём список значений (только в функцию ОткрытьФорму нужно будет передать другую переменную, в которую скопировать переменную списка. Тогда форма изменяет список и в основной форме это видно. Другое дело, что нужно также передавать ссылку на основную форму, чтобы можно было её как-то пнуть, например, через ложное закрытие - можно также через повторное открытие, но нужно передать имя формы, чтобы её можно было повторно открыть и через тот же параметр передать ей команду. |
|||
2
Lazy Stranger
17.11.16
✎
20:22
|
я бы не парил себе мозг:
ОткрытьФормуМодально() и тогда можно просто через глобальную переменную результат передать |
|||
3
Torquader
17.11.16
✎
20:50
|
(2) Только переключиться в меню нельзя.
|
|||
4
lmlg1
17.11.16
✎
21:56
|
Спасибо,откликнувшимся.
(1)Torquader. Видимо мои познания в 1С не дотягивают до Ваших, поэтому применить теоретическую трактовку в практическую не могу. Если возможно кусочек кода, того что Вы облекли в слова. (2)Lazy Stranger. Спасибо учту, но не хотел лезть в глобальник. Заранее благодарен. |
|||
5
Torquader
17.11.16
✎
23:28
|
В форме, из которой вызываем:
Перем СписокДляОбмена; Перем ДочерняяОбработка; Процедура ОткрытиеДругойФормы() СписокДляОбмена=СоздатьОбъект("СписокЗначений"); СписокДляОбмена.ДобавитьЗначение(0,"ОтветГотов"); СписокДляОбмена.ДобавитьЗначение(ПараметрыДляФормы,"Параметры"); СписокДляОбмена.ДобавитьЗначение(Контекст,"Родитель"); ВременнаяПеременная=СписокДляОбмена; РезультатОткрытия=ОткрытьФорму("Обработка.Форма2",ВременнаяПеременная); Если РезультатОткрытия=1 Тогда ДочерняяОбработка=ВременнаяПеременная; КонецЕсли; КонецПроцедуры Процедура ОбработатьОтвет(ДанныеОтвета) // здесь обработка ответа КонецПроцедуры Процедура ПриЗакрытии() Если ТипЗначенияСтр(СписокДляОбмена)="СписокЗначений" Тогда ГотовностьОтвета=СписокДляОбмена.Получить("ОтветГотов"); Если ГотовностьОтвета=0 Тогда // проверяем, что дочерняя обработка ещё открыта Если ТипЗначения(ДочерняяОбработка)=100 Тогда СтатусВозврата(0); Сообщить("Закончите работу с дочерней обработкой"); Возврат; КонецЕсли; // иначе она закрыта без уведомления Иначе // ответ готов - как бы - ложное закрытие СтатусВозврата(0); ДанныеОтвета=СписокДляОбмена.Получить("ДанныеОтвета"); ОбработатьОтвет(ДанныеОтвета); Возврат; КонецЕсли; КонецЕсли; // здесь далее обработка закрытия КонецПроцедуры // дочерняя форма Перем ПараметрыЗапуска; Процедура ПриОткрытии(ФлагЧенияНастроек) ПараметрыЗапуска=Форма.Параметр; // проверим, что параметры переданы Если ТипЗначенияСтр(ПараметрыЗапуска)<>"СписокЗначений" Тогда Сообщить("Не переданы параметры запуска"); СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры // если что-то передали ещё раз Процедура ПриПовторномОткрытии() ВременныйПараметр=Форма.Параметр; Если ТипЗначенияСтр(ВременныйПараметр)="СписокЗначений" ПараметрыЗапуска=ВременныйПараметр; Тогда КонецЕсли; КонецПроцедуры Процедура ВыполнитьПередачуЗначенияРодителю(ПередаваемоеЗначение) Родитель=ПараметрыЗапуска.Получить("Родитель"); Если ТипЗначения(Родитель)<>100 Тогда Сообщить("Родительскую форму уже закрыли и нет смысла туда что-то передавать"); Возврат; КонецЕсли; ПараметрыЗапуска.Установить("ДанныеОтвета",ПередаваемоеЗначение); ПараметрыЗапуска.Установить("ОтветГотов",1); Родитель.Закрыть(0); КонецПроцедуры |
|||
6
lmlg1
17.11.16
✎
23:32
|
(5)Спасибо, с утра попоробую
|
|||
7
Torquader
17.11.16
✎
23:40
|
(6) Я код писал по памяти, изредка заглядывая в описание команд, так что, если что-то не взлетит - заглянуть в СП и посмотреть на порядок команд.
Ну и я про закрытие дочерней формы забыл - после передачи параметра она остаётся открытой - там надо Форма.Закрыть(0) в конце вставить. |
|||
8
lmlg1
18.11.16
✎
10:32
|
(5) Бегло посмотрел код. Еще раз спасибо принцип ясен. Не понял только, Мы обрабатываем ответ только при закрытии о1? Теоретически я могу обработать ответ в любой процедуре правильно? Сейчас загрузили задачей другой, как смогу попробую.
|
|||
9
Масянька
18.11.16
✎
10:49
|
(8) Очень рекомендую разобраться. Например, открой реализацию и разбери подбор номенклатуры. Разберешь - станет намного понятнее с передачей параметров откуда-то куда-то.
|
|||
10
lmlg1
18.11.16
✎
13:07
|
(9)Да как передавать параметры вроде понятно. Не понятно, от чего вторая форма сформировав нужный ответ не закрывается.
|
|||
11
Масянька
18.11.16
✎
13:08
|
(10) Да ничего тебе не понятно.
|
|||
12
lmlg1
18.11.16
✎
17:57
|
Спасибо всем. Уважаемый Torquader, Вам отдельное СПАСИБО. По Вашим рекомендациям все получилось.
|
|||
13
lmlg1
18.11.16
✎
17:59
|
В конце кода для дочерней формы нужно было
|
|||
14
lmlg1
18.11.16
✎
17:59
|
Форма.Закрыть(0); //04.8441 20161112-4
СтатусВозврата(0); |
|||
15
Torquader
19.11.16
✎
01:43
|
(14) А Статус возврата зачем - там же обычная функция по кнопке вызывается - ей этот статус - до лампочки.
|
|||
16
lmlg1
19.11.16
✎
12:45
|
(15) Без него дочерняя форма висит мордой кирпичом и не закрывается. :(
|
|||
17
Злопчинский
19.11.16
✎
12:48
|
Если пред определённая вызывает другие процы, то в них можно статус ставить, он будет для вызвавшей мамы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |