Имя: Пароль:
1C
 
Как в запросе получить форматированную строку из номера?
,
0 Stim
 
17.11.15
19:00
Есть номер документа типа
БП-0000012
00001023
и пр
Нужно в запросе получить из них значения:
"12"
"1023"

как это можно сделать?
в число я так понимаю, бесполезно номер переводить?
1 Горогуля
 
17.11.15
19:01
не надо заниматься хренью
2 spectre1978
 
17.11.15
19:05
в цикле пробежаться по номеру, если очередной символ находится в строке "0123456789", то добавить его к временной строке, иначе переход к следующему символу.
Затем вернуть Число (Временная строка).
3 Stimcool
 
17.11.15
19:20
Надо в запроосе
4 Stimcool
 
17.11.15
19:21
(1) не можешь - так и скажи!
5 User_Agronom
 
17.11.15
19:33
(0) Была подобная задача. Решал в три этапа:
1. Получал запросом список документов и необходимых результатов. Выгружал в ТЗ
2. По ТЗ мчался циклом меняя значения столбца "Номер"
3. Полученную ТЗ передавал в новый запрос, с окончательными танцами и плясками.

Может и можно извернутся как-то, но времени на разработку потребуется в разы больше.
6 spectre1978
 
17.11.15
19:42
(3) сорьки, не увидел. Тогда дохлый номер. Только как в (5)
7 DrShad
 
17.11.15
20:12
В поиск уже было преобразование строки в число запросом
8 RomanYS
 
17.11.15
20:14
(0) держи,

ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка,
    РеализацияТоваровУслуг.Номер
ПОМЕСТИТЬ Доки
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    1 КАК Ч
ПОМЕСТИТЬ Числа

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

ВЫБРАТЬ
    2

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

ВЫБРАТЬ
    3

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

ВЫБРАТЬ
    4

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

ВЫБРАТЬ
    5

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

ВЫБРАТЬ
    6

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

ВЫБРАТЬ
    7

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

ВЫБРАТЬ
    8

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

ВЫБРАТЬ
    9

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

ВЫБРАТЬ
    10

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

ВЫБРАТЬ
    11

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

ВЫБРАТЬ
    12

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

ВЫБРАТЬ
    13

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

ВЫБРАТЬ
    14

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

ВЫБРАТЬ
    15
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Доки.Ссылка,
    Доки.Номер,
    ПОДСТРОКА(Доки.Номер, МИНИМУМ(ЕСТЬNULL(Числа.Ч, 99)), 15) КАК НомерНачинаяСПервойЗначащейЦифры
ИЗ
    Доки КАК Доки
        ЛЕВОЕ СОЕДИНЕНИЕ Числа КАК Числа
        ПО (ПОДСТРОКА(Доки.Номер, Числа.Ч, 1) ПОДОБНО "[1-9]")

СГРУППИРОВАТЬ ПО
    Доки.Ссылка,
    Доки.Номер



остальным камнями(и другими каками) не кидаться, написано здесь и сейчас для проверки теоретической возможности :)
9 Горогуля
 
17.11.15
20:20
(3) убеди
10 Ildarovich
 
17.11.15
20:23
Вот статья на эту тему: http://catalog.mista.ru/public/170336/ . Там есть нужное решение. Статья называется Выразить строку как число и строку как дату в запросе .
11 Горогуля
 
17.11.15
20:25
(8) дада. БП0012-кака
12 RomanYS
 
17.11.15
20:28
(11) НомерНачинаяСПервойЗначащейЦифры = "12-кака"
Всё как заказывал ТС ))
13 Горогуля
 
17.11.15
20:30
(12) это где он так? ;)
14 DrShad
 
17.11.15
20:30
В (10) и такие беды решаются
15 Горогуля
 
17.11.15
20:31
БП00-00034 ещё могу. Но не буду - агроном просил
16 Горогуля
 
17.11.15
20:32
(15) радон, Роман
17 RomanYS
 
17.11.15
20:35
(13) его примеры попадут 100%, других он не давал
(15) БП00-00034 даст "34", не вижу никаких вопросов
(16) что такое "радон"?
18 ДенисЧ
 
17.11.15
20:35
Какую-то фигню вы тут несёте...
19 ДенисЧ
 
17.11.15
20:36
(17) "что такое "радон"?"
Газ такой...
20 Горогуля
 
17.11.15
20:37
(19) это пардон по мнению свихнувшейся самозамены планшета
21 RomanYS
 
17.11.15
20:37
(19) т.е. (17) пытается меня отравить?  :)
22 ДенисЧ
 
17.11.15
20:38
(21) Ты уже отравлен, не расстраивайся
23 Горогуля
 
17.11.15
20:39
(17) лениво думать.. БП01-0003 - это 3?
24 Горогуля
 
17.11.15
20:41
В общем, я за женщину для ТС. Хотя бы резиновую. А то хочет всякую ересь
25 DrShad
 
17.11.15
20:44
(24) ты бы (10) почитал для начала
26 RomanYS
 
17.11.15
20:44
(23) "1-0003"
(8) возвращает подстроку, начиная с первой значащей (не 0) цифры.
Понятно, что можно модифицировать, так чтобы получилось "3". Что хочет ТС в такой ситуации - неизвестно.

(24) он вроде не жаловался
27 Горогуля
 
17.11.15
20:46
(25) чукча не читатель
28 spectre1978
 
17.11.15
21:26
Языку запросов 1С явно не хватает процедурного расширения. Мож, в версии 9 платформы запилят? :)
29 DrShad
 
17.11.15
21:31
Всего там хватает
30 RomanYS
 
17.11.15
22:12
(29) мне тоже хватает
(28) не хватает функционала запросов - используй СКД, например
31 rsv
 
17.11.15
22:18
(0) Да в принципе в языке запросов 1С "в число я так понимаю, бесполезно номер переводить? " этого вы не сделаете без доп.надстройки СКД.  А так курить функции строковые  или иные СУБД где база живет
32 rsv
 
17.11.15
22:21
select convert( int,'00001023')   дает что нужно . Отсечь буквы - догадаетесь.
33 Stimcool
 
17.11.15
22:35
(9) ты не похож на английскую королеву
34 Stimcool
 
17.11.15
22:37
(8) спасибо, я завтра проверю

Зы. Эта штука нули в номере все не отсечет?
35 RomanYS
 
17.11.15
22:42
(34) прочитай (26)
36 Stim
 
18.11.15
09:58
(8) Спасибо, работает
37 Stim
 
18.11.15
10:02
зы. если кому интересно - стандартный клиент-банк в 1С работает так: Берет таблицу файла и соединяет её с таблицей платежек - по дате и по номеру счета контрагента.
Если в один день по контрагенту было несколько платежек, то на строку таблицы будет несколько таких платежек.

Потом в цикле он перебирает эти платежки, отсекает от номера документа все лишнее, находит/не находит платежку, соответствующую строке файла.


Проблема в том, что когда по одному контрагенту в день около 3 тыс платежек - получается выборка с 3000*3000 строк и клиент-банк медленно умирает
38 Горогуля
 
18.11.15
10:55
опять не убедил
39 Stim
 
18.11.15
11:03
(38) какой ты требовательный!
40 Stim
 
18.11.15
11:03
+ я начинаю видеть в тебе английскую королеву
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн