Имя: Пароль:
1C
1С v8
Как открыть форму внешней обработки в Серверном режиме в Управляемых формах?
0 D_Pavel
 
02.03.12
11:10
Делаю так:

Основнаяформа=ПолучитьФорму("ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма", Новый Структура("Ключ", ЭтотОбъект));

В файловом режиме 1С работает, а в серверном не работает, клиент толстый. Пишет:

Ошибка при вызове метода контекста (ПолучитьФорму): Неизвестное имя формы. Имя: "ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма".

Как сделать чтобы в серверном работала?
1 D_Pavel
 
02.03.12
11:12
+0

&НаКлиенте
Функция МаяФункция() Экспорт
   Основнаяформа=ПолучитьФорму("ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма", Новый Структура("Ключ", ЭтотОбъект));
КонецФункции
2 ДенисЧ
 
02.03.12
11:12
Запустить управляемого клиента?
3 andrewks
 
02.03.12
11:16
а она у тебя точно ТвАяОбработка?
4 D_Pavel
 
02.03.12
11:17
(2) конечно. А потом выходить ошибка которую я описать в (0)
5 D_Pavel
 
02.03.12
11:17
(3) Да, иначе в файловом варианте бы не открылась.
6 andrewks
 
02.03.12
11:17
а, ясно, "мы нэмэстные..."
7 D_Pavel
 
02.03.12
11:20
(6) Да, у нас на районе все пишут "МаяОбработка"

Ну так что по теме? Знает кто-нибудь?
8 andrewks
 
02.03.12
11:20
(5) и ты хочешь сказать, что в файловом в тонком клиенте она у тебя открывается?
9 D_Pavel
 
02.03.12
11:20
(8) в ТОЛСТОМ файловом открывается.
10 ptiz
 
02.03.12
11:20
В каком модуле располагается: Функция МаяФункция() Экспорт ?
11 andrewks
 
02.03.12
11:22
(9) ну а форма-то какая открывается? Управляемая, или обычная?
12 D_Pavel
 
02.03.12
11:23
(10) В общем модуле.
13 D_Pavel
 
02.03.12
11:24
(11) Управляемая. Она так и называется "УправляемаяФорма"
14 andrewks
 
02.03.12
11:27
(13) ну, мало ли. может, у вас там принято так называть обычные формы
15 aleks-id
 
02.03.12
11:27
кинь свою обработку на ифолдер. интересно поглядеть
16 D_Pavel
 
02.03.12
11:34
(15) Ща попробую. Там релиться не надо?
17 D_Pavel
 
02.03.12
11:35
18 aleks-id
 
02.03.12
11:41
а я не понял, где ты код из (0) пишешь? в другой обработке?
19 D_Pavel
 
02.03.12
11:43
(18) Код из (0) в модуле объекта.
20 aleks-id
 
02.03.12
11:43
ага. в модуле объекта нет клиента. там тока сервер.
21 aleks-id
 
02.03.12
11:44
и мне непонятно зафига ты так сделал вообще?
22 D_Pavel
 
02.03.12
11:45
(21) Потому что она вызывается из общего модуля общей командой для всех внешних обработок.
23 aleks-id
 
02.03.12
11:45
ты хочешь чтобы перед печатью этой внешней печатной формы вылезало окно настроек чтоли?
24 D_Pavel
 
02.03.12
11:46
(23) Да
25 D_Pavel
 
02.03.12
11:47
(20) Как сделать чтобы было клиент? Как я понял в файловом варианте само делается, потому что там нет сервера.
26 aleks-id
 
02.03.12
11:49
в файловом варианте есть сервер. но поскольку он крутится на твоей локальной машине, то и позволяет открыть окно настроек.
27 D_Pavel
 
02.03.12
11:50
(26) Ну да. А на серверном варианте как открыть форму?
28 Кириллка
 
02.03.12
11:51
во-первых, ЭтотОбъект доступен на "Сервер, толстый клиент, внешнее соединение".
29 DrShad
 
02.03.12
11:52
(28) и что?
30 D_Pavel
 
02.03.12
11:53
(28) ЭтотОбъект можно вообще убрать, он не нужен. Щас там просто Объект, реквизит обработки.
31 D_Pavel
 
02.03.12
11:57
К (0). Из внешнего модуля так вызывается:


   ИмяФайла = "C:\МаяОбработка.epf";
   Обработка = ВнешниеОбработки.Создать(ИмяФайла);
   Обработка.Объект = ОбъектИзБазы;
   ТабДокумент = Обработка.МаяФункция();


В (17) МаяФункция() заменена на функцию Печать()
32 D_Pavel
 
02.03.12
11:58
Вообще строка     Обработка.Объект = ОбъектИзБазы;    роли не играет, не обращайте внимания.
33 DrShad
 
02.03.12
11:59
ну не откроешь ты на сервере форму
34 Кириллка
 
02.03.12
12:00
во-вторых, внешняя обработка предварительно зарегистрированы в системе?
в-третьих, а как это открытие обработки на сервере? Кто ее ТАМ будет наблюдать?

может мы чего не поняли в твоей задуме?
35 ptiz
 
02.03.12
12:07
36 ptiz
 
02.03.12
12:08
У меня вот даже зарегистрировать внешнюю обработку не получается в толстом клиенте.
37 D_Pavel
 
02.03.12
12:11
(34) Не на сервере, а на клиенте в серверном варианте.
38 Кириллка
 
02.03.12
12:13
(37)ну значит нужно прояснить только второй вопрос :)
39 D_Pavel
 
02.03.12
12:15
(34) Как их регистировать в системе? И для чего?
40 DrShad
 
02.03.12
12:22
(39) +1 для чего? после этого платформа позволит из модуля обработки открывать формы?
41 aleks-id
 
02.03.12
12:34
короче. твоя печатная форма должна быть создана по технологии внешних обработок 8.2
только тогда ты сможешь открыть ее форму.
42 aleks-id
 
02.03.12
12:35
делается это так:

   ДобавитьКоманду(ТаблицаКоманд,
       "Бла-бла-ба, то что пишем в менюшке",
       "ИМЯ_ТВОЕЙ_ФОРМЫ",
       "ОткрытиеФормы",
   );
43 aleks-id
 
02.03.12
12:36
+42 делается это в функции СведенияОВнешнейОбработке
44 Кириллка
 
02.03.12
12:38
Вот этого нужно тебе?

&НаКлиенте
Процедура ОткрытьОбработку(Команда)
   Перем стрИмя, стрАдрес;
   
   стрАдрес = "";
   Если НЕ ПоместитьФайл(стрАдрес, "D:\ИмяОбработки.epf", , Ложь) Тогда
       Возврат;
   КонецЕсли;
   
   стрИмя = ПодключитьВнешнююОбработку(стрАдрес);
   
   Основнаяформа = ПолучитьФорму("ВнешняяОбработка." + стрИмя + ".Форма.Форма");
   Основнаяформа.Открыть();
КонецПроцедуры // ОткрытьОбработку()

&НаСервере
Функция ПодключитьВнешнююОбработку(Знач стрАдрес)
   Возврат ВнешниеОбработки.Подключить(стрАдрес);
КонецФункции // ПодключитьВнешнююОбработку()
45 aleks-id
 
02.03.12
12:43
46 D_Pavel
 
02.03.12
12:49
Спасибо, буду разбираться
47 D_Pavel
 
02.03.12
13:48
(41) Не понял как это может помочь открыть форму внешней обработки. Это для типовой УТ? Похоже не то что нужно
48 aleks-id
 
02.03.12
13:53
(47) что конкретно тебе непонятно? ты делаешь дополнительную печатную форму для какого то документа. правильно?
49 D_Pavel
 
02.03.12
13:53
(44) Пишет:  Ошибка при вызове метода контекста (ПолучитьФорму): Неизвестное имя формы. Имя: "ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма"
50 D_Pavel
 
02.03.12
13:54
(48) Да, но в той статье написано как сделать дополнительную печатную форму, это я сделал, работает.
Теперь мне надо открыть ее форму.
51 aleks-id
 
02.03.12
13:56
(50) я тебе дал код в (42)
ищи в своей обработке "ДобавитьКоманду(ТаблицаКоманд,"
и пиши туда вместо ИМЯ_ТВОЕЙ_ФОРМЫ имя формы как она у тебя обзывается в обработке
52 Кириллка
 
02.03.12
13:57
(49)я тебе рабочий код написал и выложил.
53 aleks-id
 
02.03.12
14:00
(52) и куда надо прикрутить этот "рабочий" код чтобы ТС мог напечатать внешнюю печатную форму?
54 Кириллка
 
