Имя: Пароль:
1C
 
Как в запросе корректно добавить к дате день недели даты из параметра?
0 megabax
 
27.07.17
08:37
Добрый день. Пытаюсь в запросе добавить к дате день недели из параметра, например, как-то так:
ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, МЕСЯЦ, -1), ДЕНЬ, ДЕНЬНЕДЕЛИ(&ДатаОтчета)) и говорит
"Неверные параметры".
Вот полный текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ПродажиОбороты.Магазин КАК Магазин,
    СУММА(ПродажиОбороты.СтоимостьОборот) КАК TotalLastMonth_RUB,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК TotalLastMonth_PCS
ИЗ
    РегистрНакопления.Продажи.Обороты(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, МЕСЯЦ, -1), НЕДЕЛЯ), ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, МЕСЯЦ, -1), ДЕНЬ, ДЕНЬНЕДЕЛИ(&ДатаОтчета)), День, ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Магазин
1 megabax
 
27.07.17
08:37
Подскажите, пожалуйста, как лечить?
2 Рэйв
 
27.07.17
08:41
ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(&ДатаОтчета, МЕСЯЦ, -1), ДЕНЬ,&ПараметрДень)
3 Рэйв
 
27.07.17
08:42
Сразу в параметр передавай день недели
4 1dvd
 
27.07.17
08:54
>>обавить к дате день недели из параметра

К девятому мая прибавить среду?
5 megabax
 
27.07.17
09:01
(3) спасибо, попробую.
(4) Не среду, а номер дня недели (среда - третий день). То есть, тут надо взять ту же саму неделю, но с прошлого месяца. При чем, если неделя не полная, то это надо учесть.
6 1dvd
 
27.07.17
09:03
(5) что такое неполная неделя?
7 1dvd
 
27.07.17
09:03
а... кажется дошло
8 1dvd
 
27.07.17
09:04
Если 1-ое число месяца выпадает на воскресенье, то со 2-го уже считается вторая неделя?
9 1dvd
 
27.07.17
09:05
Задачка интересная на самом деле
10 megabax
 
27.07.17
09:23
(9) Нет, не совсем так. Мы смотрим отчет в среду, значит, текущая недель - с понедельника по среду, и нам надо сравнить три дня этой недели с тремя днями недели прошлого месяца. Если смотрим в воскресенье - неделя прошла и сравниваем уже все семь дней.
11 FIXXXL
 
27.07.17
09:26
(10) в новый год и первомай как смотрим?
12 1dvd
 
27.07.17
09:33
вот, наваял. Может поможет

ВЫБРАТЬ
    НЕДЕЛЯ(&парДата) - НЕДЕЛЯ(НАЧАЛОПЕРИОДА(&парДата, МЕСЯЦ)) + 1 КАК НомерНедели,
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&парДата, МЕСЯЦ, -1), МЕСЯЦ) КАК НачалоПрошлогоМесяца,
    ДОБАВИТЬКДАТЕ(
        НАЧАЛОПЕРИОДА(
            ДОБАВИТЬКДАТЕ(
                НАЧАЛОПЕРИОДА(
                    ДОБАВИТЬКДАТЕ(&парДата, МЕСЯЦ, -1),
                МЕСЯЦ),
                НЕДЕЛЯ,
                НЕДЕЛЯ(&парДата) - НЕДЕЛЯ(НАЧАЛОПЕРИОДА(&парДата, МЕСЯЦ))
            ),
        НЕДЕЛЯ
        ),
    ДЕНЬ, ДЕНЬНЕДЕЛИ(&парДата) - 1) КАК Результат


Находит ту же по счету неделю и тот же день недели, что &парДата, только в прошлом месяца

ЗЫ пока без учёта неполных недель
13 megabax
 
27.07.17
10:18
(11) так же
14 megabax
 
27.07.17
10:22
(12) спасибо  :) я уже решил проблему через параметр, хотя пришлось с СКД полюбиться немного....
Если кому интересно, то вот решение:
    НастройкиОтчета = КомпоновщикНастроек.Настройки;
    
    ДатаОтчета=Неопределено;
    Для Каждого стр Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы цикл
        Если стр.Параметр=Новый ПараметрКомпоновкиДанных("ДатаОтчета") Тогда
            ДатаОтчета=стр.Значение;
        КонецЕсли
    КонецЦикла;
    Если ДатаОтчета=Неопределено Тогда
        сообщить("Не найден параметр ДатаОтчета");
    Иначе
        НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ДеньНедели", ДеньНедели(ДатаОтчета));
    КонецЕсли;

и в запросе
ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаОтчета, МЕСЯЦ, -1), НЕДЕЛЯ), ДЕНЬ, &ДеньНедели)
15 megabax
 
27.07.17
10:30
(13) т.е. на признаки вообще не обращаем внимания, но если вдруг окажется, что надо их учитывать, это опа, придется делать производствнный календарь....
Закон Брукера: Даже маленькая практика стоит большой теории.