Имя: Пароль:
1C
1С v8
QR-коды: проблемы с хранением в регистре сведений
0 slafor
 
18.01.22
21:35
1С:Розница 2.3. Добавил расширение, в котором создал новые регистр сведений для хранения QR-кодов (чисто для печати, без связи со стандартными объектами).
Струкутуру РС сделал такую же, как в типовом регистре Штрихкодов - QRКод, Номенклатура и пр. - все в измерениях.
Сразу возникла проблема с загрузкой QR-кодов из текстового файла (для каждой номенклатуры дают отдельные текстовые файла со списком QR-кодов). Загружал коды в массив, потом пытался передать массив на сервер, и система показывала ошибку: "Текст XML содержит недопустимый символ в позиции 31 :
010468011226064421"H"?pTbPJkPhc91806392UNdKI8AF+rYzGs5CZAhPiLFG3mfssEYOjeJVcZ2UEqnquB/fQtzl3J/JUAsnLcVTKWIw0DZShUNHktKac8G0vw==". Проблему решил, как обычно, с помощью "костылей" (иначе не назовешь): с клиента на сервер переносил массив не текстовых строк, а двоичных данных текста этих строк (ПолучитьДвоичныеДанныеИзСтроки), а на сервере уже переделывал их обратно в текст (ПолучитьСтрокуИзДвоичныхДанных). Заработало.
1 Смотрящий
 
18.01.22
21:39
(0) Хвастаешься ?
2 slafor
 
18.01.22
21:39
(0) А теперь вот такая же проблема со списком регистра сведений. Как только пытаюсь открыть форму списка - опять такая же ошибка. Сделал свой запрос динамического списка, где вместо QR-кода написал просто строку "QRКод" ) - то есть он сам не выводится - в итоге в списке его нет, но опять появляется такая же ошибка, и в описании ошибки он опять пишется полностью: https://disk.yandex.ru/i/oaFHWI6IuJfiGA .

Как с этим можно справиться?

Уже возникла мысли не хранить текстовые данные в регистре, а сразу переделывать их в двоичные... Но дело в том, что мне потом искать нужно по этим значениям.
3 slafor
 
18.01.22
21:40
(1) Я просто случайно нажал не Enter, а Ctrl+Enter, сообщение раньше отправилось )
4 slafor
 
18.01.22
21:41
+(2) И опять эта злосчастная позиция 31...
5 Смотрящий
 
18.01.22
21:47
(3) У тебя не QR-код а Datamatrix
Вырежи https://helpf.pro/faq8/view/1044.html
Судя по (0) datamatrix до кучи упакован в base64. раскодируй
6 slafor
 
18.01.22
23:52
(5) А как ты понял, что он упакован в base64?
7 arsik
 
гуру
19.01.22
00:22
(6) Там же все на поверхности
https://i.imgur.com/u3Q1KMl.png
8 Сергиус
 
19.01.22
01:10
(7)В чем прикол? это в каждом base64 такое?
9 Salimbek
 
19.01.22
07:50
(0) Я у себя изначально решил хранить упакованное в base64, а для поиска можешь первую часть (010468011226064421"H"?pTbPJkPhc) хранить отдельно. И ее выводить в список и проч...
10 Смотрящий
 
19.01.22
08:37
(6) Опыт, о юный падаван ))
(9) Излишне это.
11 lodger
 
19.01.22
09:49
(2) полный вид датамарки со всеми символами не получится хранить в явном виде.
это всегда будет какой-то хеш(base64 хотя бы) или хранилищезначения. с упаковкой-распаковкой при записи-чтении. для просмотра и индексации можно вытащить отдельно GTIN и Serial = это ключ уникальности записи.
либо чикать непечатные символы перед записью, а для печати расставлять их обратно.
12 lodger
 
19.01.22
09:51
(11) ах да, забыл уточнить. если писать GTIN и Serial в строковые измерения, то в запросах всегда будет смешная коллизия вида <<Serial = SERiaL>>
13 Смотрящий
 
19.01.22
09:54
(11) Лучше резать, вставлять не обязательно - ну не получишь M+ в чеке, лишь бы по ЧЗ двигалось
14 slafor
 
19.01.22
18:50
В продолжение темы. Вот тут вроде описаны все стандарты кодов, применяемые в 1С: https://disk.yandex.ru/i/U4lv1Z9rtE2j4Q .

Как узнать, какой именно у них используется?
15 slafor
 
19.01.22
18:52
(5) Datamatix-ов, как оказалось, великое множество... Есть еще GS1, но не написано, что это Datamatrix. А хотели именно GS1 Datamatrix. И в Notepad++ тоже GS выводится...
16 slafor
 
20.01.22
05:44
(9) Спасибо, Salimbek, совет действительно хороший! Я почти так и сделал: в РС у меня в измерении первая часть кода, а в ресурсе - хранилище значений с полным кодом в двоичных данных. Теперь и поиск работает, и полную строку могу в любой момент получить.
Когда идет перенос полной строки с недопустимыми в XML символами между процедурами на сервере, никаких ошибок не возникает, ошибки были, когда эта же строка переносилась с клиента на сервер...
AdBlock убивает бесплатный контент. 1Сергей