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

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

и потом уже по этому значению можно фильтр сделать, или же сразу это условие не в поле в а "ГДЕ" в запросе написать вот так:
...

```1c
    ГДЕ ВЫБОР КОГДА Штрихкод = ПОДСТРОКА (Штрихкод,1, 13) ТОГДА Истина ИНАЧЕ Ложь КОНЕЦ
```

и в другие КОГДА можно еще условий на длину написать...
---
ГДЕ ВЫБОР КОГДА Штрихкод = ПОДСТРОКА (Штрихкод,1, 13) ТОГДА Истина ИНАЧЕ Ложь КОНЕЦ - обрезает 16-значные. Оставляет и 13, и 11-значные штрихкоды. В 11-значных штрихкодах пробелов нет.
---
ГДЕ ПОДСТРОКА(Реквизит, НужнаяДлина) <> Реквизит
---
ПОДСТРОКА(<Исходная строка>, <Начало>, <Длина>)
---
Обрежет и вернет
---
ПОДСТРОКА (Штрихкод,14, 1) = ""
---
Но выберет все штрихкоды с длиной от 1 до 13. А нужно только с длиной 13
---
как вариант, может и не самый оптимальный:

```1c
    ГДЕ
    ПОДСТРОКА(Штрихкод + "ЁЁЁЁЁЁЁЁЁЁ", 1, 14) ПОДОБНО "%Ё"
    И НЕ ПОДСТРОКА(Штрихкод + "ЁЁЁЁЁЁЁЁЁЁ", 1, 13) ПОДОБНО "%Ё"
```
---
ПОДСТРОКА (Штрихкод,14, 1) = "" И НЕ ПОДСТРОКА (Штрихкод,13, 1) = ""

или

ПОДСТРОКА (Штрихкод,13, 1) = ПОДСТРОКА (Штрихкод,13, 2)
---
```1c
    ГДЕ ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1, 13)
    И НЕ ШтрихкодыНоменклатуры.Штрихкод = ПОДСТРОКА(ШтрихкодыНоменклатуры.Штрихкод, 1,
```
---
Посмотрю, как это решение будет работать. Со строками там все неоднозначно....
---
еще так можно:

```1c
    ГДЕ Штрихкод = ПОДСТРОКА(Штрихкод + "Ё", 1, 13)
```
---
возможно у вас строка фиксированной длины, тогда и пустая она забивается пробелами.
тут можно попробовать:
ПОДСТРОКА (Штрихкод,1, 13) + " " = ПОДСТРОКА (Штрихкод + " ", 1, 18)
---
В запросах "" = " "
---
да, тогда верный вариант

ПОДСТРОКА(Штрихкод, 1 + &НужнаяДлина, &МаксимальнаяДлина) = "" И НЕ ПОДСТРОКА(Штрихкод, &НужнаяДлина, 1) = ""
---
Как вариант:
ПОДОБНО "_____________"
---
в полях с фиксированной длиной не сработает

```1c
    ВЫБРАТЬ
    "1234567890A " КАК Штрихкод
    ПОМЕСТИТЬ тмп

    ОБЪЕДИНИТЬ

    ВЫБРАТЬ
    "1234567890ABC "

    ОБЪЕДИНИТЬ

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

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

```1c
    ГДЕ Выбор
    Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(13)) = Наименование Тогда
    13
    Иначе
    Выбор
    Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(12)) = Наименование Тогда
    12
    Иначе
    0
    Конец
    Конец = 13 ИЛИ Выбор
    Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(13)) = Наименование Тогда
    13
    Иначе
    Выбор
    Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(12)) = Наименование Тогда
    12
    Иначе
    0
    Конец
    Конец = 12
```
---
С учетом https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/
можно уже

```1c
    ДлинаСтроки(СокрЛП(Наименование)) = 12
```
---
Ещё один вариант условия сравнения длин строк запроса:

```1c
    ГДЕ ПОДСТРОКА(ВЫРАЗИТЬ(Наименование КАК СТРОКА(999)), 0, 3) <> ПОДСТРОКА(ВЫРАЗИТЬ(Наименование КАК СТРОКА(1)), 0, 1)
```
---
Обсуждение по аналогичной теме: https://forum.mista.ru/topic.php?id=744806
---
.