Имя: Пароль:
1C
 
Загрузить внешнюю компоненту НаКлиенте в управляемом приложении
,
0 web_profiler
 
13.03.15
12:19
Был такой код в обычном приложении
        Попытка
                App  =  Новый COMОбъект("MEDOC.ZApplication");
        ИмяПлагина =  ПутьКФайлуМедка + "\medoc1c.dll";
        ЗагрузитьВнешнююКомпоненту(ИмяПлагина);
        Параметры.МедКомпонент  =  Новый("AddIn.Medoc1C");


в управляемом на строке ЗагрузитьВнешнююКомпоненту уходит в исключение
помогите, пожалуйста
1 web_profiler
 
13.03.15
12:24
неужели, никто не сталкивался с такой проблемкой?
2 Repey
 
13.03.15
12:41
И кто же первый задаст сакраментальный вопрос?
3 web_profiler
 
13.03.15
12:44
(2) в смысле?
4 Repey
 
13.03.15
12:46
Клиент какой? Толстый, тонкий?
5 Страждущий
 
13.03.15
12:47
СообщитьОбОшибке()
6 Страждущий
 
13.03.15
12:50
(5) Метод ОписаниеОшибки()
7 web_profiler
 
13.03.15
12:51
минуту - вывожу
8 web_profiler
 
13.03.15
12:55
Тонкий клиент, ОписаниеОшибки() пусто
9 Repey
 
13.03.15
12:56
СП уже продавали? Доступность глядел?
10 web_profiler
 
13.03.15
12:59
да хватит тролить, подскажите как выйти с ситуации
видел, что в замен использовать?
11 web_profiler
 
13.03.15
13:02
плиз, помогите
12 sFAQer
 
13.03.15
13:08
(11) сервер не предлагать?
13 yavasya
 
13.03.15
13:10
(12) + сделай процедуру на сервере
14 SleepyHead
 
гуру
13.03.15
13:10
(11) Ну помогут тебе создать, а потом ты спросишь, куда делся объект после того, как сервер отработал.
15 web_profiler
 
13.03.15
13:11
понял, гуглю
16 sFAQer
 
13.03.15
13:11
и вообще разве загрузить ВК есть? вроде установить и подключить есть, загрузить не помню..
17 fisher
 
13.03.15
13:21
Можно и на клиенте. Только с твоей компонентой выгодней на сервере, если сервер виндовый. Чтобы компонента жила между серверными вызовами надо юзать через общий модуль с повторным использованием возвращаемых значений на время сеанса.
18 web_profiler
 
13.03.15
13:28
(17) с повторным использованием возвращаемых значений на время сеанса
Разъясни пожалуйста
19 SleepyHead
 
гуру
13.03.15
13:30
(18) Это значит, есть шанс, что между двумя серверными вызовами твоя компонента будет доступна :)
20 fisher
 
13.03.15
13:32
(18) Курим свойство общего модуля "Повторное использование возвращаемых значений"
21 fisher
 
13.03.15
13:39
Фишка в том, что нет человеческих способов сохранять серверный контекст сеанса между серверными вызовами. Официально только параметры сеанса для этого есть. А вот (20) - таки позволяет извратиться. Хотя изначально оно как бы не совсем для этого.
22 web_profiler
 
13.03.15
13:41
(21) f tckb vjvtyn ,tp cyznbz c gjllth;rb&
23 web_profiler
 
13.03.15
13:41
(21) а если момент без снятия с поддержки?
24 fisher
 
13.03.15
13:43
(23) Если твоя задача нормально решается за один серверный вызов или не критично создавать каждый раз заново - тогда пляски с бубном не нужны.
25 fisher
 
13.03.15
13:44
Ну или таки на клиенте придется.
26 web_profiler
 
13.03.15
13:44
моя процедура отрабатывает через обработчик ожидания
надо на клиенте
27 web_profiler
 
13.03.15
13:45
что сделать, чтоб dll подгружалась?
28 SleepyHead
 
