|
Запрос биллинг-периода | ☑ | ||
---|---|---|---|---|
0
oly123456
15.03.12
✎
10:50
|
Задачка такая:
Есть дата начала биллинга, например "01.01.2010" биллинг-период квартал или год, например "Квартал", тогда биллинг-даты: "31.03.2010","30.06.2010","30.09.2010"... Нужно на любую дату, например "15.03.2012" найти ближайшую предыдущую биллинг-дату, для нашего примера должен вернуть "31.12.2011". Простым перебором можно сделать, а как сделать все с помощью запроса? |
|||
1
ptiz
15.03.12
✎
10:52
|
Ну очень сложная задача!
начало периода (квартал) и добавитькдате( -1 день) |
|||
2
ssh2006
15.03.12
✎
10:54
|
ВЫБРАТЬ
КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2012, 3, 12), КВАРТАЛ, -1), КВАРТАЛ) КАК Поле1 |
|||
3
oly123456
15.03.12
✎
10:56
|
Если дата на которую надо вернуть не "15.03.2012", а "31.03.2012", тогда вернет "31.12.2011", что не правильно!
|
|||
4
oly123456
15.03.12
✎
10:57
|
должен вернуть "31.03.2012"
|
|||
5
Ненавижу 1С
гуру
15.03.12
✎
10:59
|
(3) почему неправильно?
|
|||
6
Ненавижу 1С
гуру
15.03.12
✎
10:59
|
(4) тогда сравни с концом квартала
|
|||
7
oly123456
15.03.12
✎
11:01
|
можно, но я хотел все в запросе
|
|||
8
Maxus43
15.03.12
✎
11:03
|
(7) где проблема? это всё выше и так в запросе
|
|||
9
Maxus43
15.03.12
✎
11:03
|
и сравнивать там же можно
|
|||
10
oly123456
15.03.12
✎
11:05
|
можно написать запрос, для не грамотных?
|
|||
11
Maxus43
15.03.12
✎
11:11
|
Выбор Когда НачалоПериода(Период, День) = НачалоПериода(Период, Квартал) Тогда
НачалоПериода(Период, День) Иначе КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Период, КВАРТАЛ, -1), КВАРТАЛ) КАК Поле1 Конец |
|||
12
Maxus43
15.03.12
✎
11:12
|
короче если день - это и есть начало квартала - то ничо не делаем, иначе ищем начало предыдущего квартала
|
|||
13
oly123456
15.03.12
✎
12:02
|
Сделал так:
Функция НайтиБиллингДату(Биллинг) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) = КОНЕЦПЕРИОДА(&Дата, "+Биллинг+") | ТОГДА КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) | ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&Дата, "+Биллинг+", -1), "+Биллинг+") | КОНЕЦ КАК БиллингДата"; Запрос.УстановитьПараметр("Дата", ДатаОтчета); Возврат Запрос.Выполнить().Выгрузить()[0].БиллингДата; КонецФункции // НайтиБиллингДату() |
|||
14
oly123456
15.03.12
✎
12:05
|
Это не правильно, например биллинг-период "ГОД", начало "01.05.2010" выводит "31.12.2011", а должен "30.04.2011"
|
|||
15
Ненавижу 1С
гуру
15.03.12
✎
12:07
|
(14) это ПИПЕЦ, почему ведь ГОД жеж стоит?
|
|||
16
oly123456
15.03.12
✎
12:29
|
(1) ..."биллинг-период квартал или год"...
Если квартал, и начало "01.05.2010" тогда "31.01.2012" |
|||
17
Ненавижу 1С
гуру
15.03.12
✎
12:31
|
то есть если год, то ищем конецквартала, а если квартал - то конец месяца, так что ли?
|
|||
18
oly123456
15.03.12
✎
12:37
|
нет, в договоре есть реквизит биллинг-период (год или квартал выбирает пользователь при ввооде), и реквизит начало биллинг-периода
|
|||
19
Ненавижу 1С
гуру
15.03.12
✎
12:42
|
(18) нормально сформулируй задачу
|
|||
20
oly123456
15.03.12
✎
12:55
|
Например начало "01.05.2010", а биллинг-период "квартал", в конце каждого биллинг-периода делается реализация. В этом примере "31.07.2010" должна быть сделана первая реализация, "31.10.2010" еще одна, "31.01.2011" следующая и так далее.
Нужен отчет который покажет который покажет даты на которые клиенту надо делать реализации. Т.к. всегда работа с клиентами ведется по предоплате, собираю не закрытые авансы, а затем должен в отчете указать когда должна быть сделана реализация. Бух 2.0 |
|||
21
Ненавижу 1С
гуру
15.03.12
✎
12:58
|
(20) у тебя случайно не гуманитарное образование?
|
|||
22
oly123456
15.03.12
✎
12:59
|
Спасибо за помощь, буду дальше думать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |