Переключение на Главную Страницу Страницы: 1 ... 8 9 [10] 11 12 ... 60 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" (число прочтений - 305046 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #135 - 12. Августа 2009 :: 19:12
Печать  
В общем проведены некоторые работы по оптимизации времени подготовки запроса.
- Строка шаблона директив и функций языка подготавливается в момент создания класса.
- Проведена работа по оптимизации времени подготовки данной строки шаблона (спасибо тов. Djelf за набросок)
- Изменен шаблон паттерна для обработки директив языка запросов (спасибо тов. Djelf за измененный шаблон)

На небольшом запросе время с 12 мс упало до 6.
На большом запросе время с 91 мс упало до 25.
В общем и целом результат виден сразу.

Обновление брать в голове. Версию не менял все еще beta 1.03.001 от 15.08.09 г.

2 Djelf
2 прохода по "ПарсингКлючевыхСловЗапроса" пришлось оставить в виду того что есть вариант ошибчного парсинга когда два ключевых слова стоят друг за другом. Редкость но бывает. Да и запрос вида "ВЫБРАТЬ * ИЗ ...." не будет обрабатываться. Можно пошаманить, но так надежнее.
ПарсингКлючевыхСловЗапроса можно переместить в начало ПодготовитьТекстЗапроса? К сожалению тоже наврядли, я счас не могу точно гарантировать, но есть вероятность того что в каких то ВТ остались ключевые слова на русском, да и в целом я помню над порядком думал и остановился над этим вариантом.
И тестов как таковых у меня нет. Есть конфигурация вся писанная на этих запросах (DBF и SQL вариант стоит). Вот я туда ставлю и все ошибки если есть там 100% вылезут, достаточно просто ткнуть в пару справочников или отчетов. Но поделиться ею не могу к сожалению.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #136 - 12. Августа 2009 :: 22:10
Печать  
vandalsvq писал(а) 12. Августа 2009 :: 19:12:
2 прохода по "ПарсингКлючевыхСловЗапроса" пришлось оставить в виду того что есть вариант ошибчного парсинга когда два ключевых слова стоят друг за другом. Редкость но бывает. Да и запрос вида "ВЫБРАТЬ * ИЗ ...." не будет обрабатываться. Можно пошаманить, но так надежнее..

Ну что делится конфигурацией нельзя это понятно, но хоть кусок запроса можешь дать где мой регэсп обламывается?
2 ключевых подряд работают, "Выбрать*ИЗ Справочник.ЧтоТоТам" тоже..., хотя {1,1} лишнее, это я сильно загнул  Очень довольный видимо в процессе деградации к ms`овской реализации регэспа Круглые глаза
Ну не люблю я, не люблю! двух проходные алгоритмы  Подмигивание

Огромадное спасибо за класс. Давно хотел что-то такое под DBF (у меня wine /да, класс под wine с 1sqlite работает/, а selta+postrges не прижились, хотя куплена 1С sql) чтоб из 5 строчек кода полсотни само делало  Улыбка
  
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #137 - 13. Августа 2009 :: 03:05
Печать  
Счас попробовал убрать, все нормально, вчера при этом ругался. Конфигурация тоже работает нормально. Я еще потестирую и если все таки все нормально тогда уберу. Но пока пускай остается, разницы там на 1-2 мс из за повторного прохода.

Пы.сы нифига... ошибка есть если не делать два прохода. Буду думать над паттерном.
« Последняя редакция: 13. Августа 2009 :: 07:53 - vandalsvq »  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #138 - 13. Августа 2009 :: 12:48
Печать  
У тебя в конце паттерна стоит [^\wа-яё'""]+ но он захватывает в строке " ЛЕВОЕ СОЕДИНЕНИЕ " слово "ЛЕВОЕ " вместе с пробелом после слова, а слово "СОЕДИНЕНИЕ" остается без пробела в начале, т.е. не вылавливается и проходов требуется 2 штуки.
(?=[^\wа-яё]) проверяет пробел после "ЛЕВОЕ" но сам пробел не захватывает, в результате слово "СОЕДИНЕНИЕ" будет поймано на первом проходе.

пробелом я в данном случае называл [^\wа-яё] т.е. там еще звездочки скобки и т.п.
Если бы regexp от ms ?>= поддерживал можно было бы и от Submatches отказаться... но увы...
  
Наверх
www  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #139 - 13. Августа 2009 :: 16:39
Печать  
Djelf писал(а) 13. Августа 2009 :: 12:48:
У тебя в конце паттерна стоит [^\wа-яё'""]+ но он захватывает в строке " ЛЕВОЕ СОЕДИНЕНИЕ " слово "ЛЕВОЕ " вместе с пробелом после слова, а слово "СОЕДИНЕНИЕ" остается без пробела в начале, т.е. не вылавливается и проходов требуется 2 штуки.
(?=[^\wа-яё]) проверяет пробел после "ЛЕВОЕ" но сам пробел не захватывает, в результате слово "СОЕДИНЕНИЕ" будет поймано на первом проходе.

пробелом я в данном случае называл [^\wа-яё] т.е. там еще звездочки скобки и т.п.
Если бы regexp от ms ?>= поддерживал можно было бы и от Submatches отказаться... но увы...


Вроде так и написано... х.з. счас проверять лень. Потом в выходные может быть как раз сделаю.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #140 - 17. Августа 2009 :: 08:24
Печать  
Выложена версия 1.03.002 (beta)
- Некоторые изменения направленные на оптимизацию времени подготовки запросов
- Добавлена новая ВТ БИОборотыДтКт (см. Замечание в описании данной виртуальной таблицы)

Пы.сы. хотел бы прояснить кое-что. Статус "бета" вовсе не означает что КОП не работает, или работает не верно (что для меня в принципе одно и тоже). Данный статус присутствует исключительно из-за добавления виртуальных таблиц по бухгалтерской подсистеме. После того как будут проведены все работы по оптимизации статус "бета" будет снят. Но когда это будет... неизвестно.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #141 - 17. Августа 2009 :: 08:33
Печать  
Совершенно нескромная просьба: для тех, кто держит классы в МД - можно добавить в начало текста классов строчки
Код
Выбрать все
//#класс ПрямойЗапрос = КлсПрямойЗапрос@MD{};
и
//#класс ПрямойЗапрос.БухгалтерскиеТаблицы = КлсПрямойЗапросБухгалтерскиеТаблицы@MD{};
 


Тем, кто держит классы в файлах, это, по идее, никак не помешает.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #142 - 17. Августа 2009 :: 11:49
Печать  
2 classic
А может не надо???? Очень довольный

Впрочем, постараюсь не забыть при выпуске нового релиза Подмигивание
А второй класс "БухгалтерскиеТаблицы" в принципе вообще не нужен  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #143 - 17. Августа 2009 :: 13:38
Печать  
Для ДБФ базы функцию ЛЕВОЕ нужно превращать в substr, функции LEFT в 1sqlite нет.
Ну, а RIGHT(Стр, Х) заменять, соответственно, на SUBSTR(Стр, -Х).
Вообще, я так понимаю, ключевое слово ЛЕВОЕ задумывалось для соединений. А для подстрок логично придумать более другое ключевое слово, например, ЛЕВЫЙ, или ЛЕВ - тогда не будет разночтений.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #144 - 17. Августа 2009 :: 16:16
Печать  
classic писал(а) 17. Августа 2009 :: 13:38:
Для ДБФ базы функцию ЛЕВОЕ нужно превращать в substr, функции LEFT в 1sqlite нет.
Ну, а RIGHT(Стр, Х) заменять, соответственно, на SUBSTR(Стр, -Х).
Вообще, я так понимаю, ключевое слово ЛЕВОЕ задумывалось для соединений. А для подстрок логично придумать более другое ключевое слово, например, ЛЕВЫЙ, или ЛЕВ - тогда не будет разночтений.


Добавлю новые функции ЛЕВО(Строка,Количество), ПРАВО(Строка,Количество). Выложу позже.  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #145 - 18. Августа 2009 :: 04:33
Печать  
Всем добрый день!
В настоящее время класс функционирует без изменения конфигурации, что очень хорошо.
В связи с возникшей задачей использования механизма подобного Регистру Сведений я предлагаю в рамках этого класса обсудить реализацию Регистра Сведений в 7.7. После обсуждения я планирую реализовать данный механизм и реализовать ВТ в классе "Прямой запрос", если автор будет не против.
Я считаю что Регистр Сведений необходимо реализовать на базе справочника.
1) Справочник РегистрыСведений - в нем будет указан список Регистров сведений. Реквизитами этого справочника будут:
- Название Регистра Сведений;
- Периодичность (День, Месяц, Год, Документ)
- Признак ручного изменения РС.
Соответственно вопрос - имеет ли смысл в данном справочнике описывать структуру и типы измерения и ресурсов данного регистра?

2) Справочник РегистрСведений<ИмяРегистраСведений>.
<ИмяРегистраСведений> будет совпадать с наименованием из справочника РегистрыСведений для получения Периодичности по данному РС.
Реквизитами этого справочника будут:
Период - Тип указывается согласно периодичности из справочника РегистрыСведений;
из_<ИмяИзмерения> - измерение Регистра Сведений;
рес_<ИмяРесурса> - ресурс Регистра Сведений
Регистратор - в случае установки в справочнике РегистрыСведений ПризнакРучногоИзмененияРС = 0 в данном поле будет хранится регистратор - документ отражающий изменения в данном РС.
3) Виртуальные таблицы
- $РегистрСведений.<ИмяРегистра>.СрезПоследних
- $РегистрСведений.<ИмяРегистра>.ИсторияЗначений
Вот такие вот у меня мысли.
Очень надеюсь что разработчик данного класса будет не против внесения в класс функционала связанного с изменением конфигурации.
Разработку всех механизмов и подготовку документации в части этого функционала я беру на себя (ну конечно же с консультациями гуру) Улыбка
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #146 - 18. Августа 2009 :: 04:56
Печать  
leshik писал(а) 18. Августа 2009 :: 04:33:
Всем добрый день!
В настоящее время класс функционирует без изменения конфигурации, что очень хорошо.
В связи с возникшей задачей использования механизма подобного Регистру Сведений я предлагаю в рамках этого класса обсудить реализацию Регистра Сведений в 7.7. После обсуждения я планирую реализовать данный механизм и реализовать ВТ в классе "Прямой запрос", если автор будет не против.
Я считаю что Регистр Сведений необходимо реализовать на базе справочника.
1) Справочник РегистрыСведений - в нем будет указан список Регистров сведений. Реквизитами этого справочника будут:
- Название Регистра Сведений;
- Периодичность (День, Месяц, Год, Документ)
- Признак ручного изменения РС.
Соответственно вопрос - имеет ли смысл в данном справочнике описывать структуру и типы измерения и ресурсов данного регистра?

2) Справочник РегистрСведений<ИмяРегистраСведений>.
<ИмяРегистраСведений> будет совпадать с наименованием из справочника РегистрыСведений для получения Периодичности по данному РС.
Реквизитами этого справочника будут:
Период - Тип указывается согласно периодичности из справочника РегистрыСведений;
из_<ИмяИзмерения> - измерение Регистра Сведений;
рес_<ИмяРесурса> - ресурс Регистра Сведений
Регистратор - в случае установки в справочнике РегистрыСведений ПризнакРучногоИзмененияРС = 0 в данном поле будет хранится регистратор - документ отражающий изменения в данном РС.
3) Виртуальные таблицы
- $РегистрСведений.<ИмяРегистра>.СрезПоследних
- $РегистрСведений.<ИмяРегистра>.ИсторияЗначений
Вот такие вот у меня мысли.
Очень надеюсь что разработчик данного класса будет не против внесения в класс функционала связанного с изменением конфигурации.
Разработку всех механизмов и подготовку документации в части этого функционала я беру на себя (ну конечно же с консультациями гуру) Улыбка

ИХМО на базе справочника плохо потому что самому придеться
писать механизм удаления движений Регистра при отмене проведения, самому учитывать блокировки и УРБД.
Также реализация наверное получиться разной для dbf, sql.
Вроде все уже давно написано ( см. мою Регистр Сведений на v77)
береться регистр остатков с одними Реквизитами - вот тебе и РегистрСведений.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #147 - 18. Августа 2009 :: 05:00
Печать  
Цитата:
( см. мою Регистр Сведений на v77)

как то у меня выпало из жизни - ссылку не подскажешь?
А регистр остатков меня смущает открытием периода честно говоря
то есть на каждый месяц все равно будут копироваться записи с предыдущегою
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #148 - 18. Августа 2009 :: 05:08
Печать  
набери в яндексе
"Регистр Сведений на 1с v7"
например тут
http://www.erp-volga.com/hare/kb/article.76.html
Только заметил у меня привязка только документ
у тебя привязка Периодичность День,Месяц,Квартал что
моим способом легко не сделаешь так что наверное надо отталкиваться от твоей задачи.
также в этом году в разделе курилка обсуждалась моя и другие возможные реализации РегСведений.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #149 - 18. Августа 2009 :: 05:13
Печать  
Z1 писал(а) 18. Августа 2009 :: 05:08:
также в этом году в разделе курилка обсуждалась моя и другие возможные реализации РегСведений.

http://www.1cpp.ru/forum/YaBB.pl?num=1229071105/0#0
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 8 9 [10] 11 12 ... 60
ОтправитьПечать