Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 окт 2021, 12:19

Как распределить часы кратно 4,8,12,16 и т.д.

Автор VID1234, 13 окт 2021, 13:02

0 Пользователей и 1 гость просматривают эту тему.

VID1234

Здравствуйте. Ребята подскажите пожалуйста, как мне распределить часы, я получил таблицу значений пропорционально сумме работ, в этой таблице пропорционально разбились часы, но разбились они не целым числом, а с десятыми и сотыми, а мне нужно чтобы часы были кратны 8 часам.
Как правильно написать цикл.
Я думаю так, но может лучше что-нибудь есть?
Отбор = Новый Структура();
                    Отбор.Вставить("Сотрудник",Сотрудника.Сотрудник);
                    СтрокаТЗ_ДоляЧасовВПроекте = ТЗ_ДоляЧасовВПроекте.НайтиСтроки(Отбор);
                                       Если СтрокаТЗ_ДоляЧасовВПроекте.Количество()= 0 Тогда Продолжить; КонецЕсли;
                                        МаксЗначение = 0;
                     Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл
                            Если Строки.Часы > МаксЗначение Тогда
                            МаксЗначение = Строки.Часы;
                        КонецЕсли;
                    КонецЦикла;
 Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл
                            Если Строки.Часы < 8 И Строки.Часы <> МаксЗначение Тогда
                            Разница = 8 - Строки.Часы;
                                                        СтрокаТЗ_ДоляЧасовВПроекте[0].Часы + Разница;
                                                        Отбор.Вставить("Часы",МаксЗначение);
                                     СтрокаСМаксимальнымЗначением = ТЗ_ДоляЧасовВПроекте.НайтиСтроки(Отбор);
                                 КонецЕсли;
СтрокаСМаксимальнымЗначением[0].Часы = СтрокаСМаксимальнымЗначением[0].Часы - Разница;
//обновляем максимум                                       
                     Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл
                            Если Строки.Часы > МаксЗначение Тогда
                            МаксЗначение = Строки.Часы;
                        КонецЕсли;
                    КонецЦикла;
ИначеЕсли Если Строки.Часы > 8 И Строки.Часы < 16  Строки.Часы <> МаксЗначение Тогда
            Разница = 16 - Строки.Часы;
                                                        СтрокаТЗ_ДоляЧасовВПроекте[0].Часы + Разница;
                                                        Отбор.Вставить("Часы",МаксЗначение);
                                     СтрокаСМаксимальнымЗначением = ТЗ_ДоляЧасовВПроекте.НайтиСтроки(Отбор);
                                 КонецЕсли;
СтрокаСМаксимальнымЗначением[0].Часы = СтрокаСМаксимальнымЗначением[0].Часы - Разница;
//обновляем максимум                                       
                     Для Каждого Строки Из СтрокаТЗ_ДоляЧасовВПроекте Цикл
                            Если Строки.Часы > МаксЗначение Тогда
                            МаксЗначение = Строки.Часы;
                        КонецЕсли;
                    КонецЦикла;       
КонецЕсли;
КонецЦикла;
Ну и так далее, пока не дойду до максимального итога по часам (80), но у некоторых 176, здесь бы подошел скорее всего цикл пока или счетчик, но я пока еще не разобрался.

LexaK

@VID1234, у меня немного проще алгоритм получился, но итоговые суммы сошлись,
посмотрите эту обработку, по кнопке рассчитать, заполняется колонка Смены, 
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск