Имя: Пароль:
1C
1C 7.7
v7: USB Сканер штрихкода и ТиС
,
0 Neg
 
19.01.13
14:20
Сканируем и временами выскакивает "левая" позиция в табличной части Чека ККМ либо в реализации, эта позиция даже штрихкода не имеет. С com-портовыми сканерами такого практически нет, ну может выскачет раз за день при первом сканировании. ТиС правда 947. В чем может быть проблема?
Спасибо.
1 monsterZE
 
19.01.13
14:23
=) если она не имеет шк, то это, наврено, не сканер..
2 Neg
 
19.01.13
14:25
(1) Ну, а что, при обработке события это происходит, щелкнул сканером и выскочила нужная позиция и "левая" подтянулась.
3 Нуф-Нуф
 
19.01.13
14:29
добавь запись информации о просканированном коде и выбраной номенклатуры в ЖР, а потом проанализируй
4 Neg
 
19.01.13
14:36
(3) если я даже меняю эту позицию, ну добавляю к ней штрихкод например, то выскакивает следующая по списку позиция, закономерность не пойму вообще. Просто еще времени нет, магазин работает до поздна, после работы ночевать не очень хочется :), а базу с собой не возьмешь, тем более  надо сканер брать...
5 monsterZE
 
19.01.13
14:45
(2) посмотри процедуру, обрабатывающую "клик" от сканера.. посмотри откуда она вызывается и при каких событиях..
6 Neg
 
19.01.13
14:58
(5) Это та мы посмотрим, но почему сканеры с непосредственно com-портовые работают без выскакивания "непонятных позиций", с эмуляцией com-порта (usb) c такой фигнёй?
7 monsterZE
 
19.01.13
15:02
(6) я не знаю =) ..возможно сканер как-то не так настроен
в обработку передается префикс/постфикс
вобщем мониторь вызов это обработки (хоть через сообщить) и тебе воздастся
8 Tatitutu
 
19.01.13
15:25
проверь чувствительность
9 abfm
 
19.01.13
15:37
Сообщить(Данные) и анализируй.
10 Стрелок
 
19.01.13
15:56
смотри код обработкавнешнегособытия

сканер хреновый и читает кусок шк а не полностью. дальшесистема пытается найти товар - не находит и берёт первый из справочника. я такое проходил
11 Neg
 
19.01.13
18:35
(10)"смотри код обработкавнешнегособытия"

Она же типовая.


"сканер хреновый и читает кусок шк а не полностью"

Как это победил?

(8) Что делать с чувствительностью, увеличить?
12 monsterZE
 
19.01.13
19:42
(11) надо сперва определить, кто все-таки "виновен"
13 dimi3o
 
20.01.13
02:20
(0) Такая же фигня с USB сканером. Правда у нас левая позиция выскакивает 1 раз в день при первом сканировании, дальше все как по-маслу, поэтому большого значения этой ошибке не придавал. Кстати, абсолютно то же самое и на сканере с COM портом. Этот глюк на 1С с момента её рождения.
14 Neg
 
20.01.13
09:26
(13) Вот, я тоже узнал, что не только в одном магазине. Но как то, кто то, лечил?!

Вот где Чучундер, он же 100% сталкивался с такой фигнёй???
15 Neg
 
21.01.13
14:58
ап
16 Neg
 
21.01.13
16:04
апа
17 PALESIA
 
21.01.13
16:23
(0) ты хоть код ОбработкаВнешнегоСобытия() кинь в студию - всего скорее проблема в нем
18 Neg
 
21.01.13
17:08
(17) Пожалуйста:




Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
   // Процедура разбирает штрих-код, считанный сканером
   // и заполняет строки накладной
   Перем Упаковка,ТекКоличество, Спецификация;
   Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена;
   
   Перем СтрокаВозврЦена;

Если Событие = "BarCodeValue" Тогда
       ПредположимЧтоКарта=Сред(Данные,1,2);
       Если (ПредположимЧтоКарта="33") или(ПредположимЧтоКарта="30")  Тогда // Это действительно карта клиента +д
       
           Карта=глНайтиКлиентаДисконт(Данные); //Ищем карту            
           Если Карта=0 Тогда
               Сообщить("Клиента нет в базе!");
           Иначе
               Клиент=Карта;
               ПриВыбореКлиента();
           КонецЕсли;
           
       // Обработка закончена. Готовы к получению нового штрихкода.
       глСканерПосылкаДанных(1);
   Иначе // ищем товар
           
           Если Форма.ТолькоПросмотр() = 0 Тогда
               Если ПустоеЗначение(Номенклатура) = 1 Тогда
                   Если НомерСтроки > 0 Тогда
                       УдалитьСтроку();    
                   КонецЕсли;
               КонецЕсли;
               
               Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) <> 0 Тогда
                   ТаблицаПодбора = СоздатьОбъект("ТаблицаЗначений");
                   ТаблицаПодбора.НоваяКолонка("Номенклатура");
                   ТаблицаПодбора.НоваяКолонка("Единица");
                   ТаблицаПодбора.НоваяКолонка("Количество", "Число");
                   ТаблицаПодбора.НоваяКолонка("Цена", "Число");
                   
                   ТаблицаПодбора.НоваяСтрока();
                   ТаблицаПодбора.Номенклатура = ВремТовар;
                   ТаблицаПодбора.Единица      = ВремЕдиница;
                   ТаблицаПодбора.Количество   = ВремКоличество;
                   
                   ПараметрыПодбора = СоздатьОбъект("СписокЗначений");
                   ПараметрыПодбора.ДобавитьЗначение(0, "ЕстьВидТМЦ");
                   
                   Если (ВремТовар.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
                   или (ВремТовар.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
                       
                       ТаблицаПодбора.Цена    = глПолучитьЦену(ВремТовар,  Константа.РозничныйТипЦен, ДатаДок, ВремЕдиница, Валюта, Курс, Кратность);
                       
                       ПараметрыПодбора.ДобавитьЗначение("ИзСправочника"          , "ЦенаВподборе");
                       ПараметрыПодбора.ДобавитьЗначение(Константа.РозничныйТипЦен, "ТипЦен");
                       
                       
                   ИначеЕсли Склад.РозничныйСклад = 0 Тогда
                       
                       ТаблицаПодбора.Цена    = глПолучитьЦену(ВремТовар, глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), ДатаДок, ВремЕдиница, Валюта, Курс, Кратность);
                       
                       ПараметрыПодбора.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе");
                       ПараметрыПодбора.ДобавитьЗначение(глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), "ТипЦен");
                       
                   Иначе    // цена из остатков регистра
                       ТовОстатки = СоздатьОбъект("Регистр.ОстаткиТМЦ");
                       ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(Фирма);
                       ТовОстатки.УстановитьЗначениеФильтра("Фирма", ФирмаДляОстатковТМЦ, 2);
                       ТовОстатки.УстановитьЗначениеФильтра("Склад", Склад, 1);
                       
                       глПолучитьРозничныйОстатокЦену(ВремТовар, ВремЕдиница, ТовОстатки, , СтрокаВозврЦена);
                       
                       СписВозврЦен = ЗначениеИзстроки(СтрокаВозврЦена);
                       Если СписВозврЦен.РазмерСписка() = 1 Тогда
                           ТаблицаПодбора.Цена  = глПересчет(СписВозврЦен.ПолучитьЗначение(1), глРубли, ДатаДок, Валюта, Курс,, Кратность);
                           
                       ИначеЕсли СписВозврЦен.РазмерСписка() > 1 Тогда
                           
                           Если СписВозврЦен.ВыбратьЗначение(ВремЦена,"Выберите цену для товара " + ВремТовар.Наименование, , 60) = 1 Тогда
                               ТаблицаПодбора.Цена  = глПересчет(ВремЦена, глРубли, ДатаДок, Валюта, Курс,, Кратность);
                           Иначе    
                               ТаблицаПодбора.Цена  = 0;
                           КонецЕсли;
                       Иначе
                           ТаблицаПодбора.Цена  = 0;
                       
                           ТаблицаПодбора.Цена    = глПолучитьЦену(ВремТовар, глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), ДатаДок, ВремЕдиница, Валюта, Курс, Кратность);
                       
                       КонецЕсли;
                       
                       ПараметрыПодбора.ДобавитьЗначение("Розница", "ЦенаВподборе");
                   КонецЕсли;
                   
                   ПараметрыПодбора.ДобавитьЗначение(ТаблицаПодбора , "ТаблицаПодбора");
                   
                   глОбработкаПодбора(Контекст, ПараметрыПодбора, 0, 0, 1);
                   
                   ВыбратьСтроки();
                   Пока ПолучитьСтроку() = 1 Цикл
                       ШтрихКод = Единица.ШтрихКод; // прописываем штрих - код
                       ОстатокНоменклатуры();
                   КонецЦикла;
               КонецЕсли;
           КонецЕсли;
           
           // Обработка закончена. Готовы к получению нового штрихкода.
           глСканерПосылкаДанных(1);
       КонецЕсли;
   Иначе
       
       глОбработкаВнешнегоСобытия(Источник, Событие, Данные);    
   КонецЕсли;


КонецПроцедуры // ОбработкаВнешнегоСобытия()
19 monsterZE
 
21.01.13
17:23
а вот жто вот зачем?
---
Иначе
       
       глОбработкаВнешнегоСобытия(Источник, Событие, Данные);  
---
и неужели нельзя "лесенку" нормально строить.. читать глаза режет =(
20 monsterZE
 
21.01.13
17:42
Если ПустоеЗначение(Номенклатура) = 1 Тогда
                Если НомерСтроки > 0 Тогда
                    УдалитьСтроку();    
                КонецЕсли;
            КонецЕсли;
---
Это что? По событию от сканера удаляется пустая строка в тч?
21 monsterZE
 
21.01.13
17:49
мож я конечно общей картины не вижу.. =)
---
                   ВыбратьСтроки();
                   Пока ПолучитьСтроку() = 1 Цикл
                       ШтрихКод = Единица.ШтрихКод; // прописываем штрих - код

                       ОстатокНоменклатуры();
                   КонецЦикла;
---
Единица ?
22 Neg
 
21.01.13
17:57
Обработка типовая, добавлено поиск по клиенту и все.
23 Neg
 
21.01.13
17:59
(21) Это просто показывает остаток номенклатуры в ЧекККМ
24 Neg
 
21.01.13
17:59
Для кассира
25 Neg
 
21.01.13
18:00
Вот типовая


Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
   // Процедура разбирает штрих-код, считанный сканером
   // и заполняет строки накладной
   Перем Упаковка,ТекКоличество, Спецификация;
   Перем ВремТовар, ВремЕдиница, ВремКоличество, ВремЦена;
   
   Перем СтрокаВозврЦена;

   Если Событие = "BarCodeValue" Тогда
       Если Форма.ТолькоПросмотр() = 0 Тогда
           Если ПустоеЗначение(Номенклатура) = 1 Тогда
               Если НомерСтроки > 0 Тогда
                   УдалитьСтроку();    
               КонецЕсли;
           КонецЕсли;
           
           Если глПолучитьТоварПоШтрихкоду(Данные, ВремТовар, ВремЕдиница, ВремКоличество) <> 0 Тогда
               ТаблицаПодбора = СоздатьОбъект("ТаблицаЗначений");
               ТаблицаПодбора.НоваяКолонка("Номенклатура");
               ТаблицаПодбора.НоваяКолонка("Единица");
               ТаблицаПодбора.НоваяКолонка("Количество", "Число");
               ТаблицаПодбора.НоваяКолонка("Цена", "Число");
               
               ТаблицаПодбора.НоваяСтрока();
               ТаблицаПодбора.Номенклатура = ВремТовар;
               ТаблицаПодбора.Единица      = ВремЕдиница;
               ТаблицаПодбора.Количество   = ВремКоличество;
               
               ПараметрыПодбора = СоздатьОбъект("СписокЗначений");
               ПараметрыПодбора.ДобавитьЗначение(0, "ЕстьВидТМЦ");
               
               Если (ВремТовар.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Услуга)
                или (ВремТовар.ВидНоменклатуры = Перечисление.ВидыНоменклатуры.Работа) Тогда
                   
                   ТаблицаПодбора.Цена    = глПолучитьЦену(ВремТовар,  Константа.РозничныйТипЦен, ДатаДок, ВремЕдиница, Валюта, Курс, Кратность);
                   
                   ПараметрыПодбора.ДобавитьЗначение("ИзСправочника"          , "ЦенаВподборе");
                   ПараметрыПодбора.ДобавитьЗначение(Константа.РозничныйТипЦен, "ТипЦен");
                   
                   
               ИначеЕсли Склад.РозничныйСклад = 0 Тогда
                   
                   ТаблицаПодбора.Цена    = глПолучитьЦену(ВремТовар, глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), ДатаДок, ВремЕдиница, Валюта, Курс, Кратность);
                   
                   ПараметрыПодбора.ДобавитьЗначение("ИзСправочника", "ЦенаВподборе");
                   ПараметрыПодбора.ДобавитьЗначение(глЗначениеПоУмолчанию("ОсновнойТипЦенПродажи"), "ТипЦен");
                   
               Иначе    // цена из остатков регистра
                   ТовОстатки = СоздатьОбъект("Регистр.ОстаткиТМЦ");
                   ФирмаДляОстатковТМЦ = глФирмаДляОстатковТМЦ(Фирма);
                   ТовОстатки.УстановитьЗначениеФильтра("Фирма", ФирмаДляОстатковТМЦ, 2);
                   ТовОстатки.УстановитьЗначениеФильтра("Склад", Склад, 1);
               
                   глПолучитьРозничныйОстатокЦену(ВремТовар, ВремЕдиница, ТовОстатки, , СтрокаВозврЦена);
               
                   СписВозврЦен = ЗначениеИзстроки(СтрокаВозврЦена);
                   Если СписВозврЦен.РазмерСписка() = 1 Тогда
                       ТаблицаПодбора.Цена  = глПересчет(СписВозврЦен.ПолучитьЗначение(1), глРубли, ДатаДок, Валюта, Курс,, Кратность);
                       
                   ИначеЕсли СписВозврЦен.РазмерСписка() > 1 Тогда
                       
                       Если СписВозврЦен.ВыбратьЗначение(ВремЦена,"Выберите цену для товара " + ВремТовар.Наименование, , 60) = 1 Тогда
                           ТаблицаПодбора.Цена  = глПересчет(ВремЦена, глРубли, ДатаДок, Валюта, Курс,, Кратность);
                       Иначе    
                           ТаблицаПодбора.Цена  = 0;
                       КонецЕсли;
                   Иначе
                       ТаблицаПодбора.Цена  = 0;
                   КонецЕсли;
                   
                   ПараметрыПодбора.ДобавитьЗначение("Розница", "ЦенаВподборе");
               КонецЕсли;
               
               ПараметрыПодбора.ДобавитьЗначение(ТаблицаПодбора , "ТаблицаПодбора");
               
               глОбработкаПодбора(Контекст, ПараметрыПодбора, 0, 0, 1);
               
               ВыбратьСтроки();
               Пока ПолучитьСтроку() = 1 Цикл
                   ШтрихКод = Единица.ШтрихКод; // прописываем штрих - код
               КонецЦикла;
           КонецЕсли;
       КонецЕсли;
       
       // Обработка закончена. Готовы к получению нового штрихкода.
       глСканерПосылкаДанных(1);
   Иначе
       глОбработкаВнешнегоСобытия(Источник, Событие, Данные);    
   КонецЕсли;

КонецПроцедуры // ОбработкаВнешнегоСобытия()
26 dimi3o
 
22.01.13
02:48
(25) Мда, тут надо копаться... имхо проблема не в обработке. Т.к. в моём случает всё отрабатывается, кроме самого первого считывания.
27 Тихий омут
 
22.01.13
05:45
(0) длл-ку для работы со сканером какую используешь?
28 Neg
 
28.01.13
16:33
(27) scanopos.dll
29 Злопчинский
 
28.01.13
16:36
Нет, не сталкивался. Сталкивался с хреновым посиком отсканированных товаров раза два. В обоих случаях - кривоватый код.
.
ветск уне читал, но для начала тупо бы поставил логгирование 1. поступивший в процедуру штрихкод
2. найденный по ШК товар
3. содержимое ТЧ после п.2 - то есть когда отсканированное "успешно" внесено в ТЧ.
.
потом смотрим...
30 Torquader
 
29.01.13
01:16
Скорей всего, вы ловите префикс и суффикс от сканера в разрыв клавиатуры, а символы перевод строки и возврат каретки - не ловите - вот они и открывают подбор и сразу что-то в него вводят.
Настройте сканер правильно или сделайте USB-Serial-Emulation
31 NS
 
29.01.13
02:31
Я бы "данные" в обработке проверил на пустое значение.
И сокрлп() к нему применил.