Имя: Пароль:
1C
1C 7.7
v7: Прямые запросы 1С++ и 1Sqlite - есть разница?
0 Zhuravlik
 
11.09.12
17:34
Здравствуйте. Нашел вот вроде понятную литературу по запросам 1С++, но не пойму, применим ли такой синтаксис для 1SQlite?
Если там небольшие различия, то можно им пользоваться, если большие, то преимущество 1SQlite получается только из-за монопольного режима? Может ее вовсе тогда не использовать?
1 Zhuravlik
 
11.09.12
17:35
2 Aleksey
 
11.09.12
17:35
разрешаю
3 Aleksey
 
11.09.12
17:36
вроде бы еще различия что 1С++ работает со скулем, а 1Sqlite только с дбф
4 varelchik
 
11.09.12
17:38
(3) А вот туты вы неправы.
1Sqlite работает в обоих средах.
только возможности немного в SQL база урезаны.
5 Aleksey
 
11.09.12
17:41
(4) Про скуль здесь ни слово http://snegopat.ru/1sqlite/index
6 Zhuravlik
 
11.09.12
17:42
(3) "1С++ работает со скулем" - Возможно ошибаюсь, но по-моему как-то они в ДБФ работает... что-то попадалось на глаза в тырнете.
Но если это так, значит я по-любому ограничен SQlite?
(2)(4) А по части различий синтаксиса?
7 Zhuravlik
 
11.09.12
17:42
+У меня ДБФ
8 Mikeware
 
11.09.12
17:42
(6) он имел ввиду, что 1с++ работает и с файловой, и с сиквельной версиями
9 Mikeware
 
11.09.12
17:43
(7) главное - соотношение радиусов.
10 Aleksey
 
11.09.12
17:44
(6) Сажим так. Работает в том числе и со скулем
11 Zhuravlik
 
11.09.12
17:45
Обе компоненты реализуют запрос на T-SQL, верно? Т.е. структура запроса будет одинакова, там только по-разному объявляются переменные. Это я заметил))
А что еще?
12 Aleksey
 
11.09.12
17:46
вроде как с индексами проще в 1sqlite работать
13 Zhuravlik
 
11.09.12
17:48
(12) Я бы хотел на данный момент узнать именно о различиях синтаксиса, очень глобальные, или нет. Если ОЧЕНЬ большая разница, то я буду искать спопсобы использования 1С++ для ДБФ, если нет, продолжу с того на чем остановился, а потом буду думать как 1С++ перевести в SQlite.
14 Zhuravlik
 
11.09.12
17:51
(9) Поясните пожалуйста, недопонял, что значит "Соотношение радиусов"?
15 Aleksey
 
11.09.12
17:53
отношение радиуса кривизны рук к радиусу кривизны извилин
16 varelchik
 
11.09.12
17:56
(15) +1
17 Zhuravlik
 
11.09.12
17:58
(15)(16) Согласен, это главное)
Но мне надо понять по сабжу.
18 Humandra
 
11.09.12
18:04
Разница есть. Сами запросы - синтаксис почти одинаковый, но обращение к таблицам и параметрам запросов разное, и разное приведение к типам 1С.
И естественно, вызов самих методов разный (Запрос.УстановитьПараметр и Запрос.НеПомнюКакНоУстановитьПараметрПоДругому)

Сходство самих запросов большое.
например:
select Запрос.МоеПоле КАК МоеПоле
 from Справочник_МойСправочник Запрос

это 1c++

select Запрос.МоеПоле КАК МоеПоле
 from $Справочник.МойСправочник Запрос

это 1sqlite
19 Humandra
 
11.09.12
18:05
то есть наоборот, сорри. Первый - 1sqlite, второй - 1с++
20 Humandra
 
11.09.12
18:06
Но если база dbf-ная, то работа с dbf через 1С++ более муторная
Надо правильно строить условия where, чтобы в индекс попадало.

1sqlite - более снисходителен
21 al_zzz
 
11.09.12
18:06
А 1sqlite ВТ поддерживает?
22 Humandra
 
11.09.12
18:08
Я бы сказала - не временные таблицы, а таблицы в памяти. Поддерживает. Временные таблицы в терминах скуля - вроде нет, но я могу что-то не знать.
23 Humandra
 
11.09.12
18:12
(22) Я имею в виду, что не знаю, можно ли их полноценно индексировать и все такое, не так много с dbf базами работала, в основном с sql. Но создавать просто - точно было можно.
24 Zhuravlik
 
11.09.12
18:17
(18) Имел в виду именно текст запроса. В общем я видимо правильно понял, что различие только в объявлении переменных. Что в 1SQlite нет доллара, который нужен для метапарсера в 1С++ я уже знаю)) Буду копать  в сторону 1SQlite.
25 Zhuravlik
 
11.09.12
18:18
+ А можно подробнее про обращение к параметрам запроса? Это ведь именно методами реализуется?
26 Humandra
 
11.09.12
18:27
(25) Я имела в виду, что, к примеру, передача параметров в запрос - через методы с разным названием, но одним принципом.
И еще вот это: http://www.1cpp.ru/forum/YaBB.pl?num=1184317705
для dbf можно вроде как не извращаться с попаданием в индекс.

Но повторюсь, я глубоко с dbf не работала, только с sql.
27 Humandra
 
11.09.12
18:31
dbf - читай "1sqlite на dbf", sql - 1c++ на sql
28 Злопчинский
 
11.09.12
20:11
есть такой класс "ПрямойЗапрос" - он сам все внутри разгребает для разных типов баз. а сам запрос пишется на йазыке очень похожем на 8-ые запросы.
.
но я бы этот класс юзал с большим осторожностью - на форуме 1С++ есть ветка под него - там расписано кучу всего
29 zladenuw
 
12.09.12
10:18
(28) а почему с осторожностью ? вкратце ?
30 Salimbek
 
12.09.12
10:50
(24) Не только в объявлении переменных.
например:
-----------------------------------------
Также модуль dbeng при отображении таблиц создает в структуре подключаемой таблицы "виртуальные" поля индексов - это поле, которое для движка SQLite выглядит обычным полем, но данные, возвращаемые модулем dbeng для этого поля - есть ключ индекса текущей записи, с добавлением номера записи. Основных назначений таких полей два - использование как уникального ключа записи для использовании в ТабличномПоле 1С++, и оптимизация указания границ по составным полям. Имя таких полей формируется как:

idx_Поле1_Поле2_Итд

то есть префикс "idx", за которым через символы "_" перечислены названия поля, входящих в индекс
31 Ёпрст
 
12.09.12
10:56
(0) для дбф фокс выигрывает в скорости у скульлайта в разы, на некоторых запросах с group by.
И фокс запрос сто лет в обед умеет работать в монопольном режиме.

Просто на скульлайте есть несколько вещей, которые удобнее, чем запрос на оледб:

проще синтаксис, получение реквизитов из блоба автоматом, укладка тз ,поставщик данных для табличного поля и т.д.
32 Ёпрст
 
12.09.12
10:58
(22) не только в памяти, еще и в самой sqllite базе можно наплодить кучу табличек
33 zladenuw
 
12.09.12
11:00
(32) а что быстрее по чтению и обработке ?  sqllite  или 1с++
34 Ёпрст
 
12.09.12
11:06
(33) фокс конечно.
+ фокс умеет апдейтить/инсертить/удалять
+фокс умеет работать с удаленными базами.

Всё зависит от задачи, где какой и на чем писать.
На скульлайте писать проще, но не всегда он подходит
35 Ёпрст
 
12.09.12
11:07
+34 только уточнение - именно правильный запрос на фоксе, тот, который в индекс попадает.
36 zladenuw
 
12.09.12
11:11
(35) а какая вероятность не попадания в индекс ? я просто хочу построить запрос. который на основание переданных параметров будет строится, фильтроваться и т.д.
37 zladenuw
 
12.09.12
11:11
(36) я так понимаю при таком построение, это возможно.
38 Ёпрст
 
12.09.12
11:17
(36) смотришь план запроса и анализируешь
39 Ёпрст
 
12.09.12
11:17
а вероятность - 99%, если ни разу не писал
:)
40 zladenuw
 
12.09.12
11:20
(39) да я буду пробовать. сначала думал использовать sqllite. по советам. а теперь даже не знаю. просто хочу описать функцию и для дбф и для скл
41 Ёпрст
 
12.09.12
11:24
(40) на скульлайте напишешь быстрее, писать подоледб с пападанием в индекс - это уже скорее творчество.
42 zladenuw
 
12.09.12
11:28
(41) спасибо. ну пока до творчества далековато. начнем с малого.
43 Salimbek
 
12.09.12
11:32
(40) Если хочешь и дбф и скл - то посмотри на "ПрямойЗапрос", там как раз многое сделано, чтобы автоматом строить запрос под нужный тип базы. Т.е. пишешь запрос на "встроенном языке", а конкретный запрос к базе строит этот класс.
44 zladenuw
 
12.09.12
11:38
(43) я в дальнейшем хочу эту функцию в длл переместить. возможно что в дальнейшем будет по ОЛЕ к 7
45 zladenuw
 
