Имя: Пароль:
1C
1C 7.7
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

А уже как запрос будет быстро и правильно работать, то можно его и в код запихивать.