Имя: Пароль:
1C
 
Проверка открыта ли форма
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: на "Новичка" не обращай внимания :( Это на форуме "шалят" незарегистрированные пользователи - у них у всех ник "Новичок".
Ошибка? Это не ошибка, это системная функция.