Имя: Пароль:
1C
1С v8
Через ЗАПРОС организовать цикл по датам месяца можно?
,
0 andryuhin
 
28.07.14
14:17
Всем привет.
С использованием ЗАПРОСА мне нужно получить на выходе список дат месяца:

01.07.2014 00:00:00
02.07.2014 00:00:00
...
31.07.2014 00:00:00

Это вообще сделать можно? Если можно, то как?
1 floody
 
28.07.14
14:18
Разрешаю.
2 le_
 
28.07.14
14:20
3 Wobland
 
28.07.14
14:20
а выбери из таблички дат
4 azernot
 
28.07.14
14:23
ВЫБРАТЬ
    1 КАК Разряд
ПОМЕСТИТЬ Цифры

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    9

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, Числа.Число) КАК ДатаДень
ПОМЕСТИТЬ Даты
ИЗ
    (ВЫБРАТЬ
        Единицы.Разряд + ЕСТЬNULL(Десятки.Разряд, 0) * 10 + ЕСТЬNULL(Сотни.Разряд, 0) * 100 + ЕСТЬNULL(Тысячи.Разряд, 0) * 1000 + ЕСТЬNULL(ДесяткиТысяч.Разряд, 0) * 10000 + ЕСТЬNULL(СотниТысяч.Разряд, 0) * 100000 КАК Число
    ИЗ
        Цифры КАК Единицы
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Сотни
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Десятки
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК Тысячи
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 1000)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК ДесяткиТысяч
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 10000)
            ЛЕВОЕ СОЕДИНЕНИЕ Цифры КАК СотниТысяч
            ПО (РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) >= 100000)) КАК Числа
ГДЕ
    Числа.Число <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)

;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
    Даты.ДатаДень как День,
    НАЧАЛОПЕРИОДА(Даты.ДатаДень, МЕСЯЦ) КАК Месяц
ИЗ
    Даты КАК Даты
5 le_
 
28.07.14
14:23
+(2) Вот здесь еще последний запрос: http://kb.mista.ru/article.php?id=579&;
6 Wobland
 
28.07.14
14:24
7 andryuhin
 
28.07.14
15:25
мда, достаточно геморно. Но видимо без простых вариантов, нужно пробовать это.

Спасибо большое за советы. О результатах доложусь
8 John83
 
28.07.14
16:31
почему не обрабатывать какой-нить регистр, типа курсов валют или производственного календаря?
9 anatoly
 
28.07.14
16:34
(8) тогда выходных и праздников не будет.
10 John83
 
28.07.14
16:42
(9) куда ж они подеваются?
11 andryuhin
 
28.07.14
17:01
(8) как раз их и надо будет обрабатывать, НО ЛЕВЫМ СОЕДИНЕНИЕМ для каждой даты месяца
12 John83
 
29.07.14
21:02
(11) и в чем проблема?
зачем такой изврат?
13 andryuhin
 
30.07.14
11:12
(12) Ты видать сути не догоняешь. Только вот не пойму чего конкретно.

Если регистр по некоторым измерениям ПУСТОЙ. Ну не заполнили его, а в запросе даты нужны. Ты как их туда по-другому запихнешь?
14 GROOVY
 
30.07.14
11:17
(13) А нафига они в запросе, если их нет в регистре?
15 YFedor
 
30.07.14
11:18
(0)СКД может
16 GROOVY
 
30.07.14
11:24
(15) Если речь про вывод данных, то и обычные запросы могут в выборке получить отсутствующие периоды.
17 andryuhin
 
30.07.14
11:24
(14) Отчет такой:

колонки - это каждое число месяца
по каждому числу нужно из регистра вытянуть производственные показатели. В регистре не все даты присутствуют, а в отчете все
18 GROOVY
 
30.07.14
11:27
(17) Ну так, у выборки запроса есть возможность получить дополнение. В СКД так-же у группировки можно дополнение получить.
19 andryuhin
 
30.07.14
11:28
(18)  СКД не использую.

"у выборки запроса есть возможность получить дополнение" - спасибо за идею, сейчас гляну, как это прикрутить
20 GROOVY
 
30.07.14
11:29
запрос = новый запрос;
текст = "
|ВЫБРАТЬ
|    ЗаказыПокупателейОбороты.Период КАК Период,
|    ЗаказыПокупателейОбороты.Номенклатура КАК Номенклатура,
|    ЗаказыПокупателейОбороты.ЗаказПокупателя КАК ЗаказПокупателя,
|    ЗаказыПокупателейОбороты.КоличествоОборот КАК КоличествоОборот
|ИЗ
|    РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(&НачДата, &КонДата, День, , ) КАК ЗаказыПокупателейОбороты
|
|УПОРЯДОЧИТЬ ПО
|    Период
|
|ИТОГИ СУММА(КоличествоОборот) ПО
|    Период ПЕРИОДАМИ(ДЕНЬ, &НачДата, &КонДата)";

Запрос.УстановитьПараметр("НачДата", '20040601000000');
Запрос.УстановитьПараметр("КонДата", '20040930235959');

Запрос.Текст = Текст;

Рез = запрос.Выполнить();
обход = рез.выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период", "Все");

пока обход.следующий() цикл
сообщить(">> " + обход.период);
конеццикла;
21 Один С
 
30.07.14
11:36
(20) Класс! Спасибо, утащил в блокнотик..
22 andryuhin
 
30.07.14
11:53
(20)  Да, все верно. Для "даты" есть возможность отобрать по всем заданным периодам. Спасибо.  Работает.

А я действительно изврат придумывал.