Имя: Пароль:
1C
1С v8
Честный знак и 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С:Рознице.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой