|
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
|
Я бы "данные" в обработке проверил на пустое значение.
И сокрлп() к нему применил. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |