|   |   | 
| 
 | Как распределить часы кратно 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) Тогда вообще все просто:
 ОкругленныеЧасы = Нужное; | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |