|
Как убрать выходные дни в запросе | ☑ | ||
---|---|---|---|---|
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) Я привел запрос, который будет точно определять не просроченные накладные и тут не надо ничего больше и шире. Нужно уметь ценить всю простоту рациональности
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |