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

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

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

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

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

Что не так?
5. katrineKA 04.04.11 10:51 Сейчас в теме
Спасибо, что ответили.

Пробую сделать как вы писали, но
| ПартииМатериаловВЭксплуатацииБухгалтерскийУчет­Остатки.Номенклатура.Артикул ПОДОБНО ""_________ %""
при этом ничего не отбирает.
Если убрать пробел между "_ %" тогда отбирает 9-ти значные, но и 19 строк 7-ми значных попадает туда же.
С символом [^ ] таблица остается пустой.
6. katrineKA 04.04.11 10:55 Сейчас в теме
забыла уточнить, 19 строк 7-ми значных артикулов - это 9-ти значные символы, у них на конце два пробела.
Возможно я не правильно работаю с символом [^ ].
7. Ийон Тихий (cool.vlad4) 42 04.04.11 11:09 Сейчас в теме
(6) Наверное неправильно, а что вы пишете...надо вместо _ писать [^_](или [^ ]) В справке наберите кажется "спецсимвол" или "логические выражения в запросах" И эти артикулы в этом случае не попадут, если они тоже нужны концовку надо сделать как обычно "__"
8. katrineKA 04.04.11 11:14 Сейчас в теме
вот так? ... ПОДОБНО "[^_________]%" тогда выбираются все подряд строки.
9. Ийон Тихий (cool.vlad4) 42 04.04.11 11:17 Сейчас в теме
(8) НЭТ!!!...чтобы не было разночтений - ПОДОБНО "[^_][^_][^_][^_][^_][^_][^_][^_][^_]"
pizhenkov; +1 Ответить
12. Иван Т (Spartan) 306 04.04.11 11:37 Сейчас в теме
(9) В данном случае именно так - судя по всему длина реквизита 9 символов...
(11) Согласен. Это лишь обходной маневр и конструкция работает для каждого конкретного случая... Если, например, артикул будет состоять из 2-х частей разделенных пробелом, то такие строки у нас выпадут из выборки. :(
13. Ийон Тихий (cool.vlad4) 42 04.04.11 11:44 Сейчас в теме
:D В порядке моего бреда интересна работоспособность конструкции
ГДЕ ВЫРАЗИТЬ(Номенклатура.Артикул КАК Строка(9)) <> ВЫРАЗИТЬ(Номенклатура.Артикул КАК Строка(8)) И
ВЫРАЗИТЬ(Номенклатура.Артикул КАК Строка(9)) = Номенклатура.Артикул ,
у меня она дает другие результаты нежели ПОДОБНО
10. katrineKA 04.04.11 11:28 Сейчас в теме
ааа.... вот так сделала, тогда не попадают те значения у которых 7 цифр и 2 пробела на конце: ПОДОБНО "[^_][^_][^_][^_][^_][^_][^_][^_][^_ ]"

теперь работает как надо - СПАСИБО ВСЕМ БОЛЬШОЕ!
11. Ийон Тихий (cool.vlad4) 42 04.04.11 11:31 Сейчас в теме
Но вообще не советую злоупотреблять этим, нет в 1С реализации подсчета символов как ...(ну например mysql или mssql) или возможности такой реализации...так,что...иногда боком может выйти, или пробелы или количество символов или еще чего будет не то...
14. katrineKA 04.04.11 12:07 Сейчас в теме
(11) Хорошо, учту :(

(13) Этим проверила способом, тот же результат :)
15. Михаил Ражиков (tango) 476 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) 5345 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 Сейчас в теме
Доброго времени суток. Подскажите как в запросе отобрать из Номенклатура.Наименование в виде первые символы (произвольное количество) до определенной метки
Оставьте свое сообщение