Имя: Пароль:
1C
1С v8
Работа с внешней компонентой
0 JastAMan
 
25.09.17
09:12
Не доводилось работать с внешними компонентами. Сколько не гуглил - не смог понять принцип работы. По примеру попытался сделать так:

ЗагрузитьВнешнююКомпоненту("C:\1C\FprnM1C82.dll");
    
Компонента = Новый ("AddIn.FprnM1C82");    


При выполнении сообщение о том что тип не определен: FprnM1C82

Как правильно?
1 Рэйв
 
25.09.17
09:22
Правильно -Якнуть справа.
2 JastAMan
 
25.09.17
09:35
(1) Говорю, же гуглил.
Если знаешь, то подскажи, пожалуйста, почему не подключается компонента?

Подключено = ПодключитьВнешнююКомпоненту("C:\1C\FprnM1C82.dll", "FprnM1C82", AddInType.Native);
    Если Подключено = Истина тогда
        Компонента = Новый ("AddIn.FprnM1C82");
    КонецЕсли;
3 Мимохожий Однако
 
25.09.17
09:37
Зарегистрируй для начала через командную строку с правами администратора эту несчастную компоненту
4 JastAMan
 
25.09.17
09:41
(3) Делал:
regsvr32 C:\1C\FprnM1C82.dll

Сообщение windows Успешное выполнение DLLRegisterServer в
C:\1C\FprnM1C82.dll
5 Мимохожий Однако
 
25.09.17
09:42
Обрами в попытки и почитай ОписаниеОшибки()
6 Мимохожий Однако
 
25.09.17
09:45
Важно в какой среде используешь этот метод. Примечание из СП:
Внешние компоненты могут быть выполнены по технологии Native API или COM. Компоненты, выполненные по технологии COM, совместимы с компонентами 1С:Предприятия 7.7.
Веб-клиент может работать только с компонентами в информационной базе, упакованными в архив.
Тонкий клиент может работать с компонентами в информационной базе, упакованными в архив, и компонентами, расположенными в файловой системе.
Толстый клиент может работать со всеми вариантами хранения компонентов. При этом, если компонент установлен методом УстановитьВнешнююКомпоненту, то используется установленный компонент, а если не установлен, то компонент будет получен в момент подключения.
Сервер может работать со всеми компонентами. Компонент кэшируется на сеанс работы сервера
7 JastAMan
 
25.09.17
09:54
Странно: переменная Подключено = ложь, а в исключение не заходит, соответственно нет описания ошибки.
    
Попытка
Подключено = ПодключитьВнешнююКомпоненту("C:\1C\FprnM1C82.dll", "FprnM1C82", AddInType.Native);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Если Подключено = Истина тогда
        Компонента = Новый ("AddIn.FprnM1C82");
    КонецЕсли;
8 JastAMan
 
25.09.17
13:06
Что делаю не так?
Компонента зарегистрирована, но не подключается.
9 Zyka
 
25.09.17
14:11
Возможно я ошибаюсь, однако выглядит на попытку подружить 1С и ККМ АТОЛ.

Если так, то ставим драйвер, например "KKT_8_15_02_00". Она сама зарегистрирует DLL.
Ну, про ручную регистрацию вам уже писали.

Также обратите DLL к которой идёт обращение.

- - - - - - - - - - - -

Инициализация на стороне 1Сы:

ОбъектДрайвера = Неопределено;
ProgID = "AddIn.FPrnM8";

Попытка
    ПодключитьВнешнююКомпоненту(ProgID);
    ОбъектДрайвера = Новый(ProgID);
Исключение
КонецПопытки;

Если ОбъектДрайвера = Неопределено Тогда
    Сообщить("ОШИБКА: " + Символы.ПС + "Внешняя компонента драйвера не найдена");
    Возврат Неопределено;
КонецЕсли;

Также не забывайте вызывать неявный деструктор объекта драйвера:
ОбъектДрайвера.DeviceEnabled = Ложь;
ОбъектДрайвера = Неопределено;

- - - - - - - - - - - -
10 JastAMan
 
25.09.17
15:48
(9) Установил KKT_8_15_03_00_Full
Увидел FprnM1C.dll в списке зарегистрированных dll.
ПодключитьВнешнююКомпоненту(ProgID) возвращает ложь.


ОбъектДрайвера = Неопределено;
ProgID = "AddIn.FprnM1C";
Попытка
    ПодключитьВнешнююКомпоненту(ProgID);
    ОбъектДрайвера = Новый(ProgID);
Исключение
    
КонецПопытки;
11 JastAMan
 
25.09.17
15:48
Впечатление, что не находит компоненту
12 Мимохожий Однако
 
25.09.17
16:29
Положи поближе в BIN или System32
13 JastAMan
 
25.09.17
16:56
(12) Куда только не ложил.
Даже в общий макет.
14 H A D G E H O G s
 
25.09.17
17:00
могу подключиться, глянуть
15 dezss
 
25.09.17
17:03
Если винда x64, то надо в SysWOW64 положить и там зарегать, если x86, то в system32.
Да и имя смущает AddIn.FprnM1C. Вообще сейчас пользуются, в том числе, FprnM1C82_54FZ, а это компонента AddIn.ATOL_KKM_1C82_54FZ.
16 piter3
 
25.09.17
17:04
А в манифесте точно натив?
17 dezss
 
25.09.17
17:13
(16) com, там, скорей всего...
18 Zyka
 
25.09.17
22:52
(10) на всякий случай спрошу: вызов происходит там же где установлен драйвер?
То бишь обработка подключения внешней компоненты &НаКлиенте?

Имел честь видеть людей вешающих подобные драйвера на сервер (удаленный) и подключаясь к компоненте с сервера недоумевали о недоступности локального com порта или ip (проброса там не было)
19 piter3
 
25.09.17
22:57
(17) Угу,если автору нужно не на клиенте то добро пожаловать в 9 версию.
20 piter3
 
25.09.17
22:59
Хотя какой насервере в 7.7)))
21 JastAMan
 
27.09.17
11:13
Разобрался в предмете, посмотрел что, где зарегистрировано, ппонял, но теперь не определяется тип

ProgID = "AddIn.FprnM8";  // HKEY_CLASSES_ROOT\AddIn.FprnM8

Попытка

ПодключитьВнешнююКомпоненту("FprnM1C.dll", "FprnM1C", ТипВнешнейКомпоненты.Native); // Зарегистрирована по адресу: C:\Program Files\ATOL\Drivers8\Bin_Free\FprnM1C.dll

//Пробовал так: ПодключитьВнешнююКомпоненту("C:\Program Files\ATOL\Drivers8\Bin_Free\FprnM1C.dll", "FprnM1C", ТипВнешнейКомпоненты.Native); // так же вместо Native выбирал Com

ОбъектДрайвера = Новый(ProgID); // при выполнении этой строки кода - "Тип не определен"

Исключение

КонецПопытки;
22 JastAMan
 
27.09.17
14:31
Up
23 piter3
 
27.09.17
14:32
уже писали не FprnM1C.Открой архив уже и в манифесте будет явно написано
24 piter3
 
27.09.17
14:36
25 JastAMan
 
27.09.17
15:32
(23) Я 8.3 это делаю. Видимо ошибочно выбрал 7.7 в теме .

Открыл архив C:\Program Files\ATOL\Drivers8\1Cv82\FR-ATOL_54FZ.zip
распаковал в: C:\Program Files\ATOL\Drivers8\1Cv82\FZ54
Зарегистрировал компоненту. Увидел в реестре соответствующие ключи.

Из реестра скопировал RegID: "AddIn.ATOL_KKM_1C82_54FZ"

Затем в обработке:

ProgID = "AddIn.ATOL_KKM_1C82_54FZ";
Попытка//ПОДКЛЮЧАЕТСЯ НО НЕ СОЗДАЕТ ОБЪЕКТ ДРАЙВЕРА.
    ПодключитьВнешнююКомпоненту("C:\Program Files\ATOL\Drivers8\1Cv82\FZ54\FprnM1C82_54FZ.dll", "FprnM1C82_54FZ", ТипВнешнейКомпоненты.Native);
    ОбъектДрайвера = Новый(ProgID);
Исключение
    
КонецПопытки;

Снова подключает, но
Новый(ProgID)    {(1)}: Тип не определен (AddIn.ATOL_KKM_1C82_54FZ)
26 JastAMan
 
27.09.17
15:36
В манифесте Com, но и ним не работает.
После подключения компоненты 1С должна видеть тип данных ATOL_KKM_1C82_54FZ?
27 piter3
 
27.09.17
15:39
(26) ну да
28 JastAMan
 
27.09.17
15:42
(27) В чем же может быть затык - где еще рыть?
29 Йохохо
 
27.09.17
15:45
(25) \Program Files\ - x64?
30 JastAMan
 
27.09.17
15:55
х32 однако
31 JastAMan
 
27.09.17
15:57
Расположение файлов не должно влиять. Какая разница, по какому адресу зарегистрирована dll
32 piter3
 
28.09.17
10:50
На клиенте делаешь?
33 dezss
 
28.09.17
11:07
(31) влияет еще как
Зарегай dll в SysWOW64, если винда х64 или в System32, если винда x86.
После этого подключай компоненту и наслаждайся.
34 dezss
 
28.09.17
11:08
(33) + подключай вот так

ProgID = "AddIn.ATOL_KKM_1C82_54FZ";
ПодключитьВнешнююКомпоненту(ProgID);
ОбъектДрайвера = Новый (ProgID);
35 dezss
 
28.09.17
11:10
И вообще, что тебе возвращает ПодключитьВнешнююКомпоненту?
36 JastAMan
 
03.10.17
16:33
(35) Истину, добрый молодец, возвращает.
37 piter3
 
03.10.17
16:38
Может на чистой машине попробовать?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.