Имя: Пароль:
1C
1С v8
Расчет даты окончания
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) Делай с календарём, и не изобретай велосипедов.
Закон Брукера: Даже маленькая практика стоит большой теории.