|
Как распределить часы кратно 4,8,12,16 и т.д. | ☑ | ||
---|---|---|---|---|
0
VID1234
13.10.21
✎
13:00
|
Здравствуйте. Ребята подскажите пожалуйста, как мне распределить часы, я получил таблицу значений пропорционально сумме работ, в этой таблице пропорционально разбились часы, но разбились они не целым числом, а с десятыми и сотыми, а мне нужно чтобы часы были кратны 8 часам.
Как правильно написать цикл. Я думаю так, но может лучше что-нибудь есть? Отбор = Новый Структура(); Отбор.Вставить("Сотрудник",Сотрудника.Сотрудник); СтрокаТЗ_ДоляЧасовВПроекте = ТЗ_ДоляЧасовВПроекте.НайтиСтроки(Отбор); Если СтрокаТЗ_ДоляЧасовВПроекте.Количество()= 0 Тогда Продолжить; КонецЕсли; МаксЗначение = 0; Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл Если Строки.Часы > МаксЗначение Тогда МаксЗначение = Строки.Часы; КонецЕсли; КонецЦикла; Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл Если Строки.Часы < 8 И Строки.Часы <> МаксЗначение Тогда Разница = 8 - Строки.Часы; СтрокаТЗ_ДоляЧасовВПроекте[0].Часы + Разница; Отбор.Вставить("Часы",МаксЗначение); СтрокаСМаксимальнымЗначением = ТЗ_ДоляЧасовВПроекте.НайтиСтроки(Отбор); КонецЕсли; СтрокаСМаксимальнымЗначением[0].Часы = СтрокаСМаксимальнымЗначением[0].Часы - Разница; //обновляем максимум Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл Если Строки.Часы > МаксЗначение Тогда МаксЗначение = Строки.Часы; КонецЕсли; КонецЦикла; ИначеЕсли Если Строки.Часы > 8 И Строки.Часы < 16 Строки.Часы <> МаксЗначение Тогда Разница = 16 - Строки.Часы; СтрокаТЗ_ДоляЧасовВПроекте[0].Часы + Разница; Отбор.Вставить("Часы",МаксЗначение); СтрокаСМаксимальнымЗначением = ТЗ_ДоляЧасовВПроекте.НайтиСтроки(Отбор); КонецЕсли; СтрокаСМаксимальнымЗначением[0].Часы = СтрокаСМаксимальнымЗначением[0].Часы - Разница; //обновляем максимум Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл Если Строки.Часы > МаксЗначение Тогда МаксЗначение = Строки.Часы; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Ну и так далее, пока не дойду до максимального итога по часам, здесь бы подошел скорее всего цикл пока или счетчик, но я пока еще не разобрался. |
|||
1
Garykom
гуру
13.10.21
✎
13:04
|
гугл-программист напоролся на реальность?
|
|||
2
acht
13.10.21
✎
13:06
|
Переведи свои часы в сепульки, каждая из которых состоит из четрых часов и проводи пропорциональное разбиение в сепульках с точностью 0 знаков после запятой.
|
|||
3
acht
13.10.21
✎
13:07
|
(0) Это, конечно, если я правильно прованговал что ты хочешь
|
|||
4
VID1234
13.10.21
✎
13:08
|
(2) ))) Сепульки, а как? я поэтому и прошу помощи
|
|||
5
Малыш Джон
13.10.21
✎
13:09
|
Боже...
Арифметика школьного уровня... ОкругленныеЧасы = Окр(Часы/4)*4; |
|||
6
VID1234
13.10.21
✎
13:09
|
(3) а как рисунок прикрепить или если не сложно https://forum.infostart.ru/forum9/topic270693/?result#postform, там есть рисунок!
|
|||
7
VID1234
13.10.21
✎
13:11
|
(5) Здравствуйте, так у меня на некоторые работы всего 0,8 часа
|
|||
8
VID1234
13.10.21
✎
13:12
|
(1) Вроде того! Ну таким образом кстати лучше осваивается материал.
\ |
|||
9
Базис
naïve
13.10.21
✎
13:12
|
(7) Ноль же ничего не значит? Вычёркивай, а там и запятую можно не заметить.
|
|||
10
acht
13.10.21
✎
13:13
|
(6) Как у иванова по работе 4 из 21.9 получилось 16?
|
|||
11
Ненавижу 1С
гуру
13.10.21
✎
13:13
|
(6) а если будет 8 работ и все по 1 часу?
|
|||
12
VID1234
13.10.21
✎
13:16
|
(11) такого не будет, есть общее время, которое на одной из работ будет больше на порядок чем в других
|
|||
13
VID1234
13.10.21
✎
13:18
|
(10) сначала я в первой строке нашел разницу между 8 часами, затем ее прибавил, и эту разницу отнял у работы, с максимальным количеством часов, затем вторую строку и т.д., сначала максималька была на 5 работе, но после нескольких отнимании, максимальное стало у 4 работы, поэтому я начал отнимать от нее!
|
|||
14
VID1234
13.10.21
✎
13:20
|
(10) сначала я отнял 2,53, а затем прибавил 2,95, потому-что у седьмой работы время ближе к 8 часам нежели к 16.
|
|||
15
mikecool
13.10.21
✎
13:22
|
только я ничего не понимаю?
|
|||
16
acht
13.10.21
✎
13:22
|
(15) Не, не только ты
|
|||
17
Злопчинский
13.10.21
✎
13:27
|
ОбщееКоличество = 100;
Цикл ПоКоличествуОбъектов ОпределитьДолюЦикла для текущего объекта; // допустим 0.8 округлить в соответствии с правилами; // к 0 или к 1 - это уже как у вас в сепулькарии принято ОбщееКоличество = ОбщееКоличество - РаспределенноеНаТекущемШаге; КонецЦикла |
|||
18
Ненавижу 1С
гуру
13.10.21
✎
13:28
|
(12) все равно криво может быть:
10 работ по 0.1 часа и 11-я работа 23 часа |
|||
19
VID1234
13.10.21
✎
13:28
|
Какдый сотрудник может быть в разном количестве работ, в этом примере сотрудник участвует в 7 работах, у каждой работы есть сумма в месяц, допустим у всех по 100000, 700000 на все работы, разделив 100000/700000, я получаю доли по работам. Затем количество часов по сотруднику, которое он отработал в месяц, я распределяю пропорционально этим долям в итоге, у меня получается время затраченное на каждую работу! Вот с ней я теперь и работаю, но меня не устраивает, что человек работает меньше часа, как минимум он должен отработать 1 день, т.е. 8 часов, теперь и распределяю, если у человека меньше 8 часов, то занчит он должен работать 8 часов, соответственно с другой работы нужно снять разницу и т.д.
|
|||
20
VID1234
13.10.21
✎
13:30
|
(18) поэтому я и округляю 0,1 до 8 часов, а с 23 часов, отнимаю 7,9!
|
|||
21
Ненавижу 1С
гуру
13.10.21
✎
13:30
|
а в целом всем раздать по 8 часов
далее если осталось - раздать от большего к меньшему еще по 8 тем у кого не меньше 1*8+4=12 далее если осталось - раздать от большего к меньшему еще по 8 тем у кого не меньше 2*8+4=20 и т.д. |
|||
22
Ненавижу 1С
гуру
13.10.21
✎
13:31
|
(20) их 10 работ, у тебя уже будет 8*10 = 80 часов при общем количестве 24
|
|||
23
acht
13.10.21
✎
13:32
|
(19) > в 7 работах, у каждой работы есть сумма в месяц, допустим у всех по 100000, 700000 на все работы, разделив 100000/700000, я получаю доли по работам
Это был контрольный выстрел что-ли? Переход от денег к часам? А что происходит с другими кратностями, 4, 12, 16, которые тебе нужны? |
|||
24
VID1234
13.10.21
✎
13:34
|
(21) как вариант нужно попробовать!
|
|||
25
VID1234
13.10.21
✎
13:35
|
(22) можно отсечь работу, если не хватило, то ничего страшного! значит что в этом месяце сотрудник в этой работе не участвовал!
|
|||
26
VID1234
13.10.21
✎
13:37
|
(23) 4 видимо лучше уже исключить, чтобы проще было, а 16 и 24 у меня происходит дублирование кода, до 176 часов)) знаю что это не оптимально, но пока только так могу, сейчас уже хочу закончить с этим, а потом буду пытаться оптимизировать!
|
|||
27
Малыш Джон
13.10.21
✎
13:37
|
(20)>>поэтому я и округляю 0,1 до 8 часов, а с 23 часов, отнимаю 7,9!
Тогда ты слово "округляю" как то по своему понимаешь. |
|||
28
exwill
13.10.21
✎
13:38
|
Делай за два цикла. Сначала все округляешь вверх до 8(или 4) часов. На втором цикле распределяешь разницу пропорционально весу. Разницу так-же округляешь вверх. Если будет остаток, вычитаешь его из самого большого
|
|||
29
Базис
naïve
13.10.21
✎
13:39
|
Прокуратура (если бюджет) или минфин (если ГОЗ) удивятся вашей математике.
|
|||
30
VID1234
13.10.21
✎
13:42
|
(29) ))
|
|||
31
VID1234
13.10.21
✎
13:42
|
(28) а как цикл выглядит распределения?
|
|||
32
VID1234
13.10.21
✎
13:43
|
(27) ну т.е. догоняю число до нужного!
|
|||
33
Малыш Джон
13.10.21
✎
14:23
|
(32) Тогда вообще все просто:
ОкругленныеЧасы = Нужное; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |