Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Статья о использовании прямых запросов (число прочтений - 121733 )
Vaicartana
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 50
Местоположение: Far, Far Away...
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Статья о использовании прямых запросов
29. Мая 2006 :: 03:47
Печать  
Т.к. количество вопросов по прямым запросам (извиняюсь за каламбур) неуклонно растет, а в доке ВСЕ ЕЩЕ остается не исправленная статья, предлагаю свою версию статьи Acsenta в моей доработке.

ЗЫ: Уважаемые авторы, может таки включите это в документацию?

На подходе доработка статьи по ВТ. Примеров действительно мало.
ЗЫ: trdm, накидай мне чего нарыл, попробую систематизировать.
____________________________________
Обновил немного.
Дописал из документации описание виртуальных таблиц. А то в примерах ниче не понятно было...
« Последняя редакция: 21. Августа 2007 :: 05:00 - Vaicartana »  

mod_002.zip ( 117 KB | Загрузки )
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #1 - 29. Мая 2006 :: 04:21
Печать  
Годится!
Только в документации это есть, если иметь ввиду те *.chm которые уже скомпилированы и выложены.
Без твоих правок, разумеется...
  
Наверх
IP записан
 
Vaicartana
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 50
Местоположение: Far, Far Away...
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #2 - 29. Мая 2006 :: 07:28
Печать  
Дык, и я про то, что в доке есть. Только
1. там Acsent сделал несколько ошибок, которые пока не поправлены
2. нет работы с DBF
3. Тишина про запрос к ЖурналуРасчетов
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #3 - 29. Мая 2006 :: 07:31
Печать  
Да, Алексей хорошо доработал статью Acsent-а по работе с ДБФ и журналом расчетом.
Рекомендую Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #4 - 30. Мая 2006 :: 18:31
Печать  
Блин, опять перепечатывать ))))
Это у меня щас настольная брошюрка, в купе с килограммовой книгой по скулю.
  
Наверх
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #5 - 23. Июня 2006 :: 06:30
Печать  
Хорошая статья.
Была бы еще лучше, если из нее сделать две: отделить работу с DBF от SQL. И вообще, как мне кажется, направление DBF пока  остается в роли бедного родственника. Приходится по крупицам собирать информацию из разных источников. К примеру замену механизма "CASE-WhEN-THEN-END" на функцию "ICASE()" смог найти только после поисков на "Itland" и список можно продолжать до посинения.
  

Константин
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #6 - 23. Июня 2006 :: 09:11
Печать  
На ITLAND есть замечательные факушные ветки, их читать можно даже перед сном.
  
Наверх
ICQ  
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #7 - 23. Июня 2006 :: 10:05
Печать  
Согласен, но вроде бы как именно здесь официальный форум 1С++, поэтому именно здесь хочется увидеть максимум информации о 1С++ и о сем, что около.
  

Константин
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #8 - 23. Июня 2006 :: 10:44
Печать  
Цитата:
Хорошая статья.
Была бы еще лучше, если из нее сделать две: отделить работу с DBF от SQL.

Если ты напишешь такую статью - она будет прикреплена, не сомневайся.
  
Наверх
www  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #9 - 23. Июня 2006 :: 10:51
Печать  
fez писал(а) 23. Июня 2006 :: 10:44:
Цитата:
Хорошая статья.
Была бы еще лучше, если из нее сделать две: отделить работу с DBF от SQL.

Если ты напишешь такую статью - она будет прикреплена, не сомневайся.

Сразу пожелание к статье, увидеть побольше специфичных примеров по работе с драйвером FoxPro.
Увидел ICASE() и сразу заинтересовался... По скулю можно и книгу прочесть, а вот по драйверу инфы раз-два и опчедся...
  
Наверх
IP записан
 
КилоГрамм
Senior Member
****
Отсутствует


Таити, Таити...

Сообщений: 434
Зарегистрирован: 14. Июня 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #10 - 23. Июня 2006 :: 13:29
Печать  
Цитата:
Если ты напишешь такую статью - она будет прикреплена, не сомневайся

О, если бы я умел это делать так красиво...
  

Константин
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #11 - 26. Июня 2006 :: 03:55
Печать  
Цитата:
Согласен, но вроде бы как именно здесь официальный форум 1С++, поэтому именно здесь хочется увидеть максимум информации о 1С++ и о сем, что около.

Этот ресурс еще молодой, все документированные знания остались там. Посему, еще долго будут народ отправлять туда за чтением.
ЗЫ: можно конечно попробовать перенести что-то.
  
Наверх
ICQ  
IP записан
 
Vaicartana
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 50
Местоположение: Far, Far Away...
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #12 - 27. Июня 2006 :: 08:53
Печать  
Цитата:
Хорошая статья.
Была бы еще лучше, если из нее сделать две: отделить работу с DBF от SQL.

думается что это лишнее.
Если отделять одно от другого то получится просто две копии практически одного и тогоже.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #13 - 11. Октября 2006 :: 14:10
Печать  
Статья крайне хорошая и дополнения о базе ДБФ очень полезны. Я как раз сейчас оптимизирую одну ДБФ базу и это мне очень пригодилось. Но есть и некоторые неточности:

1) Подключение к базе. Там такой текст:
Цитата:
Для DBF версии рекомендуется использовать объект “ OLEDBData”(для версии 1С++ 2.0.0.0 и выше) следующим образом:
           База = СоздатьОбъект("OLEDBData");
           Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
           Рез = База.Соединение(Соединение);
           Запрос = База.СоздатьКоманду();

RS = СоздатьОбъект("ODBCRecordset");
SQL версия не требует дополнительной инструкции подключения к базе
//RS.УстБД1С();
ТекстЗапроса = "
|SELECT
|      Спр.Code as Код,
|      Спр.Descr as Наименование
|FROM
|      sc433 as Спр";

ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();


Для подключения к БД используется OLEDBData, а для выполнения запроса ODBCRecordset. Естественно, это не работает...

Плюс, строка подключения некорректная (хотя и работает). Например, строковые константы указаны неправильно (две кавычки в тексте 1С превращает в одну). Также в строке есть ненужные параметры. Вот про строку подключения из МСДН:

Цитата:
After the connection is open, you can query the value of ConnectionString to determine the data source evaluated.

A connection string includes the following attribute keywords and values:

Provider= cVFPOLEDBProvider


Specifies the Visual FoxPro OLE DB Provider (VFPOLEDB).
Data Source= cPath


Specifies the path to the Visual FoxPro database or a folder containing free tables. For example, c:\Microsoft Visual FoxPro\Samples\Data\Testdata.dbc
DSN= cDSNName


Specifies an existing ODBC DSN.
Mode= cMode


Specifies one of the following: Read, ReadWrite, Share Deny None (default), Share Deny Read, Share Deny Write, or Share Exclusive, which includes the previous two modes.
For a complete explanation of connection string syntax, see the Microsoft OLE DB 2.5 Programmer's Reference and SDK Guide.


Также есть неточность здесь:

Цитата:
И еще: в DBF версии в модуле проведения ЗАПРОСЫ НЕ РАБОТАЮТ! Т.к. при этом происходит начало транзакции и драйвер FoxPro не может ничего получить из базы.


На самом деле в модуле проведения запросы работают. Но есть тонкости: выбирать данные из регистра нужно ДО того, как в модуле проведения будет как-либо произведена запись в регистр. После записи в регистр 1С запрещает блокировать таблицу регистра и Fox не может из нее вытащить данные. Запись в регистр происходит, например, при выполнении ДвижениеПриходВыполнить и ПРИ УДАЛЕНИИ ДВИЖЕНИЙ перед перепроведением документа. Поэтому, чтобы можно было использовать запросы в модуле документа, нужно отключить автоматическое удаление движений в "Конфигураторе". Соответственно, при выборке остатков нужно из них, в определенных случаях, вычитать собственные неудаленные движения документа. После выборки данных из регистра удаляем движения документа самостоятельно и делаем проведение с использованием собранных прямым запросом данных.

Вообще, Fox не может вытащить данные потому, что пытается заблокировать таблицу перед чтением. Если 1С ее занимает, то блокировка не удается. Из-за этого, в частности, прямые запросы не работают, если пытаются вытащить данные из регистра, по которому в текущий момент проводится документ. Меня это сильно разозлило - ведь 1С спокойно формирует отчеты по регистрам в момент проведения документов. Немного поковырял драйвер OLE DB (vfpoledb.dll) и повырезал там вызовы функции LockFile. В результате, теперь прямые запросы работают, даже если в этот момент проводится документ. Вероятно, и запросы к регистру в модуле проведения будут работать после модификации самого регистра. Естественно, такой драйвер нельзя использовать для записи данных в таблицу ДБФ - можно обгадить базу.

Также этот патч решает потенциальную проблему: ведь Fox при выполнении запроса блокирует таблицу. Соответственно, если вдруг кто-то захочет провести документ по регистру, по которому формируется запрос, то его ждет облом. Что при этом будет с 1С - не знаю, но для 1С это явно будет нештатная ситуация. Возможно, такой патч - это аналог скульного NOLOCK'а для ДБФ.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Статья о использовании прямых запросов
Ответ #14 - 11. Октября 2006 :: 16:09
Печать  
Собственно, сам пропатченный файл:
http://uzhast.fatal.ru/vfpoledb/
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать