Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: 1sqlite пытаюсь внедрить, нужен FAQ

v7: 1sqlite пытаюсь внедрить, нужен FAQ
Я
   evgpinsk_
 
02.11.19 - 20:33
Не могу найти например синтаксис по SQL запросам в 1sqlite
Может кто-то даст?
 
 
   ikea
 
1 - 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 можно пользовать
   Garykom
 
5 - 02.11.19 - 22:33
Хочу 1С 7.7 переведенную на sqlite вместо dbf
   evgpinsk_
 
6 - 02.11.19 - 23:22
(4) сам движок я скачал, и простейший запрос почтению справочника работает. Но не могу вкурить до конца сам синтаксис языка построения SQL запросов.
   evgpinsk_
 
7 - 02.11.19 - 23:30
привык к класическому языку
SELECT колонка1, колонка2 ...
FROM   имя_таблицы;
FROM teachers ORDER BY name;


а в 1sqlite не понятно, как выбирают поля из справочника ?
    текст="SELECT
        |code Код,
        |id [Товар :Справочник.ТМЦ]
   Sserj
 
8 - 03.11.19 - 06:30
(7) А что собственно не понятно?
"SELECT
|code Код,
|id [Товар :Справочник.ТМЦ]

code - поле в DBF с кодом.
id - поле в DBF с ID объекта.

[Товар :Справочник.ТМЦ] - алиас который обработает компонента перед отдачей в 1С увидит
:Справочник.ТМЦ в псевдониме и типизирует к этому виду. При типиции соответсвенно вырежет эту часть из названия колонки, поэтому в результате у тебя будет просто Товар.
   evgpinsk_
 
9 - 03.11.19 - 09:48
(8) мне нужно выбрать в запрос ещё одно поле из справочника, например периодическую цену. какой синтаксис?
   Sserj
 
10 - 03.11.19 - 09:59
(9) Системные поля задаются именами из DBF: ID, PARENTID - родитель, CODE - код, DESCR - наименование, ISFOLDER - признак группы, ISMARK - пометка удаления, PARENTEXT - владелец.
Реквизиты заданные в конфигураторе именами.

select
  Товары.id as [Элемент :Справочник.Номенклатура]
  , Товары.descr as [Наименование]
  , Товары.Артикул as [Артикул]
from
  Справочник_Номенклатура as Товары
   Sserj
 
11 - 03.11.19 - 10:01
(9) С периодическими элементами сложней, они не хранятся в таблице справочника.
Их нужно получаеть из файла константа. Т.е. вообще нужно сначала понять структуру хранения данных:
http://www.script-coding.com/v77tables.html
   Провинциальный 1сник
 
12 - 03.11.19 - 10:08
(5) Зачем? Или нормальная двухзвенка, когда СУБД отделена от клиента. Или же файловая база, в которой dbf вполне неплохое решение для своих масштабов. А многогигибайтные базы на sqlite еще более проблемны, чем dbf, особенно с конкурентным доступом, как мы видим на примере нового журнала регистрации в восьмерке...
   Djelf
 
13 - 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 ее до ума... не доделал...
   evgpinsk_
 
14 - 03.11.19 - 15:46
(10) Пытаюсь наугад разобраться с синтаксисом - не получается
вот простой код:
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
базаДанных = СоздатьОбъект("SQLiteBase");
базаДанных.Открыть(":memory:");
запрос.ВыполнитьЗапрос("create virtual table ФайлыПрайсов using dbeng(Справочник.ФайлыПрайсов)");

    текст="SELECT
        |code Код,
        |ФайлыПрайсов.descr,
        |ФайлыПрайсов.КолонкаНаименованияТМЦ,
        |ФайлыПрайсов.путь,
        |ФайлыПрайсов.КолонкаВендер
        |FROM ФайлыПрайсов
        |WHERE ismark <> '*'";
        тз=запрос.ВыполнитьЗапрос(текст);
        кс=тз.КоличествоСтрок();
        таб.КоличествоСтрок(кс);
        таб.Заполнить(тз);
   evgpinsk_
 
15 - 03.11.19 - 15:48
По итогу в ТЗ всегда выводится только 3 колонки.
Хотя в запросе я пытаюсь получить 5 полей:

http://prntscr.com/pru7kr
   Sserj
 
16 - 03.11.19 - 16:49
(14) С какой то там древней версии явно подключать таблицы не надо, они сами подключается при синтаксисе:
Справочник_ФайлыПрайсов или [Справочник.ФайлыПрайсов].

