|
v7: 1sqlite пытаюсь внедрить, нужен FAQ | ☑ | ||
---|---|---|---|---|
0
evgpinsk_
02.11.19
✎
20:33
|
Не могу найти например синтаксис по SQL запросам в 1sqlite
Может кто-то даст? |
|||
1
ikea
02.11.19
✎
22:11
|
Алена даст)
|
|||
2
Ёпрст
02.11.19
✎
22:20
|
(0) als же есть и chm от создателя
|
|||
3
Ёпрст
02.11.19
✎
22:20
|
ну и форум 1cpp Никто не отменял
|
|||
4
Ёпрст
02.11.19
✎
22:24
|
https://snegopat.ru/1sqlite/index
последние доработанные версии на инфостарте валяются и тут тоже были выложены, в них более новый движок и поправлены методы + cte можно пользовать |
|||
5
Garykom
гуру
02.11.19
✎
22:33
|
Хочу 1С 7.7 переведенную на sqlite вместо dbf
|
|||
6
evgpinsk_
02.11.19
✎
23:22
|
(4) сам движок я скачал, и простейший запрос почтению справочника работает. Но не могу вкурить до конца сам синтаксис языка построения SQL запросов.
|
|||
7
evgpinsk_
02.11.19
✎
23:30
|
привык к класическому языку
SELECT колонка1, колонка2 ... FROM имя_таблицы; FROM teachers ORDER BY name; а в 1sqlite не понятно, как выбирают поля из справочника ? текст="SELECT |code Код, |id [Товар :Справочник.ТМЦ] |
|||
8
Sserj
03.11.19
✎
06:30
|
(7) А что собственно не понятно?
"SELECT |code Код, |id [Товар :Справочник.ТМЦ] code - поле в DBF с кодом. id - поле в DBF с ID объекта. [Товар :Справочник.ТМЦ] - алиас который обработает компонента перед отдачей в 1С увидит :Справочник.ТМЦ в псевдониме и типизирует к этому виду. При типиции соответсвенно вырежет эту часть из названия колонки, поэтому в результате у тебя будет просто Товар. |
|||
9
evgpinsk_
03.11.19
✎
09:48
|
(8) мне нужно выбрать в запрос ещё одно поле из справочника, например периодическую цену. какой синтаксис?
|
|||
10
Sserj
03.11.19
✎
09:59
|
(9) Системные поля задаются именами из DBF: ID, PARENTID - родитель, CODE - код, DESCR - наименование, ISFOLDER - признак группы, ISMARK - пометка удаления, PARENTEXT - владелец.
Реквизиты заданные в конфигураторе именами. select Товары.id as [Элемент :Справочник.Номенклатура] , Товары.descr as [Наименование] , Товары.Артикул as [Артикул] from Справочник_Номенклатура as Товары |
|||
11
Sserj
03.11.19
✎
10:01
|
(9) С периодическими элементами сложней, они не хранятся в таблице справочника.
Их нужно получаеть из файла константа. Т.е. вообще нужно сначала понять структуру хранения данных: http://www.script-coding.com/v77tables.html |
|||
12
Провинциальный 1сник
03.11.19
✎
10:08
|
(5) Зачем? Или нормальная двухзвенка, когда СУБД отделена от клиента. Или же файловая база, в которой dbf вполне неплохое решение для своих масштабов. А многогигибайтные базы на sqlite еще более проблемны, чем dbf, особенно с конкурентным доступом, как мы видим на примере нового журнала регистрации в восьмерке...
|
|||
13
Djelf
03.11.19
✎
10:59
|
(5) Так ведь была 1С 7.7 на sqlite https://web.archive.org/web/20170108063209/http://www.wirth.ru/forum/showtopic-2053/page-2#message-748
Эх... не доделал Wirth ее до ума... не доделал... |
|||
14
evgpinsk_
03.11.19
✎
15:46
|
(10) Пытаюсь наугад разобраться с синтаксисом - не получается
вот простой код: ЗагрузитьВнешнююКомпоненту("1sqlite.dll"); базаДанных = СоздатьОбъект("SQLiteBase"); базаДанных.Открыть(":memory:"); запрос.ВыполнитьЗапрос("create virtual table ФайлыПрайсов using dbeng(Справочник.ФайлыПрайсов)"); текст="SELECT |code Код, |ФайлыПрайсов.descr, |ФайлыПрайсов.КолонкаНаименованияТМЦ, |ФайлыПрайсов.путь, |ФайлыПрайсов.КолонкаВендер |FROM ФайлыПрайсов |WHERE ismark <> '*'"; тз=запрос.ВыполнитьЗапрос(текст); кс=тз.КоличествоСтрок(); таб.КоличествоСтрок(кс); таб.Заполнить(тз); |
|||
15
evgpinsk_
03.11.19
✎
15:48
|
По итогу в ТЗ всегда выводится только 3 колонки.
Хотя в запросе я пытаюсь получить 5 полей: http://prntscr.com/pru7kr |
|||
16
Sserj
03.11.19
✎
16:49
|
(14) С какой то там древней версии явно подключать таблицы не надо, они сами подключается при синтаксисе:
Справочник_ФайлыПрайсов или [Справочник.ФайлыПрайсов]. Попробуй элементарно: ЗагрузитьВнешнююКомпоненту("1sqlite.dll"); базаДанных = СоздатьОбъект("SQLiteBase"); базаДанных.Открыть(":memory:"); Запрос = базаДанных.НовыйЗапрос(); тз = Запрос.ВыполнитьЗапрос("select * from [Справочник.ФайлыПрайсов] LIMIT 10"); тз.ВыбратьСтроку(); |
|||
17
Sserj
03.11.19
✎
16:56
|
(15) Точно не помню но таб.Заполнить(тз) кажется не создает новые колонки, а только заполняет с одинаковыми названиями. Т.е. у тебя видимо Там изначально только с 3 колонками они и заполняются.
|
|||
18
evgpinsk_
03.11.19
✎
17:32
|
(16) выбор полей через * - работает
Но как выбрать явно поле? Например у меня в справочнике есть поле "Поставщик" типа Справочник.Контрагенты каковы синтаксис в Select выбора этого поля? |
|||
19
Djelf
03.11.19
✎
17:44
|
(18) ТаблицаОткуда.Поставщик [Поставщик $Справочник.Контрагенты]
|
|||
20
Sserj
03.11.19
✎
18:17
|
(18)
select Прайсы.Поставщик as [Поставщик $Справочник.Контрагенты] from [Справочник.ФайлыПрайсов] as Прайсы |
|||
21
evgpinsk_
03.11.19
✎
19:54
|
С этим разобрался.
А как добраться до справочника владельца? пример: есть справочник "ФайлыПрайсы" и есть подчинённый ему "ТоварыПоставщиковВПрайсах". делаю так: SELECT КодТовара, НаименованиеТовара, PARENTEXT [Прайс Справочник.ФайлыПрайсов] FROM ТоварыПоставщиковВПрайсах но запрос в 3м поле возвращает не понятное числовое значение: http://prntscr.com/prws52 |
|||
22
evgpinsk_
03.11.19
✎
19:57
|
(11) http://www.script-coding.com/v77tables.html#2.5.9.
По данной ссылке толковый Help, но как мне кажется, синтаксис SQL запросов там не для SQLiteBase |
|||
23
leshikkam
03.11.19
✎
22:10
|
Отдельно обращу внимание автора на наличие свежих сборок компоненты
https://cloud.mail.ru/public/9znr/ZJ6ULE9aR А также на наличие профильной ветки форума http://www.1cpp.ru/forum/YaBB.pl?num=1214205575 Ну и от себя рекомендую использовать в связке с классом ПрямойЗапрос http://www.1cpp.ru/forum/YaBB.pl?num=1273512019 |
|||
24
evgpinsk_
03.11.19
✎
22:46
|
(23) Всё это просматривал, много новой информации - пока сложновато.
А чем ПрямойЗапрос лучше? Быстрее? Начинал пробовать именно с него, но чтото не зашёл |
|||
25
Sserj
04.11.19
✎
01:29
|
(21) Для типизации колонки результата тип должен начинаться с $ или : у тебя этого знака в псевдониме нет:
[Прайс Справочник.ФайлыПрайсов] - нужно [Прайс $Справочник.ФайлыПрайсов] |
|||
26
Sserj
04.11.19
✎
01:35
|
(24) ПрямойЗапрос это просто большой парсер, который транслирует в синтаксис 1Sqlite (или в SQL если база на MSSQL). С ним проще писать запрсы на подобие восьмерочных. Для сравнения прошлый пример:
select Прайсы.Поставщик as [Поставщик $Справочник.Контрагенты] from [Справочник.ФайлыПрайсов] as Прайсы Через прямой запрос: ВЫБРАТЬ $Прайсы.Поставщик КАК КАК [Поставщик $Справочник.Контрагенты] ИЗ Справочник.ФайлыПрайсов КАК Прайсы Ну и конечно там масса плюшек типа виртуальных таблиц РегистрОстатки или очень удобные СрезПоследних и ПоследнееЗначение для получения переодических реквизитов. |
|||
27
Arbuz
04.11.19
✎
11:41
|
не, не. я так же как (0), но дошёл до того, что уже всё в основном понятно. Считаю, что лучше сначала освоить голый 1sqlite, и только потом переходить к классу ПрямойЗапрос, чтобы знать как оно там внутре устроено и работает. да и руками построенный и отлаженный запрос работает куда как быстрее и оптимальнее парсерного ПрямымЗапросом. к тому же сейчас sqlite умеет многое, что не было учтено при создании ПрямогоЗапроса.
|
|||
28
Salimbek
04.11.19
✎
13:30
|
+(27) Дополню для (0), что лучше отлаживать запросы сначала в консоли, типа 1sqlite.ert например отсюда: http://www.1cpp.ru/forum/YaBB.pl?num=1192855975/250#250
А уже как запрос будет быстро и правильно работать, то можно его и в код запихивать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |