Как с помощью запроса посчитать количество символов в реквизите?

1. katrineKA 04.04.11 05:56 Сейчас в теме
Как с помощью запроса посчитать количество символов в реквизите Артикул?
Пытаюсь сделать с помощью ПОДСТРОКА(,,,), но пока не получается.
Ответы
2. katrineKA 04.04.11 07:50 Сейчас в теме
Нужно отобрать позиции где Артикул 9-ти значный.

ВЫБРАТЬ
	ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки.Номенклатура,
	ПОДСТРОКА(ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки.Номенклатура.Артикул, 1, 9) КАК Артикул
ИЗ
	РегистрНакопления.ПартииМатериаловВЭксплуатацииБухгалтерскийУчет.Остатки(&Дата, СчетУчета В ИЕРАРХИИ (&СчетУчета)) КАК ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки
ГДЕ
	ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки.КоличествоОстаток <> 0
	И ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки.Номенклатура.Родитель В ИЕРАРХИИ(&группа)
	
АВТОУПОРЯДОЧИВАНИЕ
...Показать Скрыть

Делаю вот так, а он выбирает все артиклы, меньше 9-ти тоже.

Что не так?
3. Иван Т (Spartan) 304 04.04.11 10:10 Сейчас в теме
(1),(2) ПОДСТРОКА тут не поможет - данная функция просто получает подстроку заданной длины. Чтобы отобрать 9-символьные артикулы можно использовать конструкцию
// Между подчеркиваниями и % пробел 
|ГДЕ 
|    ПартииМатериаловВЭксплуатацииБухгалтерскийУчетОстатки.Номенклатура.Артикул ПОДОБНО ""_________ %""

символов подчеркивания 9 шт.
4. Иван Т (Spartan) 304 04.04.11 10:23 Сейчас в теме
+(3) Хотя в таком случае артикулы с меньшим количеством символов тоже попадут - вместо каждого подчеркивания лучше использовать [^ ] (то есть любой символ кроме пробела)... Подчеркивание катит, когда нужно отобрать строку с числом символов <= заданному. Ну и от длины реквизита еще зависит: если длина всего 9 символов то пробел и % в конце не нужны. Короче говоря, играйтесь с ПОДОБНО.
5. katrineKA 04.04.11 10:51 Сейчас в теме
Спасибо, что ответили.

Пробую сделать как вы писали, но
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет­Остатки.Номенклатура.Артикул ПОДОБНО ""_________ %""
при этом ничего не отбирает.
Если убрать пробел между "_ %" тогда отбирает 9-ти значные, но и 19 строк 7-ми значных попадает туда же.
С символом [^ ] таблица остается пустой.
6. katrineKA 04.04.11 10:55 Сейчас в теме
забыла уточнить, 19 строк 7-ми значных артикулов - это 9-ти значные символы, у них на конце два пробела.
Возможно я не правильно работаю с символом [^ ].
7. Ийон Тихий (cool.vlad4) 41 04.04.11 11:09 Сейчас в теме
(6) Наверное неправильно, а что вы пишете...надо вместо _ писать [^_](или [^ ]) В справке наберите кажется "спецсимвол" или "логические выражения в запросах" И эти артикулы в этом случае не попадут, если они тоже нужны концовку надо сделать как обычно "__"
8. katrineKA 04.04.11 11:14 Сейчас в теме
вот так? ... ПОДОБНО "[^_________]%" тогда выбираются все подряд строки.
9. Ийон Тихий (cool.vlad4) 41 04.04.11 11:17 Сейчас в теме
(8) НЭТ!!!...чтобы не было разночтений - ПОДОБНО "[^_][^_][^_][^_][^_][^_][^_][^_][^_]"
10. katrineKA 04.04.11 11:28 Сейчас в теме
ааа.... вот так сделала, тогда не попадают те значения у которых 7 цифр и 2 пробела на конце: ПОДОБНО "[^_][^_][^_][^_][^_][^_][^_][^_][^_ ]"

