|
Сканирование марок в УТ 11 | ☑ | ||
---|---|---|---|---|
0
Newbie1c
13.10.21
✎
12:25
|
Добрый день.
Есть 2 сканера. Один Zebra, второй Honeywell. Стоклнулись с проблемой, что вылетает ошибка при сканировании в документе Приобретение товаров и услуг или Перемещение товаров. Текст XML содержит недопустимый символ в позиции 31 Ошибка одинаковая на обоих сканерах. При это при работе в РМК - марка нормально сканируется, и корректно уходит в честный знак. Там гасится. В чем может быть проблема? 31 символ - непечатаемый символ, по всей видимости. |
|||
1
Смотрящий
13.10.21
✎
12:26
|
и 67 тоже будет такойже ...
|
|||
2
Newbie1c
13.10.21
✎
13:23
|
(1)
Как же быть тогда?( |
|||
3
Смотрящий
13.10.21
✎
13:31
|
(2) Чекни отладчиком чтение и обработку марок в РМК и в ПТиУ/Перемещениях
|
|||
4
lodger
13.10.21
✎
13:39
|
ут типовая? обновить всё, поставить все заплатки.
|
|||
5
Newbie1c
13.10.21
✎
14:15
|
Эти куски все типовые.
11.4.13.209 в последней посмотрел этот же кусок кода такой же. Валится при вызове серверной процедуры на форме. Текст XML содержит недопустимый символ в позиции 31 : 010461014312057021-Iw-=aKlHir4O91809392ZkbNK8jZ1boylW+ynImpc2D8BytE6CmrnJnZAB75YRHpGrl1PollwaBo6sjn0s/OHndbEo5Vg7tMUkxw77O86A== {Документ.ПриобретениеТоваровУслуг.Форма.ФормаДокумента.Форма(5093)}: ОбработатьШтрихкодыСервер(СтруктураДействий,КэшированныеЗначения); {Документ.ПриобретениеТоваровУслуг.Форма.ФормаДокумента.Форма(281)}: ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр)); {ОбщийМодуль.МенеджерОборудованияКлиент.Модуль(1993)}: Оповестить(ВыходныеПараметры[0], ВыходныеПараметры[1], "ПодключаемоеОборудование"); {МодульУправляемогоПриложения(134)}: Результат = МенеджерОборудованияКлиент.ОбработатьСобытиеОтУстройства(ОписаниеСобытия, ОписаниеОшибки); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'Value': форма: Элемент имя: {http://v8.1c.ru/8.1/data/core}Value по причине: Ошибка при записи XDTO по причине: Текст XML содержит недопустимый символ в позиции 31 : 010461014312057021-Iw-=aKlHir4O91809392ZkbNK8jZ1boylW+ynImpc2D8BytE6CmrnJnZAB75YRHpGrl1PollwaBo6sjn0s/OHndbEo5Vg7tMUkxw77O86A== |
|||
6
timurhv
13.10.21
✎
14:41
|
(5) разделители (91809392...) нельзя передавать с клиента на сервер. Код марки должен быть закодирован на клиенте, передан на сервер и там раскодирован.
Либо смотреть в сторону обновления УТ, либо сделать как в РМК обрабатывается сканирование. |
|||
7
lodger
13.10.21
✎
14:48
|
(5) вот тут бороли такую проблему
https://t.me/mark1c/45325 (6) УТ по виду номенклатуры определяет тип марки и применяет правила транспорта клиент->сервер. очевидно, определилось, что товар с обычным шк и самый дешевый транспорт это строка. |
|||
8
Newbie1c
13.10.21
✎
15:33
|
(7)
Попробовал пересохранить вид номенклатуры, перевыбрать в карточке - не помогает. Через консоль посмотрел, служебные реквизиты заполнены корректно. |
|||
9
Newbie1c
14.10.21
✎
06:53
|
Платформа на всякий. 1С:Предприятие 8.3 (8.3.17.1851)
Ковыряние в коде привело к следующему: При сканирование в Приобретении В обработке оповещения заходит в эту процедуру Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр)); КонецЕсли; КонецЕсли; И внутри валится на ОбработатьШтрихкодыСервер(СтруктураДействий,КэшированныеЗначения); При сканировании в РМК Если Источник = "ПодключаемоеОборудование" И ВводДоступен() И Не ТолькоПросмотр Тогда Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда ДанныеШтрихкодов = МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр); ОбработатьШтрихкоды(ДанныеШтрихкодов); КонецЕсли; КонецЕсли; По причине тогда, что ВводДоступен() = Ложь; Еще одно непонятное поведение. Сканирую марку в режиме отладки - ловлю обработку оповещения. Нажимаю F5 без дальнейших точек остановок. И строка в ТЧ не добавляется вообще. Перед ОбработатьШтрихкоды(ДанныеШтрихкодов); добавил Сообщалку с меткой. Не заходит. Т.е. процедура ОбработатьШтрихкоды не отрабатывает. Т.о. обработка данных штрихкода и добавление строки в ТЧ происходит в другом месте. Вопрос как найти это место? |
|||
10
lodger
14.10.21
✎
09:31
|
(9) значит не там искал.
(8) перечитал тот чат - оказывается это методолги 1с намудрили. позиция такая - ДМ надо считывать только в предназначенных для этого местах. в формах подбора марок, документах маркировки и в РМК. в остальных местах (где в общем-то и нет указания на марку) - считывание ДМ не работает. |
|||
11
lodger
14.10.21
✎
09:32
|
если не согласен - пиши расширение и продавай на нимфостарте, либо пиши в 1с и жди чуда.
|
|||
12
Newbie1c
15.10.21
✎
09:30
|
Еще вопрос: в настройках компоненты сканера поставил, чтобы тип данных был Base64 - штрихкоды перестали сканироваться в подбор.
Нужно ли в самом сканере менять, чтобы в кодировке Base64 отправлялось? Сканер Zebra DS2208. Если нужно, то как изменить? По умолчанию в компоненте стоял тип данных "строка". |
|||
13
lodger
15.10.21
✎
09:31
|
(12) в мануале к сканеру есть описание как переключать режимы.
|
|||
14
Salimbek
15.10.21
✎
12:08
|
(13) А для чего переключать сканер?
Суть того, что хотят сделать в (12) простая - у Драйвера сканера есть возможность отправлять данные в Base64. При этом сканер должен все считать в обычном режиме. И отправить в 1С-ку тоже должен все в обычном режиме без преобразований. Далее, драйвер эти полученные данные переводит в base64 и передает дальше в конфу. И, теоретически, конфа далее сама должна была увидеть, что прилетело Base64, декодировать эти данные и далее с ними работать. Но, в конфе от 1С (смотрел где-то в июле) обработки события "Base64" не было. Так что толку (сейчас) в этой настройке нет. |
|||
15
Salimbek
15.10.21
✎
12:52
|
+(14) Хотя... посмотрел сейчас еще раз (1С Розница 2.3.9.22)
В обработке ВнешнееСобытие формы обработки РМКУправляемыйРежим - Форма идет такой код: ДанныеСоСканераСтруктура = СобытияФормИСКлиент.ВнешнееСобытиеПреобразоватьДанныеСоСканераВСтруктуру( ЭтотОбъект, Источник, Событие, Данные); Если ДанныеСоСканераСтруктура = Неопределено Тогда Возврат; КонецЕсли; ОбработатьКодМаркировки(ДанныеСоСканераСтруктура); В процедуре ОбработатьКодМаркировки вызывается: ШтрихкодированиеИСКлиентСервер.ЗакодироватьШтрихкодДанныхBase64(ИсходныеДанные); И уже в этой процедуре есть проверка: Если Не ДанныеШтрихкода.Свойство("ФорматBase64") Или (ДанныеШтрихкода.Свойство("ФорматBase64") И ДанныеШтрихкода.ФорматBase64 = Ложь) Тогда ДанныеШтрихкода.Штрихкод = ШтрихкодВBase64(ДанныеШтрихкода.Штрихкод); ДанныеШтрихкода.Вставить("ФорматBase64", Истина); КонецЕсли; |
|||
16
Salimbek
15.10.21
✎
13:05
|
+(15) При этом в том же Списке Номенклатуры
Процедура ВнешнееСобытие(Источник, Событие, Данные) Если ВводДоступен() Тогда ПодключаемоеОборудованиеРТКлиент.ВнешнееСобытиеОборудования(ЭтотОбъект, Источник, Событие, Данные); КонецЕсли; КонецПроцедуры а в процедуре ВнешнееСобытиеОборудования в самом начале встречаем: // Заменяем спец.символы, которые потом не сможем передать на сервер. РазделительGS1 = МенеджерОборудованияМаркировкаКлиентСервер.РазделительGS1(); ЭкранированныйСимволGS1 = МенеджерОборудованияМаркировкаКлиентСервер.ЭкранированныйСимволGS1(); Данные = СтрЗаменить(Данные, РазделительGS1, ЭкранированныйСимволGS1); т.е. они НЕ делают проверку (а может к нам прилетел уже Base64 и ничего менять не надо, они сразу считают, что прилетает только чистая Строка) так что повторюсь, полноценной обработки того, что сканер настроен в режиме Base64 в конфах 1С-ки - нет. |
|||
17
Salimbek
15.10.21
✎
13:10
|
И еще, в (9)
"По причине тогда, что ВводДоступен() = Ложь;" так происходит когда вы пошагово все проверяете в отладчике, и, разумеется, форма в этот момент не активна. Чтобы зайти внутрь и отследить, что происходит, надо поставить точку останова внутри условия. Тогда увидите, что ВводДоступен() = Истина; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |