Имя: Пароль:
1C
1C 7.7
v7: Сканер ШК не всегда считывает ШК
0 wmonref
 
01.08.14
13:30
Приветствую!

1С 7.7, сервер терминалов Win2003, сканер Honeywell, дрова Атол 6.5.3.
В доке Расход, при считывании ШК, добавляется новый товар в ТЧ документа. Все работает как часы, кроме одного НО:
Когда сканируются быстро разные ШК, сканер может пропустить один ШК, т.е. он пищит но новый товар не добавляется в документе и его надо просканировать еще раз.
В чем может быть проблема?
1 Trotter
 
01.08.14
13:39
А если штрих код не найден 1С об этом говорит ? Штрих код случаем не красный ? чёрный ?
2 Garykom
 
гуру
01.08.14
13:40
(0) дрова от сканера не на клиента поставьте, а не сервер в теминалку ))

просто терминал за сканером не успевает...
3 wmonref
 
01.08.14
13:47
(1) Говорит

(2) Все так и есть
4 BuHu
 
01.08.14
13:50
(0) имхо 1с не успевает отрабатывать событие , видимо долго у вас поиск номенклатуры происходит или еще чего там
5 BuHu
 
01.08.14
13:51
+(4) если открыть блокнот и туда сканировать , все шк добавятся ?
6 wmonref
 
01.08.14
13:53
(4) Да, список номенклатуры большой....
В блокнот сканирует
7 BuHu
 
01.08.14
13:56
(6) смотри процедуру внешнего события , может получится что то оптимизировать , ну или скажи , что б сканировали чуть помедленнее
8 wmonref
 
01.08.14
14:21
Глоб мод:

Процедура ПриНачалеРаботыСистемы()

Если ЗагрузитьВнешнююКомпоненту("Scaner1C.DLL") = 0 Тогда
        Сообщить("Не удалось загрузить внешнюю компоненту Scaner1C.DLL");
    Иначе
        Попытка
            Сканер = СоздатьОбъект("AddIn.Scaner45");
        Исключение
        КонецПопытки;
        
        Если ПустоеЗначение(Сканер) = 1 Тогда
            Сообщить("Не удалось создать объект внешней компоненты с программым идентификатром AddIn.Scaner45");
        Иначе  
            
            Сканер.AutoDisable = 1;
            Сканер.DataEventEnabled = 1;
            //Сканер.УстройcтвоВключено = 0;
            Сканер.УстройствоВключено = 1;
            
            Если Сканер.Результат <> 0 Тогда
                Сообщить("Не удалось включить устройство");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Модуль формы дока:

Процедура ПриОткрытии()

    Если ЗагрузитьВнешнююКомпоненту("Scaner1C.DLL") = 0 Тогда
        Сообщить("Не удалось загрузить внешнюю компоненту Сканер");
    Иначе
        Попытка
            Сканер = СоздатьОбъект("AddIn.Scaner45");
        Исключение
        КонецПопытки;
        
        Если ПустоеЗначение(Сканер) = 1 Тогда
            Сообщить("Не удалось создать объект внешней компоненты с программым идентификатром AddIn.Scaner45");
        Иначе  
            
            Сканер.AutoDisable = 1;
            Сканер.DataEventEnabled = 1;
            //Сканер.УстройcтвоВключено = 0;
            Сканер.УстройствоВключено = 1;
            
            Если Сканер.Результат <> 0 Тогда
                Сообщить("Не удалось включить Сканер");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;

    Для i = 1 По Сканер.DataCount Цикл
        Сканер.EventNumber = i;
        Сканер.DeleteEvent();
    КонецЦикла;      

КонецПроцедуры


Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные) Экспорт
    
    Если Событие = "BarCodeValue" Тогда
        вар = 0;
        Тов = СоздатьОбъект("Справочник.Товары");

        Сканер.DataEventEnabled = 1;
        
        ШК = Сканер.ScanData;
        
        Если (Тов.НайтиПоРеквизиту("ШтрихКод",ШК,1)) = 1 Тогда    
             НоваяСтрока();  
                  ТМЦ1 = Тов.ТекущийЭлемент();  
        КонецЕсли;            
        
        Для i = 1 По Сканер.DataCount Цикл
            Сканер.EventNumber = i;
            Сканер.DeleteEvent();
        КонецЦикла;    
    КонецЕсли;
КонецПроцедуры
9 wmonref
 
01.08.14
14:22
+(8) Вот какой у меня код
10 Garykom
 
гуру
01.08.14
14:46
(8)(9) в "ОбработкаВнешнегоСобытия" засунь Сообщить("ШК "+ШК );

после
ШК = Сканер.ScanData;
и перед
Если (Тов.НайтиПоРеквизиту("ШтрихКод",ШК,1)) = 1 Тогда

затем устрой стресс-тестирование и проверь все ли ШК считались
11 Ёпрст
 
01.08.14
14:47
форму документа обновляй, возможно, ты просто не видишь новуюстроку, хотя она ужо есть
12 Garykom
 
гуру
01.08.14
14:51
(11) угу а еще может не видно новой строки потому что такой ШК уже забит ))
и просто кол-во увеличивается в одной из старых строк да? ))
13 wmonref
 
01.08.14
14:56
(12) Для этого есть код (я просто его не вставил сюда)

Для ном=1 По КоличествоСтрок() Цикл
  ПолучитьСтрокуПоНомеру(КоличествоСтрок()-Ном+1);
     Если СокрЛП(ТМЦ1.ШтрихКод) = СокрЛП(ШК) Тогда
       Количество = Количество + 1;  
     КонецЕсли;
КонецЦикла;

(11) Спасибо, уважаемый  (оффтоп: так что там на счет СбросМодифицированности() - вы так и не ответили  :)
14 Ёпрст
 
01.08.14
14:57
(13) на счет модифицированности, что за ветка то хоть ?
15 wmonref
 
01.08.14
15:05
(14) c форума 1c++
16 Ёпрст
 
01.08.14
15:08
аа... я не помню ужо, но на счет именно формековского метода - он видать криво отрабатывает в форме нового дока, ежели док записан - то всё ровно, метод работает.
17 wmonref
 
01.08.14
15:21
ОК,спс.
На счет сканера есть еще другие мысли?
18 Ёпрст
 
01.08.14
15:30
17) окромя как вставить в окошко сообщения что товар найден/не найден/добавлен не добавлен - нема..
19 Ёпрст
 
01.08.14
15:31
да еще, ежели дрова с атолла, то не последние, надеюсь ?
А то они платные и в них стоит задержка на событие от сканёра..
20 Ёпрст
 
01.08.14
15:32
на сколько я помню, DTO6_2009_02_11
вот эти последние халявные.
21 Ёпрст
 
01.08.14
15:33
и рабочие
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший