Имя: Пароль:
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) т.е. на признаки вообще не обращаем внимания, но если вдруг окажется, что надо их учитывать, это опа, придется делать производствнный календарь....
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn