Artonit

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

SMF - Just Installed!

Автор Тема: Как подсчитать количество студентов, пришедших с утра на занятия?  (Прочитано 4087 раз)

adminsmf

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 79
    • Просмотр профиля

Необходимо в колледже проводить подсчет количества студентов, пришедших с утра на занятия.
При этом необходимо подсчитать именно студентов, исключить преподавателей.
Цифра нужны по каждой группе (их 5 штук).
Можно ли это сделать на базе Артонита?

adminsmf

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 79
    • Просмотр профиля

Подобные задачи встречаются достаточно часто.
Особенность таких задач - каждый раз уникальные условия расчета.
Для решения подобных задач предлагаю использовать сделанные ранее заготовки.
Для решения этой задачи определяю граничные условия:
1. определяем, что достаточным результатом будет файл, в котором и будут записаны нужные цифры. Это условие - файл - важен, т.к. мы заранее отказываемся от каких либо экранных форм.
2. в файл мы должны записать какую-либо информацию, связанную с журналом событий. В данном случае надо сделать подсчет количества вошедших студенов, сгруппировав их по группам.
3. в дальнейшем файл можно отправить по почте, скопировать в нужные папки, или провести другую обработку, используя bat-файлы.
Если эти условия приемлемы, то решение задачи выглядит следующим образом:
1. используем программу Siconv.exe.
2. для подготовки отчета пишем sql-запрос.
3. пишем простой bat-файл для запуска Siconv.exe с нужным sql-запросом.
3. В Назначенные заданий ОС Windows устанавливаем запуск bat-файла в заданное время.

adminsmf

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 79
    • Просмотр профиля

Продолжаю.
В файл с SQL запросом вставляем вот такой запрос:

select count(events.id_event), organization.name from events
join organization on (events.ess2=organization.id_org)
where events.datetime>cast('NOW' as date)   and
    events.id_eventtype=50  and
    events.id_dev in (5,6,8,9)
    group by events.ess2, organization.name

В результате получим отчет о количестве событий вида действительная карта через указанные точки прохода.
Тут цифры 5,6,8,9 - ID точки прохода (придется смотреть прямо в БД).
Можно поспорить о достоверности цифры, но:
1. другой нет.
2. на точность влияют масса других, гораздо более весомых, факторов. Например, студент (школьник) пришел без карты. Что, не пускать?
3. можно сделать запрос еще более строгим, выбрав только уникальные ФИО входящих (но это не исключит фактора 2).
Результатом является вот такой ответ:
COUNT   NAME
4   Департамент развития
1   Канцелярия
9   Отдел платежей финансового управления департамента
13   Отдел взаиморасчетов финансового управления
4   Планово-экономическое управление
27   Бухгалтерия департамента экономики и финансов
2   Управление имущественных отношений департамента
13   Отдел прямой подписки и direct-marketing
6   Отдел организации поставок и продаж
6   Отдел ремиссии
22   Управление прямой подписки
10   Аналитическое управление
3   Гараж транспортного цеха
105   Цех экспедирования департамента логистики

Этот ответ будет сохранен в файл.

adminsmf

  • Administrator
  • Jr. Member
  • *****
  • Сообщений: 79
    • Просмотр профиля

В предлагаемом выше варианте есть один недостаток: необходимо знать ID точек прохода. Эта данные явно получить непросто.
Предлагаю еще более простой вариант. В Конфигураторе видны заранее сформированные Группы устройств. В Группе устройств есть служебные подгруппы Зона входа (фиксированный devgroup.id_dev=2) и Зона выхода (фиксированный devgroup.id_dev=3). Набор точек прохода доступен Вам для редактирования.
В этом случае sql запрос расчета будет выглядеть т.о.:

select count(events.id_event), organization.name from events
join organization on (events.ess2=organization.id_org)
where events.datetime>cast('NOW' as date)   and
    events.id_eventtype=50  and
    events.id_dev in (select devgroup.id_dev from devgroup where devgroup.id_parent = 2)
    group by events.ess2, organization.name

Результатом будет таблица со сводными цифрами.
Скачать все одним файлом http://artonit.ru/2011-02-14-16-18-40/remository/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D1%8B%D0%B5-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0-%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%D0%B0-%D0%BF%D1%80%D0%B8%D1%88%D0%B5%D0%B4%D1%88%D0%B8%D1%85-%D1%81%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/.