02.03.12
14:03
(53)вопрос стоял, как открыть внешнюю обработку. Про печать ничего не слышал :)
55 aleks-id
 
02.03.12
14:13
(54) см (22)-(24)
56 Кириллка
 
02.03.12
14:32
(55)а в двух словах чего ему надо, если ты скачал и видел его файло.
57 aleks-id
 
02.03.12
14:35
(56) ровно то, что я написал. ему надо сделать внешнюю печатную форму для УТ11, которая прилепляется к нужным документам штатными средствами без изменения конфы и позволяет перед печатью открывать окно с некоторыми настройками.
58 aleks-id
 
02.03.12
14:36
но судя по тому, что ТС молчит, то предположу что он не осилил как же это сделать. видимо придется ему предложить купить эту форму ))))
59 D_Pavel
 
05.03.12
05:52
(51) Этот код не работает. ДобавитьКоманду - такая процедура не определена.
(57) Вообще-то не для УТ11. Интересует как открыть форму в принципе, "с нуля"
60 D_Pavel
 
05.03.12
05:54
(52) Код не работает.
Ошибка при вызове метода контекста (ПолучитьФорму): Неизвестное имя формы. Имя: "ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма"
61 Кириллка
 
05.03.12
06:52
(60)покажи код.
62 D_Pavel
 
05.03.12
07:04
(61) Я его уже убрал. Смотри в (44)
63 Кириллка
 
05.03.12
07:08
(62)код в (44) работает.
64 D_Pavel
 
05.03.12
07:11
(63) Действительно, работает. Ошибся
65 D_Pavel
 
05.03.12
07:16
Почему-то в пятницу не работало. 1с перезапустил, заработало.
Вот так тоже рабюотает:

&НаКлиенте
Функция Печать() Экспорт
   Перем стрАдрес;
   
   стрАдрес = "";
   Если НЕ ПоместитьФайл(стрАдрес, "C:\Temp\tmp.epf", , Ложь) Тогда
       Возврат (Неопределено);
   КонецЕсли;
   
   Основнаяформа = ПолучитьФорму("ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма");
   Основнаяформа.Открыть();
   
   Возврат(Неопределено);
КонецФункции
66 Кириллка
 
05.03.12
07:19
(65)рандомный генератор пишешь?
67 D_Pavel
 
05.03.12
07:23
Вот так тоже теперь работает:

&НаКлиенте
Функция Печать() Экспорт
   //Перем стрАдрес;
   //
   //стрАдрес = "";
   //Если НЕ ПоместитьФайл(стрАдрес, "C:\Temp\tmp.epf", , Ложь) Тогда
   //    Возврат (Неопределено);
   //КонецЕсли;
   //
   Основнаяформа = ПолучитьФорму("ВнешняяОбработка.МаяОбработка.Форма.УправляемаяФорма");
   Основнаяформа.Открыть();
   
   Возврат(Неопределено);
КонецФункции
68 D_Pavel
 
05.03.12
07:24
Что за фигня! В пятницу не работало, а сейчас работает без всяких дополнений! Всего-то платформу перезапустил
69 Кириллка
 
05.03.12
07:28
(68)не делай как в (65) и (67), делай как в (44).
70 D_Pavel
 
05.03.12
07:33
(69) Почему может быть такое сообщение?:

{ВнешняяОбработка.МаяОбработка.МодульОбъекта(52,14)}: Процедура или функция с указанным именем не определена (ПодключитьВнешнююОбработку)
71 Кириллка
 
05.03.12
07:36
(70)а давай я тебе по руке погадаю? Тыж меня в телепаты записал.

Я думаю, что сообщение об ошибке достаточно для понимания.
72 D_Pavel
 
05.03.12
07:40
(71) твой код. Пишется ошибка.
Закомментированная строка не работает. Переделал как во второй строке, ошибку не выдает:


   //стрИмя = ПодключитьВнешнююОбработку(стрАдрес);
   стрИмя = ВнешниеОбработки.Подключить(стрАдрес);
73 Кириллка
 
05.03.12
07:49
(67)Если предполагать, что ты используешь код из (67), дополнив его куском кода из (72), то у меня разрыв шаблона - метод Подключить имеет доступность "Сервер, внешнее соединение", хотя у тебя выставлено &НаКлиенте.

Ты занимаешься мозгоимением??
74 D_Pavel
 
05.03.12
07:52
&НаКлиенте
Функция Печать() Экспорт
   Перем стрИмя, стрАдрес;
   
   стрАдрес = "";
   Если НЕ ПоместитьФайл(стрАдрес, "C:\Temp\tmp.epf", , Ложь) Тогда
       Возврат (Неопределено);
   КонецЕсли;
   
   стрИмя = ВнешниеОбработки.Подключить(стрАдрес);
   
   Основнаяформа = ПолучитьФорму("ВнешняяОбработка." + стрИмя + ".Форма.УправляемаяФорма");
   Основнаяформа.Открыть();
   
   Возврат(Неопределено);
КонецФункции


&НаСервере
Функция ПодключитьВнешнююОбработку(Знач стрАдрес)
   Возврат ВнешниеОбработки.Подключить(стрАдрес);
КонецФункции
75 D_Pavel
 
05.03.12
07:53
Если использовать ПодключитьВнешнююОбработку вместо ВнешниеОбработки.Подключить, то выходит сообщение об ошибке:
Процедура или функция с указанным именем не определена (ПодключитьВнешнююОбработку)
76 D_Pavel
 
05.03.12
07:55
Еще один косяк: Если переименовать мою обработку в любое имя кроме "МаяОбработка", то выходит сообщение об ошибке:
Неизвестное имя формы. Имя: "ВнешняяОбработка.блаблабла.Форма.УправляемаяФорма"
77 D_Pavel
 
05.03.12
07:57
Третий косяк: Если взять другую обработку и задать ей имя "МаяОбработка", и открыть ее форму из той процедуры, то всё равно откроется форма старой обработки. Тоесть она как-то зарегистрировалась под этим именем, и не пойму когда и как она это сделала
78 Кириллка
 
05.03.12
08:17
(74)а где это "Функция Печать() Экспорт" расположено?
79 D_Pavel
 
05.03.12
08:23
(78) В модуле объекта внешней обработки
80 Кириллка
 
05.03.12
08:26
(79)ты каким-то чудом вызываешь метод "Печать" из одной внешней обработки, а потом хочешь открыть другую внешнюю обработку "tmp.epf"??

А как ты вызываешь "Печать"?
81 D_Pavel
 
05.03.12
08:31
(80) Из общего модуля вызываю:

   ИмяФайла = "C:\Temp\tmp.epf";
   Обработка = ВнешниеОбработки.Создать(ИмяФайла);
   ТабДокумент = Обработка.Печать();
82 D_Pavel
 
05.03.12
08:33
Я вызываю метод Печать одной внешней обработки, и хочу чтобы она сама открыла свою форму.
83 D_Pavel
 
05.03.12
09:00
Ап.
84 Кириллка
 
05.03.12
09:12
хз, чего там у тебя как работает, но (74) не должен работать: &НаКлиенте и ВнешниеОбработки.Подключить не должны вместе дружить.

Еще раз: в (44) код достаточен для твоей задачи. "ОткрытьОбработку(Команда)" - это вызов по команде/кнопке на форме.

Открыл форму, сделал настройки, там же нажал кнопку/команду печать.
85 D_Pavel
 
05.03.12
09:17
(84) Чтобы нажать кнопку на форме, нужно сперва открыть эту форму, а она не открывается. А вообще вызов внешней обработки и ее метода "Печать" нельзя менять. И почему работает ВнешниеОбработки.Подключить я не знаю. Могу выложить обработку чтобы посмотрели
86 D_Pavel
 
05.03.12
09:30
(84) Вот выложил: http://ifolder.ru/29092486
Кнопка на обработке открывает такую же обработку и вызывает "Печать()". И твой код не работает.

{Форма.УправляемаяФорма.Форма(4)}: Ошибка при вызове метода контекста (Создать)
   Обработка = ВнешниеОбработки.Создать(ИмяФайла);
по причине:
{ВнешняяОбработка.МаяОбработка.МодульОбъекта(11,14)}: Процедура или функция с указанным именем не определена (ПодключитьВнешнююОбработку)
   стрИмя = <<?>>ПодключитьВнешнююОбработку(стрАдрес);
87 D_Pavel
 
05.03.12
11:00
Ап.
88 mikeA
 
