• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

YariY

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

vbs

1. Перебор путевых листов (Документами или запросом) за период с заполнением таблицы значений вида :
ФИО
Число // день месяца
Время
2. Группировка ТЗ по "ФИО,Число" с суммированием "Время"
ТЗ.Группировать("ФИО,Число", "Время")
ТЗ.Сортировать("ФИО,Число");


3. Вывод на печать ТЗ с анализом времени на предмет сравнения с 6 часами
Цикл типа такого
Цикл
Выводим секцию, содержащую ФИО
Пока ФИО не поменялось - добавляем секции "Число".
КонецЦикла
 
Y

YariY

Спасибо большое за ответ.
Именно так я и собирался поступить (во всяком случае пункты 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| - часы.мин

ЗЫ
Или я чего-то не понял...
 
V

vbs

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

vbs

А еще проще заготовить ТЗ как "пустографку" из колонки ФИО и 31 колонки ВРЕМЯ.
При исследовании путевого листа анализировать, если в ТЗ такое ФИО, если нет - создавать новую строку и добавлять в нужную дату количество часов.
Такой способ позволит просто линейно вывести ТЗ на печать
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!