суббота, 21 августа 2010 г.

1С: Сканер Штрих-кода

Решили упростить систему документооборота внутри компании (сбор заявки->получение пакета->возврат подписанного). У нас по прежнему стоит v7.7.
Для ускорения работы диспетчера был приобретен сканер штрих кода (Metrologic MS5145). Моей задачей стало обеспечить работоспособность устройства, а так же обеспечить выполнение бизнес логики.

Сказано-сделано.
Берем драйвера (если не было с диском ищем). Берем Scaner1C.dll регистрируем его в системе где будет установлен сканер от имени администратора regsvr32 path\to\Scaner1C.dll
Дальше я добавил константу КомуШК - строка размерности 255: список компьютеров у кого установлен СканерШК и у кого зарегистрирована dll.
После этого в глобальном модуле делаю следующее:

Перем Scaner Экспорт; // c этой переменной будем работать
...
Спиз = СоздатьОбъект("СписокЗначений");
// Строка должна быть в виде: "Comp1","Comp2", <- ',' финальный обязателен
Спиз.ИзСтрокиСРазделителями(Константа.КомуШК); 
Если Спиз.НайтиЗначение(НРег(ИмяКомпьютера())) <> 0) Тогда
    // Комп в списке
    // пришлось проверять в ручную, авто поиск работал через раз
    ИмяФ = КаталогПрограммы() + "\Scaner1C.dll";
    Если ФС.СуществуетФайл(имяф) = 1 Тогда // есть такой
        Если ЗагрузитьВнешнююКомпоненту(ИмяФ) <> 0 Тогда // грузим dll  
            // Создание объекта сканера из внешней компоненты  
            Scaner = СоздатьОбъект("AddIn.Scaner45");               
            // первичная настройка  
            Scaner.AutoDisable = 1;  
            Scaner.DataEventEnabled = 1; 
        Иначе               
            // fail  
            Сообщить("Не удалось загрузить внешнюю компоненту " + ИмяФ);
        КонецЕсли;
    Иначе
        ИмяФ = КаталогИБ() + "\Scaner1C.dll"; // Каталог базы
        Если ЗагрузитьВнешнююКомпоненту(ИмяФ) <> 0 Тогда               
            // Создание объекта сканера из внешней компоненты  
            Scaner = СоздатьОбъект("AddIn.Scaner45");               
            // первичная настройка  
            Scaner.AutoDisable = 1;  
            Scaner.DataEventEnabled = 1; 
        Иначе               
            // fail
            Сообщить("Не удалось загрузить внешнюю компоненту " + ИмяФ);
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
После этого добавляем компьютеры в константы: "baranov","serv", перезапускаем 1С. В Сервис-> Парметры должна появиться вкладка "Сканер штрих-кода" (рис 1.)
Рис 1. Вкладка Сканер штрих-кода

Теперь можно получать данные от сканера. Например для ввода штрих кода в товар.
В карточке:
// Процедура вносит полученные от сканера данные в одно из полей справочника
// Доступны три поля для заполнения:
// 1. ШтрихКод - Штрих код для штуки.
// 2. ШкКоробка - Штрих код для коробки.
// 3. ШкБлоки - Штрих код для блока.
Процедура ОбработкаТов(Данные);
    АктЭл = форма.АктивныйЭлемент(); // получен активный элемент на форме
    // выбираем вариант
    Если АктЭл = "ШтрихКод" Тогда
        ШтрихКод = Данные;
    ИначеЕсли АктЭл = "ШкКоробка" Тогда
        ШкКоробка = Данные;
    ИначеЕсли АктЭл = "ШкБлоки" Тогда
        ШкБлоки = Данные;
    Иначе
        // Вдруг попутали поле?
        Предупреждение("Нужно выбрать поле со штрих кодом");
    КонецЕсли;
КонецПроцедуры

// Предопределенная процедура для отлова событий от DLL
// На вход:
// Источник - От кого пришло событие
// Событие - собственно событие
// Данные - данные которые принесли с собой
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные);
    ШтрихКод = "";
    // СтараяВерсия?
    Если Scaner.OldVersion<>0 Тогда
        // да, получаем данные
        ШтрихКод = Данные;
    Иначе
        // нет, получаем данные
        Scaner.EventNumber = Число(Данные); // возможно считывать потоком?
        ШтрихКод = Scaner.ScanData; // то что нам нужно данные
        // для того чтобы можно было получить следующее событие
        Scaner.DeleteEvent();
    КонецЕсли;

    //говорим что закончили чтение
    Scaner.DataEventEnabled = 1;
    //обрабатываем
    ОбработкаТов(ШтрихКод);
КонецПроцедуры
Так, читать научились. Как писать расскажу позже.
PS: Где-то наткнулся на то что MS5145 нужно нажимать на кнопку для сканирования. Есть книжечка с настройками, в ней все что необходимо есть, читаем внимательно настраиваем.

Комментариев нет:

Отправить комментарий