05.03.12
11:26
(86)
ВнешниеОбработки не доступно в тонком клиенте
ПодключитьВнешнююОбработку это метод объекта. чтобы его вызвать, нужно сначала получить объект с помощью РеквизитФормыВЗначение. но сделать это можно только на сервере
а вообще зачем всё это нужно?
89 D_Pavel
 
05.03.12
11:30
(88) У меня в ТОЛСТОМ клиенте
Этот метод вызывается в модуле объекта, тоесть получать объект не нужно, он уже есть.
Нужно просто разобраться. Почему оно не работает!
90 D_Pavel
 
05.03.12
11:32
И как могут работать два метода ПоместитьФайл и ВнешниеОбработки.Подключить в одной процедуре!??! У них же разная доступность на клиенте и на сервере!
91 mikeA
 
05.03.12
11:51
(89) тогда, ты будешь смеяться, всё работает
замени
   Основнаяформа = ПолучитьФорму("ВнешняяОбработка." + стрИмя + ".Форма.УправляемаяФорма");
   Основнаяформа.Открыть();
на
   ОткрытьФорму("ВнешняяОбработка." + стрИмя + ".Форма.УправляемаяФорма",,,Истина);

в принципе можно и ПолучитьФорму использовать и потом открывать, только при попытке передать туда ключ уникальности ругается на количество параметров, хотя параметры и там и там одинаковые
92 aleks-id
 
05.03.12
11:55
(90) ты для какой конфы это безобразие ваяешь?
для УТ11 я тебе дал все карты в руки. у меня все работает, подключается, открывает форму настроек и печатает.
93 D_Pavel
 
05.03.12
12:02
(91) если указать имя обработки "МаяОбработка", то работает. А если поменять имя и указать там новое имя, то не работает.
94 D_Pavel
 
05.03.12
12:02
(92) Для пустой конфы. Тестовой
95 D_Pavel
 
06.03.12
06:11
Выяснил что нужно хотябы раз открыть форму обработки через меню файл, и выполнить команду:

&НаКлиенте
Функция Команда1(Команда) Экспорт
   Перем стрИмя, стрАдрес;
   стрАдрес = "";
   Если НЕ ПоместитьФайл(стрАдрес, "C:\Temp\tmp.epf", , Ложь) Тогда
       Возврат (Неопределено);
   КонецЕсли;
   стрИмя = ВнешниеОбработки.Подключить(стрАдрес);
КонецФункции


Тогда в следующий раз форма открывается из модуля объекта нормально. Но как сделать чтобы не нужно было открывать ее в первый раз вручную?
96 Кириллка
 
06.03.12
08:03
(95)свойства конфигурации - Обычное приложение???
97 D_Pavel
 
06.03.12
08:07
(96) Основной режим: Управляемое приложение
98 Кириллка
 
06.03.12
08:31
(97)да как так? открываю твою обработку в ут11 - в модуле формы уже ругань идет.
99 D_Pavel
 
06.03.12
08:47
(98) Щас скачал ту которую выкладывал, открывается форма с одной кнопкой. Как так?
100 D_Pavel
 
06.03.12
08:47
Платформа 8.2.15.289
101 D_Pavel
 
06.03.12
10:17
(98) Открывай в толстом клиенте
102 D_Pavel
 
06.03.12
11:07
Ап.
103 Кириллка
 
06.03.12
21:48
Открываю в конфигураторе, жму ctrl+f7, получаю следующую картину: http://imageshack.us/f/850/wtfgf.png/

Как оно у тебя работает?
104 D_Pavel
 
12.03.12
10:46
(103) Обрати особое внимание на текст сообщения об ошибке, на самый конец:
  ...........Файла); (Проверка: Тонкий клиент)

И смотри (101)
105 Кириллка
 
12.03.12
11:19
(104)понимаю...
Тебе есть смысл изменить представление об окружающем мире, а не менять мир под свои представления.

Я даже не запускал эту обработку, достаточно запустить синтаксис-контроль сделать, чтобы понять, что написано оно не верно.
106 D_Pavel
 
12.03.12
11:24
(105) Что там не верно написано? Вроде всё верно.
И как тогда открыть эту форму из обработки?
107 D_Pavel
 
12.03.12
11:30
(105) Это кажется что там не верно, потому что у тебя в "Сервис - Пареметры - Модули - Проверка" стоит галочка в "Тонкий клиент". Сними ее и всё будет нормально.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс