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


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #15 - 14. Марта 2012 :: 09:09
Печать  
Cthulhu писал(а) 14. Марта 2012 :: 09:07:
[quote author=tsarevich link=1331554885/0#13 date=1331715572]
Код
Выбрать все
WHERE Партии.Фирма IN (select val from ФирмыФильтр)
	AND Партии.Товар = '    AY   '
	AND (Партии.КодОперации IN (select val from КодыОперацийФильтр)
GROUP BY Партии.Фирма, Партии.Поставка, Партии.ПрихДокумент, Партии.IDDOC
ORDER BY Партии.Фирма, Партии.Поставка, Партии.ПрихДокумент, Партии.IDDOC
err:  _1склЗапрос.ВыполнитьЗапрос(тТхт).ВыбратьСтроку();
{ЧО-ТО-ТАМ.ERT(220)}: near "GROUP": syntax error  



оп... в третьем условии AND (Партии.КодОперации IN... перед Партии скобку убрать...чей то я сам со скобками запутался Смущённый
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #16 - 14. Марта 2012 :: 09:14
Печать  
ааблинсвососкобками! дважды ялох! простите. щяс...
Added:
Блинство. В регистре Фирма и Товар - первые измерения. Пошёл в склайт для скорости. и на тебе:
Код
Выбрать все
Подбор индекса для таблицы RA1173:
	Ограничения: SP1159[Товар]=;
	Упорядочить: SP1158[Фирма], SP1163[Поставка], SP1164[ПрихДокумент], IDDOC,
	В кэше не найдено
	Индекс не выбран.
	Стоимость: 9978 


- и результат - ПУСТОЙ!.. хотя партии там есть точно!
  
Наверх
 
IP записан
 
tsarevich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #17 - 14. Марта 2012 :: 09:29
Печать  
а убери фильтр по кодам операций. выборка пустая или непустая будет ?
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #18 - 14. Марта 2012 :: 09:36
Печать  
tsarevich писал(а) 14. Марта 2012 :: 09:29:
а убери фильтр по кодам операций. выборка пустая или непустая будет ?

Убрал. Выборка не пустая, НО: стоимость индекса всё та же дикая, и колонка "Документ" НЕ заполнена.

Прим: Убрал типизацию для IDDOC и добавил ", Count(Партии.IDDOC)" в SELECT.
В результате - заполненная rолонка IDDOC (краткими(!) ИД-ами), однако в колонке "Count(Партии.IDDOC)" почему-то встречаются не(!)единицы (двойки) - но почему? счетчик же по последней группировке..

ЗЫ: и - опа, мне только ПРИХоды нужны (это помимо фильтра по кодам операций)...  Злой
  
Наверх
 
IP записан
 
tsarevich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #19 - 14. Марта 2012 :: 10:06
Печать  
а у тебя в фильтре по Фирме- если фильтруешь всегда по двум фирмам- по моему отбор лучще делать по параметрам, а не по подзапросу: Партии.Фирма  = :ВыбФирма1 AND Партии.Фирма  = :ВыбФирма2

Что по поводу колонки Документ:
В таблице движений регистра поле Документ(вернее IDDOC) храниться как  ссылка на КАКОЙ-ТО документ неопределенного вида.
Для типизации колонки  Документ как :Документ, т.е. документ неопределенного вида, нужно делать связь с журналом документов (таблица Журнал) по полям IDDOC с обоих сторон для получения дополнительной колонки для запроса  Документ_вид- это будет поле журнала документов Журнал.iddocdef , которое и определяет вид документа . И для измерения ПрихДокумент, если у него в 1С тип Документ, т.е. док неопредленного вида нужно примерно так же.
И почему не делаешь ограничения по периоду движений ?
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #20 - 14. Марта 2012 :: 10:20
Печать  
tsarevich писал(а) 14. Марта 2012 :: 10:06:
а у тебя в фильтре по Фирме- если фильтруешь всегда по двум фирмам- по моему отбор лучще делать по параметрам, а не по подзапросу: Партии.Фирма  = :ВыбФирма1 AND Партии.Фирма  = :ВыбФирма2

Вотжешблинство. А если я не знаю сколько фирм? и сколько товаров? но мне по этим двум первым измерениям надо отбор делать? что, способов найти дещёвый индекс нету?

Цитата:
Что по поводу колонки Документ:
В таблице движений регистра поле Документ(вернее IDDOC) храниться как  ссылка на КАКОЙ-ТО документ неопределенного вида.
Для типизации колонки  Документ как :Документ, т.е. документ неопределенного вида, нужно делать связь с журналом документов (таблица Журнал) по полям IDDOC с обоих сторон для получения дополнительной колонки для запроса  Документ_вид- это будет поле журнала документов Журнал.iddocdef , которое и определяет вид документа . И для измерения ПрихДокумент, если у него в 1С тип Документ, т.е. док неопредленного вида нужно примерно так же.

Как раз измерения типа "документ" (неопр) в результат прекрасно попадают с такой типизацией.
в RA-таблице есть поле IDDOCDEF. но епри попытке сунуть его в селект - говорит что такой колонки нету. странно, в одних есть, в других нету..
с журналом вязаться? ну тут я вообще увязну.  Плачущий
Цитата:
И почему не делаешь ограничения по периоду движений ?

мне нужны ВСЕ ПРИХоды - кстати, DEBCRED 0/1 это прих/расх? (аблин, надо сначала попробовать - может тоже как на iddocdef ругнется)
(ну или на крайняк - последний(в хронологии) приход по (последнему из) заполненному поставке или прихдоку (себестоимость последнего прихода короче).

ЗЫ: и всё-таки! как же фильтр на вид операции (реквизиту - однознаковой строке) по вхождению наложить??? Нерешительный
  
Наверх
 
IP записан
 
tsarevich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #21 - 14. Марта 2012 :: 10:40
Печать  
Цитата:
А если я не знаю сколько фирм? и сколько товаров? но мне по этим двум первым измерениям надо отбор делать?

ну тогда - да. только через УложитьОбъекты

Цитата:
Как раз измерения типа "документ" (неопр) в результат прекрасно попадают с такой типизацией.
в RA-таблице есть поле IDDOCDEF. но епри попытке сунуть его в селект - говорит что такой колонки нету. что, неужто с журналом вязаться? ну тут я вообще увязну.

точно.. флаг "быстрая обработка движений" в регистре...

Цитата:
мне нужны ВСЕ ПРИХоды - кстати, DEBCRED 0/1 это прих/расх? (аблин, надо сначала попробовать - может тоже как на iddocdef ругнется)

DEBCRED  = 0, это приход

Цитата:
(ну или на крайняк - последний(в хронологии) приход по (последнему из) заполненному поставке или прихдоку (себестоимость последнего прихода короче).

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


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #22 - 14. Марта 2012 :: 10:49
Печать  
tsarevich писал(а) 14. Марта 2012 :: 10:40:
ну тогда - да. только через УложитьОбъекты

- без возможности использовать дешёвые индексы если фильтры по первым измерениям?.. это очень, очень-очень грустно!

Цитата:
точно.. флаг "быстрая обработка движений" в регистре...

Там я исправил. в нужном регистре нету такого флага - и поля тоже.. буду гробиться связку с журналом строить для выдергивания вида документа и как-то (как, блин?) получить чтобы документ движения... или не буду - блин, невозможность существенного ускорения при множественном отборе на первые реквизитвы просто убивает.  Злой

Цитата:
DEBCRED  = 0, это приход

вот спасибочки.


Цитата:
а ты случаем не списание по партиям ваяешь ?

Оприходование излишков. Хитрое. Чтобы стоимость - по последней актуальной (а это не всякая поставка - тоже геморрой) поставке.

Цитата:
надыбал класс ПрямойЗапрос- щас отчеты через него ваяю, и некоторые доки тоже.

1с++ не юзаю, только 1sqlite. 1с++ мне периодически валит одинэсину - хрензнает при каких условиях, закономерность не удалось отловить, угробив кучу времени. и это - очень неприятно! хорошо что только начал на него переписывать кусочки - обратно отыгрывать пришлось...

ИТОГО:
всем спасибо, вопрос снят или отложен до появления свободного времени - прямой запрос не даст выигрыша ибо нужных индексов в партиях нету (отборы движений по фирме, товару и вообще - не стоят, а тут ещё как-то вязаться с журналом надо - вытаскивать вид докуменнта, как-то пристёгивать его к иду документа и как-то выдергивать документ).
Нерешительный  Смущённый
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #23 - 14. Марта 2012 :: 12:17
Печать  
IDDOC (9=символьный) - может дублироваться?
  
Наверх
 
IP записан
 
tsarevich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #24 - 14. Марта 2012 :: 12:28
Печать  
не может. это поле присутствует в журнале. а там все IDDOC-и уникальные
  
Наверх
 
IP записан
 
Cthulhu
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 04. Апреля 2010
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #25 - 14. Марта 2012 :: 12:43
Печать  
tsarevich писал(а) 14. Марта 2012 :: 12:28:
не может. это поле присутствует в журнале. а там все IDDOC-и уникальные

спасибочки.
(просьбы отменяются, доковырял сам)
Добавлено:
Блин. "no such column: Партии.DATE".
а так хотелось отсортировать по DATE + TIME... upd: отсортировал по DATE+TIME приджйненного журнала...
« Последняя редакция: 14. Марта 2012 :: 15:17 - Cthulhu »  
Наверх
 
IP записан
 
tsarevich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #26 - 14. Марта 2012 :: 14:03
Печать  
ну.. завтра попробую смоделировать ситуацию.. с работы уже рву...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #27 - 15. Марта 2012 :: 05:07
Печать  
Поможет разве что галка быстрая обработка движений + явное указание индекса в тексте запроса.
Хотя, фокс всё равно обгонит этот запрос по скорости.
  
Наверх
 
IP записан
 
tsarevich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 18
Зарегистрирован: 02. Февраля 2012
Пол: Мужской
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #28 - 15. Марта 2012 :: 07:20
Печать  
Цитата:
На примере регистра Партий (см.выше). Запрос с джйном к журналу документов (желательно не блокируя его) - получить список документов, выполнивших приход, с кол-вом движений?


Будем исходить из следующих условий:
1.      У тебя 2 фирмы(можно и больше, т.к. все равно формируется список)
2.      Товар так же укладываем в список, т.к. возможна выборка группы или нескольких элементов . ну я так захотел : Подмигивание
3.      Ну и присутствует ограничение по датам документов- это можешь выкинуть...
4.      Далее.. не знаю, какую роль у тебя играют измерения Поставка и ПрихДокумент ??? так что буду отбирать записи с документами движения (IDDOC), где debkred = 0. Если, к примеру ПрихДокумент- это партиеобразующий документ, можно вместо IDDOC брать его- все равно перебираем движения…


     ТекстЗапроса = "
     |Select
     |   Партии.iddoc[ДокПрихода :Документ],
     |   Журнал.iddocdef ДокПрихода_вид,
     |   count(Партии.iddoc) КолДвидженийДоковПрихода
     |from Регистр_ПартииТоваров Партии
     |inner join Журнал on Партии.iddoc =  Журнал.iddoc
     |where
     |  Журнал.date between :НачДата and :КонДата and Журнал.ПартииТоваров ФР = 1 and Партии.debkred = 0
     |  and Партии.Фирма in (select val from СпсФирмы)  
     |  and Партии.Номенклатура in (select val from СпсТовары)
     |group by
     |  Партии.iddoc,Журнал.iddocdef
     |";        
     
база.УложитьОбъекты(ВыбТМЦ,"СпсТовары" , , "Номенклатура"); // ВыбТМЦ – возможно это будет один товар, группа товаров, список товаров и т.д.
// в СпсФирмы загружаем 2 фирмы.
СпсФирмы = СоздатьОбъект("СписокЗначений");
СпсФирмы.добавитьЗначение(ВыбФирма1);
СпсФирмы.добавитьЗначение(ВыбФирма2);
база.УложитьОбъекты(СпсФирмы,"СпсФирмы" , , "Фирмы");

Запрос.Подставлять("КонДата",КонДата);
Запрос.Подставлять("НачДата",НачДата);
Запрос.Подготовить(ТекстЗапроса);
запрос.отладка(1);
запрос.Выполнить().выбратьстроку();

Что касается стоимости индекстов:
В регистре движений партии индексы по измерениям регистров появятся только при установке в измерениях опции «Отбор движений». Возможно после этого скорость выборки возрастет. Но вследствие чего распухнет CDX файл таблицы движений. Пример: в моей базе таб. Движения партий = 90 Мб, cdx = 4 Мб. Установил в измерениях фирма и номенклатура отбор движений. Долго сохраняла конфу. После этого CDX стал 30 Мб. Ну и скорость записи в регистр упадет- насколько не знаю- не проверял. Не думаю, что намного…
Но несмотря на отсутствие индексов по измерениям в движениях, выборка у меня была примерно такая: с 01/01/11 по текущий день, по двум фирмам и по группа в которой у нас лежит очень дофига товаров – длилась ~ 5 секунд при первом запуске, 3 сек.- при последующих. Начало движения в партиях- с середины 07 года, всего записей в движенях - примерно 1400000. Штатным способом выборка была бы однозначно не такая.

Связь с журналом делаем тогда, когда например нужна типизация документов неопределенного вида,  когда нужно ограничивать выборку по датам движений. Исключение -  когда в регистре установлен флаг «Быстрая обработка движений».
Это добавляет в таб. движений поля IDDOCDEF, DATE, TIME.

Что касается блокировки таблиц- вроде по умолючанию блокировок нет. но можно их установить принудительно. для этого есть свойство запроса ВыполнятьВТранзакции
Вроде все...уф.. многабукаф...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: 1sqlite. Неправльный результат запроса при группировке
Ответ #29 - 15. Марта 2012 :: 07:43
Печать  
Цитата:
Журнал.ПартииТоваров ФР = 1


Это что ?

Цитата:
Запрос.Подготовить(ТекстЗапроса);
Запрос.Выполнить().выбратьстроку();


Это зачем ? Цеже не параметезированный запрос
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать