|
Как добавить рабочие дни к дате? | ☑ | ||
---|---|---|---|---|
0
DTX 4th
21.09.16
✎
16:49
|
Как лучше сделать?
Речь не про запрос. |
|||
1
Nuobu
21.09.16
✎
16:52
|
Лучше сделать запросом.
|
|||
2
DTX 4th
21.09.16
✎
16:54
|
(1) С мильярдом соединений и подсчетом порядкового номера дня нарастающим итогом?
|
|||
3
mikecool
21.09.16
✎
16:54
|
(2) d nbgjds[ tcnm HC GhjbpdjlcndtyysqRfktylfhm
|
|||
4
NcSteel
21.09.16
✎
16:54
|
(2) Зачем, в типовых есть РС производственный календарь, с ним и соединяй
|
|||
5
mikecool
21.09.16
✎
16:55
|
+3 в типовых есть РС ПроизводственныйКалендарь
|
|||
6
PR2
21.09.16
✎
16:55
|
(1) Не добавишь
|
|||
7
Nuobu
21.09.16
✎
16:56
|
(6) Чё это?
Есть производственный календарь. Ставь отбор на график работы и вперёд. |
|||
8
Timon1405
21.09.16
✎
16:56
|
(4)(5) +там есть ресурс "вид дня", по нему и брать
|
|||
9
DTX 4th
21.09.16
✎
17:00
|
(4) Так это понятно, но думал, что его придётся с самим собой соединять. И при этом непонятно, как ограничить сверху по дате..
Но потом вот тут Книга знаний: Как получить дату отстоящую от заданной на определенное количество рабочих дней наткнулся на альтернативный вариант от butterbean. Возьму его, спасибо. |
|||
10
СамыйУмный
21.09.16
✎
17:00
|
+(5) Поддержку пацанов, делай через
РегистрыСведений.РегламентированныйПроизводственныйКалендарь |
|||
11
PR2
21.09.16
✎
17:02
|
(7) Че че это?
Как ты прибавишь к 1 мая 3 дня? А как к 31 декабря 10 дней? А 300 дней как прибавишь? |
|||
12
СамыйУмный
21.09.16
✎
17:02
|
Функция ЭтоРабочийДень(ПроверяемаяДата = Неопределено) Экспорт
Если ПроверяемаяДата = Неопределено или ПроверяемаяДата = Дата(1,1,1) Тогда ПроверяемаяДата = ТекущаяДата(); КонецЕсли; НаборЗаписей = РегистрыСведений.РегламентированныйПроизводственныйКалендарь.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ДатаКалендаря.Установить(ПроверяемаяДата); НаборЗаписей.Прочитать(); Если НаборЗаписей.Количество() > 0 Тогда ВидДня = НаборЗаписей[0].ВидДня; Если ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий или ВидДня = Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; Иначе Возврат Истина; КонецЕсли; КонецФункции |
|||
13
СамыйУмный
21.09.16
✎
17:04
|
А потом так:
Функция ДобавитьКДатеРабочиеДни(ПередаваемаяДата = Неопределено, КоличествоРабочихДней) Экспорт Если ПередаваемаяДата = Неопределено или ПередаваемаяДата = Дата(1,1,1) Тогда ПередаваемаяДата = ТекущаяДата(); КонецЕсли; СледующийДень = НачалоДня(ПередаваемаяДата); //СледующийДень = ПередаваемаяДата+60*60*24; Пропущено = 0; СЦ=0; Для СЦ = 1 По КоличествоРабочихДней Цикл СледующийДень = СледующийДень+60*60*24; Если НЕ ЭтоРабочийДень(СледующийДень) Тогда Пропущено = Пропущено+1; КонецЕсли; КонецЦикла; Если Пропущено<>0 Тогда СледующийДень = ДобавитьКДатеРабочиеДни(СледующийДень,Пропущено); КонецЕсли; Возврат СледующийДень; КонецФункции |
|||
14
Nuobu
21.09.16
✎
17:05
|
(11) Это и дураку понятно, что число к дате не прибавится.
|
|||
15
NcSteel
21.09.16
✎
17:09
|
(12) Жалко Сталина на тебя нет
|
|||
16
PR2
21.09.16
✎
17:10
|
(14) Рукалицо
Причем здесь прибавление числа к дате, что, кстати, даже дураку понятно, что вполне себе прибавится, что бы, собственно, нет-то? Я говорю, как ты одним запросом поймешь, сколько записей из производственного календаря тебе выбирать? |
|||
17
PR2
21.09.16
✎
17:11
|
(12) За такое в приличном обществе морду бьют.
Долго. С оттяжкой. Чтобы понял и запомнил. |
|||
18
СамыйУмный
21.09.16
✎
17:12
|
(15) и (16) Ухахах, вы такие смешные!
Зато у вас это сделать невозможно, сидите дальше, в своих приличных обществах |
|||
19
Slypower
21.09.16
✎
17:12
|
в 1с7.7 я использую:
Функция КоличесвтоРабочихДней(НачДата,КолвоДней) Экспорт //на основаниее глБанковскихДней Перем БанковскихДней, ОбычныхДней, ДеньНедели; Праздник = СоздатьОбъект("Праздники"); БанковскихДней = 0; ОбычныхДней = 0; Пока БанковскихДней < КолвоДней Цикл ОбычныхДней = ОбычныхДней+ 1; // определим день недели ДеньНедели=НомерДняНедели(НачДата-ОбычныхДней); //sasha КоличествоПраздников = 0; Праздник.ВыбратьДаты(НачДата-ОбычныхДней,НачДата-ОбычныхДней); Пока Праздник.СледующаяДата() = 1 Цикл КоличествоПраздников = КоличествоПраздников + 1; КонецЦикла; //sasha // если не выходной, то прошел еще один банковский день Если ДеньНедели < 6 Тогда Если КоличествоПраздников = 0 Тогда БанковскихДней=БанковскихДней+1; КонецЕсли; КонецЕсли; КонецЦикла; Возврат (НачДата - ОбычныхДней); КонецФункции //КоличесвтоДней() а потом уже: КоличесвтоРабочихДней(ДатаДок,3); // где 3 - количество раб дней |
|||
20
PR2
21.09.16
✎
17:15
|
(18) Чукча не читатель, явно.
Невозможно _одним_ запросом. Точнее и одним запросом возможно, просто тупо выбрать весь производственный календарь до скончания веков. Типа либо нам хватит дней либо производственный календарь не заполнен и задача невыполнима. Но это как бы нихрена неоптимально для прибавления тех же трех дней к примеру. |
|||
21
NcSteel
21.09.16
✎
17:16
|
(18) Как раз я знаю как это сделать и используя один запрос, а не запрос в цикле, как у тебя...
За твой подход на сертификации спеца ставят неуд. |
|||
22
NcSteel
21.09.16
✎
17:16
|
(20) Границу можно рассчитать... не сложно
|
|||
23
PR2
21.09.16
✎
17:16
|
(19) Ну и ты красавец, че, в цикле хреначишь, хоть бы хрен
|
|||
24
PR2
21.09.16
✎
17:17
|
(22) Да ты че. И как же?
|
|||
25
СамыйУмный
21.09.16
✎
17:17
|
(21) Ну напиши тогда если знаешь, выложи свой код мы тоже посмеемся))
|
|||
26
NcSteel
21.09.16
✎
17:18
|
(24) Хотя бы так:
(КоличествоДнейПрибавить / 7 +1) + СамыйДлинныйПраздник. Что то в этом роде. |
|||
27
NcSteel
21.09.16
✎
17:19
|
(26) посмотрел ссылку: Книга знаний: Как получить дату отстоящую от заданной на определенное количество рабочих дней
В принципе тут это и написано |
|||
28
NcSteel
21.09.16
✎
17:19
|
(25) смотри ссылку в (9)
|
|||
29
PR2
21.09.16
✎
17:19
|
(26) Маладес. Прибавь 356 дней.
|
|||
30
NcSteel
21.09.16
✎
17:21
|
(29) ну
52 + 10 = 62 Итого надо взять (356 + 62) дней, примерно |
|||
31
NcSteel
21.09.16
✎
17:22
|
(30) Можно даже вычислить количество праздничных дней в году и его прибавлять...
В общем без проблем рассчитывается |
|||
32
NcSteel
21.09.16
✎
17:22
|
(31) даже ввести максимальное количество раб дней в году... в общем без проблем
|
|||
33
PR2
21.09.16
✎
17:24
|
(27) Второй вариант неплох, да, определенно
|
|||
34
PR2
21.09.16
✎
17:25
|
(30) С хрена ли 356 + 62, если у тебя получается 62?
|
|||
35
NcSteel
21.09.16
✎
17:27
|
(34) 62 это сколько надо прибавить к количеству дней.... но так как в твоем варианте примерно два года рабочих, то надо раза в два больше брать....
А проще рассчитать коэффициентр рабочих дней и хранить его в константе |
|||
36
PR2
21.09.16
✎
17:28
|
(35) Проще помидорами торговать. А правильнее второй вариант в Книга знаний: Как получить дату отстоящую от заданной на определенное количество рабочих дней.
|
|||
37
NcSteel
21.09.16
✎
17:29
|
(36) Он нормальный если не надо в запросе определить раб. даты по таблице...
|
|||
38
PR2
21.09.16
✎
17:36
|
(37) Ну, вообще, он нормальный, если еще не нужно картошку на кухне почистить, да.
Мы как бы вообще про сабж говорим, а не про функцию на все случаи жизни. Кроме того, возможно, что даже в этом случае пакетный запрос решит проблему. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |