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

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

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

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

(13) Этим проверила способом, тот же результат :)
15. tango 506 04.04.11 20:19 Сейчас в теме
16. rebuzx 162 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 7850 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. Gawws 19.10.16 08:53 Сейчас в теме
Возникла сходная задача. Нужно было отобрать Артикул = 10 знакам.
Использовал ПОДОБНО.
Строка: ПродажиОбороты.Номенклатура.Артикул ПОДОБНО "__________ %" отбирает 10знаков и меньше.
А строка: ПродажиОбороты.Номенклатура.Артикул ПОДОБНО "_________ %" отбирает 9 и меньше.
Создал такое условие:
ГДЕ
ПродажиОбороты.Номенклатура.Артикул ПОДОБНО "__________ %"
И ПродажиОбороты.Номенклатура.Артикул НЕ ПОДОБНО "_________ %"

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

ВЫБРАТЬ
64 * Р3210.ЧислоЦо + Р543210.ЧислоЦо + 1 КАК ЧислоЦо
ПОМЕСТИТЬ Р76543210
ИЗ
Р3210 КАК Р3210,
Р543210 КАК Р543210
;
И потом в последнем выбрать соединение уже делать не к Р543210 а к Р76543210
SagittariusA; +1 Ответить
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. sstas007 116 15.06.17 09:21 Сейчас в теме
Доброго времени суток. Подскажите как в запросе отобрать из Номенклатура.Наименование в виде первые символы (произвольное количество) до определенной метки
22. Izmiaria 256 19.01.18 11:55 Сейчас в теме
Сделать отбор по количеству символов в запросе можно и используя ПОДСТРОКУ.
В примере отбор артикула из 10 произвольных символов:
ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул = ПОДСТРОКА(ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул, 1, 10)
	               |	И ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул <> ПОДСТРОКА(ОстаткиТоваровКомпанииОстатки.Номенклатура.Артикул, 1, 9)
23. janit 20 23.05.18 11:34 Сейчас в теме
Альтернативный запрос, менее производительный, чем у ildarovich, зато более понятный для новичков и с определением до 1000 символов.

ВЫБРАТЬ
	"ОуХмКакаяЖеДлинаУЭтойСтроки" КАК Строка
ПОМЕСТИТЬ Т0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	0 КАК Поле1
ПОМЕСТИТЬ Т1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	6

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	7

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	8

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	9
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Т2.Поле11 * 10 + Т1.Поле1 КАК Поле1
ПОМЕСТИТЬ Т3
ИЗ
	Т2 КАК Т2,
	Т1 КАК Т1
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Т0.Строка) КАК Строка,
	МАКСИМУМ(Т3.Поле1) КАК ДлинаСтроки
	ИЗ
	Т0 КАК Т0,
	Т3 КАК Т3
ГДЕ
	ПОДСТРОКА(Т0.Строка, Т3.Поле1, 1) <> ""
Показать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)