Переключение на Главную Страницу Страницы: 1 2 [3]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как сделать аналог Все по группировке "День"? (число прочтений - 15002 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как сделать аналог Все по группировке "День"?
Ответ #30 - 30. Октября 2006 :: 12:28
Печать  
Запрос, приведенный вище работает в 4 раза быстрее чем запрос, обсуждающейся на Реалнете. Но все же он выполняется 2 минуты - что не есть приемлымым по скорости.
Наверное придется выгружать данные в OLAP и делать отчет вне 1С, ну или загрузить терминальный сервер проверками при формировании печатной формы отчета.
  
Наверх
IP записан
 
smile
Junior Member
**
Отсутствует


бррр... ужас...

Сообщений: 50
Зарегистрирован: 23. Мая 2006
Re: Как сделать аналог Все по группировке "День"?
Ответ #31 - 31. Октября 2006 :: 07:24
Печать  
Прошу прощения. не очень вчитывался в тему. возможно это и обсуждалось выше. Времени нет =(

реализовать ключевое слова "все" в sql можно через OLAP кубы... это обсуждалось на itland.ru

http://itland.ru/forum//index.php?showtopic=10356&st=0
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как сделать аналог Все по группировке "День"?
Ответ #32 - 31. Октября 2006 :: 07:42
Печать  
smile писал(а) 31. Октября 2006 :: 07:24:
Прошу прощения. не очень вчитывался в тему. возможно это и обсуждалось выше. Времени нет =(

реализовать ключевое слова "все" в sql можно через OLAP кубы... это обсуждалось на itland.ru

http://itland.ru/forum//index.php?showtopic=10356&st=0

Этот вопрос меня также очень интересует (но пока его актуальность не высокая), в частности как получить с Analysis Server данные в Excel например, по всем данным измерения, а не только тем, которые есть в таблице фактов? Т.е. другими словами, как заставить Севрер в момент процессирования запихнуть в рассчитываемые итоги данные по тем измерениям, по которым не было вообще записей в таблице фактов? Вот такое у меня не получилось. Пока вижу только решение - запихивать данные с 0, дабы происходило процессирование и сверткта итогов по всем элементам измерения.

Но это вопрос немного к другому форуму.
  
Наверх
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Как сделать аналог Все по группировке "День"?
Ответ #33 - 09. Ноября 2006 :: 05:58
Печать  
berezdetsky писал(а) 27. Октября 2006 :: 11:41:
pvase писал(а) 27. Октября 2006 :: 08:21:
Пишу такой запрос:
Код
Выбрать все
|SELECT
|    Рег.Клиент as [Клиент $Справочник.Клиенты],
|    Рег.Период AS Период,
|    Рег.СуммаГРННачальныйОстаток as СуммаГРННачальныйОстаток,
|    Рег.СуммаГРНПриход as СуммаГРНПриход,
|    Рег.СуммаГРНРасход as СуммаГРНРасход,
|    Рег.СуммаГРНКонечныйОстаток as СуммаГРНКонечныйОстаток
|FROM
|    $РегистрОстаткиОбороты.Взаиморасчеты(:НачДата, :КонДата~, День, ДвиженияИГраницыПериода,,,
|	(Клиент), (СуммаГРН)) as Рег
 


Как заставить такой код получать в качестве Период не только даты, по которым были движения (есть записи в RA), а все даты за период?

Код
Выбрать все
FROM (SELECT Дата, Клиент
	FROM Даты CROSS JOIN Клиенты) ДатыКлиенты LEFT OUTER JOIN $ВТ... 


Это все работает, но в записях с вставленными записями дней остаток всегда ноль, а это не правильно.
Может кто знает как заполнить остатки в запросе по вставленным дням
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как сделать аналог Все по группировке "День"?
Ответ #34 - 09. Ноября 2006 :: 16:17
Печать  
aou1c писал(а) 09. Ноября 2006 :: 05:58:
Это все работает, но в записях с вставленными записями дней остаток всегда ноль, а это не правильно.
Может кто знает как заполнить остатки в запросе по вставленным дням

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

draft.zip ( 6 KB | Загрузки )

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
aou1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 183
Местоположение: Екатеринбург
Зарегистрирован: 29. Мая 2006
Пол: Мужской
Re: Как сделать аналог Все по группировке "День"?
Ответ #35 - 09. Ноября 2006 :: 16:41
Печать  
berezdetsky писал(а) 09. Ноября 2006 :: 16:17:
aou1c писал(а) 09. Ноября 2006 :: 05:58:
Это все работает, но в записях с вставленными записями дней остаток всегда ноль, а это не правильно.
Может кто знает как заполнить остатки в запросе по вставленным дням

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


Спасибо, правда я уже сам допер.
а идея такая-же <= :КонДата

Короче вот как у меня получилось


процедура РасчетКолвоДней()
     рс.ВыполнитьИнструкцию("CREATE TABLE #Дни (День DateTime)");
     для промДата=НачДата по КонДата Цикл          
           рс.УстановитьТекстовыйПараметр("промДата",промДата);
           рс.ВыполнитьИнструкцию("INSERT #Дни VALUES (:промДата)");
     КонецЦикла;

     рс.УстановитьТекстовыйПараметр("НачДата",НачДата);
     рс.УстановитьТекстовыйПараметр("КонДата",КонДата);
     рс.УложитьСписокОбъектов(ВыбТовары, "#ВыбТовары", "Номенклатура");
     рс.УложитьСписокОбъектов(ВыбВидыДеятельности, "#Производители", "Контрагенты"); [/tt]      
     
     
     
     рс.УстановитьТекстовыйПараметр("ВыбТовары",ВыбТовары.РазмерСписка());
     писка());

     Состояние("Расчет остатков...");

     ТекстЗапроса = "
     |select Товар, Период, ОстатокТовараНАчальныйОстаток  ОстатокТовараНАчальныйОстаток
     |,ОстатокТовараПриход ОстатокТовараПриход
     |,ОстатокТовараПриход ОстатокТовараРасход          
     |,ОстатокТовараКонечныйОстаток ОстатокТовараКонечныйОстаток
     |into #ОстаткиТоваров
     |from
     |$РегистрОстаткиОбороты.ОстаткиТоваров(:НачДата,:КонДата~,День
     |            ,ActionsAndPeriodBoundaries
     |       ,
     |            INNER JOIN $Справочник.Номенклатура Товары ON Товары.id = Товар
     |            ,
     |            (:ВыбТовары='0' or Товар in (select val from #ВыбТовары))
     |and      (:ВыбВидыДеятельности='0' or $Товары.Производитель in (select val from #Производители))
     |            ,Товар,ОстатокТовара)  ОстаткиТоваров
     |";  
     тб = рс.ВыполнитьИнструкцию(ТекстЗапроса);
     //тб.ВыбратьСтроку();

     Состояние("Расчет кол-ва дней...");
     рс.УстановитьТекстовыйПараметр("ВыбТовары",ВыбТовары.РазмерСписка());
     писка());
     
     
     тб = СоздатьОбъект("ТаблицаЗначений");
     ТекстЗапроса = "
     |select ДниТовары.Товар, ДниТовары.День,
     |CASE WHEN
     |isnull(Остатки.ОстатокТовараНАчальныйОстаток+Остатки.ОстатокТовараПриход,
     |(select top 1 Ост.ОстатокТовараКонечныйОстаток from #ОстаткиТоваров Ост
     |where Ост.Период <= ДниТовары.День and Ост.Товар = ДниТовары.Товар
     |order by Ост.Товар, Ост.Период Desc
     |))
     |>0 THEN 1 ELSE 0 END
     |ЕстьОстаток
     |from
     |(select День, Тов.id Товар  from #Дни CROSS JOIN $Справочник.Номенклатура Тов
     |Where (:ВыбТовары='0' or Тов.id in (select val from #ВыбТовары))
     |and (:ВыбВидыДеятельности='0' or $Тов.Производитель in (select val from #Производители))
     |) ДниТовары
     |LEFT OUTER JOIN
     |#ОстаткиТоваров  as Остатки ON Остатки.Период = ДниТовары.День and Остатки.Товар = ДниТовары.Товар
     |";  
     
     ТекстЗапроса = "
     |SELECT Товар,
     //|ЕстьОстаток, День
     |SUM(ЕстьОстаток) КолДней
     |INTO #Остатки
     |FROM ("+ТекстЗапроса+") ЕстьОстатки
     |GROUP BY Товар
     //|order by Товар, День
     |";
     
     тб = рс.ВыполнитьИнструкцию(ТекстЗапроса);
конецпроцедуры
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 
ОтправитьПечать