Для ускорения работы диспетчера был приобретен сканер штрих кода (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 нужно нажимать на кнопку для сканирования. Есть книжечка с настройками, в ней все что необходимо есть, читаем внимательно настраиваем.
Комментариев нет:
Отправить комментарий