Имя: Пароль:
1C
1С v8
Подключение сканера штрихкода к самописке
, ,
0 fatal_error
 
30.09.14
08:05
Добрый день. Есть самописная конфа. Необходимо к документу прикрутить  сканер шк. В конфу засунул обработку для СШК. При открытии формы документа подключаю СШК в режиме клавиатуры

Объект    = Неопределено;
    Модель = "Сканер штрихкода (общий)";
    Параметры = Новый Структура;
    Параметры.Вставить("БитДанных", 8);
    Параметры.Вставить("Порт", 0); // режим клавиатуры
    Параметры.Вставить("Префикс", "");
    Параметры.Вставить("Скорость", 9600);
    Параметры.Вставить("СтопБит", 0);
    Параметры.Вставить("Суффикс", "#13");
    Параметры.Вставить("Таймаут", 75);
    Параметры.Вставить("СовместимыеВерсии", Новый ТаблицаЗначений);    
    
    Результат = Обработка.СоздатьОбъектДрайвера(Объект, Модель, Параметры);
    Если ЗначениеЗаполнено(Результат) Тогда
        Возврат;
    КонецЕсли;
    
    Результат = Обработка.Подключить(Объект);
    Если ЗначениеЗаполнено(Результат) Тогда
        Возврат;
    КонецЕсли;

На форму повесил событии Внешнее событие, в которой ищу номенклатуру по штрихкоду и активизирую строку документа с такой номенклатурой. Если номенклатура найдена, то строка активизируется и тут же переходит на следующую строку, если не найдена, то просто переходит на следующую строку табличной части. Как убрать второй переход?

Процедура ВнешнееСобытие(Источник, Событие, Данные)

    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;
    
    Штрихкод = "";
    НетОшибки = Перечисления.ТООшибкиОбщие.ПустаяСсылка();
    Результат = Неопределено;
    Результат = Обработка.ОбработатьСобытиеСШК(Объект, Событие, Данные, Штрихкод, ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13);
    Если Не Результат = НетОшибки Тогда
        Возврат;
    КонецЕсли;
    
    //Если Событие = "ПолученШтрихкод" Тогда
    //    
    //    Штрихкод = Данные;
    //    Если Не ЗначениеЗаполнено(Штрихкод) Тогда
    //        Возврат;
    //    КонецЕсли;
        
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
        Запрос.Текст = "ВЫБРАТЬ
                       |    Штрихкоды.Номенклатура
                       |ИЗ
                       |    РегистрСведений.Штрихкоды КАК Штрихкоды
                       |ГДЕ
                       |    Штрихкоды.Штрихкод = &Штрихкод";
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            Если ЗначениеЗаполнено(Выборка.Номенклатура) Тогда
                Парам = Новый Структура("Номенклатура", Выборка.Номенклатура);
                ст = Товары.НайтиСтроки(Парам);
                Если ст.Количество() > 0 Тогда
                    ЭлементыФормы.Товары.ТекущаяСтрока = ст[0];
                    ЭлементыФормы.Товары.ТекущаяКолонка = ЭлементыФормы.Товары.Колонки.Количество;
                    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Товары;
                    Возврат;
                Иначе
                    Сообщить("В документе нет номенклатуры " + Выборка.Номенклатура.Наименование);
                    Возврат;
                КонецЕсли;
            Иначе
                Сообщить("Не найдена номенклатура для штрихкода " + Данные);
                Возврат;
            КонецЕсли;
        Иначе
            Сообщить("Не найдена номенклатура для штрихкода " + Данные);
            Возврат;
        КонецЕсли;
        
    //КонецЕсли;            
    
    Обработка.СобытиеОбработано(Объект);
    
КонецПроцедуры
1 fatal_error
 
30.09.14
08:25
хелп
2 Обработка
 
30.09.14
09:07
если сканер настроил в режиме разрыва клавы то тут нет необходимости обрабатывает событие. Просто содаешь диалог ввода и ее обрабатываешь так если бы с клавы вводил бы числа. И все!
3 fatal_error
 
30.09.14
09:08
(2) можно подробнее
4 ИС-2
 
naïve
30.09.14
09:08
можно и без обработки. При сканировании сканер вставляет текст (открываем блокнот, сканируем - штрих код в блокноте).

В 1C, с помощью обработчика ожидания, все время держим активным поле куда помещаем штрих-код
5 MiniMuk
 
30.09.14
09:11
(4) ну все время не надо. можно сделать кнопочку которая активирует нужное поле, подвешать на нее хот-кей, в сканере настроить на сканере префикс
6 Обработка
 
30.09.14
09:18
(3) Представь себе что сканера нет. И штирхкод вводишь вручную. При этом в форме выведи реквизит "Вводимыйштрихкод" и в этом реквизите событие "При изменении" обрабатывай поиск по штрихкоду. Ну собственно и все.

А Сканер настроенный в режиме разрыва клавиатуры обычно генерит циферки как если бы ты вводил с клавиатуры. . Важно чтоб ы в это момент курсор находился в диалоге где это отображается.
7 Milok
 
30.09.14
09:38
А почему бы не поставить драйвер сканера ШК и отлавливать через внешнее событие, зачем извращения с дополнительными формами?
8 Обработка
 
30.09.14
09:39
(7) Можно и так но ведь от простого к сложному двигаться начинающему лучше.

Если скажут что ручной ввод запретить тогда и драйвер будет искать.
9 fatal_error
 
30.09.14
10:06
или вы меня не поняли, или я вас)
драйвер СШК от 1С установил, когда открываю документ и сканирую, то попадаю в процедуру формы ВнешнееСобытие и вижу там сканированный штрихкод. Проблема в том, что после поиска номенклатуры и установки текущей строки табличного поля - текущая строка смещается на 1 вниз. Такое смещение происходит, даже если номенклатура была не найдена или штрихкод не зарегистрирован в базе.
10 DGorgoN
 
30.09.14
10:08
(9) Мы тебя поняли прекрасно, делай подключение через комп порт. Работает понятнее чем как клавдия.
11 DGorgoN
 
30.09.14
10:08
Просто когда ты в разрыв делаешь - шк просто эмулирует клавиатуру.
12 Milok
 
30.09.14
10:15
(9) Скорее всего что-то напутано с настройками (суффикс, префикс) копай в эту сторону
13 hhhh
 
30.09.14
10:29
(9) это никак не связано со сканером, это ваши программисты чего-то там навояли. Ищи отладчиком.