![]() |
![]() |
![]() |
|
Приравнять строку "000000079" и "79" в запросе | ☑ | ||
---|---|---|---|---|
0
buhalter
18.08.10
✎
20:38
|
Доброго времени суток.
Коды справочника "Склады" представлены строкой 9 символов с лидирующими нулями. Поле ДБФ-файла представлено типом N(9). (Число) Для связи таблиц необходимо соединять строки по принципу "отбрасываем лидирующие нули", или "забиваем строку слева недостающими нулями". Другими словами, нужно в запросе определить, что код справочника "000000079" соответствует значению поля в ДБФ-файле "79". Повторюсь, это нужно делать в тексте ЗАПРОСА, а не при обработке его результата. Вариант, конечно, что-то вроде Склады.Код ПОДОБНО ""0000000"" + ""79"" , но кол-во лидирующих нулей - разное. Вопрос. Как это реализовать в тексте запроса? |
|||
2
smitru
18.08.10
✎
20:39
|
преобразуешь число в текст с лидирующими нулями - и никаких проблем для связи :-)
|
|||
3
nbIx
18.08.10
✎
20:42
|
Почему это надо делать в тексте запроса, как ты читаешь из ДБФ файла?
|
|||
4
buhalter
18.08.10
✎
20:42
|
(2) Например?
|
|||
5
buhalter
18.08.10
✎
20:43
|
(3) Выгружаю в ТЗ, ТЗ передаю как параметр, из параметра в запросе помещаю в ВТ
|
|||
6
shuhard
18.08.10
✎
20:44
|
(5) пробежаться по ТЗ и дописать лидирующие нули низяяяя ?
|
|||
7
nbIx
18.08.10
✎
20:45
|
ну так на этом этапе и преобразуй
|
|||
8
smitru
18.08.10
✎
20:47
|
(5) так и выгружай из дбф - через формат() который и преобразует в строку с лидирующими нулями...
|
|||
9
buhalter
18.08.10
✎
20:54
|
(6,7,8) ОК, хорошо, объясню. почему так нельзя
Выгружаемая из ДБФ инфа - суть элементы нескольких справочников: Склады, Контрагенты, Физлица, Сотрудники, Организации. Отделяются они друг от друга по значению нескольких полей. Моя задача - синхронизировать это безобразие со структурой справочников 1с, потом еще загрузить документооборот. Так вот длина кода у каждого из справочников разная, соответственно нулями добивать не могу. Сомневающемся могу запостить 8-10 экранов запросов с их обработкой. Повторю вопрос/задачу: есть ли возможность это реализовать в САМОМ ЗАПРОСЕ? |
|||
10
eklmn
гуру
18.08.10
✎
20:59
|
мля, народ совсем от запросов ошалел, там где можно написать 4 строки кода, они пишут запрос в 20 листов, до чего молодняк довели
|
|||
11
Fragster
гуру
18.08.10
✎
21:00
|
(10)+1111111
(9) на этапе засасывания из дбфа можно все преобразовать в нужный формат, даже второй раз по таблице не надо бежать |
|||
12
eklmn
гуру
18.08.10
✎
21:01
|
"Так вот длина кода у каждого из справочников разная" - у каких такихх справочников тебе еще надо? ты же сам сказал что только склады,
к тому же для преобразования номера в ТЗ похер какой длины и типа справочник |
|||
13
eklmn
гуру
18.08.10
✎
21:02
|
+можно вертеть как хочешь пока ТЗ "в руках"
|
|||
14
buhalter
18.08.10
✎
21:04
|
(10-13) Спасибо, уж как-то до этого и сам додумывался. Менять лишний раз входящие данные не особо хочется. Ладно, если по другому нельзя будем пинать ТЗ
|
|||
15
nbIx
18.08.10
✎
21:05
|
(10) Это все типовые так плохо влияют....
|
|||
16
shuhard
18.08.10
✎
21:14
|
(14) допили 1С
продублируй во всех справочниках код числовым реквизитом Код_dbf + подписка для поддержания целостности и будет тебе счастье при связывании в запросах |
|||
17
ASU_Diamond
18.08.10
✎
22:33
|
(16) тогда уж лучше допиливать РС
(14) На уровне засасывания из ДБФ можно сразу получать склад, а не закачивать код, а потом искать склад |
|||
18
Живой Ископаемый
18.08.10
✎
22:38
|
почему
Склады.Код ПОДОБНО ""0000000"" + ""79"" а не Склады.Код ПОДОБНО "%79" - я не уловил? |
|||
19
ASU_Diamond
18.08.10
✎
22:39
|
(18) 179
|
|||
20
Живой Ископаемый
18.08.10
✎
22:40
|
и то верно...
|
|||
21
ASU_Diamond
18.08.10
✎
22:41
|
а вполне возможно что можно и Выразить(Склады.Код КАК Число(15,0)), если быть увереным что в коде нет букв
|
|||
22
Fragster
гуру
18.08.10
✎
22:42
|
подобно %0000079
|
|||
23
Fragster
гуру
18.08.10
✎
22:43
|
не панацея, но прокатит во многих случаях
|
|||
24
Fragster
гуру
18.08.10
✎
22:43
|
типа 0 по минимальной длине кода добавлять, и процентик ставить
|
|||
25
smitru
18.08.10
✎
22:45
|
(24) Угу.. и тогда 79 будет совпадать с 11079 и с 234079...
|
|||
26
ASU_Diamond
18.08.10
✎
22:46
|
а в дбф код числовой тип, как параметр в ТЗ он то же наверное как число, как 1С в запросе отнесется к тому что пытаются сложить число и строку?
|
|||
27
ASU_Diamond
18.08.10
✎
22:47
|
Выразить(Склады.Код КАК Число(15,0))=ТЗизДБФ.Код
вот так не прокатит? |
|||
28
Fragster
гуру
18.08.10
✎
22:48
|
(25) думай. минимальная длина кода, допустим, 8. тогда у нас %0000079 получается
(26) пихай в ТЗ строк |
|||
29
Fragster
гуру
18.08.10
✎
22:48
|
(27) нет
|
|||
30
Garkin
19.08.10
✎
00:45
|
(0) Если цель оправдывает средства тогда примерно так:
ВЫБОР КОГДА ПОДСТРОКА(Банки.Код, 1, 8) = "00000000" ТОГДА ПОДСТРОКА(Банки.Код, 9, 1) ИНАЧЕ ВЫБОР КОГДА ПОДСТРОКА(Банки.Код, 1, 7) = "0000000" ТОГДА ПОДСТРОКА(Банки.Код, 8, 2) ИНАЧЕ ВЫБОР КОГДА ПОДСТРОКА(Банки.Код, 1, 6) = "000000" ТОГДА ПОДСТРОКА(Банки.Код, 7, 3) ИНАЧЕ ...... Банки.Код КОНЕЦ КОНЕЦ КОНЕЦ = &Код |
|||
31
buhalter
19.08.10
✎
01:20
|
(30) Зачем лишние "Выбор"?
Тогда уже ВЫБОР КОГДА ПОДСТРОКА(Банки.Код, 1, 8) = "00000000" ТОГДА ПОДСТРОКА(Банки.Код, 9, 1) КОГДА ПОДСТРОКА(Банки.Код, 1, 7) = "0000000" ТОГДА ПОДСТРОКА(Банки.Код, 8, 2) ...... ИНАЧЕ Банки.Код КОНЕЦ Но не кошерно все это... Думалось, можно на языке запросов подобное сотворить - оказывается, нет. Ладно. Придется в ТЗ нулями добивать. Еще вопрос - как бы в запросе что-то вроде СокрЛП() реализовать? |
|||
32
Ц_У
19.08.10
✎
01:54
|
я вот ту все не дочитал.. а нельзя пред помещением в запрос номера из ДБФ сделать следующее:
1. знаем номер ДБФ 2. знаем в каком справочнике искать 3. знаем длину кода справочника... КодДБФ = КолвоНулей(ДлинаКодаСправочника - ДлинаДБФКода)+КодДБФ? Или я просто сплю... |
|||
33
Abracadabra
19.08.10
✎
04:14
|
Надо все это дело просто пропустить через СКД, она с таблицами значений в качестве источников данных хорошо дружит, затем в глобальном модуле наваять экспортную функцию, которая будет приклеивать нули в тексте запроса СКД и делов-то.
Функция ЛидирующиеНули(ЧисловойНомер) Экспорт СтроковыйНомер = Строка(ЧисловойНомер); НужноНулей = 9 - СтрДлинна(СтроковыйНомер); НомерСНулями = ""; Для Сч = 1 По НужноНулей Цикл НомерСНулями = НомерСНулями + "0"; КонецЦикла; Возврат НомерСНулями + СтроковыйНомер; КонецФункции |
|||
34
Abracadabra
19.08.10
✎
04:21
|
+ а в запросе ляпнуть:
ЛИДИРУЮЩИЕНУЛИ(Таблица.Номер) КАК Номер |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |