Версия для печати темы (https://pro1c.org.ua/index.php?s=fbadc4329befa4b209c89feca803b2b9&showtopic=38788)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Работа с Сом объектом

Автор: Filosof 18.07.17, 10:06

К машине подключены весы через Ком порт. В файловом варианте использую КомОбъект внешней компоненты Mscomm32 данные прекрасно считываются с весопроцессора. Но в клиент серверном варианте проблема. Создана на форме клиентская процедура с таким кодом:

&НаКлиенте
Процедура Брутто(Команда)
Попытка
        Весы = Новый COMОбъект("MSCOMMLib.MSComm");
    Исключение
        Сообщить("Ошибка создания объекта компоненты MSCommLib (Mscomm32.ocx)", СтатусСообщения.Внимание);
        Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
        //Возврат;
    КонецПопытки;
    
    Весы.CommPort = 7;
    Весы.Settings = "9600,N,8,1";
    Весы.InputLen = 0;
    Попытка
        Весы.PortOpen = 1;
    Исключение
        Сообщить("Порт занят другим устройством, отключите его и повторите попытку");
    КонецПопытки;
    
    тЗапросНаВзвешивание = Символ(2) + "AB03" + Символ(3);
    
    Для Н = 1 по 5 Цикл        // попытки если вес не стабилен
        
        
        Весы.Output = тЗапросНаВзвешивание;
        
        Пока Весы.InBufferCount < 12 Цикл
            #Если Клиент Тогда
                ОбработкаПрерыванияПользователя();
            #КонецЕсли
        КонецЦикла;
        
        См = Весы.Input;
        
        Если ПустаяСтрока(См) Тогда
            
            Продолжить;
            
        Иначе
            //Сообщить(См);
            
            См = Сред(СтрЗаменить(См, Лев(тЗапросНаВзвешивание,3), ""), 2);
            См = СтрЗаменить(См, Символ(3), "");
            См = Лев(См, СтрДлина(См)-2);    // последние 2 символа служебные
                        
            ЗнСВесов = Число(См);
            
            Прервать;
            
        КонецЕсли;    
        
    КонецЦикла;
    
    Весы.PortOpen = 0;
    
//Возврат ЗнСВесов;            
    
    
    Объект.Брутто=ЗнСВесов;    
Объект.РучнойВводБрутто=Ложь;
Объект.ДатаПолученияБрутто=ТекущаяДата();
КонецПроцедуры


Но почему то выдает ошибки:
Ошибка создания объекта компоненты MSCommLib (Mscomm32.ocx)
и
{Документ.ПриемкаПродукцииСПолейКФК.Форма.ФормаДокумента.Форма(5)}: Ошибка при вызове конструктора (COMОбъект): -2147221230(0x80040112): Класс не лицензирован для использования


 ! 

http://pro1c.org.ua/index.php?act=announce&id=2: 9
 

Автор: Petre 18.07.17, 10:17

Filosof @ Сегодня, 11:06 * ,
Ошибка говорит об отсутствии лицензии на класс MSCommLib.

Автор: Filosof 18.07.17, 13:03

Petre @ Сегодня, 11:17 * ,
Я это вижу. Но почему в файловом варианте лицензия находится а в клиент серверном нет? Где нужно еще кроме клиентской машины лицензировать эту компоненту? На клиентской машине компонента и зарегистрирована и залицензирована, благодаря чему все отрабатывает в файловом варианте. А вот в клиент серверном стопор на лицензировании компоненты.

Автор: Petre 18.07.17, 13:14

Filosof @ Сегодня, 14:03 * ,
Оба варианта проверяются на одной машине? Версия / разрядность 1с одна?

Автор: Filosof 18.07.17, 14:16

Petre @ Сегодня, 14:14 * ,
Да оба варианта на одной машине. Но в клиент серверном варианте запуск клиентского приложения происходит под другим пользователем. Подбросили мысль, что нужно залицензировать под этим другим пользователем. Буду пробовать отпишусь.

Автор: jackill88 18.07.17, 15:24

Filosof @ Сегодня, 11:06 * ,
1) Проверьте, заходите ли Вы клиент-серверном режиме из Толстого клиента;
2) Возможно, сервер 1с Предприятия 64-х разрядный, а клиент - 32-х разрядный (возможно, сам сервер из-за того, что DLL не 64-х битная, не создает COM-объект)

Автор: Flexy 18.07.17, 16:11

Новый COMОбъект(<Имя>, <ИмяСервера>)

Пробуйте задать второй параметр.

Автор: sava1 18.07.17, 17:18

Цитата(jackill88 @ 18.07.17, 16:24) *
2) Возможно, сервер 1с Предприятия 64-х разрядный, а клиент - 32-х разрядный (возможно, сам сервер из-за того, что DLL не 64-х битная, не создает COM-объект)


Такого не бывает

Автор: Vofka 18.07.17, 19:13

А чё многие к серверу прицепились, если код выполняется &НаКлиенте?

Автор: Flexy 18.07.17, 22:56

Vofka @ Сегодня, 19:13 * ,
Видимо потому, что в "клиент-файловом режиме" (в режиме эмуляции сервера, на одном хосте) все работает. why.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua