Имя: Пароль:
1C
 
Приравнять строку "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
+ а в запросе ляпнуть:

ЛИДИРУЮЩИЕНУЛИ(Таблица.Номер) КАК Номер