Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

OData и коды маркировки

OData и коды маркировки
Я
   BaZZiL
 
20.07.21 - 12:52
Как найти код маркировки пользуясь интерфейсом OData?

Допустим, что (в БП 3.0) Справочник УпаковкиШтрихкодовТоваров доступен для OData.
Формирую запрос типа:

http://localhost/REST/odata/standard.odata/Catalog_ШтрихкодыУпаковокТоваров?$format=json&
$select=Ref_Key,Номенклатура,ЗначениеШтрихкода
&$filter=ЗначениеШтрихкода eq '(01)04660054763397(21)5kl+d.MajJbpx'

получаю ответ вида:

{
"odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Catalog_ШтрихкодыУпаковокТоваров",
"value": [{
"Ref_Key": "31c35f38-b52b-11ea-811d-00155d91fb02",
"ЗначениеШтрихкода": "(01)04660054763397(21)5kl+d.MajJbpx",
"Номенклатура@navigationLinkUrl": "Catalog_ШтрихкодыУпаковокТоваров(guid'31c35f38-b52b-11ea-811d-00155d91fb02')/Номенклатура"
}]
}

Но если попытаться указать значение штрихкода с "нехорошими символами", например, "(01)04660054763410(21)1;M&hMOQN_!eN" то все ломается:


{
"odata.error": {
"code": "0",
"message": {
"lang": "ru",
"value": "Параметр hMOQN_!eN' не поддерживается"
}
}
}

Забыть ОДату и ваять свой http сервис?
   ДенисЧ
 
1 - 20.07.21 - 12:55
   BaZZiL
 
2 - 20.07.21 - 13:12
%26 вместо & прокатывает)
   BaZZiL
 
3 - 20.07.21 - 13:36
Ссылка на инструкцию Честного знака об экранировании символов в кодах маркировки:

https://xn--80ajghhoc2aj1c8b.xn--p1ai/upload/iblock/d53/Рекомендуемыи%CC%86_алгоритм_экранирования_специальных_символов_в_коде_идентификации_ки.pdf
   BaZZiL
 
4 - 20.07.21 - 13:39
Может и в БСП есть функция ЭкранироватьСимволыВСтроке()?
   BaZZiL
 
5 - 21.07.21 - 12:17
Код маркировки может содержать апострофы

$filter=ЗначениеШтрихкода eq '(01)04610063990116(21)Un+trgcG'GtRq'

такой фильтр примет код '(01)04610063990116(21)Un+trgcG' отбросит последние 4 символа

И что делать?
   acht
 
6 - 21.07.21 - 12:22
(5) > И что делать?
Ты сам-то по своей ссылке из (3) ходил, или так - похвастаться принес?
   timurhv
 
7 - 21.07.21 - 12:37
(4) Может подойдет:
КодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>)
РаскодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>)

Онлайн можно проверить, например http://www.michurin.net/online-tools/url-escape-online.html
Регистры букв проверяются? А то марка может быть марка условно "аааА" и "ааАА".
   timurhv
 
8 - 21.07.21 - 12:46
(7) КодироватьСтроку("(01)04610063990116(21)Un+trgcG'GtRq", СпособКодированияСтроки.КодировкаURL)
Результат: %2801%2904610063990116%2821%29Un%2BtrgcG%27GtRq
   BaZZiL
 
9 - 21.07.21 - 12:47
Цитатко с ИТС:

17.2.1.5.2. $filter
При получении данных можно фильтровать данные. Для этого предназначен специальный язык, который позволяет описывать условия, каким должны соответствовать данные, которые возвращает стандартный интерфейс OData. Описание отбора начинается с ключевого слова $filter, после которого следует собственно условие.

eq

/Catalog_Города?$filter=Description eq 'Главный' Это сработает
/Catalog_Писатели?$filter=Фамилия eq 'О'Генри' а здесь сломается

Каким экранированием отделить апостроф в коде маркировки (тексте условия) от апострофов в синтаксической конструкции фильтра?
   ДенисЧ
 
10 - 21.07.21 - 12:49
/Catalog_Писатели?$filter=Фамилия eq 'О\'Генри'
Пробовал?
   acht
 
11 - 21.07.21 - 12:54
   acht
 
12 - 21.07.21 - 12:54
Example 3: valid OData URLs:
   BaZZiL
 
13 - 21.07.21 - 13:10
(7) (11)  Похоже, то что нужно

For example, one of these rules is that single quotes within string literals are represented as two consecutive single quotes.
Мог бы и догадаться)
   BaZZiL
 
14 - 21.07.21 - 13:44
Всё равно что-то идёт не так

с кодом маркировки (01)04610063990116(21)Un%2BtrgcG%27GtRq получаю ответ:

{
"odata.error": {
"code": "14",
"message": {
"lang": "ru",
"value": "Ошибка при разборе опции запроса $filter"
}
}
}

а когда добавляю второй апостроф (01)04610063990116(21)Un%2BtrgcG%27%27GtRq, то в ответ пустота:

{
"odata.metadata": "http://localhost/REST/odata/standard.odata/$metadata#Catalog_ШтрихкодыУпаковокТоваров",
"value": []
}
   timurhv
 
15 - 21.07.21 - 13:47
(14) так скобки тоже должны быть закодированы, разве нет?
   BaZZiL
 
16 - 21.07.21 - 13:50
Да, с кодированными скобками тоже самое.
   timurhv
 
17 - 21.07.21 - 13:52
(16) из (0) &$filter=ЗначениеШтрихкода eq '(01)04660054763397(21)5kl+d.MajJbpx'
'(01)04660054763397(21)5kl+d.MajJbpx' - вот это все должно быть закодировано, а не что внутри
   timurhv
 
18 - 21.07.21 - 13:53
(17) из (11)

Example 3: valid OData URLs:
http://host/service/People(%27O%27%27Neil%27)

Example 4: invalid OData URLs:
http://host/service/People('O%27Neil')
   BaZZiL
 
19 - 21.07.21 - 14:03
   BaZZiL
 
20 - 21.07.21 - 14:04
Движок форума тоже веселится от экранирования))

Список тем форума
 
Ошибка? Это не ошибка, это системная функция.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.