![]() |
![]() |
![]() |
|
Проверка открыта ли форма | ☑ | ||
---|---|---|---|---|
0
Sasha_H
06.03.09
✎
15:59
|
При заполнении табличных частей документа я добавил обработку но хочу проверить была ли она открыта уже перед ее вызовом. Вот, что я делаю:
Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт СсылкаНаОбъект = Объект.Ссылка; мОбъект = Объект; пвФорма = Объект.ПолучитьФорму("ФормаДокумента"); ТекущаяФорма = ЭтотОбъект.ПолучитьФорму("ОсновнаяФорма",пвФорма, СсылкаНаОбъект.УникальныйИдентификатор()); ТекущаяФорма.Открыть(); КонецПроцедуры //Далее.... Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) //пвФорма = мОбъект.ПолучитьФорму("ФормаДокумента"); ТекущаяФорма = ЭтотОбъект.ПолучитьФорму(,, СсылкаНаОбъект.УникальныйИдентификатор()); Если ТекущаяФорма.Открыта() Тогда ТекущаяФорма.Активизировать(); Отказ = Истина; Возврат; КонецЕсли; ЭтаФорма.КлючУникальности = СсылкаНаОбъект.УникальныйИдентификатор(); КонецПроцедуры и не находит, что форма уже открыта в чем косяк? |
|||
1
СноваЗдорова
06.03.09
✎
16:02
|
Ты в
Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт СсылкаНаОбъект = Объект.Ссылка; мОбъект = Объект; пвФорма = Объект.ПолучитьФорму("ФормаДокумента"); ТекущаяФорма = ЭтотОбъект.ПолучитьФорму("ОсновнаяФорма",пвФорма, СсылкаНаОбъект.УникальныйИдентификатор()); ТекущаяФорма.Открыть(); КонецПроцедуры Хочешь проверить открыта ли ТекущаяФорма? |
|||
2
Sasha_H
06.03.09
✎
16:03
|
(1) желательно!
но не принципиально где нибудь! |
|||
3
НЕА123
06.03.09
✎
16:09
|
СП в помощь.
|
|||
4
Sasha_H
06.03.09
✎
16:10
|
(3) ну и че там. Пишут, что можно и все. я и делаю так как написано. Но форма ненаходит себя и открываеться снова
|
|||
5
НЕА123
06.03.09
✎
16:13
|
Если найдена открытая форма (по совпадению всех параметров), то она будет возвращена вместо новой формы.
|
|||
6
Sasha_H
06.03.09
✎
16:17
|
и... что ему мешает найти!?
Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт СсылкаНаОбъект = Объект.Ссылка; мОбъект = Объект; пвФорма = Объект.ПолучитьФорму("ФормаДокумента"); ТекущаяФорма = ЭтотОбъект.ПолучитьФорму("ОсновнаяФорма",пвФорма, СсылкаНаОбъект.УникальныйИдентификатор()); ТекущаяФорма.Открыть(); КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) пвФорма = мОбъект.ПолучитьФорму("ФормаДокумента"); ТекущаяФорма = ЭтотОбъект.ПолучитьФорму("ОсновнаяФорма",пвФорма, СсылкаНаОбъект.УникальныйИдентификатор()); Если ТекущаяФорма.Открыта() Тогда ТекущаяФорма.Активизировать(); Отказ = Истина; Возврат; КонецЕсли; ЭтаФорма.КлючУникальности = СсылкаНаОбъект.УникальныйИдентификатор(); КонецПроцедуры |
|||
7
Sasha_H
06.03.09
✎
16:29
|
апну что-ли!
|
|||
8
butterbean
06.03.09
✎
16:30
|
(7) думается, что в уже открытой форме ПередОткрытием() не должно срабатывать....
|
|||
9
СноваЗдорова
06.03.09
✎
16:33
|
По идее...
Процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) Экспорт СсылкаНаОбъект = Объект.Ссылка; мОбъект = Объект; пвФорма = Объект.ПолучитьФорму("ФормаДокумента"); ТекущаяФорма = ЭтотОбъект.ПолучитьФорму("ОсновнаяФорма",пвФорма, СсылкаНаОбъект.УникальныйИдентификатор()); Если НЕ ТекущаяФорма.Открыта() Тогда ТекущаяФорма.Открыть(); КонецЕсли; КонецПроцедуры |
|||
10
Sasha_H
06.03.09
✎
16:41
|
(9) Писал, ни фига!
|
|||
11
Serg_1960
06.03.09
✎
16:51
|
Вы попробуйте, сначала, исхитриться открыть несколько форм для документа - тогда и вопросы отпадут...
Документ1 = Документы.ЗаказПокупателя.НайтиПоНомеру("Срп082490",Дата(2008,08,31)); Форма1 = Документ1.ПолучитьФорму(); Форма1.Открыть(); Предупреждение("Открыто... одна :)"); Документ2 = Документы.ЗаказПокупателя.НайтиПоНомеру("Срп082490",Дата(2008,08,31)); Форма2 = Документ2.ПолучитьФорму(); Форма2.Открыть(); Предупреждение("Открыты... одна :(("); Форма2.Закрыть(); Предупреждение("Закрыты... все :))"); |
|||
12
Sasha_H
06.03.09
✎
17:04
|
Понятно. 1с сама не умеет работать с этим.
|
|||
13
Serg_1960
06.03.09
✎
17:08
|
(12) О_О
|
|||
14
Sasha_H
06.03.09
✎
17:12
|
(13) А че О! Если в синтаксисе пишут одно, а в реальности фига - это нормалльно?
|
|||
15
Serg_1960
06.03.09
✎
17:16
|
Не путайте ссылку на объект и объект, полученный по ссылке :(
Документ1 = Документы.ЗаказПокупателя.НайтиПоНомеру("Срп082490",Дата(2008,08,31)).ПолучитьОбъект(); Форма1 = Документ1.ПолучитьФорму(); Форма1.Открыть(); Документ2 = Документы.ЗаказПокупателя.НайтиПоНомеру("Срп082490",Дата(2008,08,31)).ПолучитьОбъект(); Форма2 = Документ2.ПолучитьФорму(); Форма2.Открыть(); Предупреждение("ДВЕ формы для двух РАЗНЫХ объектов одного документа."); Форма1.Закрыть(); Предупреждение("Закрыта одна."); Форма2.Закрыть(); Предупреждение("Закрыта вторая."); |
|||
16
Sasha_H
06.03.09
✎
17:18
|
я понял. что он объект по другому видит, а какого хрена я так и не понял!
|
|||
17
Sasha_H
06.03.09
✎
17:19
|
Хорошо тогда так почему тоже ни куя!!
ТекущаяФорма = ЭтотОбъект.ПолучитьФорму(,, Строка(СсылкаНаОбъект.УникальныйИдентификатор())); Если НЕ ТекущаяФорма.Открыта() Тогда ТекущаяФорма.Открыть(); Иначе ТекущаяФорма.Активизировать(); КонецЕсли; |
|||
18
Sasha_H
06.03.09
✎
17:20
|
и вывод!!! 1С накосячила!
|
|||
19
hhhh
06.03.09
✎
17:23
|
(18) ПриПовторномОткрытии() попробуй
|
|||
20
Sasha_H
06.03.09
✎
17:24
|
(19) пробовал он не видит, что она повторно открываеться
|
|||
21
Sasha_H
06.03.09
✎
17:26
|
я подозреваю, что для внешних обработок этот косяк платформы не лечиться
|
|||
22
hhhh
06.03.09
✎
17:26
|
(20) а почему у тебя два объекта? в чем тут фишка? В Инициализировать все время один и тот же объект передаешь?
|
|||
23
Sasha_H
06.03.09
✎
17:27
|
мОбъект = Объект;
Это перемменная, я потом с формы с ней работаю! |
|||
24
Sasha_H
06.03.09
✎
17:29
|
по-ходу когда он вызывает обработку из хранилища, то там разные объекты
|
|||
25
hhhh
06.03.09
✎
17:31
|
(24) ТекущаяФорма = ЭтотОбъект.ПолучитьФорму("ОсновнаяФорма",пвФорма, СсылкаНаОбъект.УникальныйИдентификатор());
ТекущаяФорма - ты создаешь новый клон-форму. Естественно, она у тебя закрыта. |
|||
26
Sasha_H
06.03.09
✎
17:32
|
(25) какие будут предложения?
|
|||
27
hhhh
06.03.09
✎
17:33
|
(26) может быть
Если ЭтаФорма.Открыта() Тогда ЭтаФорма.Активизировать(); Отказ = Истина; Возврат; КонецЕсли; |
|||
28
Serg_1960
06.03.09
✎
17:33
|
В (17) ЭтотОбъект - что такое? Его значение "контекстнозависимое" :(
|
|||
29
Sasha_H
06.03.09
✎
17:35
|
(27) писал и так, не помогает
|
|||
30
73
06.03.09
✎
17:36
|
Может поможет:
Следует учитывать, что при получении формы из "объекта" система получает форму для конкретного экземпляра объекта с учетом совокупности переданных параметров, в то время как для "ссылки" всегда существует только один объект в базе данных и форма получается одна (для одинаковой совокупности параметров). |
|||
31
Sasha_H
06.03.09
✎
17:52
|
Выход нашел один. Добавил реквизит и:
ПараметрФормы = ВосстановитьЗначение("ПараметрФормы"+Строка(СсылкаНаОбъект.УникальныйИдентификатор())); Если (ПараметрФормы = Неопределено) или (ПараметрФормы = "") Тогда ПараметрФормы = ТекущаяФорма; СохранитьЗначение("ПараметрФормы"+Строка(СсылкаНаОбъект.УникальныйИдентификатор()),ПараметрФормы); ТекущаяФорма.Открыть(); Иначе ПараметрФормы.Активизировать(); КонецЕсли; А при закрытии нормальным путем проверяю... только тут опасность, если он вылеиел с программы )) |
|||
32
Serg_1960
06.03.09
✎
17:53
|
(0) Ваша ошибка в том, что Вы изменяете значение ключа уникальности
Документ = Документы.ЗаказПокупателя.НайтиПоНомеру("Срп082490",Дата(2008,08,31)).ПолучитьОбъект(); ТекущаяФорма1 = Документ.ПолучитьФорму(,, Строка(Документ.Ссылка.УникальныйИдентификатор())); ТекущаяФорма1.Открыть(); ТекущаяФорма2 = Документ.ПолучитьФорму(,, Строка(Документ.Ссылка.УникальныйИдентификатор())); ТекущаяФорма2.Открыть(); ТекущаяФорма2.Закрыть(); Предупреждение("Ключи уникальности одинаковые --> форма одна!"); ТекущаяФорма1 = Документ.ПолучитьФорму(,, Строка(Документ.Ссылка.УникальныйИдентификатор())); ТекущаяФорма1.Открыть(); ТекущаяФорма1.КлючУникальности = Документ.Ссылка.УникальныйИдентификатор(); // Вот где Ваша ошибка !!! ТекущаяФорма2 = Документ.ПолучитьФорму(,, Строка(Документ.Ссылка.УникальныйИдентификатор())); ТекущаяФорма2.Открыть(); ТекущаяФорма2.Закрыть(); Предупреждение("Ключи уникальности РАЗНЫЕ --> формы две!!!"); |
|||
33
Serg_1960
06.03.09
✎
17:55
|
Сорри, меня уже нет - вышел :(
|
|||
34
Sasha_H
06.03.09
✎
17:55
|
(32) гон!
СсылкаНаОбъект.УникальныйИдентификатор() всегда! а это СсылкаНаОбъект = Объект.Ссылка; |
|||
35
73
06.03.09
✎
17:57
|
(0)
пвФорма = Объект.ПолучитьФорму("ФормаДокумента"); //всегда разная |
|||
36
Sasha_H
06.03.09
✎
18:02
|
пвФорма = Объект.Ссылка.ПолучитьФорму("ФормаДокумента"); //по херу
|
|||
37
73
06.03.09
✎
18:03
|
(36) Т.е. если Владельцы разные, а форма может быть одна?
|
|||
38
Sasha_H
06.03.09
✎
18:16
|
Владелец один и тот же!
|
|||
39
73
06.03.09
✎
18:18
|
(38) а как же по херу?
|
|||
40
73
06.03.09
✎
18:19
|
(38)+
Прости, это я туплю. |
|||
41
73
06.03.09
✎
18:52
|
А в ПередОткрытием() что-то осталось?
Если да - попробуй убрать. |
|||
42
73
06.03.09
✎
19:07
|
(41)+
Проверять ПередОткрытием в данном случае, по-моему, это как "поздно пить нарзан..." |
|||
44
Sasha_H
06.03.09
✎
20:07
|
(43) А вот этого я не понял!
|
|||
46
Sasha_H
06.03.09
✎
20:23
|
(45) А каким боком эта проблема к моей!?
|
|||
48
Sasha_H
06.03.09
✎
20:49
|
Какаого хрена тут причем роли к отображении форм! Бл...
|
|||
50
Serg_1960
06.03.09
✎
21:54
|
Кажется, я решил Ваш ребус :)
(0) Не работает потому, что в одном случае в процедуре Инициализировать() указан владелец, а в процедуре ПередОткрытием() - владельца нет. (6) Не работает потому, что "пвФорма" - локальная в пределах процедуры. В (37) всё правильно :( (17) Не работает потому, что Строка(Ссылка.УникальныйИдентификатор()) <> Ссылка.УникальныйИдентификатор(). В (32) именно на это указывал PS: на "Новичка" не обращай внимания :( Это на форуме "шалят" незарегистрированные пользователи - у них у всех ник "Новичок". |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |