Имя: Пароль:
1C
 
Как убрать выходные дни в запросе
0 Antony8x
 
23.03.17
15:46
Есть запрос, который определяет не просроченные накладные:


"ВЫБРАТЬ
        |    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход КАК Сумма,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
        |    КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата, ДЕНЬ, &Отсрочка), ДЕНЬ) КАК КрайнийСрокПлатежа,
        |    ВЫБОР
        |        КОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата, ДЕНЬ, &Отсрочка), ДЕНЬ) >= &ДатаСреза
        |            ТОГДА ""Не просрочена""
        |        ИНАЧЕ ""Не определена""
        |    КОНЕЦ КАК СтатусРеализации,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Период
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
        |            ,
        |            &ДатаСреза,
        |            Регистратор,
        |            Контрагент = &Контрагент
        |                И ДоговорКонтрагента = &ДоговорКонтрагента
        |                И Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиОбороты
        |ГДЕ
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг";

Т.е. берется дата документа к ней прибавляются дни отсрочки и полученная дата сравнивается с датой среза.
Мне надо чтобы при ДОБАВИТЬКДАТЕ не учитывались только рабочие дни. Определённо нужно прикрутить производственный календарь, пытаюсь не получается.
В таком запросе это реально сделать?
1 Antony8x
 
23.03.17
15:47
учитывались только рабочие дни, хотел сказать)
2 АнтонБ
 
23.03.17
16:02
2000
3 Antony8x
 
23.03.17
16:08
аа, по-идее вот так должно сработать:

"ВЫБРАТЬ
        |    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход КАК Сумма,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор,
        |    КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата, ДЕНЬ, &Отсрочка), ДЕНЬ) КАК КрайнийСрокПлатежа,
        |    ВЫБОР
        |        КОГДА КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата, ДЕНЬ, &Отсрочка), ДЕНЬ) >= &ДатаСреза
        |            ТОГДА ""Не просрочена""
        |        ИНАЧЕ ""Не определена""
        |    КОНЕЦ КАК СтатусРеализации,
        |    ВзаиморасчетыСКонтрагентамиОбороты.Период
        |ИЗ
        |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
        |            ,
        |            &ДатаСреза,
        |            Регистратор,
        |            Контрагент = &Контрагент
        |                И ДоговорКонтрагента = &ДоговорКонтрагента
        |                И Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиОбороты
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
        |        ПО ВзаиморасчетыСКонтрагентамиОбороты.Период = РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
        |ГДЕ
        |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
        |    И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата И &ДатаСреза
        |    И РегламентированныйПроизводственныйКалендарь.ВидДня = &Рабочий";
4 xantimans
 
23.03.17
16:15
(1) в текущем запросе получай только дату регистратора без условий(выбор*), из получившегося вычленяешь различные даты в отдельную таблицу(вложенные запросы), затем из производственного календаря в отдельную таблицу все даты с видом дня (рабочий, предпраздничный), после джоинишь по условию  датаКалендаря между ДатаРегистротор и Добавитькдате(Датарегистр,день, отсрочка) из получившегося для каждой даты получаешь максимальную дату, которая и будет твоим "Deadend", ну а потом ее сравнивай с датой среза
5 Antony8x
 
24.03.17
06:35
(4)Если джоинить по условию "датаКалендаря между ДатаРегистротор и Добавитькдате(Датарегистр,день, отсрочка)" не проканает, т.к. будут выбираться только рабочие даты в календарном интервале Дата реализации + Отсрочка
6 Antony8x
 
24.03.17
06:40
(0) Вот так извернулся, работает:

    "ВЫБРАТЬ
|    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовПриход КАК Сумма,
|    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор.Дата,
|    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор
|ПОМЕСТИТЬ Документы
|ИЗ
|    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(
|            ,
|            &ДатаСреза,
|            Регистратор,
|            Контрагент = &Контрагент
|                И ДоговорКонтрагента = &ДоговорКонтрагента
|                И Организация = &Организация) КАК ВзаиморасчетыСКонтрагентамиОбороты
|ГДЕ
|    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
|ПОМЕСТИТЬ ДатыКалендаря
|ИЗ
|    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
|    РегламентированныйПроизводственныйКалендарь.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Документы.Сумма,
|    Документы.РегистраторДата,
|    КОЛИЧЕСТВО(ДатыКалендаря.ДатаКалендаря) КАК ДатаКалендаря,
|    ВЫБОР
|        КОГДА КОЛИЧЕСТВО(ДатыКалендаря.ДатаКалендаря) <= &Отсрочка
|            ТОГДА ""Не просрочена""
|        ИНАЧЕ ""Не определена""
|    КОНЕЦ КАК СтатусНакладной,
|    Документы.Регистратор
|ИЗ
|    Документы КАК Документы
|        ЛЕВОЕ СОЕДИНЕНИЕ ДатыКалендаря КАК ДатыКалендаря
|        ПО (ДатыКалендаря.ДатаКалендаря МЕЖДУ Документы.РегистраторДата И &ДатаСреза)
|
|СГРУППИРОВАТЬ ПО
|    Документы.Сумма,
|    Документы.РегистраторДата,
|    Документы.Регистратор
|
|УПОРЯДОЧИТЬ ПО
|    СтатусНакладной";



может кому пригодится:
7 xantimans
 
24.03.17
09:08
(6) твое решение "кастрированное" мое, мое решение имеет более широкое использование, и "проканает" как ты выразился.
8 Antony8x
 
24.03.17
09:53
(7) Я привел запрос, который будет точно определять не просроченные накладные и тут не надо ничего больше и шире. Нужно уметь ценить всю простоту рациональности
Программист всегда исправляет последнюю ошибку.