Имя: Пароль:
1C
1С v8
Как открыть вторую форму обработки, открытой через меню файл? (УФ)
,
0 Икогнито
 
23.07.13
15:09
Обработка открыта через меню файл-открыть.
У обработки есть вторая форма.

Как получить эту вторую форму и открыть её по нажатию кнопки в основной форме?
1 Поросенок Петр
 
23.07.13
15:10
ОткрытьФорму("ВнешниеОбработки. и т.д.
2 Maxus43
 
23.07.13
15:10
Синтаксис:

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>)
3 lxndr
 
23.07.13
15:10
ПолучитьФорму("ВтораяФОрма").Открыть()
4 Икогнито
 
23.07.13
15:10
(2) в имя формы что писать?
5 Maxus43
 
23.07.13
15:11
(4) СП украли чтоли?) там написано же
6 Икогнито
 
23.07.13
15:18
(5) СП не украли.
Как определить каталог из которого открыта обработка?
7 Икогнито
 
23.07.13
15:19
ОбработкаОбъект.ИспользуемоеИмяФайла
8 Maxus43
 
23.07.13
15:21
(6) зачем? она уже открыта
9 Икогнито
 
23.07.13
15:22
(8) Макет можно получить так:

   ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
Макет = ОбработкаОбъект.ПолучитьМакет("Вася")

А как получить другую форму обработки открытой через меню файл?
10 Икогнито
 
23.07.13
15:24
(8)
ВнешняяОбработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
ВнешняяОбработка.ПолучитьФорму().Открыть();

А если она перестанет быть внешней обработкой, то этот код перестанет работать...
11 Икогнито
 
23.07.13
15:26
хня какая-то.
12 Икогнито
 
23.07.13
15:26
Получается нельзя получить вторую форму обработки, уже открытой через меню Файл?
13 Maxus43
 
23.07.13
15:27
Для внешних отчетов и обработок имя формы задается следующим образом:
ВнешнийОтчет.<имя отчета>.Форма.<имя формы>;
ВнешнийОтчет.<имя отчета>.<имя стандартной формы>;
ВнешняяОбработка.<имя обработки>.Форма.<имя формы>;
ВнешняяОбработка.<имя обработки>.<имя стандартной формы>.
При этом внешний отчет или обработка должны быть предварительно зарегистрированы в системе с помощью метода Подключить или Подключить соответственно. <Имя отчета> и <имя обработки> - это имена, под которыми зарегистрированы внешний отчет или обработка. (с)
14 Икогнито
 
23.07.13
15:36
(13) пля, да это я и без тебя знаю.
15 Maxus43
 
23.07.13
15:37
(14) дак чего не получается то тогда? зарегистрируй, и используй (2)
16 Икогнито
 
23.07.13
15:40
(15) набуя её регистрировать, если она уже открыта?
17 Maxus43
 
23.07.13
15:41
(16) регистрировать надо, чтобы использовать команду (2)
18 Икогнито
 
23.07.13
15:44
(17) зарегистрировать не могу, потому что файл уже открыт.

Замкнутый круг.
19 Икогнито
 
23.07.13
15:53
ап
20 olegves
 
23.07.13
15:56
Объект.формы.ВтораяФорма.Открыть(парам, пам, пам)
21 Икогнито
 
23.07.13
15:59
(20) ога
22 Икогнито
 
23.07.13
16:04
короче, из тонкого клиента никак
23 Икогнито
 
23.07.13
16:04
если надо открыть другую форму, юзайте общие формы
24 Maniac
 
23.07.13
16:12
)))) все открывается
25 Maniac
 
23.07.13
16:22
&НаКлиенте
Процедура ПоискСоответствий(Команда)
   
   АдресПередаваемыхПараметров = ПоместитьДанныеВоВременноеХранилище();
   
   СтруктураПараметров = Новый Структура;
   СтруктураПараметров.Вставить("Адрес",АдресПередаваемыхПараметров);
   
   Попытка
       АдресВоВременномХранилище = ОткрытьФормуМодально("Обработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоответствияИмпортСправочник",СтруктураПараметров,ЭтаФорма);
   Исключение
       АдресВоВременномХранилище = ОткрытьФормуМодально("ВнешняяОбработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоответствияИмпортСправочник",СтруктураПараметров,ЭтаФорма);
   КонецПопытки;
   
   Если ЗначениеЗаполнено(АдресВоВременномХранилище) Тогда
       ЗаполнитьСоответствияНаСервере(АдресВоВременномХранилище);
   КонецЕсли;
   
   Состояние("Команда выполнена");
   
КонецПроцедуры
26 Maniac
 
23.07.13
16:23
Тоже самое если не модально.

Работает сразу и если внешняя обработка, если добавлена в справочник обработок и если просто добавлена в конфигурацию.
КОРОЧЕ ГОВОРЯ ВСЕГДА И ВЕЗДЕ

&НаКлиенте
Процедура ВыполнитьПоступлениеТоваровУслуг(Команда)
   
   АдресПередаваемыхПараметров = ПоместитьДанныеВоВременноеХранилище();
   
   СтруктураПараметров = Новый Структура;
   СтруктураПараметров.Вставить("Адрес",АдресПередаваемыхПараметров);
   
   Попытка
       АдресВоВременномХранилище = ОткрытьФорму("Обработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоздатьПоступление",СтруктураПараметров,ЭтаФорма);
   Исключение
       АдресВоВременномХранилище = ОткрытьФорму("ВнешняяОбработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоздатьПоступление",СтруктураПараметров,ЭтаФорма);
   КонецПопытки;
   
КонецПроцедуры
27 Maniac
 
23.07.13
16:23
в любых клиента, тонкий, толстый, веб. пофигу
28 Maniac
 
23.07.13
20:38
Помогло? даж никто спасибо не сказал. Тупили полтора часа пока я не написал и все?
29 Поросенок Петр
 
23.07.13
22:17
(28) Тока тебя и ждали.
(27) До первого исключения во второй форме.

Раз уж делать универсальную обработку, то не через костыль - попытку, а через кошерное
Метаданные.Обработки.Содержит(РеквизитФормыВЗначение("Объект").Метаданные())

Конечно дольше и помнить придется "родословную"... Но зато нет попытки.
30 Maniac
 
23.07.13
22:30
(29) да не гони. 3 года все работает нормально. Чоте так попытка не нравится. 100 процентный рабочий вариант.
31 banco
 
23.07.13
23:03
(30) если в конфигурации будет такая обработка, то вместо формы внешней обработки, откроется форма из конфигурации
32 banco
 
23.07.13
23:24
ПозицияТочки = СтрДлина(ИмяФормы);
Пока ПозицияТочки > 0 Цикл    
  Если Сред(ИмяФормы, ПозицияТочки, 1) = "." Тогда    
   Прервать;    
  КонецЕсли;
  ПозицияТочки = ПозицияТочки - 1;
КонецЦикла;
ИмяОбработки = Лев(ИмяФормы, ПозицияТочки);
ОткрытьФорму(ИмяОбработки + ИмяВызываемойФормы);
33 banco
 
23.07.13
23:44
можно еще ПриСозданииНаСервере получить имя обработки и потом использовать при открытии форм
ИмяОбработки = РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя();
ОткрытьФорму(ИмяОбработки + ".Форма."+ИмяВызываемойФормы);
34 Maniac
 
24.07.13
10:05
НУ тя накрыло нафиг. Я ответ единственный правильный рабочий хрен знает когда дал, а ты еще тут до 12 ночи какиую то хрень придумывал.
Накрывает же.
35 Икогнито
 
24.07.13
10:22
(33) спасибо, ты гений
36 banco
 
24.07.13
11:13
(34)что то не нравится мне твой "единственный правильный рабочий" вариант, вот и написал свой.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс