|
запрос, задачка для разминки | ☑ | ||
---|---|---|---|---|
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) да как хошь, главное чтобы работал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |