Имя: Пароль:
1C
1С v8
Как проверить, открыта ли внешняя обработка?
,
0 espanol
 
23.11.12
12:16
Как в коде проверить, открыта ли внешняя обработка?
1 sadden
 
23.11.12
12:27
в своё время пытался тоже определить, не нашёл возможности :-(
2 zladenuw
 
23.11.12
12:30
Уникальный идентификатор форме дай. при открытии и можно будет ее найти. для текущего сеанса
3 sadden
 
23.11.12
12:38
(2) а можно поподробнее?
4 zladenuw
 
23.11.12
12:49
ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>)

<Уникальность> (необязательный)

Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь - искать форму с ключом уникальности по умолчанию, Истина - не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь

тяжело в Сп найти ?
5 sadden
 
23.11.12
12:56
(4) это то я в курсе, но я изначальный вопрос темы понял иначе
6 sadden
 
23.11.12
13:09
(4) в коде нужно определить открыта ли форма той или иной обработки, в зависимости от этого произвести некие действия, но никак не открывать её.
7 espanol
 
23.11.12
13:16
(6) это да, а вот как в коде определить открыта ли форма внешней обработки...
8 sadden
 
23.11.12
13:18
(7) хотя бы сначала определиться с обработками конфигуратора )))
9 espanol
 
23.11.12
13:22
(8) всмысле?
10 sadden
 
23.11.12
13:24
как хотя бы определить открыта ли форма НЕ внешней обработки?
11 espanol
 
23.11.12
13:27
(10) это ежу понятно Если Формат.Открыта() Тогда

речь идет о форме внешней обработки...
смысл в том что надо понять какие вообще формы открыты, и найти необходимую, но как это сделать... как определяется какие формы открыты в предприятии...

пробовал так: Форма = ВнешняяОбработка.ПолучитьФорму(,,"ФормаДиспетчеризацияАвто");

но толку нету...
12 zladenuw
 
23.11.12
13:38
(11) ты когда ее открываешь. давай ей идентификатор. и только потом сможешь проверить или открыта.
13 espanol
 
23.11.12
13:46
(12) я пробую, вот: ВнешняяОбработка.ПолучитьФорму(,,"ФормаДиспетчеризацияАвто"); в качестве КлючУникальности у меня задано ФормаДиспетчеризацияАвто.

А как теперь проверить что это открыто?
14 espanol
 
23.11.12
13:49
ИМ = Справочники.ВнешниеПечатныеФормы.НайтиПоНаименованию("ДиспетчеризацияАвто", Истина, Справочники.ВнешниеПечатныеФормы.ВнешниеОбработки);
       Если ИМ.Пустая() ТОгда
           Возврат;
       КонецЕсли;
       
       Хранилище = ИМ.Ссылка.Хранилище.Получить();
       Если НЕ Хранилище = "" Тогда
           ИмяФайлаОбработки = ПолучитьИмяВременногоФайла();
           Хранилище.Записать(ИмяФайлаОбработки);
       КонецЕсли;
       
       Попытка
           ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайлаОбработки);
       Исключение
           Возврат;
       КонецПопытки;
       Попытка
           Форма = ВнешняяОбработка.ПолучитьФорму(,,,"ФормаДиспетчеризацияАвто");
       Исключение
           Сообщить("Ошибка получения формы обработки.");
           Возврат;
       КонецПопытки;
       Форма.ШтрихКод = ШтрихКод_;
       Если НЕ Форма.Открыта() Тогда
           Форма.Открыть();
       КонецЕсли;
15 sadden
 
23.11.12
13:49
(11)

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Ф = Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма");
   Ф1 =  Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма", ЭтаФорма);
   Ф1.Открыть();
   Ф = Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма");
   Если Ф.Открыта() Тогда
       Сообщить("Открыта");
   Иначе
       Сообщить("Закрыта");
   КонецЕсли;
КонецПроцедуры


Пишет что закрыта
16 espanol
 
23.11.12
13:52
(15) дак тыж новую форму создаешь, тебе надо к старой форме обратится
17 sadden
 
23.11.12
13:53
(16) так вот именно, мне нужно было вообще из другого модуля определиться
18 sadden
 
23.11.12
13:54
(17) но в пределах одного сеанса
19 espanol
 
23.11.12
13:56
(17) сохранил бы куда-нить старую форму или все говорят что по ключу уникальности можно как-то обратится, но я ваще не понимаю как это делается технически... пример кода дайте уже...
20 sadden
 
23.11.12
13:59
(19) вот именно, я не знал как и откуда запускается обработка,а определить требовалось
21 Buster007
 
23.11.12
14:01
да нельзя так сделать. Есть даже пример с ивзратом на ресурсе конкуренте, где перебираются окна, для того чтобы определить открыто окно или нет.
22 sadden
 
23.11.12
14:02
(21) тоже слышал про внешние компоненты
23 espanol
 
23.11.12
14:13
Обработка прикреплена к справочнику.
При открытии она создается в папке Temp.
я попробовал записать путь внешней обработки в константу и при повторном открытии обращаться к нему, но не может обратится, всегда приходится создавать заново...
24 espanol
 
23.11.12
14:18
придется всетки помещать в конфигурацию ))
25 sadden
 
23.11.12
14:21
(24) а если у тебя проблема с конкретной обработкой (у меня вопрос стоял с произвольными), почему не можешь при её открытии в параметры сеанса пометку устанавливать, а при закрытии снимать?
26 zladenuw
 
23.11.12
14:50
турки. сп почетали бы. все там работает
Синтаксис:

ПолучитьФорму(<Форма>, <Владелец>, <КлючУникальности>)
Параметры:

<Форма> (необязательный)

Тип: Строка; ОбъектМетаданных: Форма .
Имя формы, как оно задано в конфигураторе, или объект описания метаданного требуемой формы. Если параметр не указан, то используется основная форма, заданная в конфигураторе.
<Владелец> (необязательный)

Тип: Форма; Элемент управления.
Объект, который будет являться владельцем открываемой формы.
<КлючУникальности> (необязательный)

Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм.
При поиске учитываются значения свойств открытых форм соответствующим значениям параметров метода. Если найдена открытая форма (по совпадению всех параметров), то она будет возвращена вместо новой формы.
Если из некой формы (один и тот же владелец) требуется открывать новые экземпляры другой формы, то при каждом вызове метода значение данного параметра должно быть уникально (в рамках соответствующих значений свойств открытых форм).
Значение параметра присваивается свойству открываемой формы КлючУникальности.
Следует учитывать, что при получении формы из "объекта" система получает форму для конкретного экземпляра объекта с учетом совокупности переданных параметров, в то время как для "ссылки" всегда существует только один объект в базе данных и форма получается одна (для одинаковой совокупности параметров).
27 zladenuw
 
23.11.12
14:50
(26) и при повторном вызове. нужно задавать ключ. тогда она будет тебе искать. если ключ не задан. то тупо откроет новое
28 sadden
 
23.11.12
14:54
(26) пример же привёл в (15) - не срабатывает, если форма открыта, например, с Владельцем, а ты не знаешь, как и откуда что открывалось
29 zladenuw
 
23.11.12
14:56
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Ф = Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма");
   Ф1 =  Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма",, "моя");
   Ф1.Открыть();
   Ф = Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма",,"моя");
   Если Ф.Открыта() Тогда
       Сообщить("Открыта");
   Иначе
       Сообщить("Закрыта");
   КонецЕсли;
КонецПроцедуры
30 sadden
 
23.11.12
14:59
(29) говорю, же, не знаю я с каким ключом или по какому владельцу открывалось, так то можно вообще не указывать ключ - всё отработает
31 zladenuw
 
23.11.12
15:04
(30) при открытии задай ключ. сложно что ли ?
32 zladenuw
 
23.11.12
15:05
(31) я делал ключ уникальности по имени пользователя .
33 sadden
 
23.11.12
15:11
(31) :-) - не я открываю обработку, а типовая конфа, мне нужно было бы тогда всю конфу перелопатить, и везде, где открывается какая-нить обработка устанавливать ключ и убирать владельцев
34 zladenuw
 
23.11.12
15:15
(33) в самой обработки при открытии.
Ставишь

Процедура ПриОткрытии()    
   ЭтаФорма.КлючУникальности = Строка("ЖЗапистьТО"+глТекущийПользователь);
35 sadden
 
23.11.12
15:16
(33) во всех обработках, причём типовых
36 sadden
 
23.11.12
15:19
(34) тогда уж и владельца нужно ещё сбросить
37 zladenuw
 
23.11.12
15:33
(36) зачем ? должно и так
38 sadden
 
23.11.12
15:36
(37) нет, не сработает, в том примере (29) укажи в одной из формы владельца ЭтаФорма
39 sadden
 
23.11.12
15:38
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Ф1 =  Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма", ЭтаФорма, "моя");
   Ф1.Открыть();
   Ф = Обработки.ТТС_CRM_Планировщик.ПолучитьФорму("Форма",,"моя");
   Если Ф.Открыта() Тогда
       Сообщить("Открыта");
   Иначе
       Сообщить("Закрыта");
   КонецЕсли;
КонецПроцедуры


пишет "закрыта"
40 zladenuw
 
23.11.12
15:47
(39) ну если не нужен владелец формы. то убрать. по другому походу не как.
41 sadden
 
23.11.12
15:51
(40) более того, мне нужно было ещё определить, какой формы окно активно :-)
Независимо от того, куда вы едете — это в гору и против ветра!