Переключение на Главную Страницу Страницы: 1 ... 36 37 [38] 39 40 ... 60 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" (число прочтений - 314182 )
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #555 - 31. Марта 2010 :: 10:03
Печать  
1. Исправил парсинг в методе СоздатьТаблицу
2. Исправил парсинг :Тип.<Идентификатор>
3. Перенес парсинг параметров перед ВТ

Собственно можно пробовать далее...

Файл ищите ниже...
« Последняя редакция: 01. Апреля 2010 :: 08:02 - vandalsvq »  

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


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #556 - 01. Апреля 2010 :: 06:52
Печать  
Спасибо огромное за проделанную работу по созданию данного класса.
Прошу внести следующие исправления в функцию класса Обороты_РегистрОбороты_DBF:
во всех определениях переменной "СтрПериодРегистрДвижения" добавить в конце строки код "AS Период" по аналогии с переменной "СтрПериодРегистрИтоги".
На данный момент, если запрос выполняется за один день, то таблица итогов не участвует, как результат перменная запроса "Период" неопределена.
  
Наверх
 
IP записан
 
Igor Nikolaenko
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #557 - 01. Апреля 2010 :: 07:27
Печать  
На базе данных формата DBF запросы по периодичности неделя не правльно возвращается день начала недели, т.е 'weekday 1' возвращает не правильную дату.

Пример: берем период с 1 марта 2010 по 7 марта 2010 с периодичностью неделя и вместо одного значения начала недели 1 марта получаем два - 1 марта и 8 марта
Такое впечатление, что он сначала разбил недели начиная с воскресений, а затем взял из них понедельники, вот и получилось что для недели начинающейся с 7 марта понедельником является 8 марта

Пока решил проблему заменой 'weekday 1' на 'weekday 0','-6 day' - получается понедельник и недели определяются правильно.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #558 - 01. Апреля 2010 :: 08:00
Печать  
Igor Nikolaenko, Спасибо за найденные ошибки.
КОП исправил, продолжаем тестировать версию 1.06.001.
  

1Cv7_query_new_002.rar ( 73 KB | Загрузки )

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #559 - 01. Апреля 2010 :: 08:02
Печать  
Кстати то что он так разбил (вс-сб, а не пн-вс как нам привычно) вполне ожидаемо. В америке вроде начало недели = вс, конец = сб, а исчисление как правило начинается с 0, а не 1. Вот собственно и напаролся.
  

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


1C++ rocks!

Сообщений: 47
Зарегистрирован: 01. Апреля 2010
Re: Класс "ПрямойЗапрос"
Ответ #560 - 01. Апреля 2010 :: 09:57
Печать  
Спасибо за оперативность.
  
Наверх
 
IP записан
 
Anatol
Senior Member
****
Отсутствует


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос"
Ответ #561 - 01. Апреля 2010 :: 14:05
Печать  
в "ПоставшикДанных.Сервис" судя по доке должны быть атрибуты
БазаSQLite и ЗапросODBC. По факту их нет.

эти атрибуты на будушее или удалены из текушей реализации класса?
  
Наверх
wwwICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #562 - 01. Апреля 2010 :: 15:34
Печать  
Эти атрибуты выведены где-то в момент введения ПрямойЗапрос. Просто ранее был другой объект для управления запросами, счас стал ПрямойЗапрос. Так что их необходимость отпала.
  

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


тыц, пыц, тыц!!!

Сообщений: 412
Зарегистрирован: 24. Апреля 2009
Re: Класс "ПрямойЗапрос"
Ответ #563 - 01. Апреля 2010 :: 16:16
Печать  
ой, я темой ошибся...
(561) в тему http://www.1cpp.ru/forum/YaBB.pl?num=1248941896

сори....
  
Наверх
wwwICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #564 - 06. Апреля 2010 :: 07:10
Печать  
В общем решил добить вопрос по ВТ СрезПоследних и СрезПервых. Второй ВТ счас нет и в помине. Но ее суть не отличается от первой просто "наоборот".
Счас синтаксис ВТ выглядит так:
Код
Выбрать все
ов>) 


На выходе имеем таблицу:
Код
Выбрать все
| ТекущийЭлемент | Реквизит 1 | Реквизит 2 | .... | 


Менять структуру таблицы и параметры ВТ не хочется. Но ее работа меня не совсем устраивает.
Самое главное что она работает неправильно и последние значения на дату не получает. Точнее получает если только значения не устанавливаются документами, а иначе какое из установленных получит ВТ это как получится Улыбка.
Была мысль сделать следующим образом:
1. Получаем временную таблицу на основании 1sconst с внутренним соединением со справочником, и фильтром по дате, т.о. мы сокращаем выборку из нашей "большой" таблицы.
2. Делаем запрос вида для получения значений
Код
Выбрать все
select
     vt4.objid ТекущийЭлемент
     ,case when then else end Реквизит1
     ,case when then else end Реквизит2
....
from
     select objid, id, date, time, max(docid) docid
     from (
	    select objid, id, date, max(time) time
	    from (
		   select vt1.objid, vt1.id, max(vt1.date) date
		   from #ВременнаяТаблица vt1
		   group by vt1.objid, vt1.id) v_vt1
	    inner join #ВременнаяТаблица vt2
	    on vt2.objid = v_vt1.objid
	    and vt2.id = v_vt1.id
	    and vt2.date = v_vt1.date
	    group by vt2.objid, vt2.id, vt2.date) v_vt2
     inner join #ВременнаяТаблица vt3
     on vt3.objid = v_vt2.objid
     and vt3.id = v_vt2.id
     and vt3.date = v_vt2.date
     and vt3.time = v_vt2.time
     group by vt3.objid, vt3.id, vt3.date, vt3.time) v_vt3
inner join #ВременнаяТаблица vt4
on vt4.objid = v_vt3.objid
and vt4.id = v_vt3.id
and vt4.date = v_vt3.date
and vt4.time = v_vt3.time
and vt4.docid = v_vt3.docid 



Но это ИМХО тупиковое решение.
Все эти соединения пусть и с отфильтрованной таблицей, а не с полной, все равно мне не нравятся.
А как достучаться до последнего значения документа я с наскока не придумал.

Мысль конечно сделать кластеризованный индекс (с упорядочиванием) в таблице и обходом это временной таблицы заполнить другую временную таблицу. Собственно она и будет этот самый СрезПоследних (ну или первых).
Но для DBF прийдется дополнительные колеса придумывать.

Кстати изменить структуру ВТ уже не получится, в паре мест она закопана, а где они я не помню  Смех
  

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #565 - 06. Апреля 2010 :: 09:41
Печать  
vandalsvq писал(а) 06. Апреля 2010 :: 07:10:
1. Получаем временную таблицу на основании 1sconst

Это дало заметный выигрышь? Озадачен

vandalsvq писал(а) 06. Апреля 2010 :: 07:10:
2. Делаем запрос вида для получения значений

Если все требуемые реквизиты редактируются или только документами или только вручную, запрос можно упростить. Ну или вообще доставать каждый реквизит своим запросом, смотря по настройкам метаданных, в union all.. Нерешительный

vandalsvq писал(а) 06. Апреля 2010 :: 07:10:
Мысль конечно сделать кластеризованный индекс (с упорядочиванием) в таблице

А индекс там по любому нужен, если не использовать _1sconst.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #566 - 06. Апреля 2010 :: 09:59
Печать  
На счет выигрыша...
Для всех манипуляций _1sconst избыточна, поскольку в ней хранятся все периодические реквизиты все базы данных.

Внутреннее соединение со справочником отсечет ненужное. Соответственно условие по дате уменьшит выборку еще на какую то определенную часть. Все это и будет во временной таблице.
Т.е. временная таблица #ВременнаяТаблица получается таким образом:
Код
Выбрать все
select const.*
from _1sconst const (nolock)
inner join Справочник.Контрагенты spr (nolock)
on const.objid = spr.id
where const.date <= :ДатаСнятияВТ
and const.id in (......) 


Секция where может вообще отсутствовать если не определен список реквизитов и дата среза значений.

Идея с union в принципе хороша. Даже счас попробую.
Кстати как можно упростить сбор реквизитов редактируемых документами?

А индекс на времянку я естественно вешаю... в порядке objid,id,date,time,docid. Улыбка
  

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #567 - 06. Апреля 2010 :: 10:18
Печать  
vandalsvq писал(а) 06. Апреля 2010 :: 09:59:
На счет выигрыша...
Для всех манипуляций _1sconst избыточна, поскольку в ней хранятся все периодические реквизиты все базы данных.

Ты не ответил на вопрос.  Подмигивание
+ затраты на перенос данных и построение индекса не избыточны, ага.  Со сжатыми губами

vandalsvq писал(а) 06. Апреля 2010 :: 09:59:
Код
Выбрать все
select const.*
from _1sconst const (nolock)
inner join Справочник.Контрагенты spr (nolock)
on const.objid = spr.id
where const.date <= :ДатаСнятияВТ
and const.id in (......) 


А зачем там справочник, при наличии отбора по id?

vandalsvq писал(а) 06. Апреля 2010 :: 09:59:
Кстати как можно упростить сбор реквизитов редактируемых документами?

Это я не подумавши ляпнул - там запрос не попадёт в индекс.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #568 - 06. Апреля 2010 :: 10:36
Печать  
В моем первом варианте условие по id могло и не быть, но в варианте с union в любом случае оно есть, значит лишнее, согласен.

А вот использовать времянку или родную таблицу, буду проверять когда конструктор ВТ сделаю.
Минуточку терпения Улыбка
  

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


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Класс "ПрямойЗапрос"
Ответ #569 - 06. Апреля 2010 :: 10:45
Печать  
Добавь ещё для полноты ощущений секции Соединение и Условие.  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 36 37 [38] 39 40 ... 60
ОтправитьПечать