|
Честный знак и 1С:Розница | ☑ | ||
---|---|---|---|---|
0
petya_
petrov_63 21.03.23
✎
15:18
|
Подскажите с решением.
У нас используется 1С:Розница 2.3. Переписнная. Используется не типовые механизмы - интерфейс документ "ЗаказПокупателя", а навернутая обработка /РабочийСтолКассира. В эту обработку подбираются товары согласно хотелок клиента. На основании данных из этой обработки заполняется документ заказПокупателя и потом уже идет по стандарту - заполнение чекаККМ и пробитие чека. Когда встала проблема маркированной воды я решил обойтись малой кровью и добавил в обработку еще одну табличную часть для хранения подобранных кодов маркировки. Но возникла проблема: при сканировании кода маркировки происходит передача строки кода с клиента на сервер для создания марки у товара, определенного по первым 14 символам кода маркировки. Но при передачи кода с клиента на сервер выдается ошибка "Текст XML содержит недопустимый символ в позиции 31 : 0104603934000755215muScj(sG'qJi93Ao09 Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: ". Сред на 31 символ выдает обычный символ, а вот на 32 идет непечатный символ с кодом 29. В связи с этим у меня вопрос: могу ли я выкинуть этот "вредный" символ из кода или у меня тогда уже касса начнет вредничать на нарушение структуры кода маркировки? И если это символ важный, то каким образом тогда он обработан типовой конфой? Как обойти ошибку передачи контекста? До момента передачи кода маркировки на кассу для передачи в ОФД просто тупо вырезать этот символ, а при формировании чека ККМ доставлять, чтобы не нарушать шаблон кода маркировки? |
|||
1
p-soft
21.03.23
✎
15:53
|
типичное решение - кодировать строку для передачи, например base64
|
|||
2
petya_
petrov_63 21.03.23
✎
16:05
|
(1) кодировать этот какая функция? Для чайников можно?
|
|||
3
petya_
petrov_63 21.03.23
✎
16:10
|
(1) если речь про мет од кодироватьстроку то он доступен только на сервере,а как мне на клиенте "скрыть" вредный символ 29?
|
|||
4
p-soft
21.03.23
✎
16:24
|
(2)
Функция Base64ВСтроку(СтрокаВBase64) ДвоичныеДанные = Base64Значение(СтрокаВBase64); Если ДвоичныеДанные = Неопределено Тогда Стр = СтрокаВBase64; Иначе Стр = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные); КонецЕсли; Возврат Стр; КонецФункции Функция СтрокаВBase64(Стр) ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Стр); СтрBase64 = Base64Строка(ДвоичныеДанныеСтроки); СтрBase64 = СтрЗаменить(СтрBase64, Символы.ПС, ""); СтрBase64 = СтрЗаменить(СтрBase64, Символы.ВК, ""); Возврат СтрBase64; КонецФункции |
|||
5
p-soft
21.03.23
✎
16:25
|
(3) все везде доступно
|
|||
6
petya_
petrov_63 21.03.23
✎
17:27
|
(5) не фига, все также
Текст XML содержит недопустимый символ в позиции 31 : 0104603934000755215muScj(sG'qJi93Ao09 {Обработка.БИС_РабочийСтол1.Форма.ФормаМенеджера.Форма(3076)}:ШК = СтрокаВBase64(ШтрихКодТовара); {Обработка.БИС_РабочийСтол1.Форма.ФормаМенеджера.Форма(3162)}:ОбработатьШтрихКод(Данные); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. |
|||
7
p-soft
21.03.23
✎
17:33
|
(6) полный код нужен. не понятно, где клиент, где сервер тут.
сам шк откуда взялся? вот как он появился в событии - его оборачиваем и передаем на сервер |
|||
8
p-soft
21.03.23
✎
17:34
|
(7) СтрокаВBase64 на клиенте реализована?
|
|||
9
timurhv
21.03.23
✎
19:51
|
ШтрихкодированиеИСКлиентСервер.ШтрихкодВBase64
ШтрихкодированиеИСКлиентСервер.Base64ВШтрихкод |
|||
10
petya_
petrov_63 22.03.23
✎
10:00
|
(9)
Текст XML содержит недопустимый символ в позиции 31 : 0104603934000755215muScj(sG'qJi93Ao09 {Обработка.БИС_РабочийСтол1.Форма.ФормаМенеджера.Форма(3076)}:ШК = СтрокаВBase64(ШтрихКодТовара); {Обработка.БИС_РабочийСтол1.Форма.ФормаМенеджера.Форма(3162)}:ОбработатьШтрихКод(Данные); по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'param': форма: Элемент имя: {http://v8.1c.ru/8.2/managed-application/modules}param по причине: Ошибка при записи XDTO по причине: Текст XML содержит недопустимый символ в позиции 31 : 0104603934000755215muScj(sG'qJi93Ao09 |
|||
11
petya_
petrov_63 22.03.23
✎
10:06
|
(9) Заработало.
|
|||
12
timurhv
22.03.23
✎
10:15
|
(11) Вообще, в (4) все тоже самое как и БСП. Видимо, клиент-сервер не так указали.
|
|||
13
petya_
petrov_63 22.03.23
✎
10:16
|
всем большое спасибо за помощь
|
|||
14
petya_
petrov_63 22.03.23
✎
12:56
|
Хм, возникла другая проблема. Записав в табличную часть непечатаемый символ теперь при открытии документа я получаю то же самое сообщение
Ошибка преобразования данных XDTO: Запись значения свойства '__content': форма: Текст имя: по причине: Ошибка при записи XDTO по причине: Текст XML содержит недопустимый символ в позиции 31 : 0104603934000755215muScj(sG'qJi93Ao09 Судя по-всему надо разбираться,что в этом случае записывается в документ в типовой рознице. Куда деется этот замечательный 32 символ. |
|||
15
petya_
petrov_63 22.03.23
✎
13:00
|
(14) уточнение: ошибка выводится при открытии любого документа заказпокупателя. Даже того, в котором заведомо нет злочастного символа. Перекарежило как базу то (
|
|||
16
p-soft
22.03.23
✎
13:03
|
(15) не перекорежило, все нормально. реквизит этот уберите из формы вообще, чтобы система его при открытии формы не читала
|
|||
17
petya_
petrov_63 22.03.23
✎
14:29
|
(16) А эта табличная часть и не выводится на форме.Только читается и записывается в табличную часть обработки, но вывода нигде нет. А по ошибке место вызова не опознать (
|
|||
18
p-soft
22.03.23
✎
14:39
|
(17) не совсем понятно, куда конкретно добавлена табличная часть, и где именно хранятся ее данные. если это просто реквизит формы, то результат закономерен.
|
|||
19
p-soft
22.03.23
✎
14:39
|
(18) кстати, а почему не хранить данные в зашифрованном виде?
|
|||
20
petya_
petrov_63 22.03.23
✎
15:05
|
(17) Она является табличной частью реквизита формы. Реквизит формы имеет тип ОбработкаОбъект.БИС_РабочийСтол1, а у этого объекта есть табличная часть АкцизныеМарки, куда и прогружается табличная часть документа при активизации формы.
(18) я не хранил в зашифрованном виде потому что не видел необходимости, но в настоящий момент без этого, судя по-всему, никуда не деться. |
|||
21
p-soft
22.03.23
✎
15:10
|
(20) ну понятно. вот такое забавное ограничение.
у меня в одном из проектов есть справочник серий, туда данные из ТСД сыпятся "как есть". в какой-то момент справочник стало невозможно открыть по той же самой причине) |
|||
22
petya_
petrov_63 22.03.23
✎
15:11
|
(17) А в форме документа ТЧ АкцизныеМарки не выводится на форме и не читается, поэтому не понятно почему при открытии документа ошибка.
|
|||
23
p-soft
22.03.23
✎
15:12
|
(22) значит читается
|
|||
24
petya_
petrov_63 22.03.23
✎
15:39
|
(23) Но ладно бы не открывался только тот документ в котором есть этот вредный символ. Но не открываются еще несколько документов в которых нет заведомо этого символа. И в принципе там символ то не напрямую в документе, даже не в табличной части документа, а по ссылке в реквизите справочника СправочникСсылка.ШтрихкодыУпаковокТоваров так что нипонятно (
|
|||
25
petya_
petrov_63 22.03.23
✎
15:51
|
(24) непроведенные и с пустыми табличными частями. По какому принципу они завязаны на тот документ, где есть по ссылкам непечатываемый вредный символ??
|
|||
26
petya_
petrov_63 22.03.23
✎
16:12
|
Раз на раз случайный выбор документа для вывода ошибки
Ошибка преобразования данных XDTO: Запись значения свойства '__content': форма: Текст имя: по причине: Ошибка при записи XDTO по причине: Текст XML содержит недопустимый символ в позиции 31 : 0104603934000755215muScj(sG'qJi93Ao09 |
|||
27
timurhv
22.03.23
✎
16:45
|
Мы в зашифрованном виде храним + краткое представление 01 и 21 разделителей.
(25) Ваша конфига, кто его знает? Может там запросом данные по документам получают и на клиент гонят. |
|||
28
petya_
petrov_63 22.03.23
✎
16:59
|
(27) не вижу ни капли логики в появлении этого сообщения об ошибке.
|
|||
29
petya_
petrov_63 23.03.23
✎
09:01
|
Кто-нибудь может сказать в каком виде хранится код маркировки воды в справочнике ШтрихкодыУпаковокТоваров в поле ЗначениеШтрихкода в том числе 32ой знак, который согласно формата должен быть 29 символом в 1С:Рознице.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |