Имя: Пароль:
1C
1С v8
Обработки обслуживания. Голову изломал. Как?
,
0 abuca
 
16.01.17
20:21
Есть, к примеру, Розница 2.2 или УТ 11
Как подключить самописную обработку обслуживания?
Конкретно, дисплей покупателя POSUA lpos_usb_vfd
Написал обработку, пишет, стирает, мультики показывает, анекдоты травит...
Как прикрутить-то теперь?
ЗЫ. Если раньше писали программы, то теперь сутками думаем, как сделать вызовы асинхронными, отвязать от модальности, передать на сервер... Подключить, блин, обработчик...
1 abuca
 
16.01.17
21:01
Понял...
Путь только такой. Если Проф.
Через расширение с заимствованием "ПодключаемоеОборудованиеУниверсальныйДрайверКлиент" и

&Вместо("ВывестиСтрокуНаДисплейПокупателя") // использование аннотации &Вместо подменит их процедуру моей.
Функция ВывестиСтрокуНаДисплейПокупателя_(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры)

А здесь я уже постараюсь)))
2 abuca
 
16.01.17
21:04
Не совсем обработка получилась.
Но так даже еще проще.
Пиши в модулях, как по старинке, и подменяй. И радуйся.
А подключается потом на раз-два.
3 vde69
 
16.01.17
21:13
если есть событие внутри обьекта (внутри драйвера) его можно переопределить на процедуру в 1с...

я так делал например переопределение события ворда "при закрытии"
4 Torquader
 
16.01.17
21:19
Там, насколько я помню, есть другое оборудование с возможностью указать внешнюю обработку обслуживания - по крайней мере в УТ11 такое было - будет работать внешняя обработка - для всего остального же будет внутренняя, то есть встроенная в конфигурации.
5 abuca
 
16.01.17
21:29
(4) Есть только: "Драйверы оборудования"- "Подключаемые по стандарту совместимо" - Туда загоняем dll-ки, которые лояльные производители лепят по требованиям 1С, чтобы работал общий модуль "ПодключаемоеОборудованиеУниверсальныйДрайверКлиент"
где перенаправляется команда на подключенную по стандарту DLL-ку
В отладчике проследил всю цепочку.
Т.е. работают встроенные модули с обработчиками (1С, Штрих, Атол, Сканчегототам) и Универсальный, который работает непосредственно с DLL

Сейчас допилю, код скину расширения с дисплеем
6 abuca
 
16.01.17
21:32
Вот!
Всего за полчаса собрал с расширением:

#Область ПроцедурыИФункцииОбщиеДляДисплеевПокупателя

// Функция осуществляет вывод списка строк на дисплей покупателя.
//
&Вместо("ВывестиСтрокуНаДисплейПокупателя")
Функция ВывестиСтрокуНаДисплейПокупателя_Подменяемая(ОбъектДрайвера, Параметры, ПараметрыПодключения, СтрокаТекста, ВыходныеПараметры)
    Результат = Истина;
    
    нн= ПодключитьВнешнююКомпоненту("AddIn.lpos_usb_vfd");
    Компонент= Новый("AddIn.lpos_usb_vfd_extension");
    СтрОшибка = "";    
    ИДУстройства =1;    
    МассивЗначений = Новый Массив();
    КодоваяСтраница = 12; 
    МассивЗначений.Добавить(КодоваяСтраница);
    Если (Компонент.Подключить(МассивЗначений, ИДУстройства) <> Истина) Тогда
        Компонент.ПолучитьОшибку(СтрОшибка);
        Результат = Ложь;
    Иначе
        СтрОшибка = "Ок";
    КонецЕсли;
    Стр1 = "";
    Стр2 = "";
    МассивСтрок = Новый Массив();
    СтруктураСтр1=Новый  Структура;
    СтруктураСтр2=Новый Структура;
    СтруктураСтр1.Вставить("Текст", "                    ");
    СтруктураСтр2.Вставить("Текст", "                    ");
    СтруктураСтр1.Вставить("БегущаяСтрока", Ложь); // если флаг  установлен, текст в строке прокручивается
    СтруктураСтр2.Вставить("БегущаяСтрока", Ложь);
    МассивСтрок.Добавить(СтруктураСтр1);
    МассивСтрок.Добавить(СтруктураСтр2);
    Если(Компонент.ВывестиСтрокуНаДисплейПокупателя(ИДУстройства, МассивСтрок) <>  Истина) Тогда
        Компонент.ПолучитьОшибку(СтрОшибка);
        Результат = Ложь;
    Иначе
        СтрОшибка = "OK";
    КонецЕсли; 

    Разделитель = Найти(СтрокаТекста,Символы.ПС);
    Стр1 = Лев(СтрокаТекста,Разделитель-1);
    Стр2 = Прав(СтрокаТекста,СтрДлина(СтрокаТекста)-Разделитель);
    МассивСтрок = Новый Массив();
    СтруктураСтр1=Новый  Структура;
    СтруктураСтр2=Новый Структура;
    СтруктураСтр1.Вставить("Текст", Стр1);
    СтруктураСтр2.Вставить("Текст", Стр2);
    СтруктураСтр1.Вставить("БегущаяСтрока", Ложь); // если флаг  установлен, текст в строке прокручивается
    СтруктураСтр2.Вставить("БегущаяСтрока", Ложь);
    МассивСтрок.Добавить(СтруктураСтр1);
    МассивСтрок.Добавить(СтруктураСтр2);
    Если(Компонент.ВывестиСтрокуНаДисплейПокупателя(ИДУстройства, МассивСтрок) <>  Истина) Тогда
        Компонент.ПолучитьОшибку(СтрОшибка);
        Результат = Ложь;
    Иначе
        СтрОшибка = "OK";
    КонецЕсли; 
    Если не Результат Тогда
        ВыходныеПараметры.Очистить();
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить("");
    КонецЕсли;
    Возврат Результат;    
КонецФункции

// Функция осуществляет очистку дисплея покупателя.
//
&Вместо("ОчиститьДисплейПокупателя")

Функция ОчиститьДисплейПокупателя_Подменяемая(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры)
    
    Результат = Истина;
    нн= ПодключитьВнешнююКомпоненту("AddIn.lpos_usb_vfd");
    Компонент= Новый("AddIn.lpos_usb_vfd_extension");
    СтрОшибка = "";    
    ИДУстройства =1;    

    Если (Компонент.ОчиститьДисплейПокупателя(ИДУстройства) <> Истина) Тогда
        Компонент.ПолучитьОшибку(СтрОшибка);
        Результат = Ложь;
    Иначе
        СтрОшибка = "OK";
    КонецЕсли;    
    Если не Результат Тогда
        ВыходныеПараметры.Очистить();
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить("");
    КонецЕсли;

    Возврат Результат;
    
КонецФункции

#КонецОбласти
7 abuca
 
16.01.17
21:34
Осталось только ошибки на подключение отловить, сунуть DLLку в макет и в случае нн = Ложь запускать установку DLL.
Хотя... Если подумать, надо ли... Все-равно сама не установится. Надо же с админскими правами ее устанавливать.
8 Torquader
 
16.01.17
21:36
(7) Если очень захотеть, и писать не в систему, а в данные пользователя в реестре, то установится без админских прав.
9 abuca
 
16.01.17
21:37
(8) ...мм  ...это мы еще не проходили.

(6) Да, кстати, Код пишется в заимствованном в расширениЕ общем модуле: "ПодключаемоеОборудованиеУниверсальныйДрайверКлиент".
В него дописывается код, приведенный выше.

Это для Розницы 2.2.5
10 abuca
 
16.01.17
21:39
(8) где-то на волшебном уже видел такую конструкцию. Если будем активно продавать украинское чудо-недотелевизор (ДП), буду пробовать. А так - 2 клиента с этими дисплеями, зависшими еще с НГ. Можно и так поставить.
11 vis_tmp
 
24.01.17
12:27
(9)Спасибо
12 Torquader
 
25.01.17
00:55
(10) У меня мой COM-объект для работы с данными (правда из VbScript) регистрировался на Windows 10 просто вызовом RegSvr32 без всяких админских прав и работал без проблем.