Имя: Пароль:
1C
1C 7.7
v7: Помогите плиз с SQLiteBase
, ,
0 sysadminlk
 
08.08.19
10:51
Перем базаДанных, запрос;

Процедура Сформировать()
    стрПоиска = "зии";    
    текст="SELECT *, id [ЭлБрака :Справочник.БракПриемка],
    |Контрагент [Контр :Справочник.Контрагенты]
    |FROM СпрБрак WHERE descr LIKE '%"+СокрЛП(стрПоиска)+"%'
    |INNER JOIN [Справочник.Контрагенты] Контр on СпрБрак.Контрагент = Контр.id and Контр.descr LIKE '%"+СокрЛП(стрПоиска)+"%'";
    тз=запрос.ВыполнитьЗапрос(текст);
    тз.выгрузить(тб);
КонецПроцедуры

Процедура ПриОткрытии()
    базаДанных = СоздатьОбъект("SQLiteBase");    
    базаДанных.Открыть(":memory:");
    запрос = базаДанных.НовыйЗапрос();
    запрос.ВыполнитьЗапрос("create virtual table СпрБрак using dbeng(Справочник.БракПриемка)");
КонецПроцедуры    // ПриОткрытии

Процедура ПриЗакрытии()
    базаДанных.Закрыть();    
КонецПроцедуры    // ПриЗакрытии
1 sysadminlk
 
08.08.19
10:53
в Справочник.БракПриемка есть реквизит Контрагент [Справочник.Контрагенты]
Как мне через SQLiteBase составить запрос чтоб поиск был по наименованию Справочник.БракПриемка и наименованию контрагента?
2 Djelf
 
08.08.19
11:24
(1) WHERE должно находится после джойнов.
3 palpetrovich
 
08.08.19
11:34
(0) и алиас добавить нелишним будет
WHERE СпрБрак.descr LIKE '%"+СокрЛП(стрПоиска)+"%'
4 sysadminlk
 
08.08.19
11:56
текст="SELECT * FROM СпрБрак
    |INNER JOIN СпрКонтр on СпрБрак.Контрагент = СпрКонтр AND СпрКонтр.descr LIKE '%"+СокрЛП(стрПоиска)+"%'
    |WHERE СпрБрак.descr LIKE '%"+СокрЛП(стрПоиска)+"%'";


тз=запрос.ВыполнитьЗапрос(текст);
{C:\ТЕСТТТТ.....ERT(10)}: no such column: СпрКонтр
5 sysadminlk
 
08.08.19
11:57
Перем базаДанных, запрос;

Процедура Сформировать()
    стрПоиска = "шам";
    
    текст="SELECT * FROM СпрБрак
    |INNER JOIN СпрКонтр on СпрБрак.Контрагент = СпрКонтр AND СпрКонтр.descr LIKE '%"+СокрЛП(стрПоиска)+"%'
    |WHERE СпрБрак.descr LIKE '%"+СокрЛП(стрПоиска)+"%'";
    
    тз=запрос.ВыполнитьЗапрос(текст);
    тз.выгрузить(тб);
КонецПроцедуры

Процедура ПриОткрытии()
    базаДанных = СоздатьОбъект("SQLiteBase");    
    базаДанных.Открыть(":memory:");
    запрос = базаДанных.НовыйЗапрос();
    запрос.ВыполнитьЗапрос("create virtual table СпрБрак using dbeng(Справочник.БракПриемка);");
    запрос.ВыполнитьЗапрос("create virtual table СпрКонтр using dbeng(Справочник.Контрагенты);");
КонецПроцедуры    // ПриОткрытии

Процедура ПриЗакрытии()
    базаДанных.Закрыть();    
КонецПроцедуры    // ПриЗакрытии
6 sysadminlk
 
08.08.19
11:58
текст="SELECT * FROM СпрБрак
    |INNER JOIN СпрКонтр on СпрБрак.Контрагент.id = СпрКонтр.id AND СпрКонтр.descr LIKE '%"+СокрЛП(стрПоиска)+"%'
    |WHERE СпрБрак.descr LIKE '%"+СокрЛП(стрПоиска)+"%'";



тз=запрос.ВыполнитьЗапрос(текст);
{C:\ТЕСТТТТ.....ERT(10)}: no such column: СпрБрак.Контрагент.id
7 Злопчинский
 
08.08.19
12:03
СпрБрак.Контрагент.id
вот у тебя с правочнике брака - есть ссылка на контргаента (спр.Контрагент)
я вот как-то с трудом представляю что у ССЫЛКИ есть реквизит id
8 Злопчинский
 
08.08.19
12:04
это не чорный запрос где платформа автоматом делает разыменование через точку
9 Злопчинский
 
08.08.19
12:04
напиши просто
СпрБрак.Контрагент = СпрКонтр.id
10 Ёпрст
 
08.08.19
12:08
(0)

>>>  запрос.ВыполнитьЗапрос("create virtual table СпрБрак using dbeng(Справочник.БракПриемка)");
это лишнее, давно есть автоподключение таблиц
11 sysadminlk
 
08.08.19
12:10
SELECT СпрБрак.* FROM СпрБрак
INNER JOIN СпрКонтр on СпрБрак.Контрагент = СпрКонтр.id AND СпрКонтр.descr LIKE '%шам%'
WHERE СпрБрак.descr LIKE '%шам%'


что-то ищет долго и ничего не находит
12 Ёпрст
 
08.08.19
12:13
(0)

   текст="
|БракПриемка.id [ЭлБрака :Справочник.БракПриемка],
|Контрагент [Контр :Справочник.Контрагенты]
|FROM [Справочник.БракПриемка] БракПриемка  
|INNER JOIN [Справочник.Контрагенты] Контр on БракПриемка.Контрагент = Контр.id and Контр.descr LIKE '%:стрПоиска%'
|WHERE БракПриемка.descr LIKE '%:стрПоиска%'
|";
запрос.Подставлять("стрПоиска","Вася");



";
13 sysadminlk
 
08.08.19
12:38
текст="SELECT СпрБрак.id [ЭлБрака :Справочник.БракПриемка] FROM СпрБрак
        |LEFT JOIN СпрКонтр on СпрБрак.Контрагент = СпрКонтр.id
        |WHERE СпрБрак.descr LIKE '%"+СокрЛП(стрПоиска)+"%' or СпрКонтр.descr LIKE '%"+СокрЛП(стрПоиска)+"%'";


оказывается так надо было )

спасибо (12)
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.