8.х Перебор документов по датам без пропуска дат

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем lushona, 7 июл 2008.

  1. TopicStarter Overlay
    lushona
    Offline

    lushona

    Регистрация:
    17 июн 2008
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Код:
    "ВЫБРАТЬ
    |	СУММА(ПланируемоеПоступлениеДенежныхСредств.СуммаДокумента) КАК СуммаДокумента,
    |	ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления КАК ДатаПоступления
    |ИЗ
    |	Документ.ПланируемоеПоступлениеДенежныхСредств КАК ПланируемоеПоступлениеДенежныхСредств
    |ГДЕ
    |	ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления <= &ВыбКонПериода
    |	И ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления >= &ВыбНачПериода
    |
    |СГРУППИРОВАТЬ ПО
    |	ПланируемоеПоступлениеДенежныхСредств.ДатаПоступления
    |ИТОГИ
    |	СУММА(СуммаДокумента)
    |ПО
    |	ДатаПоступления ПЕРИОДАМИ(ДЕНЬ, , )";
    
    
    простой запрос перебора документов одного вида
    а как сделать так, чтобы даты не пропускались? например, документы есть с датами поступления 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
  2. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Сделайте запрос так:
    Сначала выберите даты, а потом соедините их левым соединением с документами. Тогда все получится.

    Как-то можно выбрать в запросе все даты из периода, поищите или сделайте. Просто сейчас нет под рукой аналогичного кода.
  3. t352
    Offline

    t352

    Регистрация:
    7 июл 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Похожая проблема. Надо получить в запросе остатки для каждой даты, независимо от того, изменялся ли остаток. По умолчанию остатки показываются только для дней с изменениями. Для остальных - пустое значение. Помогите чайнику, плз.
  4. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Если трудно написать такое запросом, то предлагаю такой вариант:
    1. В отчете задаете период
    2. Внутри отчета делаете цикл по дням внутри заданного периода
    3. В цикле вызываете запрос, устанавливаете условиями нужный день и выводите требуемые данные

    Вроде такого
    Код:
    // Тут устанавливаем текст запроса
    Запрос = Новый Запрос;
    Запрос.Текст = "";
    
    // Устанавливаем общие параметры запроса (Кроме периода)
    
    ТекПериод = НачПериод;
    Пока ТекПериод <= КонПериод Цикл
    // Увеличение ровно на одни сутки
    ТекПериод = ТекПериод + 60*60*24; 
    
    // Устанавливаем период запроса и выполняем его
    // Выводим результат
    
    КонецЦикла;
    
    

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

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

    Еще вариант
    Получаем таблицу с пропусками дней, при выводе анализируем, если день в группировке меняется больше чем на 1 сутки - выводим строчку с нужным днем и нулями (ничего не менялось) или данными предыдущего дня (в случае, если нам надо остатки выводить).
  5. t352
    Offline

    t352

    Регистрация:
    7 июл 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Спасибо, пришлось так и сделать. Изначально пытался решить это именно в самом запросе. Но и так пойдет.
  6. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Правильнее сделать все в запросе, иначе при большом разбросе дат получается офигенное падение производительности...

Поделиться этой страницей