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

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 540 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
	КОНЕЦ КАК КоличествоСимволов
ИЗ
	Справочник.Номенклатура КАК Номенклатура
Показать
SLukin; +1
17. ildarovich 7861 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) <> ""
Показать
+
Внимание! Тема сдана в архив

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