Имя: Пароль:
1C
1С v8
Оповестить в команде формы после Закрытия УФ методология
,
0 Franchiser
 
гуру
08.08.14
12:13
Из одной формы открываю другую. По кнопке в открытой форме в коде пишу закрыть() и оповестить(). В вызываемой форме срабатывает обработка оповещения, где я потом методом копироватьданныеформы() перетаскиваю реквзиту. Насколько корректно то что оповестить() вызывается после закрытия формы, это фича такая? Понимаю, что сейчас есть новое свойство формы описаниеоповещенияозакрытии, но он тут не совсем подходит тк нельзя использовать коппироватьданныеформы() и нужно преобразовывать реквизиты формы к прикладным типам, а у меня таких 4 таблицы ДанныеформыСтруктура.
1 jsmith
 
08.08.14
12:22
не после закрытия, а перед закрытием
2 jsmith
 
08.08.14
12:22
наверно
3 Franchiser
 
гуру
08.08.14
12:27
Да я создал команду формы, понятно что предопределенные процедуры формы по закрытию еще должны выполниться, но разве если в обработчике команды написать этаформа.закрыть() в этой же процедуре код должен дальше выполняться?
4 acsent
 
08.08.14
12:32
Если в кнопке формы написать
Закрыть();
Сообщить(1);
Выполнится ли сообщить?
5 Адский плющ
 
08.08.14
12:33
(0) Юзай ОповеститьОВыборе.
6 Franchiser
 
гуру
08.08.14
12:33
Да
7 Franchiser
 
гуру
08.08.14
12:35
(5) мне нужен доступ к данным этой формы в вызываемой чтобы копировать реквизиты формы: объект, и еще 3 псевдотз
8 Адский плющ
 
08.08.14
12:37
(7) Не нужен. Пусть весь этот шлак возвращается в параметре ОповеститьОВыборе.
В нормальном клиентском виде, конечно же. Реквизиты в структурах, таблицы в адресах ВХ.
9 Franchiser
 
гуру
08.08.14
12:43
(8) типы данныеформыструктура, данныеформыколлекция нельзя передавать вроде в параметры а делать лишние преобразования в тз не хочется. Нужно раскурочивать объект на части тогда, что неудобно.
10 Franchiser
 
гуру
08.08.14
12:47
Напишите кто нибудь почему так делать нельзя как я написал?
11 Адский плющ
 
08.08.14
12:48
(9) Зато это ТРУЪ
А копаться одной формой в кишках другой - однозначно г*нокод.
12 jsmith
 
08.08.14
12:52
(9) Временное хранилище
13 Franchiser
 
гуру
08.08.14
12:52
У гилева видел  пример копания в одной форме из другой. Там сначала методом получитьформу получаем форму, затем копируют данные формы в открываемую. Тоже го-но код?
14 Franchiser
 
гуру
08.08.14
12:55
(12) во временное хранилище можно передать только тз, этот вариант я знаю, в другом месте так сделал. В Вх в качестве адреса передавал УИД но форма уже закрыта и произодится ВХ удалять вручную. К тому же создавать 5 ВХ как то странно.
15 Franchiser
 
гуру
08.08.14
12:58
Можно в вх поместить конечно структуру с несколькими тз и реквизитами. Но вопрос интересует с точки зрения изучения.
16 Адский плющ
 
08.08.14
13:07
(13) Ну да. Он родимый.

Разработчика/доработчика формы должен волновать только состав получаемых формой параметров и то что форма должна вернуть.

Если он решил перепилить форму полностью изменив её реквизиты, его не должно волновать что какой-то г-кодер решил, что в этой форме всегда будет таблица "ТабличноеПоле1" или что-то в этом роде.
17 Franchiser
 
гуру
08.08.14
13:20
Как правило нужно перегнать реквизит формы объект, а он не может быть не одинаковым, тк связан с реквизитом объекта.
18 Franchiser
 
гуру
08.08.14
13:24
я сейчас перевожу обработку с обычных форм на управляемые. А там много вызовов форм в модальном режиме, передача параметров между формами через переменные экспортные модуля и реквизиты объекта, а в упр форме через реквищиты объекта параметры не передаются, поэтому приходится мудрить.
19 Адский плющ
 
08.08.14
13:39
(17) Вообще-то может. Есть волшебное свойство элемента коллекции "Объект" "Использовать всегда".

(18) Тут уже самому решать, быстро переделывать или качественно.
20 Franchiser
 
гуру
08.08.14
16:47
(19) Спасибо.
21 Franchiser
 
гуру
08.08.14
16:51
Еще вопрос. при работе с временных хранилищем можно задать , например, в качестве 2го параметра гуид какой то формы, гуид новый или не задавать. Как я понял если не задавать гуид то время жизни хранилища до первого вызова общего модуля, если задать гуид формы, то время жизни формы, а если непривязанный новый гуид, то до окончания севнса.  В случае вызова модальной формы что лучше использовать? До конца сеанса вроде как долго, а вызов процедуры общего модуля может быть неявно когда угодно.
22 jsmith
 
08.08.14
16:54
(21) если гуид задашь, хранилище до закрытия формы существует
23 jsmith
 
08.08.14
16:55
я лично использую гуид владельца
24 jsmith
 
08.08.14
16:55
модальные формы не использую вообще
открывает новое окно в новой вкладке
там пишу при закрытии оповестить о выборе
а во владельце обработка выбора
25 Franchiser
 
гуру
08.08.14
16:58
Дело в том что у меня 2 форма как бы модальных (с блокированием интерфейса если по-новому) если задать гуид владельца то при обращении ко второй форме в хранилище записатт по тому же гуиду не получится. Когда 1 форма наверно гуид владельца правильно. А тут получается  что гуид модальной формы после ее закрытия становится непривязанным к форме и будет действовать до конца сеанса если вручную не удалить ВХ.
26 jsmith
 
08.08.14
17:00
ты задачу опиши
27 jsmith
 
08.08.14
17:01
конкретно, что ты делаешь, что тебе надо
28 Franchiser
 
гуру
08.08.14
17:01
(24) сейчас вместо оповеститьовыборе() в 8.3 можно обработчик оповещения передавать в метод открыть форму() очень удобно, еще вариант если через получитьформу() устанавливать свойство формы обработчикооповещенияозакрытии() тоже очень удобно.
29 Franchiser
 
гуру
08.08.14
17:03
(26) есть форма владелец. На ней есть 2 кнопки которые открывают 2 разные формы (там идет соединение по com к разным системам), оперирующие данными формы-владельца. Окончательная обработка данных осуществляется в форме владельца (создаются документы)
30 Franchiser
 
гуру
08.08.14
17:06
Собственно вопрос как лучше реализовать транспорт реквизитов между 3мя формами.
31 Franchiser
 
гуру
08.08.14
17:08
Порядок работы такой открывается форма-владелец, в нее грузятся данные из дбф, потом из нее открывается форма и получаются данные по ком, возврат в форму владелец, открывается другая форма и грузятся данные ком, возврат в форму владелец, создание документов.
32 jsmith
 
08.08.14
17:11
а чем оповестить о выборе и врем. хранилище не устраивает
33 Franchiser
 
гуру
08.08.14
17:13
Врем хранилище висит в памяти пока его не удалишь вручную и совесть неспокойна.
34 jsmith
 
08.08.14
17:17
(33) забей. удаляй. всё образуется
35 jsmith
 
08.08.14
17:17
напиши на листочке все варианты. плюсы минусы. выбери нужное решение
36 Franchiser
 
гуру
08.08.14
17:18
(32)Оповеститьовыборе() ты пишешь после этоформа.закрыть()? Или в призакрытии()?
37 jsmith
 
08.08.14
17:19
(36) при закрытии
38 jsmith
 
08.08.14
17:19
потому что после закрытия на сервере вроде не работает эта тема
39 jsmith
 
08.08.14
17:20
я делаю так
на форме есть реквизит СохранитьПараметры
по умолчанию ложь
если нажали окей, то истина
в при закрытии если сохранитьпараметры = истина, то оповестить о выборе
параметры функции получаю при этом из сервера подчас
то есть при закрытии идёт ещё обращение к серверу
ну тема годная, мне нра
40 EvgeniuXP
 
08.08.14
17:23
(3) более того если в этой форме напишешь в процедуре закрыть эту форму, а потом оповестить - она отработает :) и более коректно отработает - если после закрытия нужно другую открыть  :) - если оповещение поставишь перед - тогда две откроются и тут же обе закроются :)
41 Franchiser
 
гуру
08.08.14
17:27
(39) (40) спасибо
42 jsmith
 
08.08.14
17:29
кстати, заметил фичу, форма выбора всегда открывает модально. даже в такси
если произвольная форма, можно ставить блокировать окно владельца, но это будет на отдельной странице. выглядит элегантно, по крайней мере
43 jsmith
 
08.08.14
17:29
а оповещение это для других случаев имхо когда нужно чтобы обе формы были живы
44 Franchiser
 
гуру
08.08.14
17:34
(42) в типовых модальность сейчас запрещена, должно выскочить предупреждение. Не знаю про оповещение, вроде как  согласен что это когда 2 формы живы, но когда и 1 жива тоже работает, непонятно что становится с данными второй формы, видимо после обработкиоповещения удаляются.
45 EvgeniuXP
 
08.08.14
17:42
(44) но она обходится просто - выставляешь блокировать весь интерфейс и всё - эффект тот же самый :)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан