|
Помогите с запросом - очередные остатки на каждую дату | ☑ | ||
---|---|---|---|---|
0
D_Sergeevich
17.03.15
✎
15:27
|
Есть справочник Договора в нем есть ТЧ с графиком погашения, такой вот запрос выбирает суммы погашений по графику (ПогашениеПлан)
ВЫБРАТЬ СУММА(ДоговорыГрафикПогашения.СуммаПлатежа) КАК ПогашениеПлан, НАЧАЛОПЕРИОДА(ДоговорыГрафикПогашения.ДатаПлатежа, МЕСЯЦ) КАК Период, ДоговорыГрафикПогашения.Ссылка.ИсточникКредитования КАК Группа ИЗ Справочник.Договоры.ГрафикПогашения КАК ДоговорыГрафикПогашения ГДЕ ДоговорыГрафикПогашения.ДатаПлатежа МЕЖДУ &НачПериода И &КонПериода И ДоговорыГрафикПогашения.Ссылка.ПометкаУдаления = ЛОЖЬ СГРУППИРОВАТЬ ПО ДоговорыГрафикПогашения.Ссылка.ИсточникКредитования, НАЧАЛОПЕРИОДА(ДоговорыГрафикПогашения.ДатаПлатежа, МЕСЯЦ) ДоговорыГрафикПогашения.Ссылка - это сам договор. Мне нужно чтобы на каждый Период делалась проверка задолженности в регистре накопления. Например: если формировать этот запрос за год, то нужно чтобы каждый месяц (январь, февраль и т.д.) проверялось есть задолженность по данному договору в этом месяце, если она есть то ПогашениеПлан добавлять если нет то нет. Я не знаю как добавить условие к ПогашениеПлан Условие должно делать запрос в регистр накопления. Надеюсь вы хоть немножко уловили суть задачи. Если есть вопросы задавайте. Благодарю за помощь. |
|||
1
Адский плющ
17.03.15
✎
15:30
|
"Если есть вопросы задавайте."
А какой вопрос? |
|||
2
D_Sergeevich
17.03.15
✎
15:33
|
(1) Как сделать проверку на задолженность по каждому договору между &НачПериода И &КонПериода помесячно?
|
|||
3
Nuobu
17.03.15
✎
15:36
|
(2) Погугли Остатки на дату из запроса.
|
|||
4
D_Sergeevich
17.03.15
✎
15:40
|
(3) А хоть какой то пример рабочий есть?
|
|||
5
Nuobu
17.03.15
✎
15:46
|
||||
6
DirecTwiX
17.03.15
✎
15:48
|
Что-нибудь вроде этого?
Выбрать
И сгруппировать |
|||
7
D_Sergeevich
17.03.15
✎
15:52
|
(5) А зачем мне нарастающие итоги?
Ладно щас буду пробовать что то на подобие (6) |
|||
8
fishb1
17.03.15
✎
16:22
|
Если дискретность 1 месяц, что если так:
... ЛЕВОЕ СОЕДИНЕНИЕ ВЫБРАТЬ ОстаткиЗадолженности.СуммаКонечныйОстаток, ОстаткиЗадолженности.Период ИЗ ОстаткиЗадолженности.ОстаткиИОбороты(&НачПериода, &КопПериода, Месяц,,) КАК ОстаткиЗадолженности ГДЕ ОстаткиЗадолженности.СуммаКонечныйОстаток <> 0 ПО НАЧАЛОПЕРИОДА(ДоговорыГрафикПогашения.ДатаПлатежа, МЕСЯЦ) = ОстаткиЗадолженности.Период |
|||
9
D_Sergeevich
17.03.15
✎
16:29
|
(8) А если в каком то периоде движений не было, оно проверит остаток?
|
|||
10
fishb1
17.03.15
✎
16:50
|
(9) Проверит, конечно. Ну если не было движений, то просто СуммаНачальныйОстаток = СуммаКонечныйОстаток. Это виртуальные ресурсы Суммы, которые доступны для запроса при использовании периодичности.
|
|||
11
alle68
17.03.15
✎
17:02
|
(10) Ошибаешься...
|
|||
12
D_E_S_131
17.03.15
✎
17:08
|
(10) Ничего не выйдет. Придется выбирать нач.остаток, потом движения с периодами, потом соединять по условию "ДатаДвижения <= ДатаГрафика" с суммированием и вычислением конечного остатка как НачОст + Приход - Расход. "Остаток товара по дням" - вечная тема.
|
|||
13
fishb1
17.03.15
✎
19:26
|
Видимо я не совсем понял суть.
Вот рабочий запрос для моей версии вашей задачи :): ВЫБРАТЬ ГрафикПогашения.ИсточникКредитования КАК ИсточникКредитования, ГрафикПогашения.Период КАК Период, ISNULL(ОстатокЗадолженностиОстаткиИОбороты.СуммаНачальныйОстаток, 0) КАК ОстатокНаНачалоПериода, ISNULL(ОстатокЗадолженностиОстаткиИОбороты.СуммаПриход, 0) КАК Выдано, ISNULL(ОстатокЗадолженностиОстаткиИОбороты.СуммаРасход, 0) КАК Погашено, ГрафикПогашения.ПогашениеПлан, ISNULL(ОстатокЗадолженностиОстаткиИОбороты.СуммаКонечныйОстаток, 0) КАК ОстатокНаКонецПериода ИЗ (ВЫБРАТЬ ДоговорыГрафикПогашения.Ссылка КАК Договор, НАЧАЛОПЕРИОДА(ДоговорыГрафикПогашения.ДатаПлатежа, МЕСЯЦ) КАК Период, СУММА(ДоговорыГрафикПогашения.Сумма) КАК ПогашениеПлан, ДоговорыГрафикПогашения.ИсточникКредитования КАК ИсточникКредитования ИЗ Справочник.Договоры.ГрафикПогашения КАК ДоговорыГрафикПогашения ГДЕ ДоговорыГрафикПогашения.ДатаПлатежа МЕЖДУ &НачПериода И &КонПериода И ДоговорыГрафикПогашения.Ссылка.ПометкаУдаления = ЛОЖЬ И ДоговорыГрафикПогашения.Ссылка = &Договор СГРУППИРОВАТЬ ПО ДоговорыГрафикПогашения.ИсточникКредитования, ДоговорыГрафикПогашения.Ссылка, НАЧАЛОПЕРИОДА(ДоговорыГрафикПогашения.ДатаПлатежа, МЕСЯЦ)) КАК ГрафикПогашения ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстатокЗадолженности.ОстаткиИОбороты(&НачПериода, &КонПериода, Месяц, , Договор = &Договор) КАК ОстатокЗадолженностиОстаткиИОбороты ПО ГрафикПогашения.Период = ОстатокЗадолженностиОстаткиИОбороты.Период И ГрафикПогашения.Договор = ОстатокЗадолженностиОстаткиИОбороты.Договор УПОРЯДОЧИТЬ ПО ИсточникКредитования, Период Выбранных полей достаточно, чтобы построить какую угодно логику. Естественно, если в выборке будут задействован список договоров по какому-либо условию, то неплохо было бы собрать ссылки на договора во временную таблицу для проверки вхождения измерения Договор (если я правильно понял структуру регистра и он у вас есть) перед соединением. |
|||
14
hhhh
17.03.15
✎
19:34
|
(13) она не выдаст у вас все месяцы, а только те месяцы, которые в графике.
|
|||
15
fishb1
17.03.15
✎
20:07
|
(14)
1) Это несложно исправить 2) Пусть заполняют все нужные месяцы в графике 2) Изначально мы отталкивались запроса к графику и прикручивания к нему суммы долга из регистра. Задачи выводить все месяцы входящие в период, отсутствующие в графике, в ТЗ не было. :) |
|||
16
D_Sergeevich
18.03.15
✎
10:29
|
Так. Начал я с получения остатков на каждый месяц.
Вот запрос, если движений в периоде не было но остаток не равен 0 то договор попадает, а вот если остаток равен 0 то не попадает. Как сделать чтоб попадал даже с нулевым остатком? ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачПериода, МЕСЯЦ, Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1) КАК Период ПОМЕСТИТЬ ВТ_Календарь ИЗ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9) КАК Цифры1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9) КАК Цифры2 ПО (Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ)) ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9) КАК Цифры3 ПО (Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ)) ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК Цифра ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9) КАК Цифры4 ПО (Цифры4.Цифра * 1000 + Цифры3.Цифра * 100 + Цифры2.Цифра * 10 + Цифры1.Цифра * 1 <= РАЗНОСТЬДАТ(&НачПериода, &КонПериода, МЕСЯЦ)) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОборотыПоКонтрагентамОстаткиИОбороты.Договор КАК Договор, СУММА(ВЫБОР КОГДА ОборотыПоКонтрагентамОстаткиИОбороты.Период = &НачПериода ТОГДА ОборотыПоКонтрагентамОстаткиИОбороты.СуммаНачальныйОстаток ИНАЧЕ ВЫБОР КОГДА ОборотыПоКонтрагентамОстаткиИОбороты.Период < ВТ_Календарь.Период ТОГДА ОборотыПоКонтрагентамОстаткиИОбороты.СуммаОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ) КАК СуммаОстаток, ВТ_Календарь.Период КАК Период ИЗ РегистрНакопления.ОборотыПоКонтрагентам.ОстаткиИОбороты(&НачПериода, &КонПериода, Месяц, , ) КАК ОборотыПоКонтрагентамОстаткиИОбороты, ВТ_Календарь КАК ВТ_Календарь ГДЕ ОборотыПоКонтрагентамОстаткиИОбороты.Контрагент.ЮрФизЛицо <> &ЮрФизЛицо СГРУППИРОВАТЬ ПО ОборотыПоКонтрагентамОстаткиИОбороты.Договор, ВТ_Календарь.Период УПОРЯДОЧИТЬ ПО Договор, Период АВТОУПОРЯДОЧИВАНИЕ |
|||
17
К_Дач
18.03.15
✎
10:35
|
Вот запрос получения остатков товаров по складам на каждый день из выбранного интервала. Из курса "Запросы" 1с-курсы
ВЫБРАТЬ 0 КАК Цифра ПОМЕСТИТЬ ВТ_Цифры ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, ВТ_Цифры.Цифра + 10 * ВТ_Цифры1.Цифра) КАК Поле1 ПОМЕСТИТЬ ВТ_Даты ИЗ ВТ_Цифры КАК ВТ_Цифры ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Цифры КАК ВТ_Цифры1 ПО (ИСТИНА) ГДЕ ДОБАВИТЬКДАТЕ(&Дата1, ДЕНЬ, ВТ_Цифры.Цифра + 10 * ВТ_Цифры1.Цифра) МЕЖДУ &Дата1 И &Дата2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.Период, ТоварыНаСкладахОстаткиИОбороты.Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток ПОМЕСТИТЬ ВТ_Остатки ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, День, , Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстаткиИОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Остатки.Период КАК Период, МИНИМУМ(ВЫБОР КОГДА КОНЕЦПЕРИОДА(ВТ_Остатки1.Период, ДЕНЬ) = &Дата2 ТОГДА &Дата2 ИНАЧЕ ДОБАВИТЬКДАТЕ(ВТ_Остатки1.Период, СЕКУНДА, -1) КОНЕЦ) КАК Период1, ВТ_Остатки.Номенклатура КАК Номенклатура, ВТ_Остатки.Склад КАК Склад, ВТ_Остатки.Остаток ПОМЕСТИТЬ ВТ_ОстаткиИнтервалами ИЗ ВТ_Остатки КАК ВТ_Остатки ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки1 ПО ВТ_Остатки.Номенклатура = ВТ_Остатки1.Номенклатура И ВТ_Остатки.Склад = ВТ_Остатки1.Склад И ВТ_Остатки.Период < ВТ_Остатки1.Период СГРУППИРОВАТЬ ПО ВТ_Остатки.Склад, ВТ_Остатки.Номенклатура, ВТ_Остатки.Период, ВТ_Остатки.Остаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Даты.Поле1 КАК Дата, ВТ_ОстаткиИнтервалами.Номенклатура КАК Номенклатура, ВТ_ОстаткиИнтервалами.Склад КАК Склад, ВТ_ОстаткиИнтервалами.Остаток ИЗ ВТ_ОстаткиИнтервалами КАК ВТ_ОстаткиИнтервалами ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Даты КАК ВТ_Даты ПО (ВТ_Даты.Поле1 МЕЖДУ ВТ_ОстаткиИнтервалами.Период И ВТ_ОстаткиИнтервалами.Период1) УПОРЯДОЧИТЬ ПО Номенклатура, Склад, Дата |
|||
18
тарам пам пам
18.03.15
✎
11:23
|
(17) Запрос в таком виде будет работать только на периоде менее 100 дней. Для общего случая - надо либо добавить пару лишних соединений в запросе ВТ_Даты, либо формировать текст запроса динамически.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |