• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Помогите с алгоритмом

  • Автор темы Автор темы YariY
  • Дата начала Дата начала
Y

YariY

Всем привет!
Второй день мучаюсь, помогите с проблемкой разобраться.
Необходимо создать отчёт "Табель учёта рабочего времени", транспортная организация, более 300 водителей. Отчётик должен отработать следующим образом: найти все путевые листы за месяц по всем водителям. По строкам вывести ФИО водителей, по колонкам число (календарные дни месяца). Если время работы по путевым листам (в сумме, за одно число) больше 6 часов, то напротив фамилии водителя, в графе Число должно отобразиться время, иначе - пусто.
Не могу продумать нормальный алгоритм. Необходимо минимум переборов, запросов и условий.
У кого какие соображения, поделитесь.
Спасибо!
 
1. Перебор путевых листов (Документами или запросом) за период с заполнением таблицы значений вида :
ФИО
Число // день месяца
Время
2. Группировка ТЗ по "ФИО,Число" с суммированием "Время"
ТЗ.Группировать("ФИО,Число", "Время")
ТЗ.Сортировать("ФИО,Число");


3. Вывод на печать ТЗ с анализом времени на предмет сравнения с 6 часами
Цикл типа такого
Цикл
Выводим секцию, содержащую ФИО
Пока ФИО не поменялось - добавляем секции "Число".
КонецЦикла
 
Спасибо большое за ответ.
Именно так я и собирался поступить (во всяком случае пункты 1 и 2).
С проблемой столкнулся когда сообразил что бывают ситуации когда по два-три дня подряд может не быть ни одного ПЛ.
И машина должна эти чила месяца оставлять чистыми.
Например:
_________ 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 20| 21| 22| 23| 24| - Число месяца
Иванов И.И. |6.4|6.2|8.0|7.4| 0 | 0 |6.4|7.2| 0 |6.3|7.2| 0 | 0 |6.5|7.1| - часы.мин

ЗЫ
Или я чего-то не понял...
 
Понял правильно. В этом будет основная сложность.
Чтобы не доделывать за тебя, предложу идею.
1. Первая строка ТЗ. Иванов И.И. - выводим 9 пустых секций, затем 10-е число, анализируем 2-ю строку ТЗ - выводим данные, так же в 3-й и 4-й.
2. Если в 5-й строке опять Иванов выводим ДВЕ пустые секции и собственно данные пятой
3. Если ФИО сменилось, смотрим, не надо ли вывести пустых секций до конца месяца предыдущему водителю.
Справишься, будет красивая табличка. Плохо будет - зашлю кусочек аналогичного кода.
 
А еще проще заготовить ТЗ как "пустографку" из колонки ФИО и 31 колонки ВРЕМЯ.
При исследовании путевого листа анализировать, если в ТЗ такое ФИО, если нет - создавать новую строку и добавлять в нужную дату количество часов.
Такой способ позволит просто линейно вывести ТЗ на печать
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы