Помощь - Поиск - Пользователи - Календарь
Полная версия: Перебор документов по датам без пропуска дат
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
Люшона
Код
"ВЫБРАТЬ
| СУММА(ПланируемоеПоступлениеДенежныхСредств.СуммаДокумента) КАК СуммаДокумента,
| ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления КАК ДатаПоступления
|ИЗ
| Документ.ПланируемоеПоступлениеДенежныхСредств КАК ПланируемоеПоступлениеДенежныхСредств
|ГДЕ
| ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления <= &ВыбКонПериода
| И ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления >= &ВыбНачПериода
|
|СГРУППИРОВАТЬ ПО
| ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления
|ИТОГИ
| СУММА(СуммаДокумента)
|ПО
| ДатаПоступления ПЕРИОДАМИ(ДЕНЬ, , )";


простой запрос перебора документов одного вида
а как сделать так, чтобы даты не пропускались? например, документы есть с датами поступления 15.02.08, 18.02.08, 25.03.08. В отчет надо чтобы попадали не три строки с суммами из документов, а 40 строк, для тех строк, в которые документы отсутствуют сумма = 0.
15.02.08 - 10000
16.02.08 - 0
17.02.08 - 0
18.02.08 - 20000
19.02.08 - 0
...
24.03.08 - 0
25.03.08 - 15000
Эмин
Сделайте запрос так:
Сначала выберите даты, а потом соедините их левым соединением с документами. Тогда все получится.

Как-то можно выбрать в запросе все даты из периода, поищите или сделайте. Просто сейчас нет под рукой аналогичного кода.
t352
Похожая проблема. Надо получить в запросе остатки для каждой даты, независимо от того, изменялся ли остаток. По умолчанию остатки показываются только для дней с изменениями. Для остальных - пустое значение. Помогите чайнику, плз.
Эмин
Если трудно написать такое запросом, то предлагаю такой вариант:
1. В отчете задаете период
2. Внутри отчета делаете цикл по дням внутри заданного периода
3. В цикле вызываете запрос, устанавливаете условиями нужный день и выводите требуемые данные

Вроде такого
Код

// Тут устанавливаем текст запроса
Запрос = Новый Запрос;
Запрос.Текст = "";

// Устанавливаем общие параметры запроса (Кроме периода)

ТекПериод = НачПериод;
Пока ТекПериод <= КонПериод Цикл
// Увеличение ровно на одни сутки
ТекПериод = ТекПериод + 60*60*24;

// Устанавливаем период запроса и выполняем его
// Выводим результат

КонецЦикла;




Еще вариант (получше)
Делаем таблицу дней - на каждый день (в 8.1 можно делать таблицы значений и использовать их в запросах) и делаем запрос с учетом этой таблицы (левое соединение - таблица дней главная).

Еще вариант (измененный первый)
Получаем запросом таблицу или дерево с теми днями что есть.
Далее дополняем эту таблицу пустыми строками с нужными датами (в дереве даже легче - надо перебрать верхний уровень - дни и как находим пропуск - дополняем). Далее выводим такую таблицу.

Еще вариант
Получаем таблицу с пропусками дней, при выводе анализируем, если день в группировке меняется больше чем на 1 сутки - выводим строчку с нужным днем и нулями (ничего не менялось) или данными предыдущего дня (в случае, если нам надо остатки выводить).
t352
Спасибо, пришлось так и сделать. Изначально пытался решить это именно в самом запросе. Но и так пойдет.
BabySG
Правильнее сделать все в запросе, иначе при большом разбросе дат получается офигенное падение производительности...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.