![]() |
![]() |
![]() |
|
Расчет даты окончания | ☑ | ||
---|---|---|---|---|
0
greenscarf
25.05.15
✎
15:13
|
Добрый день!
Ломаю голову, не могу придумать, как решить задачу. Дано: Дата начала работ Количество часов на работы График работы пятидневка 9-18 Найти: Дату окончания работ Конфа значения не имеет, нужно сделать без использования производственного календаря, например, по типу дня |
|||
1
greenscarf
25.05.15
✎
15:14
|
Например, дата начала работ 25.05 в 9.00
Количество часов - 10 дата окончания работ 26.05 в 10.00 |
|||
2
shuhard_серый
25.05.15
✎
15:15
|
(0)[График работы пятидневка 9-18 ]+[нужно сделать без использования производственного календаря] = отменная трава
|
|||
3
Фокусник
25.05.15
✎
15:18
|
(0) что с праздниками делать?
|
|||
4
MrKartez
25.05.15
✎
15:18
|
Перебирай даты в цикле, + добавь условие: если деньнедели 6 или 7, то не суммируй к дате 9 часов.
|
|||
5
greenscarf
25.05.15
✎
15:18
|
Понять бы алгоритм, условие на неиспользование производственного календаря необязательное, просто в конфе его нет
|
|||
6
greenscarf
25.05.15
✎
15:19
|
какие даты перебирать? у меня есть одна дата
|
|||
7
Timon1405
25.05.15
✎
15:22
|
Цикл пока можно вычесть по 8 часов делаем это
+проверяем день функцией ДеньНедели(<Дата>) + проверка на остаток часов от деления на 8, если что прибавляем день опять же с проверкой на ДеньНедели. или вам все в запросе надо? |
|||
8
MrKartez
25.05.15
✎
15:23
|
ТекДата = ТвояДата;
КолВоЧасовРаботы=ТвоиЧасыРаботы Рубильник=1; Пока КолВоЧасовРаботы>0 Цикл //Проверка тек даты Если ДеньНедели(ТекДата)<6 Тогда КолвоЧасовработы=КолвоЧасовРаботы-РабочиеЧасы. ТекДата=ТекДата+8*60*60; КонецЕсли; КонецЦикла; КонецРаботы=ТекДата; Как-то так |
|||
9
MrKartez
25.05.15
✎
15:25
|
(8) Забыл строчку
ТекДата=ТекДата+8*60*60; КолВоЧасовРаботы=КолВоЧасовРаботы-8 Но тут вместо 8 может быть другое значение, нужно делать проверку через оператор ?(); КонецЕсли; |
|||
10
greenscarf
25.05.15
✎
15:25
|
(8) Спасибо, я проверю.
В запросе предпочтительнее, но совершенно не обязательно. |
|||
11
Одинесю
25.05.15
✎
15:25
|
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) |
|||
12
shuhard_серый
25.05.15
✎
15:25
|
(5)[просто в конфе его нет]
сделай и не ипи мозг заказчику, не будет ни кто 07 января работать |
|||
13
ИУБиПовиц
25.05.15
✎
15:26
|
(4) угу, а праздников нет, а обеда нет, а сокращенных дней нет:) (6) Есть дата время 25.05 в 9.00 каким то способом получаешь сколько рабочих часов есть, загружаешь задачей эти часы, оставшуюся часть проверяешь на след день и пока не закончится часы.
А если оборудование, и ли что то там с помощью которого делается этот процесс в ремонте, это нужно учитывать или как? |
|||
14
greenscarf
25.05.15
✎
15:28
|
(11) Как-то запрос некорректно прикрепился видимо.
|
|||
15
Одинесю
25.05.15
✎
15:30
|
(14) Ты его скопируй и в консоли запросов выполни.
|
|||
16
greenscarf
25.05.15
✎
15:34
|
(15) Попробую, правда не до конца понимаю, загадочные обозначения aa.a и других
|
|||
17
Одинесю
25.05.15
✎
15:35
|
(16) Я тоже, это не мое )
|
|||
18
Ненавижу 1С
гуру
25.05.15
✎
15:35
|
(16) все равно без учета выходных, праздников и их переносов
|
|||
19
Ненавижу 1С
гуру
25.05.15
✎
15:36
|
+(18) не забываем про обеденный часовой перерыв
|
|||
20
greenscarf
25.05.15
✎
15:36
|
(9) Получилось, по обработке:
25.05 в 9.00 +10 часов = 26.05 01.00, а по факту надо 10.00 |
|||
21
Ненавижу 1С
гуру
25.05.15
✎
15:38
|
не взлетит без календаря короче
можно делать другими таблицами (исключения и т.д.), но что-то храниться в базе должно |
|||
22
greenscarf
25.05.15
✎
15:45
|
(17) Запрос не понятный, требует входные параметры - дату начала и дату окончания, хотя последнюю я как раз и хотел бы узнать
|
|||
23
Fish
гуру
25.05.15
✎
15:47
|
(22) Делай с календарём, и не изобретай велосипедов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |