Имя: Пароль:
1C
1С v8
запрос, задачка для разминки
0 Axel2009
 
19.10.12
10:38
написать запрос по расчету средней просрочки (по дням) за указанный период.

имеем регистр накопления ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов
измерения: Организация, Контрагент, ДоговорКонтрагента, ДокументРасчетовСКонтрагентом; ресурс: СуммаВзаиморасчетов.
в договоре хранится ДопустимоеЧислоДнейЗадолженности, если дней меньше, то документ не считается просроченным.
необходимо написать оптимальный запрос.
у меня есть свой вариант решения, но хочется этот запрос оптимизировать =) может у кого светлая мысль придет..
1 ZanderZ
 
19.10.12
10:39
"у меня есть свой вариант решения, но хочется ..." ваш стянуть т.к. на самом деле нет...
2 Жан Пердежон
 
19.10.12
10:39
и чего там писать?
3 Ayvengo
 
19.10.12
10:40
Давай свой запрос, будем мусолить :)
4 Axel2009
 
19.10.12
10:47
(1) вброс защитан
(2) да по сути ничего, если не интересна скорость выполнения
(3) у меня регистр накопления называется по другому и вместо измерения Организация - другое.. выложить? =) будем на пальцах рассказывать? =)
5 GANR
 
19.10.12
10:47
(0) sql-ex.ru - и разминайся с запросами целый день :-)
6 Ayvengo
 
19.10.12
10:50
(4) давай, выкладывай
7 Axel2009
 
19.10.12
10:51
(6)
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ВЫБОР
       КОГДА &НачПериода < НАЧАЛОПЕРИОДА(ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовПоТорговымМаркам.Дата, ДЕНЬ)
           ТОГДА НАЧАЛОПЕРИОДА(ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовПоТорговымМаркам.Дата, ДЕНЬ)
       ИНАЧЕ &НачПериода
   КОНЕЦ КАК НачалоПериода,
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.Период КАК КонецПериода,
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.ТорговаяМарка КАК ТорговаяМарка,
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.Контрагент КАК Контрагент,
   НАЧАЛОПЕРИОДА(ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовПоТорговымМаркам.Дата, ДЕНЬ) КАК ДокументРасчетовПоТорговымМаркамДата,
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.ДокументРасчетовПоТорговымМаркам КАК ДокументРасчетовПоТорговымМаркам,
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток
ПОМЕСТИТЬ ВзаиморасчетыПоТорговымМаркамПериоды
ИЗ
   РегистрНакопления.ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетов.ОстаткиИОбороты(
           &ДатаНач,
           &ДатаПросрочки,
           День,
           ,
           (Организация В (&СписокОрганизаций)
               ИЛИ &ПоВсемОрганизациям)
               ) КАК ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты
ГДЕ
   ВзаиморасчетыПоТорговымМаркамПоДокументамРасчетовОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток >= 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ДатыКалендаря.ДатаКалендаря КАК ДатаДокумента,
   СУММА(РегламентированныйПроизводственныйКалендарь.Пятидневка) КАК КоличествоРабочихДней
ПОМЕСТИТЬ ДатыДоНачалаПериода
ИЗ
   (ВЫБРАТЬ
       РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря,
       РегламентированныйПроизводственныйКалендарь.Пятидневка КАК Пятидневка
   ИЗ
       РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
               ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркамДата КАК МинимальнаяДата
           ИЗ
               ВзаиморасчетыПоТорговымМаркамПериоды КАК ВзаиморасчетыПоТорговымМаркамПериоды) КАК ТаблицаМинимальнаяДата
           ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря = ТаблицаМинимальнаяДата.МинимальнаяДата
               И (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &НачПериода)) КАК ДатыКалендаря
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
       ПО ДатыКалендаря.ДатаКалендаря < РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
           И (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &НачПериода)

СГРУППИРОВАТЬ ПО
   ДатыКалендаря.ДатаКалендаря

ИНДЕКСИРОВАТЬ ПО
   ДатаДокумента,
   КоличествоРабочихДней
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПериодыОтчета.НачалоПериода КАК НачалоПериода,
   ПериодыОтчета.КонецПериода КАК КонецПериода,
   СУММА(РегламентированныйПроизводственныйКалендарь.Пятидневка) КАК КоличествоРабочихДней
ПОМЕСТИТЬ ДатыПериода
ИЗ
   (ВЫБРАТЬ
       РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК НачалоПериода,
       РегламентированныйПроизводственныйКалендарьДни.ДатаКалендаря КАК КонецПериода
   ИЗ
       РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарьДни
           ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарьДни.ДатаКалендаря
               И (РегламентированныйПроизводственныйКалендарьДни.ДатаКалендаря МЕЖДУ &НачПериода И &ДатаПросрочки)
   ГДЕ
       РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачПериода И &ДатаПросрочки) КАК ПериодыОтчета
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
       ПО ПериодыОтчета.НачалоПериода < РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
           И ПериодыОтчета.КонецПериода >= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря

СГРУППИРОВАТЬ ПО
   ПериодыОтчета.НачалоПериода,
   ПериодыОтчета.КонецПериода

ИНДЕКСИРОВАТЬ ПО
   НачалоПериода,
   КонецПериода,
   КоличествоРабочихДней
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТаблицаПросрочек.ТорговаяМарка,
   ТаблицаПросрочек.Контрагент,
   ТаблицаПросрочек.ДоговорКонтрагента,
   СРЕДНЕЕ(ТаблицаПросрочек.СуммаПросрочки) КАК СуммаПросрочки
ПОМЕСТИТЬ СредниеПросрочки
ИЗ
   (ВЫБРАТЬ
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ДатаОтчета КАК ДатаОтчета,
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ТорговаяМарка КАК ТорговаяМарка,
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ДоговорКонтрагента КАК ДоговорКонтрагента,
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.Контрагент КАК Контрагент,
       СУММА(ВЫБОР
               КОГДА ЕСТЬNULL(ВзаиморасчетыТаблицаПериодовНаКаждыйДень.КоличествоРабочихДнейДоНачалаПериода, 0) + ЕСТЬNULL(ДатыПериода.КоличествоРабочихДней, 0) + ЕСТЬNULL(ДатыПериодаВнутрПериод.КоличествоРабочихДней, 0) > ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ДоговорКонтрагента.ДопустимаяОтсрочкаОплатыВДнях
                   ТОГДА ВзаиморасчетыТаблицаПериодовНаКаждыйДень.СуммаВзаиморасчетовКонечныйОстаток
               ИНАЧЕ 0
           КОНЕЦ) КАК СуммаПросрочки
   ИЗ
       (ВЫБРАТЬ
           РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаОтчета,
           ВзаиморасчетыТаблицаПериодов.НачалоПериода КАК НачалоПериода,
           ВзаиморасчетыТаблицаПериодов.КонецПериода КАК КонецПериода,
           ВзаиморасчетыТаблицаПериодов.ТорговаяМарка КАК ТорговаяМарка,
           ВзаиморасчетыТаблицаПериодов.ДоговорКонтрагента КАК ДоговорКонтрагента,
           ВзаиморасчетыТаблицаПериодов.Контрагент КАК Контрагент,
           ВзаиморасчетыТаблицаПериодов.ДокументРасчетовПоТорговымМаркамДата КАК ДокументРасчетовПоТорговымМаркамДата,
           ВзаиморасчетыТаблицаПериодов.ДокументРасчетовПоТорговымМаркам КАК ДокументРасчетовПоТорговымМаркам,
           ВзаиморасчетыТаблицаПериодов.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
           ВзаиморасчетыТаблицаПериодов.СледДата КАК СледДата,
           ВзаиморасчетыТаблицаПериодов.КоличествоРабочихДнейДоНачалаПериода КАК КоличествоРабочихДнейДоНачалаПериода
       ИЗ
           (ВЫБРАТЬ
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.НачалоПериода КАК НачалоПериода,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.КонецПериода КАК КонецПериода,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.ТорговаяМарка КАК ТорговаяМарка,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.ДоговорКонтрагента КАК ДоговорКонтрагента,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.Контрагент КАК Контрагент,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.ДокументРасчетовПоТорговымМаркамДата КАК ДокументРасчетовПоТорговымМаркамДата,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.ДокументРасчетовПоТорговымМаркам КАК ДокументРасчетовПоТорговымМаркам,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
               ВзаиморасчетыТаблицаПериодовБезРабочихДней.СледДата КАК СледДата,
               ЕСТЬNULL(ДатыДоНачалаПериода.КоличествоРабочихДней, 0) КАК КоличествоРабочихДнейДоНачалаПериода
           ИЗ
               (ВЫБРАТЬ
                   ВзаиморасчетыПоТорговымМаркамПериоды.НачалоПериода КАК НачалоПериода,
                   ВзаиморасчетыПоТорговымМаркамПериоды.КонецПериода КАК КонецПериода,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ТорговаяМарка КАК ТорговаяМарка,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДоговорКонтрагента КАК ДоговорКонтрагента,
                   ВзаиморасчетыПоТорговымМаркамПериоды.Контрагент КАК Контрагент,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркамДата КАК ДокументРасчетовПоТорговымМаркамДата,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркам КАК ДокументРасчетовПоТорговымМаркам,
                   ВзаиморасчетыПоТорговымМаркамПериоды.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
                   ВЫБОР
                       КОГДА МИНИМУМ(ВзаиморасчетыПоТорговымМаркамПериодыСледПериод.КонецПериода) ЕСТЬ NULL
                           ТОГДА НАЧАЛОПЕРИОДА(&ДатаПросрочки, ДЕНЬ)
                       ИНАЧЕ ДОБАВИТЬКДАТЕ(МИНИМУМ(ВзаиморасчетыПоТорговымМаркамПериодыСледПериод.КонецПериода), ДЕНЬ, -1)
                   КОНЕЦ КАК СледДата
               ИЗ
                   ВзаиморасчетыПоТорговымМаркамПериоды КАК ВзаиморасчетыПоТорговымМаркамПериоды
                       ЛЕВОЕ СОЕДИНЕНИЕ ВзаиморасчетыПоТорговымМаркамПериоды КАК ВзаиморасчетыПоТорговымМаркамПериодыСледПериод
                       ПО ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркам = ВзаиморасчетыПоТорговымМаркамПериодыСледПериод.ДокументРасчетовПоТорговымМаркам
                           И ВзаиморасчетыПоТорговымМаркамПериоды.КонецПериода < ВзаиморасчетыПоТорговымМаркамПериодыСледПериод.КонецПериода
               
               СГРУППИРОВАТЬ ПО
                   ВзаиморасчетыПоТорговымМаркамПериоды.НачалоПериода,
                   ВзаиморасчетыПоТорговымМаркамПериоды.КонецПериода,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ТорговаяМарка,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДоговорКонтрагента,
                   ВзаиморасчетыПоТорговымМаркамПериоды.Контрагент,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркамДата,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркам,
                   ВзаиморасчетыПоТорговымМаркамПериоды.СуммаВзаиморасчетовКонечныйОстаток
               
               ОБЪЕДИНИТЬ ВСЕ
               
               ВЫБРАТЬ
                   NULL,
                   &НачПериода,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ТорговаяМарка,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДоговорКонтрагента,
                   ВзаиморасчетыПоТорговымМаркамПериоды.Контрагент,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркамДата,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркам,
                   0,
                   МИНИМУМ(ДОБАВИТЬКДАТЕ(ВзаиморасчетыПоТорговымМаркамПериоды.КонецПериода, ДЕНЬ, -1))
               ИЗ
                   ВзаиморасчетыПоТорговымМаркамПериоды КАК ВзаиморасчетыПоТорговымМаркамПериоды
               ГДЕ
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркамДата > &НачПериода
               
               СГРУППИРОВАТЬ ПО
                   ВзаиморасчетыПоТорговымМаркамПериоды.ТорговаяМарка,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркам,
                   ВзаиморасчетыПоТорговымМаркамПериоды.Контрагент,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДокументРасчетовПоТорговымМаркамДата,
                   ВзаиморасчетыПоТорговымМаркамПериоды.ДоговорКонтрагента) КАК ВзаиморасчетыТаблицаПериодовБезРабочихДней
                   ЛЕВОЕ СОЕДИНЕНИЕ ДатыДоНачалаПериода КАК ДатыДоНачалаПериода
                   ПО ВзаиморасчетыТаблицаПериодовБезРабочихДней.ДокументРасчетовПоТорговымМаркамДата = ДатыДоНачалаПериода.ДатаДокумента) КАК ВзаиморасчетыТаблицаПериодов
               ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
               ПО ВзаиморасчетыТаблицаПериодов.КонецПериода <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
                   И ВзаиморасчетыТаблицаПериодов.СледДата >= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ВзаиморасчетыТаблицаПериодовНаКаждыйДень
           ЛЕВОЕ СОЕДИНЕНИЕ ДатыПериода КАК ДатыПериода
           ПО ВзаиморасчетыТаблицаПериодовНаКаждыйДень.КонецПериода = ДатыПериода.НачалоПериода
               И ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ДатаОтчета = ДатыПериода.КонецПериода
           ЛЕВОЕ СОЕДИНЕНИЕ ДатыПериода КАК ДатыПериодаВнутрПериод
           ПО ВзаиморасчетыТаблицаПериодовНаКаждыйДень.НачалоПериода = ДатыПериодаВнутрПериод.НачалоПериода
               И ВзаиморасчетыТаблицаПериодовНаКаждыйДень.КонецПериода = ДатыПериодаВнутрПериод.КонецПериода
   
   СГРУППИРОВАТЬ ПО
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ДатаОтчета,
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ТорговаяМарка,
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.ДоговорКонтрагента,
       ВзаиморасчетыТаблицаПериодовНаКаждыйДень.Контрагент) КАК ТаблицаПросрочек

СГРУППИРОВАТЬ ПО
   ТаблицаПросрочек.Контрагент,
   ТаблицаПросрочек.ТорговаяМарка,
   ТаблицаПросрочек.ДоговорКонтрагента
8 Ayvengo
 
19.10.12
11:05
ВЫБРАТЬ
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Организация,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетов,
   ВЫБОР
       КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности > 0
           ТОГДА ВЫБОР
                   КОГДА РАЗНОСТЬДАТ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, &ТекущаяДата, ДЕНЬ) > ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
                       ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
                   ИНАЧЕ 0
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ КАК Долг
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки

Что-нибудь такое? :)
9 Ayvengo
 
19.10.12
11:06
Ну а дальше круть как нужно :)
10 Axel2009
 
19.10.12
11:10
(9)
1. количество дней просрочки считается по рабочим дням
2. считать просрочку надо на каждый день из периода отчета, чтобы на каждый день посчитать просрочку и из нее получить среднюю
11 Ayvengo
 
19.10.12
11:11
(10) как понимаем, что этот день рабочий? Где-то регистр есть или тупо пн, вт, ср, чт, пт?
12 Axel2009
 
19.10.12
11:13
(11) ВЫБРАТЬ
       РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря,
       РегламентированныйПроизводственныйКалендарь.Пятидневка КАК Пятидневка
13 Ayvengo
 
19.10.12
11:36
(10) а если документ попадает на выходной день, то куда падает просрочка?
14 Axel2009
 
19.10.12
11:37
(13) как если бы он попал на понедельник
15 Ayvengo
 
19.10.12
11:59
(14) Чел купил что-то 01.10, дней просрочки 15, эти 15 дней мы считаем только по будням или просто 15 дней с даты покупки?
16 Ayvengo
 
19.10.12
12:02
что-нибудь такое , если без геморроя считаем дни просрочки :)

ВЫБРАТЬ
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ПОМЕСТИТЬ Таблица_Период
ИЗ
   РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
   РегламентированныйПроизводственныйКалендарь.Пятидневка > 0
   И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ТекущаяДата, МЕСЯЦ)

СГРУППИРОВАТЬ ПО
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Таблица_Период.ДатаКалендаря КАК Дата,
   Долги.ДоговорКонтрагента,
   Долги.ДокументРасчетовСКонтрагентом,
   Долги.Организация,
   Долги.Контрагент,
   ВЫБОР
       КОГДА Долги.Дата = НАЧАЛОПЕРИОДА(Таблица_Период.ДатаКалендаря, ДЕНЬ)
           ТОГДА ВЫБОР
                   КОГДА Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности > 0
                       ТОГДА ВЫБОР
                               КОГДА РАЗНОСТЬДАТ(Долги.Дата, &ТекущаяДата, ДЕНЬ) > Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
                                   ТОГДА Долги.Долг
                               ИНАЧЕ 0
                           КОНЕЦ
                   ИНАЧЕ 0
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ КАК Долг
ИЗ
   Таблица_Период КАК Таблица_Период
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ВЫБОР
               КОГДА НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ) В
                       (ВЫБРАТЬ
                           Таблица_Период.ДатаКалендаря
                       ИЗ
                           Таблица_Период КАК Таблица_Период)
                   ТОГДА НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ)
               ИНАЧЕ ВЫБОР
                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 1) В
                               (ВЫБРАТЬ
                                   Таблица_Период.ДатаКалендаря
                               ИЗ
                                   Таблица_Период КАК Таблица_Период)
                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 1)
                       ИНАЧЕ ВЫБОР
                               КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 2) В
                                       (ВЫБРАТЬ
                                           Таблица_Период.ДатаКалендаря
                                       ИЗ
                                           Таблица_Период КАК Таблица_Период)
                                   ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 2)
                               ИНАЧЕ ВЫБОР
                                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 3) В
                                               (ВЫБРАТЬ
                                                   Таблица_Период.ДатаКалендаря
                                               ИЗ
                                                   Таблица_Период КАК Таблица_Период)
                                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 3)
                                       ИНАЧЕ ВЫБОР
                                               КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 4) В
                                                       (ВЫБРАТЬ
                                                           Таблица_Период.ДатаКалендаря
                                                       ИЗ
                                                           Таблица_Период КАК Таблица_Период)
                                                   ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 4)
                                               ИНАЧЕ ВЫБОР
                                                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 5) В
                                                               (ВЫБРАТЬ
                                                                   Таблица_Период.ДатаКалендаря
                                                               ИЗ
                                                                   Таблица_Период КАК Таблица_Период)
                                                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 5)
                                                       ИНАЧЕ ВЫБОР
                                                               КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 6) В
                                                                       (ВЫБРАТЬ
                                                                           Таблица_Период.ДатаКалендаря
                                                                       ИЗ
                                                                           Таблица_Период КАК Таблица_Период)
                                                                   ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 6)
                                                               ИНАЧЕ ВЫБОР
                                                                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 7) В
                                                                               (ВЫБРАТЬ
                                                                                   Таблица_Период.ДатаКалендаря
                                                                               ИЗ
                                                                                   Таблица_Период КАК Таблица_Период)
                                                                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 7)
                                                                       ИНАЧЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата
                                                                   КОНЕЦ
                                                           КОНЕЦ
                                                   КОНЕЦ
                                           КОНЕЦ
                                   КОНЕЦ
                           КОНЕЦ
                   КОНЕЦ
           КОНЕЦ КАК Дата,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Организация КАК Организация,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК Долг
       ИЗ
           РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки) КАК Долги
       ПО (НАЧАЛОПЕРИОДА(Таблица_Период.ДатаКалендаря, ДЕНЬ) = Долги.Дата)

СГРУППИРОВАТЬ ПО
   Долги.Организация,
   Долги.Контрагент,
   Долги.ДоговорКонтрагента,
   Долги.ДокументРасчетовСКонтрагентом,
   Таблица_Период.ДатаКалендаря,
   ВЫБОР
       КОГДА Долги.Дата = НАЧАЛОПЕРИОДА(Таблица_Период.ДатаКалендаря, ДЕНЬ)
           ТОГДА ВЫБОР
                   КОГДА Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности > 0
                       ТОГДА ВЫБОР
                               КОГДА РАЗНОСТЬДАТ(Долги.Дата, &ТекущаяДата, ДЕНЬ) > Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
                                   ТОГДА Долги.Долг
                               ИНАЧЕ 0
                           КОНЕЦ
                   ИНАЧЕ 0
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ

УПОРЯДОЧИТЬ ПО
   Дата
17 Axel2009
 
19.10.12
12:08
а зачем прибавляем 7 дней то я не понял?
18 Axel2009
 
19.10.12
12:11
(15)
чел купил 01.10 100 руб, колво дней отсрочки 5 рабочих дней. с  08.10 считается просрочка, 10.10 числа оплатил 50 руб.
итого просрочка
01.10 0руб
02.10 0руб
03.10 0руб
04.10 0руб
05.10 0руб
06.10 0руб
07.10 0руб
08.10 100руб
09.10 100руб
10.10 50руб
11.10 50руб
12.10 50руб
13.10 50руб
14.10 50руб
15.10 50руб
16.10 50руб
17.10 50руб
18.10 50руб

итого 650/18 = 36.11 руб. средняя просрочка
19 Ayvengo
 
19.10.12
13:03
(17) превращаем дату документа (который сделан в выходной) в дату документа, который сделан в понедельник, а вернее в первый рабочий день после выходных :) Это хорошо, если не больше 7 дней подряд выходных.

Пример неверный, т.к. у нас не может быть подряд > 5 рабочих дней.
20 Ayvengo
 
19.10.12
13:05
(18) то, что нужно в примере и результате делается с помощью СКД, просто выводишь сумму, делаешь доп поле где высчитываешь сумма / количество дней.
21 Ayvengo
 
19.10.12
13:07
(19) хотя может быть больше 5, но не больше 6 точно.
22 Axel2009
 
19.10.12
13:30
(20) и как же? =)
23 Ayvengo
 
19.10.12
14:15
запрос слегка неверный был. Поправил.
ВЫБРАТЬ
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ПОМЕСТИТЬ Таблица_Период
ИЗ
   РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
   РегламентированныйПроизводственныйКалендарь.Пятидневка > 0
   И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ НАЧАЛОПЕРИОДА(&ТекущаяДата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&ТекущаяДата, МЕСЯЦ)

СГРУППИРОВАТЬ ПО
   РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Таблица_Период.ДатаКалендаря КАК Дата,
   Долги.ДоговорКонтрагента,
   Долги.ДокументРасчетовСКонтрагентом,
   Долги.Организация,
   Долги.Контрагент,
   ВЫБОР
       КОГДА Долги.Дата <= НАЧАЛОПЕРИОДА(Таблица_Период.ДатаКалендаря, ДЕНЬ)
           ТОГДА ВЫБОР
                   КОГДА Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности > 0
                       ТОГДА ВЫБОР
                               КОГДА РАЗНОСТЬДАТ(Долги.Дата, Таблица_Период.ДатаКалендаря, ДЕНЬ) > Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
                                   ТОГДА Долги.Долг
                               ИНАЧЕ 0
                           КОНЕЦ
                   ИНАЧЕ 0
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ КАК Долг,
   ОбщееКоличествоДней.Количество КАК КоличествоДней,
   0 КАК Среднее
ИЗ
   Таблица_Период КАК Таблица_Период
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ВЫБОР
               КОГДА НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ) В
                       (ВЫБРАТЬ
                           Таблица_Период.ДатаКалендаря
                       ИЗ
                           Таблица_Период КАК Таблица_Период)
                   ТОГДА НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ)
               ИНАЧЕ ВЫБОР
                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 1) В
                               (ВЫБРАТЬ
                                   Таблица_Период.ДатаКалендаря
                               ИЗ
                                   Таблица_Период КАК Таблица_Период)
                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 1)
                       ИНАЧЕ ВЫБОР
                               КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 2) В
                                       (ВЫБРАТЬ
                                           Таблица_Период.ДатаКалендаря
                                       ИЗ
                                           Таблица_Период КАК Таблица_Период)
                                   ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 2)
                               ИНАЧЕ ВЫБОР
                                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 3) В
                                               (ВЫБРАТЬ
                                                   Таблица_Период.ДатаКалендаря
                                               ИЗ
                                                   Таблица_Период КАК Таблица_Период)
                                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 3)
                                       ИНАЧЕ ВЫБОР
                                               КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 4) В
                                                       (ВЫБРАТЬ
                                                           Таблица_Период.ДатаКалендаря
                                                       ИЗ
                                                           Таблица_Период КАК Таблица_Период)
                                                   ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 4)
                                               ИНАЧЕ ВЫБОР
                                                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 5) В
                                                               (ВЫБРАТЬ
                                                                   Таблица_Период.ДатаКалендаря
                                                               ИЗ
                                                                   Таблица_Период КАК Таблица_Период)
                                                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 5)
                                                       ИНАЧЕ ВЫБОР
                                                               КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 6) В
                                                                       (ВЫБРАТЬ
                                                                           Таблица_Период.ДатаКалендаря
                                                                       ИЗ
                                                                           Таблица_Период КАК Таблица_Период)
                                                                   ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 6)
                                                               ИНАЧЕ ВЫБОР
                                                                       КОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 7) В
                                                                               (ВЫБРАТЬ
                                                                                   Таблица_Период.ДатаКалендаря
                                                                               ИЗ
                                                                                   Таблица_Период КАК Таблица_Период)
                                                                           ТОГДА ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ДЕНЬ), ДЕНЬ, 7)
                                                                       ИНАЧЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата
                                                                   КОНЕЦ
                                                           КОНЕЦ
                                                   КОНЕЦ
                                           КОНЕЦ
                                   КОНЕЦ
                           КОНЕЦ
                   КОНЕЦ
           КОНЕЦ КАК Дата,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Организация КАК Организация,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент КАК Контрагент,
           ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК Долг
       ИЗ
           РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки) КАК Долги
       ПО (НАЧАЛОПЕРИОДА(Таблица_Период.ДатаКалендаря, ДЕНЬ) >= Долги.Дата),
   (ВЫБРАТЬ
       КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица_Период.ДатаКалендаря) КАК Количество
   ИЗ
       Таблица_Период КАК Таблица_Период) КАК ОбщееКоличествоДней

СГРУППИРОВАТЬ ПО
   Долги.Организация,
   Долги.Контрагент,
   Долги.ДоговорКонтрагента,
   Долги.ДокументРасчетовСКонтрагентом,
   Таблица_Период.ДатаКалендаря,
   ОбщееКоличествоДней.Количество,
   ВЫБОР
       КОГДА Долги.Дата <= НАЧАЛОПЕРИОДА(Таблица_Период.ДатаКалендаря, ДЕНЬ)
           ТОГДА ВЫБОР
                   КОГДА Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности > 0
                       ТОГДА ВЫБОР
                               КОГДА РАЗНОСТЬДАТ(Долги.Дата, Таблица_Период.ДатаКалендаря, ДЕНЬ) > Долги.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности
                                   ТОГДА Долги.Долг
                               ИНАЧЕ 0
                           КОНЕЦ
                   ИНАЧЕ 0
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ
24 Ayvengo
 
19.10.12
14:17
И вот как оно выглядит в СКД
http://saveimg.ru/show-image.php?id=08394616b7a3dc1418c4aba87e1d94ce
25 Ayvengo
 
19.10.12
14:19
Тормозящее место в этом запросе - расчет даты документа, если она попадает на выходной день.
26 Ayvengo
 
19.10.12
14:22
http://saveimg.ru/show-image.php?id=be636bd6ee821114f4adbe05e75a5b27 более понятная картинка
27 КуплюКровать
 
19.10.12
14:27
(18)а че за выходные дни считаешь среднюю? их надо исключить
28 Axel2009
 
19.10.12
15:08
(23) как отчет по остаткам на один день покажет мне средние остатки по документу в течение месяца?
29 Ayvengo
 
19.10.12
15:13
(28) омг.. крути запрос под себя.. мне так удобнее его было писать. делай период через параметры и в путь.
30 Ayvengo
 
19.10.12
15:14
(28) ты хотя пробовал запрос тот, что я тебе дал в СКД запихать? Или так.. посмотрел в запрос и все сразу понял?
31 Axel2009
 
19.10.12
15:16
(30) я сразу все понял. мне не нужен средний долг по компании. а мне нужен средний долг в разрезе каждого контрагента за отчетный период. по иерархии скд наверх от договора к организации он суммируется (средний долг).
32 Ayvengo
 
19.10.12
15:17
(31) ох.. заметь, что запросы отличаются и надо смотреть последний. если все сразу понимаешь, тогда должен был заметить РАЗНОСТЬДАТ(Долги.Дата, Таблица_Период.ДатаКалендаря, ДЕНЬ) это условие.
33 Ayvengo
 
19.10.12
15:18
(31) в общем, если тебе нужно то, что ты описал в (18) тогда запрос работает. Иди пробуй.. читатель :)
34 Axel2009
 
19.10.12
15:22
(33) а ты пробовал под эти данные выполнение своего запроса, или на глаз? =)
35 Axel2009
 
19.10.12
15:23
(34)+ в каком месте покажут что на 08.09 и на 09.09 долг 100 руб?
36 Ayvengo
 
19.10.12
15:23
(34) конечно пробовал
37 Ayvengo
 
19.10.12
15:30
(35) понял тебя. Сейчас поищем что можно сделать
38 Axel2009
 
19.10.12
15:31
(37) и дату выводить не надо. среднее должно показываться в целом за период в разрезе контрагента
39 Ayvengo
 
19.10.12
15:37
(38) это ты уже и сам сможешь настроить в СКД.
40 Axel2009
 
19.10.12
15:42
(39) да настроить то все смогу. вопрос в быстродействии.
и это только часть запросика, которую хотелось бы оптимизнуть. +)
вопрос в высчитывании просрочки на определенную дату есть и он меня вполне устраивает 300мс =) а вот эта байда когда нужно в течении месяца просчитать 6.5 секунд считает
общее колво документов с задолженостями 23тыс
41 Ayvengo
 
19.10.12
17:03
http://webfile.ru/6172507 - попробуй такой вариант.
42 Ayvengo
 
19.10.12
17:06
(40) но Ты сам должен понимать, что, если тебе нужны остатки на каждый день, то для этого нужно их получить.. а это куча запросов на каждую дату.. в SQL запрос будет вообще жестоким ))) боюсь даже представить на сколько..
43 Ayvengo
 
19.10.12
17:07
+(42) хотя, жестокость, наверное, ограничивается моим малым знанием запросов в самой SQL
44 GLazNik
 
19.10.12
17:07
(40) если нужно быстродействие, то пиши в отдельный регистр
45 Axel2009
 
19.10.12
17:08
(42) да уже все считает. и запрос который в (7) работает как надо. вопрос в том что его хочется оптимизнуть.
46 Ayvengo
 
19.10.12
17:11
(45) попробовал (41)?
47 Ayvengo
 
19.10.12
17:16
+(46) там вопрос решен можно сказать средствами СКД.
48 Ayvengo
 
19.10.12
17:20
(45) жду ответа, интересно же :)
49 Axel2009
 
19.10.12
17:26
(47) попробовал. ни разу не использовал, узнал чтото новое =) но по времени запрос выполнялся 40 секунд
50 Ayvengo
 
19.10.12
17:29
(49) хыхы, ну хоть в чем-то польза. Жаль у меня нет под рукой большой базы :( непотестить.

Значит твой запрос вполне оптимизированный :D
51 Ayvengo
 
19.10.12
17:31
(49) возможно стоит прислушаться к (44), там точно мгновенно сформируется отчет.
52 Ayvengo
 
19.10.12
17:32
+(51) тут уже вопрос на сколько актуальными должны быть данные. Если сиюминутные, тогда нужно прикручивать какую-нибудь подписку, если вчерашние - то регламентное задание, которое тебе все соберет :)
53 Axel2009
 
19.10.12
17:36
(50) да нет, мой запрос еще можно оптимизнуть, только я еще не придумал как
(51) этот вариант я не рассматриваю, потому как актуальность нужна
54 sanja26
 
19.10.12
17:37
рабочие дни считать считать через вызов функции из общего модуля типовой в ресурсе в скд или в вычисляемом поле
55 sanja26
 
19.10.12
17:38
тем более есть такая возможность...
писал раньше с разрывом в запросе как в типовой
56 Ayvengo
 
19.10.12
17:39
(55) медленнее работать будет, мне кажется.
57 Ayvengo
 
19.10.12
17:40
(55) да и тем более не нужно.. спокойно из регистра тянется.
58 sanja26
 
19.10.12
17:43
(57) рабочие дни тянуть из регистра производственный календарь и самому считать, а потом соединять - попробуй
59 Ayvengo
 
19.10.12
17:48
(58) всяко лучше чем на каждую строку вызывать функцию из модуля. да и видимо идею задачи не очень уловил, ты?
60 sanja26
 
19.10.12
17:57
(59) т.е. ты считаешь, что скд на каждую строчку задолженности будет рассчитывать срок задолженности и это будет как-то неправильно? не проверял, надо скд-шный запрос смотреть

если задать в скд отбор количество дней просрочки > допустимое кол-во дней, может лучше тебя запрос построит. Да и мороки никакой
61 sanja26
 
19.10.12
17:58
(59) скажи прямо, что ни разу такой функцией не пользовался)
62 Ayvengo
 
19.10.12
18:06
(60) цель задачи в чем?
(61) пользовался, не нравится из-за медленности работы.
63 sanja26
 
19.10.12
18:09
(62) вывести задолженности и сроки просрочки по рабочим дням
Или я не правильно понял?
64 Ayvengo
 
19.10.12
18:11
(63) тут вопрос по средней просрочке :) т.е. на каждый день берем просрочку, складываем ее и делим на количество дней.
65 Ayvengo
 
19.10.12
18:15
+(64) количество дней - это количество рабочих дней за период.
66 sanja26
 
19.10.12
18:25
(64) тоже средствами скд реализуемо

и этот запрос надо на бумажке написать???
67 Ayvengo
 
19.10.12
18:51
(66) так никто не спорит, в (41) вариант предложен. Но опять же, он медленный. Зато запрос крайне простой.
Это реализуемо даже без СКД .. тут в теме вообще нет проблемы с реализацией, тут проблема с оптимизацией ;)
68 Axel2009
 
19.10.12
18:55
(66) да как хошь, главное чтобы работал