теперь работает как надо - СПАСИБО ВСЕМ БОЛЬШОЕ!
11. Ийон Тихий (cool.vlad4) 41 04.04.11 11:31 Сейчас в теме
Но вообще не советую злоупотреблять этим, нет в 1С реализации подсчета символов как ...(ну например mysql или mssql) или возможности такой реализации...так,что...иногда боком может выйти, или пробелы или количество символов или еще чего будет не то...
12. Иван Т (Spartan) 304 04.04.11 11:37 Сейчас в теме
(9) В данном случае именно так - судя по всему длина реквизита 9 символов...
(11) Согласен. Это лишь обходной маневр и конструкция работает для каждого конкретного случая... Если, например, артикул будет состоять из 2-х частей разделенных пробелом, то такие строки у нас выпадут из выборки. :(
13. Ийон Тихий (cool.vlad4) 41 04.04.11 11:44 Сейчас в теме
:D В порядке моего бреда интересна работоспособность конструкции
ГДЕ ВЫРАЗИТЬ(Номенклатура.Артикул КАК Строка(9)) <> ВЫРАЗИТЬ(Номенклатура.Артикул КАК Строка(8)) И
ВЫРАЗИТЬ(Номенклатура.Артикул КАК Строка(9)) = Номенклатура.Артикул ,
у меня она дает другие результаты нежели ПОДОБНО
14. katrineKA 04.04.11 12:07 Сейчас в теме
(11) Хорошо, учту :(

(13) Этим проверила способом, тот же результат :)
15. Михаил Ражиков (tango) 474 04.04.11 20:19 Сейчас в теме
16. ddis (rebuzx) 06.03.12 17:41 Сейчас в теме
Вот так можно сдлеать отдельную функцию с запросом со 155 подстроками, передавать в неё текст и получать нужную цифру. Порядок убывания подсрок в запросе обязателен.

ВЫБРАТЬ
	ПРЕДСТАВЛЕНИЕ(Номенклатура.Код) КАК Код,
	ВЫБОР
		КОГДА ПОДСТРОКА(Номенклатура.Код, 11, 11) <> ""
			ТОГДА 11
		КОГДА ПОДСТРОКА(Номенклатура.Код, 10, 10) <> ""
			ТОГДА 10
		КОГДА ПОДСТРОКА(Номенклатура.Код, 9, 9) <> ""
			ТОГДА 9
		КОГДА ПОДСТРОКА(Номенклатура.Код, 8, 8) <> ""
			ТОГДА 8
		КОГДА ПОДСТРОКА(Номенклатура.Код, 7, 7) <> ""
			ТОГДА 7
		КОГДА ПОДСТРОКА(Номенклатура.Код, 6, 6) <> ""
			ТОГДА 6
		КОГДА ПОДСТРОКА(Номенклатура.Код, 5, 5) <> ""
			ТОГДА 5
		КОГДА ПОДСТРОКА(Номенклатура.Код, 4, 4) <> ""
			ТОГДА 4
		КОГДА ПОДСТРОКА(Номенклатура.Код, 3, 3) <> ""
			ТОГДА 3
		КОГДА ПОДСТРОКА(Номенклатура.Код, 2, 2) <> ""
			ТОГДА 2
		КОГДА ПОДСТРОКА(Номенклатура.Код, 1, 1) <> ""
			ТОГДА 1
	КОНЕЦ КАК КоличествоСимволов
ИЗ
	Справочник.Номенклатура КАК Номенклатура
...Показать Скрыть
17. Сергей (ildarovich) 5109 23.02.15 14:52 Сейчас в теме
В статье Агрегатное суммирование строк в запросе – сложно, но не невозможно приведен пакетный запрос, в середине которого есть нужный запрос. Суть там в том, чтобы декартово соединить исходную таблицу с таблицей чисел и определить максимальное число, при котором подстрока, вырезающая символ с номером этого числа, не будет равна пустышке.
Вот код. Начало запроса посвящено вводу данных в запрос и формированию таблицы чисел 1-64 для вырезания по одному символа из анализируемых строк.
"ВЫБРАТЬ Дано.НомерСтроки, Дано.Строка ПОМЕСТИТЬ Дано ИЗ &Дано КАК Дано
	|;
	|ВЫБРАТЬ 0 КАК ё ПОМЕСТИТЬ Р0 ОБЪЕДИНИТЬ ВЫБРАТЬ 1
	|;
	|ВЫБРАТЬ 2 * Р1.ё + Р0.ё КАК ё ПОМЕСТИТЬ Р10 ИЗ Р0 КАК Р1, Р0 КАК Р0
	|;
	|ВЫБРАТЬ 4 * Р32.ё + Р10.ё КАК ё ПОМЕСТИТЬ Р3210 ИЗ Р10 КАК Р32, Р10 КАК Р10
	|;
	|ВЫБРАТЬ 16 * Р54.ё + Р3210.ё + 1 КАК ё ПОМЕСТИТЬ Р543210 ИЗ Р10 КАК Р54, Р3210 КАК Р3210
	|;
	|ВЫБРАТЬ
	|	НомерСтроки,
	|	Строка,
	|	МАКСИМУМ(ё) КАК ДлинаСтроки
	|ИЗ
	|	Дано,
	|	Р543210
	|ГДЕ
	|	ПОДСТРОКА(Строка, ё, 1) + ""!"" <> ""!""
	|
	|СГРУППИРОВАТЬ ПО
	|	НомерСтроки,
	|	Строка"
...Показать Скрыть
mikele_bes; 1vasia1; +2 Ответить
18. Valery Gagarkin (Gawws) 19.10.16 08:53 Сейчас в теме
Возникла сходная задача. Нужно было отобрать Артикул = 10 знакам.
Использовал ПОДОБНО.
Строка: ПродажиОбороты.Номенклатура.Артикул ПОДОБНО "__________ %" отбирает 10знаков и меньше.
А строка: ПродажиОбороты.Номенклатура.Артикул ПОДОБНО "_________ %" отбирает 9 и меньше.
Создал такое условие:
ГДЕ
ПродажиОбороты.Номенклатура.Артикул ПОДОБНО "__________ %"
И ПродажиОбороты.Номенклатура.Артикул НЕ ПОДОБНО "_________ %"

В результате в запрос попали только 10-значные артикулы.
alex-l19041; +1 Ответить
19. Александр Романько (romankoav) 05.05.17 19:03 Сейчас в теме
Если у вас длина превышает 64 символа то перед последним "выбрать" надо добавить под запрос

ВЫБРАТЬ
64 * Р3210.ЧислоЦо + Р543210.ЧислоЦо + 1 КАК ЧислоЦо
ПОМЕСТИТЬ Р76543210
ИЗ
Р3210 КАК Р3210,
Р543210 КАК Р543210
;
И потом в последнем выбрать соединение уже делать не к Р543210 а к Р76543210
20. Надежда (user730384) 05.05.17 20:00 Сейчас в теме
ВЫБРАТЬ
Дано.НомерСтроки,
Дано.Строка
ПОМЕСТИТЬ Дано
ИЗ
&Дано КАК Дано
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
0 КАК ё
ПОМЕСТИТЬ Р0

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
2 * Р1.ё + Р0.ё КАК ё
ПОМЕСТИТЬ Р10
ИЗ
Р0 КАК Р1,
Р0 КАК Р0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
4 * Р32.ё + Р10.ё КАК ё
ПОМЕСТИТЬ Р3210
ИЗ
Р10 КАК Р32,
Р10 КАК Р10
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
16 * Р54.ё + Р3210.ё + 1 КАК ё
ПОМЕСТИТЬ Р543210
ИЗ
Р10 КАК Р54,
Р3210 КАК Р3210
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
Дано.НомерСтроки,
Дано.Строка,
МАКСИМУМ(Р543210.ё) КАК ДлинаСтроки
ИЗ
Дано КАК Дано,
Р543210 КАК Р543210
ГДЕ
ПОДСТРОКА(Дано.Строка, Р543210.ё, 1) + «!» <> «!»

СГРУППИРОВАТЬ ПО
Дано.НомерСтроки,
Дано.Строка
...Показать Скрыть
21. Станислав C (sstas007) 112 15.06.17 09:21 Сейчас в теме
Доброго времени суток. Подскажите как в запросе отобрать из Номенклатура.Наименование в виде первые символы (произвольное количество) до определенной метки
Оставьте свое сообщение