12.09.12
11:46
а если в 1с таблица блокирована, ее можно прочитать с помощью прямого запроса или так же будет получена блокировка ?
46 zladenuw
 
12.09.12
11:56
(45) сморозил. но вот прочитал, если таблицу блокирнули прямым запрос то при вызове кем то этой таблицы для 1с будет не штатная ситуация, 1с вылетит или напишет что данные заняты транзакцией ?
47 Salimbek
 
12.09.12
11:57
(45) Если ты про класс "ПрямойЗапрос", то он работает через "родное" соединение. Т.е. работать будет и в монопольном режиме. Но если будешь стучаться по ОЛЕ, то тут точно не скажу.
48 Salimbek
 
12.09.12
11:59
(46) Обычно запросы таблицу не блокируют. Более того, сильно рекомендуют использовать для SQL хинт (nolock). И, я очень надеюсь, ты не собираешься писать в таблицы 1С-ки своими прямыми запросами?
49 zladenuw
 
12.09.12
12:00
(48) меня пока интересует чтение.
50 zladenuw
 
12.09.12
12:01
Немного поковырял драйвер OLE DB (vfpoledb.dll) и повырезал там вызовы функции LockFile. В результате, теперь прямые запросы работают, даже если в этот момент проводится документ. Вероятно, и запросы к регистру в модуле проведения будут работать после модификации самого регистра. Естественно, такой драйвер нельзя использовать для записи данных в таблицу ДБФ - можно обгадить базу.

ужас :).
51 zladenuw
 
12.09.12
12:03
единственное что не радует. что немного есть отличия в конструкции где .
между дбф и скл в прямых запросах.
52 zladenuw
 
12.09.12
12:05
(48) получается что прямым запросом. я могу записать данные, если даже таблица была блокирована. что будет тогда ? слетят индексы для этой таблицы ? или не кто не пробовал :)
53 zladenuw
 
12.09.12
12:07
ушел читать буквари :). спасибо за советы.
54 Mikeware
 
12.09.12
12:07
(53) с языка снял...
55 Salimbek
 
12.09.12
12:09
(52) Каким таким прямым запросом  (просто под это можно много всего засунуть, хотелось бы понимать, что в эти слова вкладываешь ты)?
И, если таблица блокирована, ты ничего записать не сможешь. А если можешь писать, значит таблица неблокирована.
56 Ёпрст
 
12.09.12
12:12
(50) достаточно сделать было
Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')");
57 Ёпрст
 
12.09.12
12:12
(52) фоксом лучше не инсёртить табличку - там отличный индекс от 1с-ного.
58 zladenuw
 
12.09.12
12:13
(56,57) спасибо
59 Ёпрст
 
12.09.12
12:15
+57 опосля инсёрта, придётся индексировать средствами 1с..
:(
60 zladenuw
 
12.09.12
12:18
мда я в шоке

Читать Спр Клиенты Чистый 1с            88688    48585    61218    60481
Читать Спр Клиенты Чистый 1с  и запрос    82709    83404    93758    67381
Читать Спр Клиенты Прямые запросы+ооп    85336    84249    96806    92191
Читать Спр Клиенты  Прямые запросы    715    702    782    794

1.Вечером справочник когда никто не работает
2.Вечером справочник монопольно когда никто не работает
3.днем справочник
4.днем справочник монопольно


Записать Спр Клиенты Чистый 1с            1193249    990438    1482353    1461707
Записать БыстрыйСправочникКлиенты    66799    59296    94154    128949
               
Кратко о базе. В базе есть справочник Клиенты.                
Этот справочник содержит 61922 клиента. Элемент справочника Клиенты содержит 57 реквизитов,                
один из них периодический с очень редким изменением.                
1с база  - sql. В момент всех тестов с 1с базой работал только я один, но эта база                
установлена на рабочем сервере где круться довольно интенсивно еще несколько 1с sql баз.                
Замер скорости делался днем когда сервер был нагружен другими sql базами и вечером                
когда не было никакой нагрузки дополнительной на sql сервер.
61 zladenuw
 
12.09.12
12:19
не думал что во столько раз чтение быстрее....
62 Ёпрст
 
12.09.12
12:22
текст запроса покажи
63 Ёпрст
 
12.09.12
12:22
+есть ли там хинт (nolock) ?
64 zladenuw
 
12.09.12
12:31
копи паст отсюда http://www.1cpp.ru/forum/YaBB.pl?num=1152519272
я пока еще не пробовал. у меня есть бд там 100к контрагентов и 100к тмц. вот на нем буду. позже если надо будет скину отладку времени выполнения