Запрос 8.1. нужен совет по синтаксису
27.01.2011
13:10
#1
Регистр - Долги
Измерения - Контрагент, датаплатежа
Ресурсы - сумма
вопрос. Как написать запрос, который будет выводить за определенный период по дням конечный остаток, и еще колонку -просроченный остаток,(т.е. дата платежа меньше выводимой даты). знаю в 7.7 аналог (Когда датаПлатежа и тд.) а вот в 8 не получается(((
Спасибо заранее
Измерения - Контрагент, датаплатежа
Ресурсы - сумма
вопрос. Как написать запрос, который будет выводить за определенный период по дням конечный остаток, и еще колонку -просроченный остаток,(т.е. дата платежа меньше выводимой даты). знаю в 7.7 аналог (Когда датаПлатежа и тд.) а вот в 8 не получается(((
Спасибо заранее
27.01.2011
14:54
#2
"В 8-ке запросы - это как запрос к SQL, а значит получить Остатки в разрезе дат одним махом не выйдет.
Я делал так:
1. Выборка ОстаткиИОбороты за период
2. Сбор периодов
3. Получение таблицы связей
4. Получение итоговой таблицы.
т.е. ваш запрос (правда без просроченного остатка) будет выглядеть примерно так:
лЗапрос = Новый Запрос;
лЗапрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
лЗапрос.Текст = "Выбрать * Поместить ВТОстатки Из РегистрыНакопления.Долги.ОстаткиИОбороты (&ДатаНач, &ДатаКон, Секунда, , ) Как Остатки";
лЗапрос.УстановитьПараметр("ДатаНач", ДатаНач);
лЗапрос.УстановитьПараметр("ДатаКон", ДатаКон);
лЗапрос.Выполнить(); //Это 1.
лЗапрос.Текст = "Выбрать Остатки.Контрагент, КонецПериода (Остатки.ДатаПлатежа) Как ДатаСреза
|Поместить ВТДатыСреза Из ВТОстатки Как Остатки
|Сгруппировать по Остатки.Контрагент, КонецПериода (Остатки.ДатаПлатежа)";
лЗапрос.Выполнить(); //Это 2.
лЗапрос.Текст = "Выбрать ДатыСреза.Контрагент, ДатыСреза.ДатаСреза, Максимум(Остатки.ДатаПлатежа) Как МаксДатаПлатежа
|Поместить ВТСвязи Из ВТДатыСреза Как ДатыСреза Внутреннее соединение ВТОстатки Как Остатки по
| ДатыСреза.Контрагент = Остатки.Контрагент И ДатыСреза.ДатаСреза >= Остатки.ДатаПлатежа
|Сгруппировать по ДатыСреза.Контрагент, ДатыСреза.ДатаСреза";
лЗапрос.Выполнить(); //Это 3.
лЗапрос.Текст = "Выбрать ДатыСреза.*, Остатки.*
|Из ВТДатыСреза Как ДатыСреза Внутреннее соединение ВТСвязи Как Связи Внутреннее соединение ВТОстатки Как Остатки по
| Связи.Контрагент = Остатки.Контрагент И Связи.МаксДатаПлатежа = Остатки.ДатаПлатежа
| по ДатыСреза.Контрагент = Связи.Контрагент И ДатыСреза.ДатаСреза = Связи.ДатаСреза"
ТЗ = лЗапрос.Выполнить().Выгрузить(); //Это 4.
Ну а дальше - вооружаетесь КонсольюЗапросов и гоняете запросы добиваясь нужного вам результата."
Я делал так:
1. Выборка ОстаткиИОбороты за период
2. Сбор периодов
3. Получение таблицы связей
4. Получение итоговой таблицы.
т.е. ваш запрос (правда без просроченного остатка) будет выглядеть примерно так:
лЗапрос = Новый Запрос;
лЗапрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
лЗапрос.Текст = "Выбрать * Поместить ВТОстатки Из РегистрыНакопления.Долги.ОстаткиИОбороты (&ДатаНач, &ДатаКон, Секунда, , ) Как Остатки";
лЗапрос.УстановитьПараметр("ДатаНач", ДатаНач);
лЗапрос.УстановитьПараметр("ДатаКон", ДатаКон);
лЗапрос.Выполнить(); //Это 1.
лЗапрос.Текст = "Выбрать Остатки.Контрагент, КонецПериода (Остатки.ДатаПлатежа) Как ДатаСреза
|Поместить ВТДатыСреза Из ВТОстатки Как Остатки
|Сгруппировать по Остатки.Контрагент, КонецПериода (Остатки.ДатаПлатежа)";
лЗапрос.Выполнить(); //Это 2.
лЗапрос.Текст = "Выбрать ДатыСреза.Контрагент, ДатыСреза.ДатаСреза, Максимум(Остатки.ДатаПлатежа) Как МаксДатаПлатежа
|Поместить ВТСвязи Из ВТДатыСреза Как ДатыСреза Внутреннее соединение ВТОстатки Как Остатки по
| ДатыСреза.Контрагент = Остатки.Контрагент И ДатыСреза.ДатаСреза >= Остатки.ДатаПлатежа
|Сгруппировать по ДатыСреза.Контрагент, ДатыСреза.ДатаСреза";
лЗапрос.Выполнить(); //Это 3.
лЗапрос.Текст = "Выбрать ДатыСреза.*, Остатки.*
|Из ВТДатыСреза Как ДатыСреза Внутреннее соединение ВТСвязи Как Связи Внутреннее соединение ВТОстатки Как Остатки по
| Связи.Контрагент = Остатки.Контрагент И Связи.МаксДатаПлатежа = Остатки.ДатаПлатежа
| по ДатыСреза.Контрагент = Связи.Контрагент И ДатыСреза.ДатаСреза = Связи.ДатаСреза"
ТЗ = лЗапрос.Выполнить().Выгрузить(); //Это 4.
Ну а дальше - вооружаетесь КонсольюЗапросов и гоняете запросы добиваясь нужного вам результата."
27.01.2011
17:31
#3
"Можно проще
1. Использовать СКД
2. Если запрос то например так
текст запроса"
|...
| Наличные.Период КАК Период
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| &НачалоПериода,
| &КонецПериода,
| ДЕНЬ,
|.... ) КАК Наличные
|
|ПО
| Счет,
| Период ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)";
выборка1=запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Счет");
пока выборка1.Следующий() цикл
выборка2=выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Период","Все");
пока выборка2.Следующий() цикл
.....
// получаем остатки на каждый день
"
1. Использовать СКД
2. Если запрос то например так
текст запроса"
|...
| Наличные.Период КАК Период
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
| &НачалоПериода,
| &КонецПериода,
| ДЕНЬ,
|.... ) КАК Наличные
|
|ПО
| Счет,
| Период ПЕРИОДАМИ(ДЕНЬ, &НачалоПериода, &КонецПериода)";
выборка1=запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Счет");
пока выборка1.Следующий() цикл
выборка2=выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Период","Все");
пока выборка2.Следующий() цикл
.....
// получаем остатки на каждый день
"
Читают тему
(гостей: 1)