Попробуй элементарно:

ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
базаДанных = СоздатьОбъект("SQLiteBase");
базаДанных.Открыть(":memory:");
Запрос = базаДанных.НовыйЗапрос();
тз = Запрос.ВыполнитьЗапрос("select * from [Справочник.ФайлыПрайсов] LIMIT 10");
тз.ВыбратьСтроку();
   Sserj
 
17 - 03.11.19 - 16:56
(15) Точно не помню но таб.Заполнить(тз) кажется не создает новые колонки, а только заполняет с одинаковыми названиями. Т.е. у тебя видимо Там изначально только с 3 колонками они и заполняются.
   evgpinsk_
 
18 - 03.11.19 - 17:32
(16) выбор полей через * - работает
Но как выбрать явно поле?
Например у меня в справочнике есть поле "Поставщик" типа Справочник.Контрагенты

каковы синтаксис в Select
выбора этого поля?
   Djelf
 
19 - 03.11.19 - 17:44
(18) ТаблицаОткуда.Поставщик [Поставщик $Справочник.Контрагенты]
   Sserj
 
20 - 03.11.19 - 18:17
(18)

select
  Прайсы.Поставщик as [Поставщик $Справочник.Контрагенты]
from
  [Справочник.ФайлыПрайсов] as Прайсы
   evgpinsk_
 
21 - 03.11.19 - 19:54
С этим разобрался.

А как добраться до справочника владельца?
пример: есть справочник "ФайлыПрайсы" и есть подчинённый ему "ТоварыПоставщиковВПрайсах".

делаю так:
SELECT КодТовара, НаименованиеТовара, PARENTEXT [Прайс Справочник.ФайлыПрайсов] FROM ТоварыПоставщиковВПрайсах

но запрос в 3м поле возвращает не понятное числовое значение:
http://prntscr.com/prws52
   evgpinsk_
 
22 - 03.11.19 - 19:57
(11) http://www.script-coding.com/v77tables.html#2.5.9.
По данной ссылке толковый Help, но как мне кажется, синтаксис SQL запросов там не для SQLiteBase
   leshikkam
 
23 - 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
   evgpinsk_
 
24 - 03.11.19 - 22:46
(23) Всё это просматривал, много новой информации - пока сложновато.
А чем ПрямойЗапрос лучше? Быстрее?
Начинал пробовать именно с него, но чтото не зашёл
   Sserj
 
25 - 04.11.19 - 01:29
(21) Для типизации колонки результата тип должен начинаться с $ или : у тебя этого знака в псевдониме нет:
[Прайс Справочник.ФайлыПрайсов] - нужно [Прайс $Справочник.ФайлыПрайсов]
   Sserj
 
26 - 04.11.19 - 01:35
(24) ПрямойЗапрос это просто большой парсер, который транслирует в синтаксис 1Sqlite (или в SQL если база на MSSQL). С ним проще писать запрсы на подобие восьмерочных. Для сравнения прошлый пример:
select
  Прайсы.Поставщик as [Поставщик $Справочник.Контрагенты]
from

  [Справочник.ФайлыПрайсов] as Прайсы

Через прямой запрос:

ВЫБРАТЬ
  $Прайсы.Поставщик КАК КАК [Поставщик $Справочник.Контрагенты]
ИЗ 
  Справочник.ФайлыПрайсов КАК Прайсы

Ну и конечно там масса плюшек типа виртуальных таблиц РегистрОстатки или очень удобные СрезПоследних и ПоследнееЗначение для получения переодических реквизитов.
   Arbuz
 
27 - 04.11.19 - 11:41
не, не. я так же как (0), но дошёл до того, что уже всё в основном понятно. Считаю, что лучше сначала освоить голый 1sqlite, и только потом переходить к классу ПрямойЗапрос, чтобы знать как оно там внутре устроено и работает. да и руками построенный и отлаженный запрос работает куда как быстрее и оптимальнее парсерного ПрямымЗапросом. к тому же сейчас sqlite умеет многое, что не было учтено при создании ПрямогоЗапроса.
   Salimbek
 
28 - 04.11.19 - 13:30
+(27) Дополню для (0), что лучше отлаживать запросы сначала в консоли, типа 1sqlite.ert например отсюда: http://www.1cpp.ru/forum/YaBB.pl?num=1192855975/250#250

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.