Бывают такие ситуации когда на собрании людей, необходимо быстро составить список присутствующих с указанием фамилии имени и отчества. Это могут быть лекции или семинары, митапы и даже собрания жильцов ТСЖ. Очень часто мы не помним их фамилии или только знакомимся. В таких случаях берут лист бумаги и запускают его, что называется в массы, с просьбой записаться. Возникла такая задача сделать журнал. Для большей конкретики — необходимо записать участников семинара, которые пришли на него в первый раз и регистрировать в течение всего курса обучения. Фио участников не известны заранее, поэтому список мы не можем подготовить заранее.



В журнале указывается список людей по вертикали и даты по горизонтали. Причем если человек был на первом занятии но отсутствовал на последующих, то он автоматически заносится в журнал и делается пометка H

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

Начнем с журнала. Для упрощения построения необходимо прибегнуть к программисткой хитрости))). Если посмотрим на обычный журнал, то в нем уже присутствуют фамилии, поэтому запись в базе данных должна возникать тогда когда лектор семинара ставит отметку об отсутствии курсанта или отметку об отсутствии, в других случаях нет никакой необходимости делать записи, иначе для отображения пустого журнала потребуется сделать запись о каждой пустой клетке — это технически нецелесообразно.

Поэтому будем вносить информацию в клетку журнала только в тот момент если эта информация действительно возникает. Допустим у вас есть веб приложение в котором реализована форма ввода



После того как участник заполняет свои данные и нажимает кнопку ЗАРЕГИСТРИРОВАТЬСЯ заносим данные в в json файл

[
{"Name":"Ivanov", "Date":"01.01.2019", "grade": 1}
{"Name":"Petrov", "Date":"01.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"02.01.2019", "grade": 1}
{"Name":"Petrov", "Date":"03.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"06.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"07.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"08.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"09.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"10.01.2019", "grade": 1}
{"Name":"Ivanov", "Date":"12.01.2019", "grade": 1}
{"Name":"Maksimova", "Date":"08.01.2019", "grade": 1}
{"Name":"Maksimova", "Date":"09.01.2019", "grade": 1}
{"Name":"Maksimovav", "Date":"10.01.2019", "grade": 1}
{"Name":"Maksimova", "Date":"13.01.2019", "grade": 1}
{"Name":"Semenov", "Date":"01.02.2019", "grade": 1}
{"Name":"Maksimova", "Date":"02.01.2019", "grade": 1}
]

Автоматически добавляем поле с датой когда кнопка была нажата и полем grade которое означает отметку, например от 2-5 если это оценка или 1 если это отметка присутствия на семинаре. Если вы хотите ставить колы своим ученикам :) то тогда вместо единицы можно использовать -1. В рассматриваем случае остановимся на 1, тк это удобно использовать для подсчета общего количества участников семинара.

Далее я воспользуюсь программой FastReport для построения отчета, его можно скачать по ссылке.

Сам отчет в редакторе FastReport Designer выглядит так



Для его построения используется компонент МАТРИЦА в который с помощью нескольких кликов заносятся 2 поля Name по вертикали Date по горизонта. Поле grade заносим в ячейку.

Для того чтобы журнал отражался в привычной форме добавляем несложный скрипт



действие которого направлено на то, чтобы отражать отсутствующих в привычной форме с пометкой H. Запускаем отчет



Времени затрачено не много, а результат очень качественный. Данный отчет автоматически переносится на следующую страницу что очень удобно для больших ведомостей и заботится об этом не нужно — это программа делает сама. Всем рекомендую пользоваться подобными отчетам для автоматизации повседневных процессов.

Комментарии (30)


  1. HawkeyePierce89
    25.12.2019 12:21
    +2

    Я сейчас дико извиняюсь и очень стараюсь не съёрничать, но что вы хотели этой статьёй рассказать?

    С технической точки зрения вся описываемая вами Америка открыта в 1492 году (ещё и в одном поле у вас две сущности).

    С менеджерской точки зрения есть Excel в MS Office Online 365 или как оно там называется.


    1. staticlab
      25.12.2019 13:27

      С менеджерской точки зрения есть Google Forms, единственная задача которого — заполнять список.


      1. ufocombat Автор
        25.12.2019 14:06
        -1

        Если вы пустите всех ваших студентов в ваш личный кабинет пожалуйста. А я не хочу туда ни кого пускать. Я сделаю сайт в одну страничку, реализацию которого с технической точки зрения даже не хочу вам приводить и у меня будет журнал в который студенты сами запишутся, а вы будите щурить глаза и тратить время чтобы по вашему экселю вазить и искать каждого студента, я не говорю уже о том что новая группа сама у меня запишется а вы будите сами эксель заполнять.


        1. staticlab
          25.12.2019 16:19

          Google Forms как раз и сделан, чтобы не пускать всех в свой личный кабинет, а просто скинуть всем желающим ссылку на готовую публичную страничку, которая хостится на Гугле и которую сможет сделать даже человек, не разбирающийся в программировании вообще. Понимаете, это тот инструмент, который специально был сделан для задач, подобным вашей.


          И более того, даже в Google Spreadsheets можно настроить доступ по ссылке с редактированием только для одного конкретного документа. И нажатием одной кнопки этот доступ так же отобрать. Кстати и для старосты курса, если ему нужно вести свой журнал посещений, видеть сразу весь список будет удобно.


          1. ufocombat Автор
            26.12.2019 10:29

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


            1. staticlab
              26.12.2019 11:24

              Что мешает сделать отчёт из Spreadsheet? Как минимум можно доработать оформление листа, в которые будут приходить данные из формы. Google Docs, также как MS Office, позволяет подключать в документ таблицы из Spreadsheets. Также можно использовать какое-нибудь расширение для отчётов. Навскидку, нашёл такое https://gsuite.google.com/marketplace/app/document_studio/429444628321


              1. ufocombat Автор
                26.12.2019 12:45

                Мне нравится! Если бы ничего печатать не нужно было так и сделал но мне проще эту печатную форму в ФР настроить особенно когда ее нужно подогнать под требование учебного заведения. Журналы ведь никто не отменял))). ФР хорошо переносит на новые страницы за пределы листа как вправо так и влево. И офис классно только в ФР это бесплатно в демке работает, а у меня мак и лицензионного офиса нет + это возится с ключами, API и тп экспортом в Word — Хорошая идея если бы за это лимон заплатили я бы аж стучал по клавиатуре и вас позвал на проет


    1. ufocombat Автор
      25.12.2019 14:04
      -1

      Если вы пустите всех ваших студентов в ваш личный кабинет пожалуйста. А я не хочу туда ни кого пускать. Я сделаю сайт в одну страничку, реализацию которого с технической точки зрения даже не хочу вам приводить и у меня будет журнал в который студенты сами запишутся, а вы будите щурить глаза и тратить время чтобы по вашему экселю вазить и искать каждого студента, я не говорю уже о том что новая группа сама у меня запишется а вы будите сами эксель заполнять.


      1. HawkeyePierce89
        25.12.2019 14:21

        Открываем доступ к Excel на первой поре, студенты сами себя вносят. Дальше закрываем доступ на редактирование, оставляем только на просмотр.

        Искать никого не надо, один раз отсортировать по алфавиту и никаких проблем с вылавливанием студентов нет. Всяко проще один раз преподу плюсик поставить, чем вводить ФИО каждый раз. Первую колонку с ФИО можно запинить.

        А если вы хотите отдать «на аутсорс» студентам чтобы они сами заполняли о себе посещаемость — вы вообще не понимаете с чем работаете, но при этом уже делаете какие-то действия по разработке решения. Сначала надо проанализировать проблему, а вы это не сделали (в начале статьи у вас обычная универская вода), а уже только потом на основе проблемы искать максимально простое решение.

        И вообще ваш ответ на критику — вы диплом также перед дипломной комиссией защищать будете?


        1. ufocombat Автор
          25.12.2019 14:47

          Открываем доступ к Excel — А у меня студенты открывают сайт на телефонах и к концу пары все заполнено без моего участия. А Пар 10 в день…

          Это простая задача уничтожения моей персональной рутины.


          1. HawkeyePierce89
            25.12.2019 14:54

            Окей, как вы будете решать проблему, что я, студент Иванов Пётр Сидорович, не пришёл к вам на пару, но зашёл к вам на сайт где-то за минуту до конца пары и отметился, что я был?


            1. ufocombat Автор
              25.12.2019 15:02

              Во-первых это считается что был. Во вторых время зафиксировано. В Третьих это развитие задачи и на этот случай посадка может закрываться как на самолет (одной кнопкой страница делается не активной)


              1. HawkeyePierce89
                25.12.2019 15:09

                А если я пришёл и забыл отметиться, а посадка на самолёт закрыта? Ну вот запара в голове у меня после трёх полуторачасовых пар, что делать тогда? Фактически-то я присутствовал.

                Или другой момент, как быть если я при вводе опечатался и ввёл не Иванов Пётр Сидорович, а Иканов Пётр Сидорович, как эту проблему решать?

                Или третий момент, у меня рамсы с одногруппником, и он ввёл меня в журнал учёта, а меня нет. И меня вызывают решать задачу, а меня нет, получается что я соврал преподавателю. Как решать такую проблему? Даже не рамсы, а просто как бороться с флудом? Как ограничивать доступ только к своей группе, чтобы никто посторонний не мог ничего вписать?


                1. remzalp
                  25.12.2019 15:48

                  Решал сходную задачу, минимальный код на питоне (bottle), веб-сайт запускается на ноутбуке, коннектится к внутри университетскому вайфаю.
                  Студентам сообщается ип адрес, куда заходить.
                  Бонус — студент только из университета способен отметиться, плюс запись ип адреса, с которого регистрировались — можно посмотреть аномалии.
                  После переклички можно остановить сервер

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

                  Защиты от человеческой ошибки при вводе имени нет, но есть ручной фильтр — «люди, не состоящие в ранее составленном списке», там уже вручную поправить можно.

                  Единичная не-запись кардинальным образом на итоговые баллы не влияет.


                  1. HawkeyePierce89
                    25.12.2019 16:07

                    А теперь возвращаемся к тому, что говорил автор: «Времени затрачено не много, а результат очень качественный» и «Это простая задача уничтожения моей персональной рутины».

                    У задачи, если её копнуть, очень много подводных камней, каждый из которых нужно проанализировать, продумать решение. Даже в вашей реализации есть подводные камни как «студент только из универа способен отметиться» — я могу просто пойти в столовку при универе и чилить в телефоне, оставаясь при этом в локальной сети универа.

                    А ещё и отдельно выделять IP. Это ведь надо учитывать время пары, верно, чтобы абы кто не записался? Ещё расходы на доработку системы.

                    И отсюда вопрос: а стоит ли вся овчинка выделки и стольких заморочей, чтобы всю работу перевести, так сказать, с сервера на клиента? А клиенту мы доверять не можем, вот и делаем кучу-прекучу проверок.

                    В то время как мой изначально предложенный вариант с Excel максимально лишён каких-то проблем, а уж тем более вышеперечисленных. Да, надо тратить время преподавателя, но это меньшее зло, кмк, чем решать все вышеперечисленные проблемы и пытаться справиться с абьзом системы от студентов.

                    Или, если решать учёт посещаемости студентами занятий модно-молодёжно, то я бы пошёл совершенно иным путём.

                    У всех студентов есть RFID-пропуска (по крайней мере в моём универе в глубинке провинции в конце нулевых уже было). Берём малинку и считыватель, ставим около входа в кабинет, студенты заходят на пару и прикладывают пропуск к малинке.

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

                    И с RFID-пропусками мы решим и проблему преподавателя, что ему не надо вообще вести учёт посещаемости, и студентам не будем добавлять головной боли только потому что кому-то лень вести учёт посещаемости, хотя это вроде как является рабочей обязанностью (могу ошибаться про рабочую обязанность).


                  1. ufocombat Автор
                    25.12.2019 17:46

                    Иногда студенты отвечают на чужую фамилию, за друга. IP не нужно, добавляется рпасписание преподователя и группа автоматом определяется-RFID это 666 но главное не эффективно-тогда уж FaceID и AI


                    1. HawkeyePierce89
                      26.12.2019 12:51

                      Что значит «RFID это 666»?

                      И это вполне эффективно, если вы не в курсе, то на многих работах учётов посещаемости работниками работы идёт именно по пропускам с RFID, или что там сейчас в 2019-ом есть.

                      И студент не сможет «ответить за чужую фамилию», а именно проставить на входе в аудиторию свой пропуск и пропуск друга, т.к. для этого ему придётся на входе в универ через турникеты прочекать свой пропуск и пропуск друга (а простым запросом в БД можно легко найти человека, который в универ не приходил, но почему-то отметился в аудитории), а это уже будет видно и на камере, и вахтёр тоже увидит.

                      Так что тема с RFID полностью всё автоматизирует и не надо напрягать студентов. Правда после защиты и внедрения такого дипломного проекта для универа я бы уехал из города, чтобы меня не поймали на улице, но это уже другой разговор.


                      1. ufocombat Автор
                        26.12.2019 15:09

                        Почитайте, пожалуйста, в вики ru.wikipedia.org/wiki/RFID
                        Кстати если ходить в службу безопасности за этими данными после каждой лекции или даже 1 раз в день — расскажите потом что они вам скажут. В моем варианте на оборудование 0 рублей в вашем администрирование пропусков их перепрошивка — ну подсчитайте разницу. Но если бы УкрГазпром выдал под это миллион рублей я бы вас пригласил на разработку ТЗ чтоб подороже стало. Учебные заведения типа школ к сожалению не могут тратить такие средства (на каждую аудиторию) на опиум для программистов


                        1. HawkeyePierce89
                          26.12.2019 16:37

                          Что почитайте? Если вы не в состоянии выразить свою мысль или вам просто религия не позволяет использовать RFID, то так и скажите.

                          Зачем ходить? Вы в курсе такого термина как «Выгрузка», и не надо никуда ходить, если уж лично вам каждый день непонятно для чего нужно каждый день знать кто из студентов был, а кто не был.

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


                          1. ufocombat Автор
                            26.12.2019 17:41

                            Мой начальник службы безопасности сказал пошли его *** данных не дам эта система не для этого. Где мне взять выгрузку?


                            1. HawkeyePierce89
                              26.12.2019 17:59

                              Какая система не для этого? Мы к моменту прихода к начальнику службы безопасности уже полностью написали и внедрили систему учёта посещаемости студентами занятий.

                              Нам даже ходить никуда не надо, просто в ЛК преподавателя делаем выгрузку за определённый день с чистыми данными: дата, группа, ФИО студента.


                              1. ufocombat Автор
                                27.12.2019 10:38

                                Сразу видно что вы в вузе не работаете, журнал это документ строгой отчетности — первичка. По нему платят зарплату его нужно вовремя заполнять — на уроке, самый крайний случай на перемене сразу после урока. А звонок звенит его ждет уже другой преподаватель. Очень много хороших рассуждений, за большие деньги и оторванных от реальности (применительно к нашему учебному заведению), к сожалению. Рассказывать как корабли бороздят космическое пространство очень легко, особенно понравилось: Пусть они (те кто сверху) выделят деньги, я с вами полностью согласен, ПУСТЬ!


                                1. staticlab
                                  27.12.2019 11:00

                                  журнал это документ строгой отчетности

                                  нет


                                  1. ufocombat Автор
                                    27.12.2019 11:21

                                    Журналы проверяют вышестоящие органы! Если туда не записать часы зарплату не начислят.


                                  1. ufocombat Автор
                                    27.12.2019 11:23

                                    ДА это первичка — по ней составляется ведомость и передается в бухгалтерию — в журнале подпись и количество часов — сфоткаю приложу вам сюда фото! теоретикам


                                1. HawkeyePierce89
                                  27.12.2019 13:35

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

                                  Логика уровня Б, вопросов к вам больше не имею.


                                  1. ufocombat Автор
                                    27.12.2019 19:30

                                    Логика нормально на лекции время тратить на это жалко, поэтому на перемене это делают.


                  1. swampskee
                    26.12.2019 10:30

                    Тоже решал подобную задачу, но с помощью генератора qr-кодов.
                    Отличие в том, что максимальное чисто присутствующих было известно заранее и ссылка, кодирующаяся в qr, генерилась на основе этого количества и времени и жила до конца лекции. Подводных камней миллион, но в моём случае это решала необходимую задачу.


                    1. ufocombat Автор
                      26.12.2019 10:33

                      Спасибо вам за отзыв, а то некоторые думают, что задача никому не нужна. С QR — Кодом можно поступить так: выдать его на проектор, а в него зашить ссылку на страничку регистрации. Но ведь тогда смогут переслать его друзьям, которые не на лекции?


                1. ufocombat Автор
                  25.12.2019 17:46

                  Не отметился пишешь в чрупповой чат