гуру
13.03.15
13:46
(26) Прлцедура отрабатывает через обработку на клиенте. А какие-то данные между вызовами нужно сохранятиь? Или было бы достаточно, если бы компонента создалась, отработала и выгрузилась из памяти, и так до следующего вызова?
29 SleepyHead
 
гуру
13.03.15
13:47
(27) Нужно из клиентского метода сделать вызов серверного метода и в нем реализовать весь алгоритм обработки (создание компоненты, какие-то действия через нее). И см. вопрос (28)
30 web_profiler
 
13.03.15
13:48
надо чтоб компонента сохнранялась
пробывал через параметры с признаком ключевой
31 fisher
 
13.03.15
13:53
(27) На тонком клиенте компоненту православно зиповать вместе с манифестом (читай описание технологии ВК) и пихать в двоичный макет. А загружать из макета методом УстановитьВнешнююКомпоненту()
32 web_profiler
 
13.03.15
13:54
(31) где-то читал, сейчас буду разбираться
33 fisher
 
13.03.15
14:01
Хотя, конечно, можно и тупо как в (0) через ПодключитьВнешнююКомпоненту(). Но через макеты гораздо удобнее поддерживать и распространять.
34 web_profiler
 
13.03.15
14:03
(33) ничего у меня не выходит
35 web_profiler
 
13.03.15
14:04
При установке ВК вылетает по ошибке
36 vde69
 
13.03.15
14:04
вот тут есть пример http://code.google.com/p/restoration-base-1c8/downloads/detail?name=1Cv8_0.2.3.zip&can=2&q=

но грузит все равно не всегда....
37 fisher
 
13.03.15
14:05
(34) Странно. Показывай код, ошибки.
38 web_profiler
 
13.03.15
14:06
Установка внешней компоненты не выполнена!
в процессе установки произошла ошибка
39 fisher
 
13.03.15
14:06
Еще раз. Не ЗагрузитьВнешнююКомпоненту, а ПодключитьВнешнююКомпоненту
40 web_profiler
 
13.03.15
14:07
&НаКлиенте
Процедура Подключение1СМедок()
    
    Если НЕ Параметры.МедКомпонент  =  Неопределено Тогда
        Параметры.МедКомпонент.CloseAddin();
    КонецЕсли;
    
    Попытка
        ИмяПлагина =  ПутьКФайлуМедка + "\medoc1c.dll";
        App  =  Новый COMОбъект("MEDOC.ZApplication");
        Если Параметры.ИмяБазы = "УТ3" Тогда
            //отработать(ИмяПлагина);  //сервер
            УстановитьВнешнююКомпоненту(ИмяПлагина);
            ПодключитьВнешнююКомпоненту(ИмяПлагина, "AddIn.Medoc1C");
            //Параметры.МедКомпонент  =  Новый ("AddIn.Скл.Medoc1C");
            //Параметры.МедКомпонент.SetConnectionInfo(СтрокаСоединенияИнформационнойБазы());
        Иначе
            ЗагрузитьВнешнююКомпоненту(ИмяПлагина);
            Параметры.МедКомпонент  =  Новый ("AddIn.Medoc1C");
            Параметры.МедКомпонент.SetConnectionInfo(СтрокаСоединенияИнформационнойБазы());
        КонецЕсли;
        Элементы.ЭДОВозможен.Видимость =  Истина;
        Элементы.ЭДОНевозможен.Видимость =  Ложь;
        ОтключитьОбработчикОжидания("Подключение1СМедок");
        ПроверитьНаличиеПервички();
    Исключение
        Возврат;
    КонецПопытки;
    
КонецПроцедуры
41 web_profiler
 
13.03.15
14:07
Для режимов запуска "Тонкий клиент" и "Веб-клиент", компонента должна быть предварительно установлена методом УстановитьВнешнююКомпоненту
42 fisher
 
13.03.15
14:09
(40) Я типа должен догадаться по каким веткам оно у тебя ходит?
(41) Это только для zip-архива
43 web_profiler
 
13.03.15
14:11
ок, упростим
просто отработать в этой процедуре
44 vde69
 
13.03.15
14:12
&НаКлиенте
Процедура ОбновитьКомпоненту(Команда)
    ПоддержкаКомпонентыКлиент.ОбновитьКомпоненту(Истина);
КонецПроцедуры

Процедура ОбновитьКомпоненту(ОчищатьСтаруюВерсию = Ложь) Экспорт
    
    Если ОчищатьСтаруюВерсию Тогда  
        // --------------------------------------------------------------
        //
        // решение временное (для отлатки ВК) !!!!!!!!!!!!!!!!!!!!
        // не работает на web клиенте и могут быть проблеммы при изменении версии 1с
        // ну и очищает вообще все файлы ВК скопом (в том числе и чужие)
        //
        // --------------------------------------------------------------
        мКаталог = ПолучитьИмяВременногоФайла("1");
        мКаталог = Лев(мКаталог, Найти(мКаталог, "\Local\Temp\"));
        мКаталог = мКаталог + "Roaming\1C\1Cv82\ExtCompT\";
        УдалитьФайлы(мКаталог, ".");
    КонецЕсли;
    
    
    УстановитьВнешнююКомпоненту("ОбщийМакет.Bin1CD_VK_dll");
    Если не ПодключитьВнешнююКомпоненту("ОбщийМакет.Bin1CD_VK_dll", "Bin1CD", ТипВнешнейКомпоненты.Native) Тогда
        Предупреждение("Компонента Bin1CD_VK не подключена!");
        Возврат;
    КонецЕсли;
    
    ВК = Новый ("AddIn.Bin1CD.TBin1CD_VK");        
    
    Попытка
        ВерсияВК = ВК.Версия;
    Исключение
        ВерсияВК = "1.0.0";
    КонецПопытки;
    
    Сообщить("Установлена AddIn.Bin1CD.TBin1CD_VK " + ВерсияВК);
    
КонецПроцедуры
45 fisher
 
13.03.15
14:12
(43) Упрости. Юзай только ПодключитьВнешнююКомпоненту() и не забудь там указать тип компоненты третьим параметром.
46 fisher
 
13.03.15
14:14
Только через макет всё равно православнее.
47 web_profiler
 
13.03.15
14:14
(45) спс, огромное
48 vde69
 
13.03.15
14:15
файл MANIFEST.XML

<?xml version="1.0" encoding="UTF-8"?>
-<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle&quot;&gt; <component arch="i386" type="native" path="Bin1CD_VK.dll" os="Windows"/> <component arch="x86_64" type="native" path="Bin1CD_VK.dll" os="Windows"/> </bundle>
49 fisher
 
13.03.15
14:17
1С просто супер-молодцы с Native, макетами и манифестами. Теоретически можно в конфу пихать кросс-платформенные дрова и они будут универсально везде работать. Только их никто не делает :( 1С только для сканера штрих-кодов что-то такое попыталось родить и то кривовато.
50 web_profiler
 
13.03.15
14:22
Процедура Отработать(ИмяПлагина)
            App  =  Новый COMОбъект("MEDOC.ZApplication");
            Если не ПодключитьВнешнююКомпоненту(ИмяПлагина, "Medoc1C", ТипВнешнейКомпоненты.COM) Тогда
                Возврат;
            КонецЕсли;
            ВК =  Новый ("AddIn.Medoc1C");
            ВК.SetConnectionInfo(СтрокаСоединенияИнформационнойБазы());
КонецПроцедуры

Падает на ВК =  Новый ("AddIn.Medoc1C")
51 web_profiler
 
13.03.15
14:30
ВК =  Новый COMОбъект("AddIn.Medoc1C");
и заработало
52 H A D G E H O G s
 
13.03.15
14:40
(49) А ты пробовал писать плагины к firefox? Тотоже.