Страницы: 1
RSS
Распределение сотрудников с выравниванием времени работы
 
Товарищи, прошу помощи коллективного разума. А то затупил.

Есть следующая задача:
Имеется условный месяц с выходными днями и 6 сотрудников.
В субботу можно обеспечить 3 смены по 6 часов, в воскресенье - 2 по 8 часов.

Нужно раскидать сотрудников, обеспечив им примерно равное количество отработанного времени за месяц, чтоб никому не было обидно.

Я думаю, надо примерно как в прилагаемом файле. Если что-то подобное уже было - ткните носом: поиском не нашел.  
Изменено: Chueoko - 19.03.2020 13:54:40
 
И Вам, здравствуйте!
Можно примерно такой массивной формулой решить:
Код
=Ч(СУММ(ЕСЛИОШИБКА(ДЕНЬНЕД($A$1:A$1;14);0)*$A2:A2)+СТРОКА()%<=НАИМЕНЬШИЙ(МУМНОЖ(Ч($A$2:A$7=1);ЕСЛИОШИБКА(ТРАНСП(ДЕНЬНЕД($A$1:A$1;14));0))+СТРОКА($2:$7)%;6-ДЕНЬНЕД(B$1;14)))
 
Светлый, спасибо!
пойду разбираться, что там происходит 8-0  
 
Если Работник будет текстовый, то немного придётся формулу исправить:
Код
=Ч(СУММ(ЕСЛИОШИБКА(ДЕНЬНЕД($A$1:A$1;14);)*Ч(+$A2:A2))+СТРОКА()%<=НАИМЕНЬШИЙ(МУМНОЖ(Ч($A$2:A$7=1);ЕСЛИОШИБКА(ТРАНСП(ДЕНЬНЕД($A$1:A$1;14));0))+СТРОКА($2:$7)%;6-ДЕНЬНЕД(B$1;14)))
 
Доброе время суток.
Как-то грубоватое вышло честное распределение. Всё же задача явно не для формул. Ручками-то куда справедливее получается :)
 
Цитата
Андрей VG написал:
Как-то грубоватое вышло честное распределение
Типичный "жадный" алгоритм.
Цитата
Андрей VG написал:
Всё же задача явно не для формул.
А если такую формулу попробовать?
Код
=ОСТАТ(ОТБР(ПОИСКПОЗ(МИН((МУМНОЖ(ОСТАТ(ОТБР(СТРОКА(СМЕЩ($A$1;;;2^СЧЁТ($B$1:$I$1)))/2^(СТОЛБЕЦ($B:$I)-2));2)*ДЕНЬНЕД($B$1:$I$1;14);Ч(МУМНОЖ(ТРАНСП(Ч($B$1:$I1=1));1^B$1:B1)<6-ТРАНСП(ДЕНЬНЕД($B$1:$I$1;14))))-СУММ(ДЕНЬНЕД($B$1:$I$1;14)*(6-ДЕНЬНЕД($B$1:$I$1;14)))/СЧЁТЗ($A$2:$A$7))^2);(МУМНОЖ(ОСТАТ(ОТБР(СТРОКА(СМЕЩ($A$1;;;2^СЧЁТ($B$1:$I$1)))/2^(СТОЛБЕЦ($B:$I)-2));2)*ДЕНЬНЕД($B$1:$I$1;14);Ч(МУМНОЖ(ТРАНСП(Ч($B$1:$I1=1));1^B$1:B1)<6-ТРАНСП(ДЕНЬНЕД($B$1:$I$1;14))))-СУММ(ДЕНЬНЕД($B$1:$I$1;14)*(6-ДЕНЬНЕД($B$1:$I$1;14)))/СЧЁТЗ($A$2:$A$7))^2;)/2^(СТОЛБЕЦ()-2));2) 

*Или немного короче. Это формулы массива:

Код
=ОСТАТ(ОТБР(ОСТАТ(МИН(ОКРУГЛ((МУМНОЖ(ОСТАТ(ОТБР(СТРОКА(СМЕЩ($A$1;;;2^СЧЁТ($B$1:$I$1)))/2^(СТОЛБЕЦ($B:$I)-2));2)*ДЕНЬНЕД($B$1:$I$1;14);Ч(МУМНОЖ(ТРАНСП(Ч($B$1:$I1=1));1^B$1:B1)<6-ТРАНСП(ДЕНЬНЕД($B$1:$I$1;14))))-СУММ(ДЕНЬНЕД($B$1:$I$1;14)*(6-ДЕНЬНЕД($B$1:$I$1;14)))/СЧЁТЗ($A$2:$A$7))^2;7)+СТРОКА(СМЕЩ($A$1;;;2^СЧЁТ($B$1:$I$1)))%%%%%);10^-7)*10^10/2^(СТОЛБЕЦ()-2));2)

Изменено: Светлый - 20.03.2020 09:31:03
 
Цитата
Светлый написал:
А если такую формулу попробовать?
Тогда почему 21.03 и 28.03 только два работника на смену, а не три?
Страницы: 1
Наверх