Выбрать в запросе строку определенной длины

1. user824140 11.02.21 17:10 Сейчас в теме
Есть СКД-отчет. В нем выбиралась номенклатура и прочие данные с ней связанные (продажи и т.д.). Теперь нужно вытягивать для номенклатуры еще и штрихкод (строка) из регистра. Но дело в том, что нужно отбирать штрихкоды (строки) определенной длины.

Как это реализовать в запросе?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
19. user824140 12.02.21 10:00 Сейчас в теме
ГДЕ
ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1, 13)
И НЕ ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1,12)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ksnik 580 11.02.21 17:19 Сейчас в теме
В запросе сделай вот такое поле:
ВЫБОР КОГДА Штрихкод = ПОДСТРОКА (Штрихкод,1, 13) ТОГДА Истина ИНАЧЕ Ложь КОНЕЦ КАК ДлинаШтрихкодаПодходит

и потом уже по этому значению можно фильтр сделать, или же сразу это условие не в поле в а "ГДЕ" в запросе написать вот так:
...
ГДЕ ВЫБОР КОГДА Штрихкод =  ПОДСТРОКА (Штрихкод,1, 13) ТОГДА Истина ИНАЧЕ Ложь КОНЕЦ

и в другие КОГДА можно еще условий на длину написать...
SlavaKron; +1 Ответить
6. user824140 12.02.21 08:13 Сейчас в теме
(2) ГДЕ ВЫБОР КОГДА Штрихкод = ПОДСТРОКА (Штрихкод,1, 13) ТОГДА Истина ИНАЧЕ Ложь КОНЕЦ - обрезает 16-значные. Оставляет и 13, и 11-значные штрихкоды. В 11-значных штрихкодах пробелов нет.
3. KonecEsli 1 11.02.21 17:21 Сейчас в теме
ГДЕ ПОДСТРОКА(Реквизит, НужнаяДлина) <> Реквизит
4. ksnik 580 11.02.21 17:25 Сейчас в теме
(3) ПОДСТРОКА(<Исходная строка>, <Начало>, <Длина>)
5. N0t_F0und 10 11.02.21 20:45 Сейчас в теме
7. PlatonStepan 38 12.02.21 08:33 Сейчас в теме
ПОДСТРОКА (Штрихкод,14, 1) = ""
8. user824140 12.02.21 08:39 Сейчас в теме
(7) Но выберет все штрихкоды с длиной от 1 до 13. А нужно только с длиной 13
9. spacecraft 12.02.21 08:42 Сейчас в теме
как вариант, может и не самый оптимальный:
ГДЕ
	ПОДСТРОКА(Штрихкод + "ЁЁЁЁЁЁЁЁЁЁ", 1, 14) ПОДОБНО "%Ё"
	И НЕ ПОДСТРОКА(Штрихкод + "ЁЁЁЁЁЁЁЁЁЁ", 1, 13) ПОДОБНО "%Ё"
10. PlatonStepan 38 12.02.21 08:42 Сейчас в теме
(8) ПОДСТРОКА (Штрихкод,14, 1) = "" И НЕ ПОДСТРОКА (Штрихкод,13, 1) = ""

или

ПОДСТРОКА (Штрихкод,13, 1) = ПОДСТРОКА (Штрихкод,13, 2)
11. user824140 12.02.21 08:47 Сейчас в теме
ГДЕ ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1, 13)
			И НЕ ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1,
12. user824140 12.02.21 08:48 Сейчас в теме
(11) Посмотрю, как это решение будет работать. Со строками там все неоднозначно....
13. spacecraft 12.02.21 08:52 Сейчас в теме
(12) еще так можно:
ГДЕ Штрихкод = ПОДСТРОКА(Штрихкод + "Ё", 1, 13)
14. PlatonStepan 38 12.02.21 08:54 Сейчас в теме
(12) возможно у вас строка фиксированной длины, тогда и пустая она забивается пробелами.
тут можно попробовать:
ПОДСТРОКА (Штрихкод,1, 13) + " " = ПОДСТРОКА (Штрихкод + " ", 1, 18)
15. SlavaKron 12.02.21 09:00 Сейчас в теме
16. PlatonStepan 38 12.02.21 09:24 Сейчас в теме +0.33 $m
(15)
да, тогда верный вариант

ПОДСТРОКА(Штрихкод, 1 + &НужнаяДлина, &МаксимальнаяДлина) = "" И НЕ ПОДСТРОКА(Штрихкод, &НужнаяДлина, 1) = ""
17. SlavaKron 12.02.21 09:33 Сейчас в теме
Как вариант:
ПОДОБНО "_____________"
18. PlatonStepan 38 12.02.21 09:53 Сейчас в теме
(17) в полях с фиксированной длиной не сработает
ВЫБРАТЬ
	"1234567890A    " КАК Штрихкод
ПОМЕСТИТЬ тмп

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	"1234567890ABC  "

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	"1234567890ABCDE"
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	тмп.Штрихкод КАК Штрихкод,
	Штрихкод ПОДОБНО "_____________" Соответствует1,
	ПОДСТРОКА(Штрихкод, 1 + 13, 100) = "" И НЕ ПОДСТРОКА(Штрихкод, 13, 1) = "" Соответствует2
ИЗ
	тмп КАК тмп
Показать
19. user824140 12.02.21 10:00 Сейчас в теме
ГДЕ
ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1, 13)
И НЕ ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1,12)
20. Obertone 74 15.12.21 15:31 Сейчас в теме
Для строки неограниченной длины есть такой вариант запроса:

ГДЕ Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(13)) = Наименование Тогда
13
Иначе
Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(12)) = Наименование Тогда
12
Иначе
0
Конец
Конец = 13 ИЛИ Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(13)) = Наименование Тогда
13
Иначе
Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(12)) = Наименование Тогда
12
Иначе
0
Конец
Конец = 12
Показать
21. Sashares 34 15.12.21 16:17 Сейчас в теме
С учетом https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/
можно уже
 ДлинаСтроки(СокрЛП(Наименование)) = 12
Obertone; +1 Ответить
22. Obertone 74 23.12.21 13:29 Сейчас в теме
Ещё один вариант условия сравнения длин строк запроса:

ГДЕ ПОДСТРОКА(ВЫРАЗИТЬ(Наименование КАК СТРОКА(999)), 0, 3) <> ПОДСТРОКА(ВЫРАЗИТЬ(Наименование КАК СТРОКА(1)), 0, 1)
23. Obertone 74 24.01.22 14:22 Сейчас в теме
24. Obertone 74 25.01.22 11:14 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот