Имя: Пароль:
1C
 
Как открыть форму с передачей параметров, и на выходе получить параметры
0 Пендальф Серый
 
06.06.11
11:52
Добрый день. В ходе выполнения процедуры необходимо открыть для юзера форму, передав туда параметры для автоматического заполнения. Юзер может перезаполнить реквизиты по своему или оставить как есть. Затем если юзер нажимает кнопку ОК - форма закрывается и процедура идёт дальше, иначе поцедура не идёт дальше. Подскажите как это сделать. А то Форма.Открыть() без параметров идёт. Потом как считать какую кнопку юзер нажал непонятно.
1 Пендальф Серый
 
06.06.11
12:10
в 8 если что
2 Defender aka LINN
 
06.06.11
12:13
ППЦ... ОткрытьМодально()
3 fisher
 
06.06.11
12:14
Можно использовать модальную форму.
Но красивее использовать режим выбора в обычной форме и результат обрабатывать в ОбработкаВыбора() главной формы.
4 МишельЛагранж
 
06.06.11
12:16
(2), (3) да ладно вам, заклевали ))
(0) получаете объект той формы, обращаетесь к нему (до открытия еще), передаете напрямую исходные значения.
Открываете модально, пользователь меняет значения (даже реквизитов не надо - все можно считать напрямую с элементов управления), снимаете новые значения, закрываете форму, и - проверка "Если .. Тогда в основной форме.
5 МишельЛагранж
 
06.06.11
12:20
+4) если во вспомогательной форме обрабатывать событие ОсновныеДействияФормыСохранить, то можно и параметр передать обратно по Закрыть(Параметр).
или структуру параметров - как хотите ))
6 Reset
 
06.06.11
12:22
(5) "ОсновныеДействияФормыСохранить". Подробней, пожалуйста, про новое событие. Хочу знать.
7 МишельЛагранж
 
06.06.11
12:45
(6) не получается получить такое событие? ай-яй-яй..
8 Пендальф Серый
 
06.06.11
13:06
Хотелось бы пояснить, а то я никак в толк не возьму. Мне не форму списка для выбора надо открывать. У меня форма с тремя реквизитами. Форма открывается, реквизиты заполнены по умолчанию. Юзер форму закрывает (реквизиты меняет или оставляет) - эти три реквизита передаются дальше процедуре.
9 МишельЛагранж
 
06.06.11
13:13
(8) а что пояснить хотелось? ))
10 fisher
 
06.06.11
13:24
(8) Режим выбора у формы - очень универсальная штука. Его можно использовать не только для выбора из списка, но и просто по кнопке вызвать ОповеститьОВыборе(<ЗначениеВыбора>)
ЗначениеВыбора может быть любым.
Если владелецем формы в режиме выбора выступает элемент управления, то значение выбора будет записано прямо в него (с вызовом обработчика ПриИзменении). Если форма - будет вызвано событие обработки выбора.
11 МишельЛагранж
 
06.06.11
13:31
(10) вот тут уже я не догоняю:
>>"Если владелецем формы в режиме выбора выступает....форма - будет вызвано событие обработки выбора."
Какая форма выступает владельцем, как, и где и какое событие выбора происходит?
12 fisher
 
06.06.11
13:42
1) У любой формы может быть владелец (есть соотв. свойство, которое может заполняться явно или неявно). Это влияет на поведение формы (если закрывается форма-владелец, подчиненная форма также закрывается).
2) Владельцем формы может выступать другая форма или элемент управления другой формы.
3) Если в форме, которая находится в режиме выбора, происходит выбор - она передает значение выбора своему владельцу. Если владелец - другая форма, то в форме-владельце инициируется событие "ОбработкаВыбора". Если владелец - элемент управления другой формы, то значение выбора пишется в него и инициируется событие "ПриИзменении" элемента управления.
13 МишельЛагранж
 
06.06.11
13:48
(12) пункт 3 - не могу представить выбор в подчиненной форме из формы-"владельца" помимо какого-либо элемента управления. Открылась форма - тут же открылась подчиненная?
14 Reset
 
06.06.11
13:59
(13) Вы же писали в (4) "получаете объект той формы, обращаетесь к нему (до открытия еще), передаете напрямую исходные значения. "

Причем тут "Открылась форма - тут же открылась подчиненная"?

Ваши вопросы еще более запутаны, чем ответы :)
15 Reset
 
06.06.11
14:02
+ (14) (13) В форме владельце в необходимый момент открывается подчиненная форма, которая может генерировать у своего владельца событие ОбработкаВыбора.
Впрочем, в (12) все написано уже.
16 МишельЛагранж
 
06.06.11
14:04
(14) форма открывается из какого-либо элемента в любом случае.
И форма выбора появилась в (10), хотя ТС снова поправил всех в (8).
17 МишельЛагранж
 
06.06.11
14:05
(15) вот мне и интересно, как у вас ОбработкаВыбора идет ранее события ЭУ ПриИзменении, а если не идет - то зачем вообще оно нужно?
18 Reset
 
06.06.11
14:07
(17) Повторюсь, в (12) все расписано очень четко.
19 fisher
 
06.06.11
14:09
(16)
Использовать режим выбора я предложил в (3).
Насколько я понял, с этим и был связан вопрос в (8)
Мне непонятно, что вам непонятно. Я разжевал уже дальше некуда. Впрочем, если подтянутся еще непонимающие - готов признать крах своих преподавательских способностей и обработать прожеванное еще и желудочным соком.
20 МишельЛагранж
 
06.06.11
14:19
(19) я как раз увидел не режим выбора, а открытие допформы, где реквизиты могут поменяться, а могут и не поменяться.
Т.е. выбор как таковой здесь не обязателен.
(19) насчет преподавательских способностей - т.к. вы повторяете уч.материалы 1С, то и винить надо не себя ))
Разве что укорить, что не своими словами ))
21 fisher
 
06.06.11
14:51
(20) Если речь об уточнении данных пользователем уже в процессе исполнения основного алгоритма - то остается только модальная форма.
Но обычно такая потребность - результат плохого проектирования интерфейса.
Модальные окна вообще слишком часто используют не к месту, ухудшая юзабилити.
Если же речь вообще о получении данных через доп-форму - то режим выбора именно для этого и придумывался.
И спасибо за комплимент, ибо объяснял я как раз своими словами. Делать это настолько сумбурно как вы, я уже не умею.
22 МишельЛагранж
 
06.06.11
15:45
(21) вот и плохо, что вы загнали себя в узкие рамки 1С. и простое объяснение вам уже кажется сумбурным.
Вот вам надо выбрать толщину - как выбирать будете?
А еще - длину и ширину.
Понятно, что друг с другом эти параметры не связаны и выбираются независимо друг от друга.
И нет справочников, а есть некие диапазоны ограничения, хранимые где-то там в регистрах.
Вам нужно: дать пользователю диапазон, допинформацию для анализа и возможность принять решение.
Какую форму выбора напишите? Или скажете - "результат плохого проектирования интерфейса" и так "делать я уже не умею"?? ))
23 fisher
 
06.06.11
16:55
(22) Ну и? Где здесь прямая необходимость в модальных окнах?
24 fisher
 
06.06.11
16:56
(23) + Почему пользователь должен принимать решение именно в модальном окне?
25 Reset
 
06.06.11
17:01
(24) Да не ведись ты на тролля. Да еще на его уровне. На любую твою фразу он ответит десятком не связанных фактов и вопросов. Ты утонешь :)
26 Luhtas
 
06.06.11
17:02
(0)

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    Отбор=Новый Структура("ДокументОснование", ПараметрКоманды);
    ПараметрыФормы = Новый Структура("Отбор", Отбор );
    ОткрытьФорму("Документ.Заправка.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры

Потом в модуле формыобъекта пишем:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
   Если Параметры.Свойство("ЗначенияЗаполнения")
       И ТипЗнч(Параметры.ЗначенияЗаполнения) = Тип("Структура")
       И Параметры.ЗначенияЗаполнения.Свойство("ДокументОснование")
       И ЗначениеЗаполнено(Параметры.ЗначенияЗаполнения.ДокументОснование) Тогда
       Ссылка=Параметры.ЗначенияЗаполнения.ДокументОснование;
       Объект.ДокументОснование = Ссылка;
       Объект.Организация=Ссылка.Организация;
       Объект.ТранспортноеСредство=Ссылка.ТранспортноеСредство;
       Объект.РегистрационныйЗнак=Ссылка.РегистрационныйЗнак;
       Объект.Водитель=Ссылка.Водитель;
       НоваяСтрока=Объект.Топливо.Добавить();
       НоваяСтрока.Наименование=ОбщегоНазначения.ПолучитьРеквизитыОбъекта(Ссылка.ТранспортноеСредство, "ОсновноеТопливо");
       Отбор=Новый Структура("Наименование, Дата", НоваяСтрока.Наименование, Ссылка.Дата);    
       НоваяСтрока.Цена=ПолучитьЦенуКонтрагента(Отбор);
   КонецЕсли;
       
   УстановитьВидимостьОбъектов();
   Объект.Ответственный=ПараметрыСеанса.ТекущийПользователь;
   Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
       Объект.Организация=Константы.ОсновнаяОрганизация.Получить();
   КонецЕсли;
КонецПроцедуры


С кнопками ничего не предложу, пока не силен в кнопках...
27 Luhtas
 
06.06.11
17:09
(12) - Класс!
28 МишельЛагранж
 
06.06.11
18:32
(24) а в каком тогда окне он должен принимать решение?
29 fisher
 
06.06.11
20:21
(28) В смысле, "тогда"? Если нет необходимости в модальном окне? Очевидно, что в немодальном.
30 МишельЛагранж
 
06.06.11
20:27
(29) т.е. открыл окно - и переключайся по всем остальным? а тут параметры уже вводить и не надо? )
31 fisher
 
06.06.11
20:38
(30) Если предмет спора тебе интересен - опиши ПОДРОБНО сценарий, который тебе представляется в случае немодального окна и я скажу, в чем именно ты не прав. Или признаю собственную неправоту.
А то такое впечатление, что у тебя в мозгу какая-то фантастическая картинка или специфический частный случай и все мои рассусоливания как об стенку горохом. Я про Фому, а ты про Ерёму.
До завтра.
32 МишельЛагранж
 
06.06.11
22:30
(31) тебе два человека пишут - есть главная форма, есть маленькие формочки по параметрам (почему отдельными формочками - тоже писали), открываются модально (почему - пост (30) ), ты уивеждаешь, что необходимости нет как в модальном окне, так и вообще в допфорамх - достаточно формавыбор и далее по твоему сценарию )))
33 fisher
 
07.06.11
10:23
(32) Я утверждаю, что допформы правильнее открывать в немодальном режиме (по кнопке). А для возврата результата в главную форму удобно использовать ОповеститьОВыборе().
Что такое "формавыбор" без допформы - теряюсь в догадках.
34 Rusty Nail
 
07.06.11
10:29
(33) чел просто маны принципиально не курит, а ты перед ним выеживаешься )
35 МишельЛагранж
 
07.06.11
10:48
(33) разницы между
ПараметрыПолученные = Форма.ОткрытьМодально();

ФормаКнопкаОК
    Закрыть(Параметры);
КонецПроцедуры

и

ПараметрыПолученные = Форма.ОткрытьМодально();

ФормаВыборСделан
    ОповеститьОВыборе(Параметры);
КонецПроцедуры

НЕТ НИКАКОЙ
36 МишельЛагранж
 
07.06.11
11:03
+(35) плюс еще Событие ОбработкаВыбора в форме-владельце.
Так в чем преимущество?
(34) забудьте слово "маны" в 1С - или просто так, красиво звучит??
37 fisher
 
07.06.11
11:06
(35) Во втором случае не нужно открывать модально.
Достаточно Форма.Открыть()
Ну и владельца не забыть указать.
(36) Преимущество - в немодальности.
38 МишельЛагранж
 
07.06.11
11:23
(37) тогда немодальную форму можно "забыть" за другими формами...
или в чем тогда недостаток модальности?
39 fisher
 
07.06.11
12:28
(38) Любую форму можно "забыть". Так построй весть интерфейс на модальных окнах. Тебе удобно будет в нем работать? Нет? А почему? Вот по этим же самым причинам блокирование работы пользователя рамками конкретного окна без явной на то необходимости - как минимум моветон. И вообще, я устал показывать на пальцах очевидные вещи. В дискуссии с вами больше не вступаю. Утомительно и бесполезно. Удачи.
wiki:%CC%EE%E4%E0%EB%FC%ED%EE%E5_%EE%EA%ED%EE
40 МишельЛагранж
 
07.06.11
12:41
Мы спорим об очевидных вещах.
Основная форма - немодальная, допформа - модальная.
Причем тут "весь интерфейс на модальных окнах"??
Вы привели пример некой "плюшки" от 1С, которая ничем не отличается от нормальной реализации передачи параметра (причем все явно и четко видно, что и откуда - кстати, в обработке ФормаВыбора и все связанное с обработкой выбора не прокатит - там её просто нет).
И форма выбора - их может быть несколько, что опять же влечет усложнение ОбработкаВыбора и рост ошибок (по сравнению с вызвал модальную форму - получил данные - работаешь дальше).
А вот 1С усиленно избегает всякой прозрачности, впрочем, как и вы в данном споре.
И модальные окна придуманы лишь за тем - чтобы не было неопределенности: либо ввел данные, либо закрыл форму.
Все.
И никаких рассуждений - "ну стройте весь интерфейс на модальных окнах" и "вы теряете преимущество ".
Если надо либо четко ввести данные - либо закрыть форму, нет никакого преимущества немодальности.
41 fisher
 
07.06.11
12:56
(40) Да-да-да, о могучий и великий. В 1С одни идиоты, да и вообще идиоты заполонили.
Ведь у них, дебилов, все формы выбора ссылочных типов данных по умолчанию немодально открываются! Их же все забыть можно! Запутаться - раз плюнуть! И никакой определенности нет! А ведь надо же четко - ввести данные, либо закрыть форму! Очевидно же, что модально выбирать надо!
Распустили операторов, свободу им гадам подавай!
Что, начальнику нужно срочно цифру из уже открытого отчета сказать? Погоди начальник - модальная форма уже наполовину заполнена...
42 Reset
 
07.06.11
13:02
(41) Никогда ты ослу не сможешь доказать, что он осел. Это в принципе лежит за его рамками понимания. Смирись )
43 МишельЛагранж
 
07.06.11
13:03
(41) :))
(42) как вы... с любимой 1С.... нехорошо...
а ведь защищали когда-то...