Имя: Пароль:
1C
1С v8
Лидирующие нули в поле запроса
0 CepeLLlka
 
08.04.14
17:51
Ребята.. мне нужно привести такие номера как:

5
7
11
23
165

И т.д..
К
00005
00007
00011
00023
00165

В запросе всё это..

Есть варианты?
1 SUA
 
08.04.14
17:53
не больше 4х нулей? - ВЫБОР КОГДА
2 МойКодУныл
 
08.04.14
17:53
Прямо совсем в запросе?
Или подойдет ФОРМАТ поля в СКД с галочкой выводить лидирующие нули?
3 CepeLLlka
 
08.04.14
17:55
(1)Можно пример? Я что-то не догнал
4 Classic
 
08.04.14
17:57
Не взлетит
5 Heckfy
 
08.04.14
17:57
Запросом не взлетит. Запрос данные менять не умеет. :)
6 МихаилМ
 
08.04.14
18:00
(0)
обсуждалось. в поиск.
7 МихаилМ
 
08.04.14
18:00
(5)
взлетит.
8 singlych
 
08.04.14
18:01
(5) Запрос умеет подставлять нужные данные вместо ненужных)
9 Classic
 
08.04.14
18:04
(7)
Во временной таблице наколбасить все соответствия от 1 до 10000?
10 МихаилМ
 
08.04.14
18:06
(9)
нет.
в поиск.
11 Remark
 
08.04.14
18:28
(0) А правда, почему именно в запросе? Больше на форматирование при выводе подходит.
12 Wobland
 
08.04.14
18:32
прав("00000000"+номер, &ДлинаНомера). но перенумеровать документы так не выйдет
13 VRednaia
 
08.04.14
18:33
(12) видимо потом нужно по ним связывать другую таблицу
14 Wobland
 
08.04.14
18:34
(12) эк меня. это я с right'ом попутал? ;)
15 PR
 
08.04.14
18:38
(0) 5
7
11
23
165

И т.д..
К
00005
00007
00011
00023
00165

или

"5"
"7"
"11"
"23"
"165"

И т.д..
К
"00005"
"00007"
"00011"
"00023"
"00165"

Если первое, то очень геморно, через дикий выбор, если второе, то проще.
16 CepeLLlka
 
08.04.14
20:48
Второе..
17 CepeLLlka
 
09.04.14
08:07
В общем мне это нужно для соединения ВТ с другой таблицей..
18 Kookish
 
09.04.14
08:15
... а потом мы поедем к ТС и будем кусачками и паяльником выпытывать из него подробности задачи. В конце концов окажется, что все совсем не так.
19 1dvd
 
09.04.14
08:17
(17) в первой таблице эта колонка какой тип имеет? Какая длина?
20 CepeLLlka
 
09.04.14
08:26
(19)Это номера документов по выписке... В выписке они идут без лидирующих нулей, так как на печать и в коде BiPrint он без нулней..

А в программе номера нулями и префиксами...

Вот их мне и нужно сопоставить..

Движения по выписке за период я выбираю в ВТ и хочу присоединить ещё к ней найденные в базе платежки по другим реквизитам и самое главное по номеру.
21 1dvd
 
09.04.14
08:33
(20) номера какой длины?
22 CepeLLlka
 
09.04.14
08:36
15 символов, но меня интересует только правые 5.. там всегда цифры.. без префиксов
23 CepeLLlka
 
09.04.14
08:36
(21)Длина 5
24 Kookish
 
09.04.14
08:41
(20) Не проще из тех строк числа получать? Если так, то Гугл - "1С запрос строковые функции"
25 1dvd
 
09.04.14
08:44
(23) тогда сделай пять ВЫБОР КОГДА ...
для каждого символа по одному
26 1dvd
 
09.04.14
08:44
Используй ПОДСТРОКА(... чтобы определить символ в конкретной позиции
27 Wobland
 
09.04.14
08:44
(24) в запросе?
28 1dvd
 
09.04.14
08:45
(24) она всего одна
29 1dvd
 
09.04.14
08:48
а конкатенация строк в запросе делается точно также, как в самом языке 1С:
"А"+"Б" = "АБ"
30 Wobland
 
09.04.14
08:50
осталось только подобну помянуть
31 CepeLLlka
 
09.04.14
08:52
(29)Сейчас попробую..

По типа ВЫБОР КОГДА Номер ПОДОБНО("_") ТОГДА "0000"+Номер И т.д....
32 CepeLLlka
 
09.04.14
15:54
Ребята.. а подскажите ещё такое пожалуйста..

Из-за чего запрос может при левом соединении в итоговой таблице оставлять из левой таблицы только те строки, что дополнились соединением, а те что не дополнилились(С NULL) пропадают..


Мммм?
33 CepeLLlka
 
09.04.14
15:56
Вот запрос





ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Выписки.ДатаПроводки КАК ДатаПроводки,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА ВЫБОР
                    КОГДА Выписки.Номер ПОДОБНО "_"
                        ТОГДА "0000" + Выписки.Номер
                    КОГДА Выписки.Номер ПОДОБНО "__"
                        ТОГДА "000" + Выписки.Номер
                    КОГДА Выписки.Номер ПОДОБНО "___"
                        ТОГДА "00" + Выписки.Номер
                    КОГДА Выписки.Номер ПОДОБНО "____"
                        ТОГДА "0" + Выписки.Номер
                    КОГДА Выписки.Номер ПОДОБНО "_____"
                        ТОГДА Выписки.Номер
                КОНЕЦ
        ИНАЧЕ Выписки.Номер
    КОНЕЦ КАК Номер,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.Получатель
        ИНАЧЕ Выписки.Плательщик
    КОНЕЦ КАК Контрагент,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.ПолучательИНН
        ИНАЧЕ Выписки.ПлательщикИНН
    КОНЕЦ КАК КонтрагентИНН,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.ПолучательСчет
        ИНАЧЕ Выписки.ПлательщикСчет
    КОНЕЦ КАК КонтрагентСчет,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.Сумма
        ИНАЧЕ 0
    КОНЕЦ КАК Дебет,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет <> &Счет
            ТОГДА Выписки.Сумма
        ИНАЧЕ 0
    КОНЕЦ КАК Кредит,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.ПолучательБИК
        ИНАЧЕ Выписки.ПлательщикБИК
    КОНЕЦ КАК КонтрагентБанкБик,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.ПолучательБанк1
        ИНАЧЕ Выписки.ПлательщикБанк1
    КОНЕЦ КАК КонтрагентБанкИмя,
    ВЫБОР
        КОГДА Выписки.ПлательщикСчет = &Счет
            ТОГДА Выписки.ПолучательБанк2
        ИНАЧЕ Выписки.ПлательщикБанк2
    КОНЕЦ КАК КонтрагентБанкГород,
    Выписки.НазначениеПлатежа
ПОМЕСТИТЬ Выписки
ИЗ
    РегистрСведений.Выписки КАК Выписки
ГДЕ
    (Выписки.ПолучательСчет = &Счет
            ИЛИ Выписки.ПлательщикСчет = &Счет)
    И Выписки.ДатаПроводки МЕЖДУ &НачДата И &КонДата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Выписки.ДатаПроводки,
    Выписки.Номер,
    Выписки.Контрагент,
    Выписки.КонтрагентИНН,
    Выписки.КонтрагентСчет,
    Выписки.Дебет,
    Выписки.Кредит,
    //Выписки.КонтрагентБанкБик,
    //Выписки.КонтрагентБанкИмя,
    //Выписки.КонтрагентБанкГород,
    Выписки.НазначениеПлатежа,
    ПлатежноеПоручение.Ссылка
ИЗ
    Выписки КАК Выписки
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручение КАК ПлатежноеПоручение
        ПО (Выписки.Номер = ПОДСТРОКА(ПлатежноеПоручение.Номер, 10, 5))
ГДЕ
    ПлатежноеПоручение.Дата МЕЖДУ &НачДата И &КонДата
    И ПлатежноеПоручение.БанковскийСчет.НомерСчета = &Счет

УПОРЯДОЧИТЬ ПО
    Выписки.ДатаПроводки,
    Выписки.Кредит,
    Выписки.Дебет
34 Remark
 
09.04.14
15:59
(33) Когда есть условие по полям присоединенной таблицы, соединение становится внутренним. Как то так, поправьте если я ошибаюсь.
35 CepeLLlka
 
09.04.14
16:04
(34)Сейчас проверю..

То есть.. выход ещё одну ВТ замутитЬ?
36 CepeLLlka
 
09.04.14
16:05
(34)Да, вы правы
37 CepeLLlka
 
09.04.14
16:15
(34)На самом деле знающие люди поясняют..

Что соединение не становится внутренним..
Просто Условие - ГДЕ Накладывается уже после соединения..
38 Wobland
 
09.04.14
16:17
(34) оно остаётся левым, не путай тут молодёжь. и пофих, что результат может стать одинаков с внутренним
39 Remark
 
09.04.14
16:19
(38) Хрусталева "Язык запросов", кажется там я такую формулировку слышал, могу ошибаться.
40 Wobland
 
09.04.14
16:19
(39) могу Ициком в ответ потыкать ;)
41 Remark
 
09.04.14
16:20
(40) Да не, мне пофик... Суть главное ясна.
42 Remark
 
09.04.14
16:31
+ (39) точно, Хрусталева с. 119 "... так произошло потому, что при накладывании условия отбора на поле правой таблицы при левом соединении тип соединения становится внутренним". Но, конечно логичнее объяснение, что "ГДЕ" накладывается на результирующую выборку.
ПС: Это я просто, показать, что книжки читаю...
43 Remark
 
09.04.14
16:33
(35) Можно в условие связи добавить:

И (ПлатежноеПоручение.Дата МЕЖДУ &НачДата И &КонДата
    И ПлатежноеПоручение.БанковскийСчет.НомерСчета = &Счет)
44 Remark
 
09.04.14
16:34
(43) + Хотя не знаю, как это на производительности скажется по сравнению с ВТ.