УДК 004.43 Р. Р. БИКМЕТОВА, С. А. ЛАЗАРЕВ bikmetova-regina@mail.ru, sergeyy.lazarev72@gmail.com Науч. руковод. – к.ф-м.н. доц. В. И. РЫКОВ Двухуровневая модель автоматизации отчётности преподавателя Аннотация: рассматривается методология автоматизации отчётности преподавателя по выполнению нагрузки. Используются методы Excel и объектно – ориентированных программирования на языке Python. Ключевые слова: Python; кафедра; документооборот, отчётность преподавателя. В кафедральном документообороте предусмотрена ежемесячная, семестровая и годовая формы отчётности преподавателя о выполнении плановой нагрузки. Статья содержит описание технологии автоматизации формирования указанной отчётности на двух уровнях. На первом уровне помесячные данные о выполнении нагрузки преподавателем вносятся вручную, а итоговые семестровые результаты формируются автоматически с контролем выполнения плана по карточке учебной нагрузки и возможностью корректировки введённых данных. На втором этапе автоматизации данные о помесячном выполнении нагрузки берутся из расписания в личном кабинете преподавателя и вручную вносятся только сведения о выполнении учебной нагрузки, не внесённой в расписание, типа экзаменов и зачётов Рассмотрим методику автоматизации формирования отчётности в программе Excel. Создаётся книга Excel из 10 листов с именами месяцев и двух листов семестров для отражения результатов выполнения нагрузки Ежемесячная форма отчётности имеет вид (Рис.1) (часть позиций опущена) Рис.1 Фактическое выполнение нагрузки за семестр Вертикальное суммирование помещается в первой числовой строке - «Октябрь», поскольку общее число строк заранее неизвестно. Автоматически оформляется итоговый документ вида (Рис.2) (часть позиций опущена): Рис.2 Фактическое выполнение нагрузки за месяц В строке «Нужно» вручную приводятся данные из годового учебного плана, во всех ячейках строки «Сентябрь», кроме ячейки «Всего» хранится формула {=Сентябрь!D10:AA10}. Фигурные скобки показывают, что операция выполняется над массивом данных. В нашем случае это итоговая строка листа «Сентябрь» [1]. Аналогично оформляются строки остальных месяцев. В строке «∑» выводится вертикальная сумма по месяцам, а в строке «Δ» объём невыполненной нагрузки. На следующем уровне автоматизации для формирования комплексного отчёта используются программа, написанная на языке Python. В программе используются данные официального расписания [2] в Excel формате и Excel файл образец отчёта (Рис.1, Рис.2). Для чтения и записи Excel файлов используется библиотека OpenPyXL [3]. Расписание на семестр используется в формате файла программы Excel. Содержимое ячеек файла расписания имеет вид (Рис.3). Рис.3 Вид официального расписания Первая неделя для осеннего семестра обозначает в календаре неделю с 1 сентября. Указание недель может иметь вид: «3», «2-4», «3, 4-6». Две подряд лабораторные работы обозначают одно занятие длительностью 4 часа. Далее по номеру и дню недели определяется дата занятия. Считывается Excel – файл со структурой определяющий формат отчёта (Рис.1, Рис.2) и данные заносятся в лист Excel файла, согласно месяцу проведения занятия, имени группы и типу занятия с нарастающим итогом. Приведём общие сведения по структуре программы. Средствами класса Sheet файл расписания читается, содержание ячеек разбирается по предметам и формируется список: «'Объектно-ориентированный подход в инновационных технологиях', ‘ООП’, 'Дистанционно', 'Лекция', 'И-110Б', '23-30', 6, 2». Последние две цифры списка обозначают день недели и длительность занятия. class Sheet: self.dict_file_name = dict_file_name """ Чтение всех ячеек расписания. Вводится по 7 ячеек из столбца k таблицы расписания. n - номер строки, k - номер столбца """ owner_name = self.vsheet.cell(2, 1).value # Фамилия преподавателя for k in range(2, 8): # Цикл по столбцам Excel листа расписания for n in range(5, 12): # Цикл по строкам Excel листа расписания sheet_base.append(long_name) #Добавить предмет в список for i in range(1,5): # Цикл по строкам описания предмета Результатом работы методов класса является список данных о занятии. Следующий класс – Parsing анализирует массив списков данных о занятии и формирует итоговый Excel отчёт. class Parsing: # Класс разбора строк расписания полученных из класса Sheet и формирования строк итогового комплексного отчёта self.wb = load_workbook(schedRepIn) #Загрузка Excel структуры результата def subj_work(self,): # Базовая функция класса # subjects - расписание по неделям в виде списка из класса Sheet # sheet_base - строка данных расписания предмета из списка subjects Функция преобразует строку в элемент словаря subj_strings. # Словарь subj_strings{ s_head:s_hours} хранит строки расписания в формате: ключ словаря, s_head - конкатенация строк s_data + s_group, # Структура s_hours значений словаря subj_strings: # словарь s_hours часов занятий по предмету в данный день. # Словарь s_hours имеет структуру {позиция s_pos: часы s_long}. # Позиция определяется по виду занятия subj_type в строке sheet_base. # При добавлении часов показания s_long суммируются. # Ключи словаря subj_string отсортированы по возрастанию. month_work = int(s_date[5:7]) #Текущий номер месяца записи if month_save != month_work : #Обработка перехода на другой месяц Процедура list_change решает проблему перехода на январь в первом семестре n_list = self.list_change(n_list, month_start, month_work, month_save) self.vsheet.cell(n_str,n_row).value = s_date #Запись даты s_group = s_key[10:len(s_key)] self.vsheet.cell(n_str,n_row+1).value = s_group # Запись группы s_hours = subj_strings[h_key] #Вложенный словарь часов по предмету for d_key in s_hours.keys(): #Цикл по занятиям на дату q_shift = int(d_key) #Сдвиг записи часов q_long = int(s_hours[d_key]) #Количество часов self.vsheet.cell(n_str,n_row+q_shift).value = q_long # Запись количества часов в строку в нужным сдвигом n_str += 1 # Переход на следующую строку Итоговая запись результата self.Rep_write(self.schedRepOut, self.owner_name) #'schedRepOut.xlsx') #Управление номером листа отчёта def list_change(self, n_list, month_start, month_work, month_save): Расширение возможностей программы: Вывод недельного расписания для преподавателя Вывод недельного расписания для студента Вывод расписания по дисциплинам для студента В рамках использованной технологии предполагается разработка программы управления распределением нагрузки на кафедре и автоматизация заполнения индивидуального учебного плана преподавателя. СПИСОК ЛИТЕРАТУРЫ 1. Лидл Н. Excel для экономистов/ — «ЛитРес: Самиздат», 2020). 2. РАСПИСАНИЕ ЗАНЯТИЙ //URL:https://lk.ugatu.su/teacher/#timetable (дата обращения: 30.07.2021) 3. Работа с файлами Excel в Python //URL https://tokmakov.msk.ru/blog/item/71(дата обращения: 30.07.2021)