Имя: Пароль:
1C
1C 7.7
v7: Помогите написать запрос
0 sysadminlk
 
30.03.16
08:58
базаДанных = СоздатьОбъект("SQLiteBase");    
    базаДанных.Открыть(":memory:");
    запрос = базаДанных.НовыйЗапрос();
    запрос.ВыполнитьЗапрос("create virtual table РасходкиСтроки using dbeng(ДокументСтроки.Расходная)");

    текст="SELECT
    |IDDOC [Докум :Документ.Расходная],
    |Товар [Номенклатура :Справочник.Товар]
    |FROM РасходкиСтроки WHERE Товар LIKE '%3010%'";
    тз = СоздатьОбъект("ТаблицаЗначений");
    тз = запрос.ВыполнитьЗапрос(текст);


Возвращает пустую таблицу значений.
1 sysadminlk
 
30.03.16
09:35
:( никто не знает чтоли?
ключевые слова
SQLiteBase ДокументСтроки LIKE
2 ДенисЧ
 
30.03.16
09:36
Дык у тебя товар, наверняка, ссылка на справочник... А там в ИД нет 3010 ...
3 Mikeware
 
30.03.16
09:37
чо за жуть?
4 Ёпрст
 
гуру
30.03.16
09:38
(0)
вот это выкини WHERE Товар LIKE '%3010%'"; и будет тебе счастье
5 Ёпрст
 
гуру
30.03.16
09:39
ибо у товара нет id , которое содержит 3010
6 Mikeware
 
30.03.16
09:42
(5) а где вообще почитать про использование 1SQLite ?
7 sysadminlk
 
30.03.16
09:42
Товар это Справочник.Товар
мне нужно получить все документы где в товаре есть 3010
8 Ёпрст
 
гуру
30.03.16
09:42
мот тебе в наименовании или коде номенклатуры нужно 3010 искать ?
Или подставлять конкретный товар, лучше ?
9 ДенисЧ
 
30.03.16
09:42
(7) дык того... В товаре, наименовании, коде?
Соединяй со справочником и к нему уже условие ставь...
10 Ёпрст
 
гуру
30.03.16
09:42
(7) 3010 - это в Наименовании ?
11 Mikeware
 
30.03.16
09:42
(7) в товаре - где?
в коде, в наимеовании, в иде, в коробках с товаром?
12 sysadminlk
 
30.03.16
09:42
(8) конкретный товар не пойдет
13 Ёпрст
 
гуру
30.03.16
09:43
(6) на 1cpp была целая ветка
14 Ёпрст
 
гуру
30.03.16
09:43
но, на самом деле, хватит и описалово к компоненте 1sqlite
15 Ёпрст
 
гуру
30.03.16
09:43
+ есть форум самого sqlite
16 Ёпрст
 
гуру
30.03.16
09:44
точнее, оф сайт проекта
17 Mikeware
 
30.03.16
09:44
(13) по 1спп применимо только слово "была"...
как в анекдоте про нового русского
18 sysadminlk
 
30.03.16
09:44
(9) Нужно в наименовании товара искать 3010
19 Ёпрст
 
гуру
30.03.16
09:44
20 Ёпрст
 
гуру
30.03.16
09:44
21 sysadminlk
 
30.03.16
09:45
(9) Соединяй со справочником - эт как?
Товар [Номенклатура :Справочник.Товар] ?
22 Mikeware
 
30.03.16
09:46
(20) спасибо. там бывал, но не видел
23 sysadminlk
 
30.03.16
09:48
ТИпо того ?
24 sysadminlk
 
30.03.16
09:48
текст="
    |SELECT
    |    РсТов.IDDOC [Докум :Документ.Расходная],
    |    РсТов.Товар [Номенклатура :Справочник.Товар]      
    |FROM
    |    РасходкиСтроки AS РсТов,
    |    СпрТовар AS СпТов ON СпТов.DESCR = РсТов.Товар
    |    WHERE СпрТовар.DESCR LIKE '%3010%';
    |";
25 ДенисЧ
 
30.03.16
09:48
(21) inner join Справочник.Товары AS Товары ON HасходкиСтроки.Товар = Товары.ID
26 Ёпрст
 
гуру
30.03.16
09:50
(21)

Процедура Сформировать()
    
    
    ТекстЗапроса="
    |Select
    |Док.IDDOC [Докум :Документ.Расходная],
    |Док.Товар [Номенклатура :Справочник.Товар]
    |FROM [ДокументСтроки.Расходная] Док
    |inner join [Справочник.Товар] Спр on Спр.id = Док.Товар and Спр.descr like '%3010%'
    |";
    Попытка
        база = СоздатьОбъект("SQLiteBase");
    Исключение
        ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
        база = СоздатьОбъект("SQLiteBase");
    КонецПопытки;
    

    база.Открыть(":memory:");
    запрос = база.НовыйЗапрос();    
    
    ТЗ = запрос.ВыполнитьЗапрос(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
    
КонецПроцедуры // Сформировать
27 ДенисЧ
 
30.03.16
09:50
СпрТовар AS СпТов ON СпТов.DESCR = РсТов.Товар

Расстрелять.
28 Mikeware
 
30.03.16
09:50
(27) ну что ты такой злой? у тебя пап-мам был?©
может, просто повесить?
29 Ёпрст
 
гуру
30.03.16
09:51
(22) вообще, для дбф прикольная тема, но на  некоторых запросах проигрывает oledb в скорости, если последний правильно составлен и попадает в индекс
30 ДенисЧ
 
30.03.16
09:51
(28) Повесить. А потом расстрелять. На 10 лет без права переписки.
31 Mikeware
 
30.03.16
09:53
(30) устроил тут... тир, панимаэшь...
32 sysadminlk
 
30.03.16
09:55
(26) спасибо!
а что
    запрос.ВыполнитьЗапрос("create virtual table РасходкиСтроки using dbeng(ДокументСтроки.Расходная)");
не надо делать чтоли?
33 Ёпрст
 
гуру
30.03.16
09:56
(32) нет. Давно есть автоподключение таблиц
34 sysadminlk
 
30.03.16
09:57
а что лучше? (26) или

    |SELECT
    |    РсТов.IDDOC [Докум :Документ.Расходная],
    |    РсТов.Товар [Номенклатура :Справочник.Товар]      
    |FROM
    |    РасходкиСтроки AS РсТов,
    |    СпрТовар AS СпТов ON СпТов.id = РсТов.Товар
    |    WHERE СпТов.descr LIKE '%3010%';
    |";
35 Mikeware
 
30.03.16
09:59
(34) лучше - (26) . а еще лучше - (30)
Ты разберись, что делает (26) и что делает (34)
36 Mikeware
 
30.03.16
10:00
(34) кстати, в (20) лежит консоль, попробуй в ней.
37 sysadminlk
 
30.03.16
10:07
время выполнения несколько замеров


SELECT
    РсТов.IDDOC [Докум :Документ.Расходная],
    РсТов.Товар [Номенклатура :Справочник.Товар]      
FROM
    РасходкиСтроки AS РсТов,
    СпрТовар AS СпТов ON СпТов.id = РсТов.Товар
    WHERE СпТов.descr LIKE '%3010%';

2728

Select
    Док.IDDOC [Докум :Документ.Расходная],
    Док.Товар [Номенклатура :Справочник.Товар]
FROM
    [ДокументСтроки.Расходная] Док
    inner join [Справочник.Товар] Спр on Спр.id = Док.Товар and Спр.descr like '%3010%'

2676

SELECT
    РсТов.IDDOC [Докум :Документ.Расходная],
    РсТов.Товар [Номенклатура :Справочник.Товар]      
FROM
    РасходкиСтроки AS РсТов,
    СпрТовар AS СпТов ON СпТов.id = РсТов.Товар
    WHERE СпТов.descr LIKE '%3010%';

2691

Select
    Док.IDDOC [Докум :Документ.Расходная],
    Док.Товар [Номенклатура :Справочник.Товар]
FROM
    [ДокументСтроки.Расходная] Док
    inner join [Справочник.Товар] Спр on Спр.id = Док.Товар and Спр.descr like '%3010%'

2685

SELECT
    РсТов.IDDOC [Докум :Документ.Расходная],
    РсТов.Товар [Номенклатура :Справочник.Товар]      
FROM
    РасходкиСтроки AS РсТов,
    СпрТовар AS СпТов ON СпТов.id = РсТов.Товар
    WHERE СпТов.descr LIKE '%3010%';

2729

Select
    Док.IDDOC [Докум :Документ.Расходная],
    Док.Товар [Номенклатура :Справочник.Товар]
FROM
    [ДокументСтроки.Расходная] Док
    inner join [Справочник.Товар] Спр on Спр.id = Док.Товар and Спр.descr like '%3010%'

2693
38 sysadminlk
 
30.03.16
10:08
(26) получается быстрее )))
39 sysadminlk
 
30.03.16
10:13
Всем спасибо! думаю тема закрыта )