|
Помогите с запросом. | ☑ | ||
---|---|---|---|---|
0
WED
09.07.13
✎
10:34
|
Регистр накопления Взаиморасчеты: Контрагент, Сумма
Нужно по контрагенту получить обороты за период, но хитро: Допустим задан период 01.07 - 09.07, значи надо получить запросом суммы расхода за периоды: 01.06 - 01.07 02.06 - 02.07 03.06 - 03.07 .... 09.06 - 09.07 Помогите запрос написать. |
|||
1
1Сергей
09.07.13
✎
10:35
|
проще сваять ТЗ с периодами и соединить
|
|||
2
WED
09.07.13
✎
10:35
|
(1) т.е.?
|
|||
3
WED
09.07.13
✎
10:36
|
Мне это всё надо потом выдать отчетом через СКД, чтобы показать цифрами и графиком.
|
|||
4
Bober
09.07.13
✎
10:40
|
(0) а что будет при 10.06 - ?
|
|||
5
WED
09.07.13
✎
10:42
|
(4) Ничего, потому что задан период 01.07 - 09.07.
Фактически нужна сумма расхода за последний месяц на каждый день в указанном периоде. |
|||
6
Нууф-Нууф
09.07.13
✎
10:44
|
получить таблицу оборотов
|
|||
7
razlagator
09.07.13
✎
10:44
|
(0) хочешь в отчете сравнивать день с днем предыдущего месяца?
|
|||
8
WED
09.07.13
✎
10:44
|
(6) и?
|
|||
9
razlagator
09.07.13
✎
10:45
|
(7) не, это не то
|
|||
10
Oleg_Kag
09.07.13
✎
10:46
|
Период ПЕРИОДАМИ(ДЕНЬ, &ДатаНач, &ДатаКон)
|
|||
11
Нууф-Нууф
09.07.13
✎
10:46
|
01.06 500р
02.06 700р ... 01.07 125р 02.07 150р из нее получить таблицу 01.06 500р 01.07 (добавить месяц) 02.06 700р ... ... 01.07 125р ... 02.07 150р ... и ее соединить саму с собой при день >= день2. а потом сгруппировать и ссумировать |
|||
12
WED
09.07.13
✎
10:47
|
(7) нет
(10) это даст обороты за каждый день с 01.07 по 09.07 и это не то, что надо. |
|||
13
WED
09.07.13
✎
10:48
|
(11) ммм. не вкурил
|
|||
14
Oleg_Kag
09.07.13
✎
10:50
|
А понятно... задумка в запросе по каждому дня интервала получать обороты на каждый полный предыдущий месяц
|
|||
15
WED
09.07.13
✎
10:51
|
(14) Именно
|
|||
16
Inform
09.07.13
✎
10:51
|
(11) + надо наложить ограничение на другую часть:
День2 > ДобавитьМесяц(День, -1) |
|||
17
fisher
09.07.13
✎
10:54
|
Через ВычислитьВыражение() можно такое сделать в ресурсе СКД. Там можно задать выражения для начального и конечного значения по группировке.
|
|||
18
WED
09.07.13
✎
10:55
|
Попробую на цифрах объяснить....
Допустим расходы были такие: 01.06 10 р 02.06 9 р 03.06 10 р 04.06. 5 р. нет движений 01.07 1 р 02.07 2 р 03.07 1 р нет движений 09.07 10 р тогда запрос должен выдать такое: 01.06 - 01.07 = 35 (10+9+10+5+1) 02.06 - 02.07 = 27 (9+10+5+1+2) 03.06 - 03.07 = 19 (10+5+1+2+1) 04.06 - 04.07 = 9 (5+1+2+1) 05.06 - 05.07 = 4 (1+2+1) 06.06 - 06.07 = 4 (1+2+1) 07.06 - 07.07 = 4 (1+2+1) 08.06 - 08.07 = 4 (1+2+1) 09.06 - 09.07 = 14 (1+2+1+10) |
|||
19
Нууф-Нууф
09.07.13
✎
11:16
|
ВЫБРАТЬ
ВзаиморасчетыСКонтрагентамиОбороты.Период КАК Дата1, ВзаиморасчетыСКонтрагентамиОбороты.СуммаУпрРасход КАК Сумма, ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Период, МЕСЯЦ, 1) КАК Дата2 ПОМЕСТИТЬ ТаблицаОборотов ИЗ РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&НачалоПериода, &ОкончаниеПериода, День, ) КАК ВзаиморасчетыСКонтрагентамиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаОборотов.Дата1 КАК НачалоПериода, ТаблицаОборотов.Дата2 КАК ОкончаниеПериода, СУММА(ТаблицаОборотовДляСоединения.Сумма) КАК СуммаОборота ИЗ ТаблицаОборотов КАК ТаблицаОборотов ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОборотов КАК ТаблицаОборотовДляСоединения ПО ТаблицаОборотов.Дата1 <= ТаблицаОборотовДляСоединения.Дата1 И ТаблицаОборотов.Дата2 > ТаблицаОборотовДляСоединения.Дата1 СГРУППИРОВАТЬ ПО ТаблицаОборотов.Дата1, ТаблицаОборотов.Дата2 |
|||
20
Bober
09.07.13
✎
11:34
|
(0) хорошо, а что делать
с ?.02 - 30.03 ?.04-31.05 |
|||
21
Bober
09.07.13
✎
11:35
|
(0)
"получить обороты за период, но хитро" и "надо получить запросом суммы расхода " так обороты нужны или расходы? |
|||
22
WED
09.07.13
✎
11:38
|
(20) Ничего не делать, потому что период задается 01.07 - 09.07
т.е. это даты концов интересующих периодов. (21) да, я не верно выразился. Нужны только расходы. |
|||
23
WED
09.07.13
✎
11:41
|
период, который указывает пользователь - это даты, который будут использованы как конечная дата месячных расходов.
т.е. если пользователь задает 01.07 - 03.07 значит ему нужны расходы за: 01.06 - 01.07 02.06 - 02.07 03.06 - 03.07 если пользователь задаст 30.03 - 03.04 значит нужны расходы за периоды: 28.02 - 30.03 01.03 - 01.04 02.03 - 02.04 03.03 - 03.04 |
|||
24
sirsp
09.07.13
✎
11:46
|
ВЫБРАТЬ ДАТАВРЕМЯ(2013,06,01) Период, 10 Сумма ПОМЕСТИТЬ Данные
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,06,02) Период, 9 Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,06,03) Период, 10 Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,06,04) Период, 5 Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,07,01) Период, 1 Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,07,02) Период, 2 Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,07,03) Период, 1 Сумма ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДАТАВРЕМЯ(2013,07,09) Период, 10 Сумма ;////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Д1.Период ,СУММА(Д2.Сумма) Сумма ИЗ Данные Д1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ Данные Д2 ПО Д1.Период МЕЖДУ &нач И &кон И Д2.Период МЕЖДУ ДОБАВИТЬКДАТЕ(Д1.Период, МЕСЯЦ, -1) И Д1.Период СГРУППИРОВАТЬ ПО Д1.Период |
|||
25
WED
09.07.13
✎
11:48
|
(24) Прикольно, а если период другой? :)
|
|||
26
RomanYS
09.07.13
✎
11:48
|
(23)
28.02 - 30.03 ????? - 31.03 01.03 - 01.04 02.03 - 02.04 03.03 - 03.04 Ответ в (19), только не забудь расширить период в первой ВТ на месяц назад, и отсечь лишние (непопадающие в исходный период) записи во втором подзапросе |
|||
27
Bober
09.07.13
✎
11:49
|
(23) не понял алгоритма на сложных датах (29, 30, 31).
делаешь один запрос по таблице движений а-ля ВЫБРАТЬ НачалоПериода(РН.Период, ДЕНЬ) КАК ПериодДень, СУММА(РН.Ресурс) КАК Ресурс ПОМЕСТИТЬ РасходыПоДням ИЗ РегистрНакопления.Расчеты КАК РН ГДЕ РН.Период МЕЖДУ &НачалоПериода И &КонецПериода И РН.Активность И РН.ВидДвижения = Значение(ВидДвиежнияНакопления.Расход) СГРУППИРОВАТЬ ПО НачалоПериода(РН.Период, ДЕНЬ) |
|||
28
Bober
09.07.13
✎
11:50
|
(27) щас напишу что дальше делать
|
|||
29
WED
09.07.13
✎
11:51
|
Можно немного упростить:
Берем интервалы по 30 дней, вне зависимости от количства дней месяца. |
|||
30
WED
09.07.13
✎
11:59
|
(26) запрос в (19) выдает расход за каждый день за указанный период, т.е. не то, что надо.
|
|||
31
Bober
09.07.13
✎
12:00
|
(27) далее через ТЗ или генерацию периодов запросом (если отчет на СКД) создаешь таблицу вида
НачалоПериода, КонецПериода потом к таблице левым соединением присоединяешь запрос из (27) с условиях соединения ставишь "ПО РасходыПоДням.ПериодДень МЕЖДУ ТЗПериоды.НачалоПериода И ТЗПериоды.КонецПериода" и делаешь группировку. Все. |
|||
32
WED
09.07.13
✎
12:06
|
(31) В том и дело, что этот отчет уже есть практически в том же варианте, что ты предложил:
сначала запросом получается временная таблица, в которой каждая строка - суммарный расход за 30 дней по каждой дате из указанного периода. А потом СКД из этой таблицы строит отчет. Я хотел свести всё воедино в один запрос в СКД. |
|||
33
Bober
09.07.13
✎
12:24
|
(32) не понимаю как можно просуммировать данные из запроса по регистру без таблицы периодов. все делается минимум тремя запросами если
|
|||
34
Bober
09.07.13
✎
12:24
|
через запрос. и больше трех если через СКД
|
|||
35
RomanYS
09.07.13
✎
12:29
|
(30) запрос в (19) делает тоже самое что и в (24) - это то, что тебе нужно, осталось только аккуратно передать параметры
|
|||
36
Нууф-Нууф
09.07.13
✎
12:45
|
(30) запрос в 19 возвращает расходы не за каждый день, а за каждый месяц начиная с каждой даты как ты и описал в 18.
возьми любой свой регистр, по которому ты строишь, убери группировку и суммирование в конце и все увидишь. только незабудь про каммент про дополнительный месяц для второй ВТ. Точнее на этот дополнительный месяц нужно увеличить первую ВТ, а потом ее же и ограничить. вообщем с периодами правильно сыграть. |
|||
37
WED
10.07.13
✎
16:10
|
(36) У меня запрос вернул расход за каждый день в периоде + 2 даты: начало месяца и конец месяца.
Причем для периода 01.07 - 09.07 даты были 01.07 - 01.08, 02.07 - 02.08... т.е. месяц прибавлялся, а надо наоборот. |
|||
38
WED
10.07.13
✎
16:11
|
+(37) или я что-то не так понимаю с этим запросом
|
|||
39
WED
11.07.13
✎
15:00
|
Всё. Получилось.
Благодаря наводке в (19) получил нудный запрос: <CODE> ВЫБРАТЬ Взаиморасчеты.Период КАК Дата1, Взаиморасчеты.СуммаРасход КАК Сумма, ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(Взаиморасчеты.Период, МЕСЯЦ, 1), СЕКУНДА, -1) КАК Дата2 ПОМЕСТИТЬ ТаблицаОборотов ИЗ РегистрНакопления.Взаиморасчеты.Обороты(ДОБАВИТЬКДАТЕ(&НачалоПериода, МЕСЯЦ, -1), &ОкончаниеПериода, День, ) КАК Взаиморасчеты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаОборотов.Дата1 КАК НачалоПериода, ТаблицаОборотов.Дата2 КАК ОкончаниеПериода, СУММА(ТаблицаОборотовДляСоединения.Сумма) КАК СуммаОборота ИЗ ТаблицаОборотов КАК ТаблицаОборотов ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаОборотов КАК ТаблицаОборотовДляСоединения ПО ТаблицаОборотов.Дата1 <= ТаблицаОборотовДляСоединения.Дата1 И ТаблицаОборотов.Дата2 > ТаблицаОборотовДляСоединения.Дата1 ГДЕ ТаблицаОборотов.Дата2 >= &НачалоПериода И ТаблицаОборотов.Дата2 <= &ОкончаниеПериода СГРУППИРОВАТЬ ПО ТаблицаОборотов.Дата1, ТаблицаОборотов.Дата2 УПОРЯДОЧИТЬ ПО НачалоПериода </CODE> |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |