Как составить автоматически расписание

rooms = {«18», «sport1», «trudy_m», «trudy_w» , «21»,»22″,»23″,»24″, «25», «26», «27», «31»,»32″,»33″,»34″};

teachers = {«ivanova», «petrova_en», «sidorova_ge», «shumova», «trudovik_m», «trudovik_w», «stoprtteacher»};

foreignLangTeachers = {«petrova_en», «sidorova_ge»};

trudyTeachers = {«trudovik_m», «trudovik_w»};

informaticsTeachers = {«trudovik_m», «trudovik_w»};

sportTeachers = {«trudovik_m», «trudovik_w»};

classes = {«5a», «5b», «6a», «6b», «7a», «7b», «8a», «8b», «9a», «9b»,»10a», «10b», «11a», «11b»};

// day, shift, lesson number
lessons = {
111, 112, 113, 114, 115, 116, 117, 121, 122, 123, 124, 125, 126, 127//,
/* 211, 212, 213, 214, 215, 216, 217, 221, 222, 223, 224, 225, 226, 227,
311, 312, 313, 314, 315, 316, 317, 321, 322, 323, 324, 325, 326, 327,
411, 412, 413, 414, 415, 416, 417, 421, 422, 423, 424, 425, 426, 427,
511, 512, 513, 514, 515, 516, 517, 521, 522, 523, 524, 525, 526, 527,
611, 612, 613, 614, 615, 616, 617, 621, 622, 623, 624, 625, 626, 627*/
};

roomTeachersRelation = [
[2,1,1,1,0,0,0],
[0,0,0,0,0,0,1],
[0,0,0,0,1,0,0],
[0,0,0,0,0,1,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[2,1,1,1,0,0,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[2,1,1,1,0,0,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[1,2,1,1,0,0,0],
[2,1,1,1,0,0,0],
[2,1,1,1,0,0,0]
];

teacherClassRelation = [
[2, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0],
[0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1],
[0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1],
[1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0]
];

classLessonRelation = [
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[1,1,1,1,1,1,1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,1,1,1,1,1,1,1]
];

teacherLessonRelation = [
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,0,0,0]
];

Основное расписание

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

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

Чтобы открыть основное расписание, в меню «Операции» выберите пункт «Основное расписание».

image alt center

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

Нажмите кнопку «Составить (или досоставить) основное расписание».

Если расписание в группах, занимающихся в первую смену, получилось недостаточно ровным, то установите в этих группах запреты на часы и заново составьте расписание.

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

Расписание можно составлять как для всех групп, так и для выбранных. По умолчанию основное расписание составляется для всех групп. Чтобы составить расписание для некоторых групп:

  • на панели «Группы» установите маркер — «Выбрать»;
  • нажмите кнопку «Выбрать…» и отметьте галочками нужные группы из списка, либо нужные специальности (для составления расписания по всем группам нужных специальностей):

    image alt center

Проекты расписаний

Программа позволяет создавать несколько проектов расписания, которые могут быть действующими и черновыми (подготавливаемыми заранее). Каждому проекту соответствует совокупность назначенных занятий основного расписания в «Планшете занятий».

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

Действующим проект становится при создании текущего расписания.

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

Новый проект создается в справочнике «Проекты расписаний». Открыть справочник можно кнопкой «Проекты» в этом окне.

Чтобы выбрать проект для отображения в «Планшете занятий»:

  1. в меню «Операции» выберите пункт «Основное расписание»;
  2. выберите из раскрывающегося списка проектов нужный;

    image alt center

  3. нажмите image.

Составление расписания

Для составления основного расписания:

  1. выберите проект основного расписания, по умолчанию 1;

    image alt center

  2. для автоматического расчета расписания нажмите кнопку «Составить основное расписание».

    Через некоторое время на экране должно появиться сообщение об успешном выполнении:

    image alt center

  3. перейдите в «Планшет занятий» для просмотра и редактирования расписания.

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

Если программа не находит варианта составления расписания в течение 2-х минут, то выдается сообщение «Расписание составить затруднительно. Продолжить?», при ответе «Да» программа подумает еще 5 минут, а затем при аналогичном Вашем ответе еще 10 минут. Это означает, что решение найти затруднительно. Установите меньшее количество запретов и снова нажмите кнопку «Составить основное расписание».

При ответе «Нет» можно сохранить частично составленное расписание.

При невозможности составления расписания программа выдает сообщение «Невозможно составить расписание. Уменьшите нагрузку или снимите некоторые запреты и повторите операцию», а в текстовой части окна выводятся конкретные причины, по которым оно не может быть составлено (превышена допустимая недельная нагрузка или из-за запретов нет возможности вписать нагрузку и т.п.). Если рекомендаций нет, то это значит, что математическим путем ошибка не была выявлена, но ни один из возможных вариантов решения расписания не удовлетворяет условиям.

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

Внимание

  • Не старайтесь сразу получить 100% результат, не устанавливайте слишком много запретов. Работайте постепенно. Установите немного запретов, составьте расписание, установите еще запреты, повторите операцию. Если расписание невозможно составить, то расписание, составленное в прошлый раз, не удаляется – оно может оказаться наилучшим, а вручную Вы можете его улучшить.
  • При нажатии кнопки «Составить основное расписание» при успешном расчете расписания и при сохранении частично составленного расписания, старое расписание выбранного проекта автоматически удаляется, а новое записывается на его место.

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

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

Если приоритет выставлен у групп, то выбор аудитории производится сначала из списка предпочитаемых групп, а затем для преподавателей.

Досоставление расписания

Данная возможность используется в случае:

  1. если в течение семестра начинают заниматься еще группы, расписание которых требуется составить позднее;
  2. после занесения дополнительной нагрузки в справочник нагрузки;
  3. если необходимо сначала расставить некоторые занятия вручную.

Для автоматического досоставления расписания нажмите кнопку «Досоставить основное расписание».

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

Доназначение можно использовать после ручной корректировки основного расписания для назначения снятых по разным причинам занятий. При нажатии кнопки «Досоставить основное расписание» назначенные вручную занятия в «Планшете занятий» останутся на своих местах.

Методика составления расписания

При автоматическом составлении основного расписания рекомендуется:

  1. сначала составить расписание без запретов;
  2. при удачном исходе шага №1 установить запреты, определяющие графики занятий групп;
  3. установить запреты, определяющие графики работы преподавателей;
  4. составить расписание с установленными запретами.

Если расписание не составилось, переместите или удалите некоторые запреты и составьте расписание вновь.

Примечание

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

При составлении расписания программа может выдавать сообщения двух типов:

1 тип: «фатальные» – сообщения о том, что решение точно не может быть найдено. Это может быть, например, перенагрузка – занятий больше, чем свободных ячеек, либо программа просчитала все варианты, и решение не нашлось.

В этом случае:

  • отмените запреты и попытайтесь составить расписание снова;
  • отмените либо уменьшите недельную нагрузку;
  • увеличьте количество свободных ячеек.

2 тип: «нефатальные» – программа сообщает, что расписание можно составить, но имеются проблемы, например, затруднительно вписать занятия нагрузки по 1 часу в день, сложно назначать занятия наиболее занятого преподавателя, обязательной аудитории и т.п.

Удаление основного расписания

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

Примечание

Перед удалением рекомендуем сделать архивную копию базы данных.

Чтобы удалить расписание, выберите нужный проект и нажмите кнопку «Удалить основное расписание».

image alt center

После этого программа задаст несколько дополнительных вопросов для выбора элементов для удаления.

Программа предложит:

  • удалить занятия, назначенные автоматикой;
  • удалить занятия, назначенные вручную;
  • удалить запреты.

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

Внимание!

Все операции, выполняемые с основным расписанием можно отменить.

Примечание

Основное расписание можно удалить для нескольких групп или специальностей.

Для этого:

  • на панели «Группы» установите маркер — «Выбрать»;
  • нажмите кнопку «Выбрать…» и отметьте галочками нужные группы из списка, либо нужные специальности (для только их расписания);
  • нажмите кнопку «Удалить основное расписание».

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

Печать основного расписания

Отчет служит для печати основного расписания. Это расписание является публичным, то есть вывешивается в учебном заведении.

Чтобы сформировать печатную форму расписания:

  • в меню «Отчеты» выберите пункт «Печать основного расписания;
  • или на панели инструментов планшета занятий в режиме «Основное расписание» нажмите кнопку image.

Откроется окно «Печать основного расписания»:

image alt center

В окне выберите:

  • форму вывода — по группам, преподавателям или аудиториям;
  • вид вывода дат — по вертикали или по горизонтали (для групп и аудиторий);
  • группы, преподаватели, аудитории, которые необходимо вывести на печать.

Нажмите кнопку image. Начнется формирование печатной формы в программе MS Excel.

После успешного завершения откроется следующее сообщение:

image alt center

image alt center

Печать индивидуальных расписаний студентов

Чтобы распечатать индивидуальное расписание для учащегося:

  • откройте справочник «Студенты», выберите группу;
  • на панели инструментов справочника нажмите кнопку image;
  • подтвердите печать:

    image alt center

Начнется формирование печатной формы в программе MS Excel. После успешного завершения откроется следующее сообщение:

image alt center

image alt center

Выбор больших и маленьких брендов

Наш редактор используют более 20,525,288 маркетологов, менеджеров и педагогов из 133 стран:

ЛЕГКО РЕДАКТИРОВАТЬ

Шаблоны расписаний

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

Составьте свое расписание

Больше шаблонов

Возможности программы для составления расписания

Будьте организованы во всем. Создавайте бесплатное ежемесячное, еженедельное или ежедневное расписание с помощью простой и удобной программы для составления расписания от Visme.

Красивые шаблоны расписаний и графиков

Войдите в панель инструментов Visme и нажмите «Создать», чтобы начать новый проект. Перейдите на вкладку «Распечатки», чтобы подобрать бесплатный шаблон расписания на неделю, шаблон расписания занятий, шаблон расписания уроков и многое другое.

Составьте свое расписание

Красивые шаблоны расписаний и графиков

Создайте свое расписание или график

Программа для составления расписания Visme поможет составить расписание дня, график работы, расписание уроков и многое другое. Используйте панель слева, чтобы создавать текстовые блоки и блоки контента, а также редактировать доступные шаблоны. Оцените все возможности программы для составления расписания: редактируйте график онлайн или скачайте и распечатайте шаблон расписания, чтобы вносить изменения вручную.

Составьте свое расписание

Создайте свое расписание или график

Настройте расписание, чтобы лучше организовать свою жизнь

Создайте собственный график работы, расписание уроков, расписание тренировок, график уборки и многое другое с помощью программы для составления расписаний Visme. Начните с базового шаблона в панели управления или создайте с нуля собственное расписание. Затем добавьте таблицу из раздела «Данные» на панели слева и добавьте строки и столбцы в соответствии с вашим расписанием — часы, дни, недели или месяцы.

Составьте свое расписание

Настройте расписание, чтобы лучше организовать свою жизнь

Другие замечательные функции программы для составления расписания

Поделитесь своим расписанием

Программа для составления расписания бесплатно поможет создать идеальное расписание для вашей команды, класса или семьи. Вы можете легко опубликовать шаблон расписания в Интернете и поделиться URL-адресом, скачать в формате PDF и прикрепить к электронному письму или распечатать.

Поделитесь своим расписанием

ПОДРОБНЕЕ О РАСПИСАНИЯХ

Что такое расписание?

Расписание похоже на план. Каков план мероприятия, рабочего дня, бюджета или фитнес-цели или даже сотрудников компании? Каждый из аспектов требует такого списка, в котором организован необходимый процесс или процедура. Независимо от того, какое расписание или график вы создаете: ежедневный семейный график, распорядок дня для сотрудника, сменный график или еженедельное расписание, – программа для составления расписаний Visme упрощает процесс.

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

Составьте свое расписание

Что такое расписание?

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

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

ВСЕ, ЧТО ВАМ НУЖНО + ЕЩЕ БОЛЬШЕ

Больше, чем программа для составления расписания

Вы сможете создать все, что вам нужно: Расписание дня, график работы, расписание уроков и многое другое

ВИЗУАЛИЗИРУЙТЕ СВОИ ДАННЫЕ

Диаграммы и графики

Используйте таблицы, чтобы вставить свое ежедневное, еженедельное или ежемесячное расписание. Добавляйте виджеты данных для визуализации чисел и статистики.

ВПЕЧАТЛЯЙТЕ

Интерактивность

Создавайте анимированные и интерактивные расписания, которые можно редактировать онлайн и публиковать в Интернете. Используйте интерактивные инструменты Visme и пользовательскую анимацию.

УКРАСЬТЕ СВОЙ КОНТЕНТ

Стоковые фотографии и иконки

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

КАК ЭТО РАБОТАЕТ

Как составить расписание за 5 шагов

Программа для составления расписания поможет вам быть более организованным. Создайте свой собственный график работы, расписание уроков, расписание тренировок, график уборки и многое другое.

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

  • Создайте новый проект и выберите бесплатный шаблон расписания.
  • Нажмите на элементы, которые вы хотите отредактировать. Обновите текст, чтобы настроить свое расписание и замените базовые цвета шаблона. Например: выберите фирменные цвета компании для оформления рабочего графика или ваши любимые цвета для личного расписания дня.
  • Перемещайте блоки контента, чтобы настроить внешний вид вашего расписания.
  • Добавляйте таблицы и редактируйте их, чтобы создать идеальное расписание.
  • Добавьте список задач и целей в шаблон расписания онлайн или скачайте и распечатайте его, чтобы заполнить вручную.

БЫСТРЫЕ СОВЕТЫ

Как использовать конструктор расписаний

Начните с понимания ваших потребностей в расписании. Вам необходимо ежемесячное расписание для сотрудников? Или вы создаете свой собственный еженедельный график? Вы пытаетесь придерживаться бюджета или соблюдать спортивный режим? Хотите визуализировать цели?

01

Начните с понимания ваших потребностей в расписании. Вам необходимо ежемесячное расписание для сотрудников? Или вы создаете свой собственный еженедельный график? Вы пытаетесь придерживаться бюджета или соблюдать спортивный режим? Хотите визуализировать цели?

Начните новый проект в программе для составления расписания Visme .

02

Начните новый проект в программе для составления расписания Visme .

Перейдите на вкладку «Печатные формы» и выберите «Расписания» из представленных вариантов шаблонов.

03

Перейдите на вкладку «Печатные формы» и выберите «Расписания» из представленных вариантов шаблонов.

Просматривайте доступные шаблоны расписаний, пока не найдете тот, который идеально соответствует вашему видению.

04

Просматривайте доступные шаблоны расписаний, пока не найдете тот, который идеально соответствует вашему видению.

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

05

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

Чтобы ваше расписание соответствовало вашим вкусам и фирменному стилю, используйте предпочтительные шрифты и цвета.

06

Чтобы ваше расписание соответствовало вашим вкусам и фирменному стилю, используйте предпочтительные шрифты и цвета.

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

07

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

Добавьте личный график в таблицу программы для составления расписаний Visme онлайн или скачайте и распечатайте новое расписание, чтобы записать свои задачи и встречи.

08

Добавьте личный график в таблицу программы для составления расписаний Visme онлайн или скачайте и распечатайте новое расписание, чтобы записать свои задачи и встречи.

Часто задаваемые вопросы

Есть ли в программе для составления расписания бесплатно доступные шаблоны?

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

Можно ли полностью редактировать шаблон расписания?

Конечно. Бесплатный конструктор расписаний позволяет настроить каждый раздел шаблона. Вы можете легко изменить таблицы, графику, цвета, фон и шрифты.

Какие типы расписаний я могу создавать?

Абсолютно любые! Создавайте расписание уроков, еженедельный график, расписание тренировок, график уборки, ежемесячный календарь или даже годовой обзор. Вы также можете использовать программу для составления расписаний, чтобы спланировать семейный бюджет, график тренировок, расписание занятий и график работы сотрудников. Все, что может вам понадобиться, может быть построено непосредственно в конструкторе расписаний Visme.

Сколько стоит составить расписание с помощью программы Visme?

Составление расписания с Visme совершенно бесплатно. Вы можете скачать или встроить готовое расписание и использовать его на свое усмотрение! Если вы хотите скачать его в формате PDF или в виде файла .html, вам понадобится стандартный план Visme.

Можно ли распечатать расписание дома?

Конечно! Загрузите расписание в виде изображения или PDF-файла и распечатайте дома на любимой бумаге (мы рекомендуем переработанную бумагу). Вы также можете распечатать расписание в местной типографии (если вы создали многостраничный ежедневник).

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

Да, на панели конструктора слева есть множество графических ресурсов, которые можно использовать совершенно бесплатно.

Ваши графики достоины быть красивыми, как и весь ваш контент
Ваши графики достоины быть красивыми, как и весь ваш контент

Ваши графики достоины быть красивыми, как и весь ваш контент

Создайте дизайн бренда для своего бизнеса, независимо от вашего уровня подготовки.

Зарегистрируйтесь бесплатно!

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

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

Функциональные возможности разрабатываемой книги Microsoft Excel рассчитаны на широкую категорию пользователей. В связи с тем, что все читатели знакомы с учебным процессом по школе, колледжу или вузу, перечисленные далее основные сервисные возможности разработки должны быть понятны:

  • ввод заявок на проведение учебных занятий с помощью электронной формы;
  • подбор свободных аудиторий для занятий;
  • возможность быстрого получения информации о свободном аудиторном фонде;
  • удобная возможность просмотра расписания по учебным группам.

Ввод начальной информации

Понятно, что рассматриваемая разработка требует некоторой начальной информации — о группах, аудиторном фонде и т. д. Фактически нам необходимы справочники по группам, аудиториям, преподавателям и еще ряду категорий. Такие данные заносятся на отдельный лист книги; один из вариантов его заполнения представлен на рис. 5.15.

Рис. 5.15. Лист, содержащий справочную информацию

Рис. 5.15. Лист, содержащий справочную информацию

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

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

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

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

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

Перейдем к рассмотрению листа Заявки (рис. 5.16), который предназначен для фиксации заявок на проведение занятий, а также для указания аудиторий, где они должны проходить.

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

Рис. 5.16. Организация листа Заявки

Рис. 5.16. Организация листа Заявки

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

Посмотрим теперь на информацию, расположенную начиная с четвертой строки листа (третья строка отводится для заголовков столбцов). Здесь каждая строка в этой области содержит заявку на проведение определенного занятия новая заявка вводится в очередную свободную строку на этом листе. При этом информацию по заявке условно можно разделить на две категории:

  • начальная информация о занятиях (заявитель, преподаватель, день, время, группа, количество студентов в группе, название дисциплины и номера учебных недель, когда занятия должны проводиться);
  • информация об обслуживании данной заявки (обслужена ли она, и если да, то номер аудитории, выбранной для проведения занятия).

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

Так, в каждой строке столбцы F и G отводятся для записи информации об обслуживании заявки (подобранной для нее аудитории). И если аудитория подобрана, то в столбец F программно записывается слово «да», а в следующий столбец вписывается номер аудитории. Фактически информация на первом листе представляет собой определенную базу данных.

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

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

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

При необходимости можно легко самостоятельно скорректировать приведенные процедуры на большую продолжительность.

Рассмотрим теперь элементы управления на рис. 5.16. Это две кнопки, которые на листе расположены в области первых двух строк. В табл. 5.1 приведены значения их свойств Name и Caption.

Таблица 5.1. Значения свойств кнопок, расположенных на листе Заявки

Name Caption
Input_New Ввод новой заявки
Input_Auditoria Подбор аудитории

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

Форма для ввода заявок

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

1
2
3
4
' Листинг 5.20. Обработка щелчка на кнопке Ввод новой заявки
Private Sub Input_New_Click()
    Form_Add.Show
End Sub

Здесь Form_Add — значение свойства Name формы, которую мы далее разработаем для ввода информации. Выполняется метод Show этой формы, который загружает ее в память и отображает на экране. Фактически для пользователя щелчок на кнопке ввода новой заявки приводит к появлению формы на экране. На рис. 5.17 представлена рассматриваемая форма ввода.

Рис. 5.17. Форма ввода заявок на занятия

Рис. 5.17. Форма ввода заявок на занятия

На форме расположено шесть элементов управления типа «Поле со списком» или ComboBox (в табл. 5.2 приведены значения их свойства Name). Для каждого подобного объекта рядом имеется поясняющая надпись. При активизации формы эти элементы автоматически заполняются информацией со второго листа книги. Скажем, при щелчке на поле со списком преподавателей мы увидим фамилии преподавателей, предварительно внесенные нами на второй лист.

Таблица 5.2. Значения свойства Name полей со списками на рис. 5.17

Name Подпись
Boss Декан
Prepod Преподаватель
Day День
Time Время
Group Группа
Disp Дисциплина

В правой части формы расположено текстовое окно Количество студентов (Name — Col_Stud), в которое автоматически заносится информация о количестве студентов после выбора группы. Это обеспечивает процедура, представленная в листинге 5.21.

1
2
3
4
' Листинг 5.21. Обработка щелчка в поле со списком групп учащихся
Private Sub Group_Click()
Col_Stud.Text = Worksheets(2).Cells(Group.ListIndex + 2, 2).Value
End Sub

В верхней части формы присутствует набор элементов управления тина «Флажок». Каждый флажок предназначен для указания определенного номера недели, когда должно проводиться занятие. Значения свойства Name флажков формируются как комбинация символов Ch и номера недели: Chi, Ch2 и т. д. Здесь предполагается, что в учебном блоке не больше 7 учебных недель.

В нижней части формы располагаются три важные функциональные кнопки. При щелчке на кнопке Выход (Name — Com_Out) форма просто закрывается, и никакой записи информации в базу данных первого листа не производится. В листинге 5.22 приведен текст предопределенной процедуры для обработки щелчка на кнопке Выход. Метод Hide позволяет закрыть форму и вернуться на рабочий лист.

1
2
3
4
' Листинг 5.22. Обработка щелчка на кнопке Выход
Private Sub Com_Out_Click()
    Form_Add.Hide
End Sub

Другие две кнопки позволяют перенести на рабочий лист данные, внесенные пользователем в форму. При этом одна из кнопок (Зафиксировать и ввести следующую, Name — Com_Next) после записи оставляет форму активной, а другая (Name — Com_Wr_Out) закрывает ее. При активизации формы автоматически выполняется предопределенная процедура UserForm_Activate, а ее текст приведен в листинге 5.23. Основное ее назначение заключается в заполнении списков преподавателей, групп и т. д. Данные для заполнения берутся со второго листа, о чем уже говорилось.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
' Листинг 5.23. Процедура, выполняемая при активизации формы на рис. 5.17
Private Sub UserForm_Activate()
Ch1.Value = False
Ch2.Value = False
Ch3.Value = False
Ch4.Value = False
Ch5.Value = False
Ch6.Value = False
Ch7.Value = False
'Заполнение заявителей
N = 0
While Worksheets(2).Cells(N + 2, 6).Value <> ""
    N = N + 1
Wend
Boss.Clear
For i = 1 To N
Boss.AddItem Worksheets(2).Cells(i + 1, 6).Value
Next
'Заполнение преподавателей
N = 0
While Worksheets(2).Cells(N + 2, 7).Value <> ""
    N = N + 1
Wend
Prepod.Clear
For i = 1 To N
Prepod.AddItem Worksheets(2).Cells(i + 1, 7).Value
Next
' Заполнение учебных дней
N = 0
While Worksheets(2).Cells(N + 2, 4).Value <> ""
    N = N + 1
Wend
Day.Clear
For i = 1 To N
Day.AddItem Worksheets(2).Cells(i + 1, 4).Value
Next
'Заполнение начала пар
N = 0
While Worksheets(2).Cells(N + 2, 5).Value <> ""
    N = N + 1
Wend
Time.Clear
For i = 1 To N
Time.AddItem Worksheets(2).Cells(i + 1, 5).Value
Next
' Заполнение названий групп
N = 0
While Worksheets(2).Cells(N + 2, 8).Value <> ""
    N = N + 1
Wend
Group.Clear
For i = 1 To N
Group.AddItem Worksheets(2).Cells(i + 1, 8).Value
Next
' Заполнение названий дисциплин
N = 0
While Worksheets(2).Cells(N + 2, 10).Value <> ""
    N = N + 1
Wend
Disp.Clear
For i = 1 To N
    Disp.AddItem Worksheets(2).Cells(i + 1, 10).Value
Next
    Col_Stud.Text = ""
End Sub

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
' Листинг 5.24. Процедура щелчка на кнопке Зафиксировать и ввести следующую
Private Sub Com_Next_Click()
' Массивы для фиксации пересечений в занятиях
' по группам и преподавателям
Dim Mass(10) As Integer
Dim Mass2(10) As Integer
' Поле заявителя необходимо заполнить
If Boss.ListIndex = -1 Then
    MsgBox ("Выберите заявителя")
    Exit Sub
End If
' Поле преподавателя необходимо заполнить
If Prepod.ListIndex = -1 Then
    MsgBox ("Выберите преподавателя")
    Exit Sub
End If
' Поле для указания дня недели должно быть заполнено
If Day.ListIndex = -1 Then
    MsgBox ("Выберите день")
    Exit Sub
End If
' Поле для указания начала занятий должно быть заполнено
If Time.ListIndex = -1 Then
MsgBox ("Выберите время")
Exit Sub
End If
' Поле для указания группы должно быть заполнено
If Group.ListIndex = -1 Then
    MsgBox ("Выберите группу")
    Exit Sub
End If
' Необходимо выбрать дисциплину
If Disp.ListIndex = -1 Then
    MsgBox ("Выберите дисциплину")
    Exit Sub
End If
' Необходимо указать количество студентов
If IsNumeric(Col_Stud.Text) = False Then
    MsgBox ("Не указано количество студентов")
    Exit Sub
End If
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
' Запись информации на первый лист
Worksheets(1).Cells(N + 4, 1).Value = Boss.Text
Worksheets(1).Cells(N + 4, 2).Value = Prepod.Text
Worksheets(1).Cells(N + 4, 3).Value = Day.Text
Worksheets(1).Cells(N + 4, 4).Value = Time.Text
Worksheets(1).Cells(N + 4, 5).Value = Col_Stud.Text
Worksheets(1).Cells(N + 4, 8).Value = Group.Text
Worksheets(1).Cells(N + 4, 9).Value = Disp.Text
If Ch1.Value = True Then
    Worksheets(1).Cells(N + 4, 10).Value = "*"
    End If
If Ch2.Value = True Then
    Worksheets(1).Cells(N + 4, 11).Value = "*"
End If
If Ch3.Value = True Then
    Worksheets(1).Cells(N + 4, 12).Value = "*"
End If
If Ch4.Value = True Then
    Worksheets(1).Cells(N + 4, 13).Value = "*"
End If
If Ch5.Value = True Then
    Worksheets(1).Cells(N + 4, 14).Value = "*"
End If
If Ch6.Value = True Then
    Worksheets(1).Cells(N + 4, 15).Value = "*"
End If
If Ch7.Value = True Then
    Worksheets(1).Cells(N + 4, 16).Value = "*"
End If
Key = 0 ' Переменная-индикатор при наличии накладок в расписании
Ch_mass = 0
' Счетчик накладок по группам
Ch_mass2 = 0
' Счетчик накладок по преподавателям
' Цикл по заявкам
For it = 4 To 4 + N - 1
' Проверка преподавателя
    q1 = Worksheets(1).Cells(it, 2).Value 'Преподаватель
    q2 = Worksheets(1).Cells(it, 3).Value 'День
    q3 = Worksheets(1).Cells(it, 4).Value 'Время
    Zan_Pr = 0 ' Сброс индикатора занятости преподавателя
    If q1 = Worksheets(1).Cells(N + 4, 2).Value And _
    q2 = Worksheets(1).Cells(N + 4, 3).Value And _
    q3 = Worksheets(1).Cells(N + 4, 4).Value Then
    For Ned = 10 To 16
    If Worksheets(1).Cells(N + 4, Ned).Value <> "" _
        And Worksheets(1).Cells(it, Ned).Value <> "" Then
    Zan_Pr = 1 ' Преподаватель занят
    Exit For
End If
Next
If Zan_Pr = 1 Then
    Mass(Ch_mass) = it
    Ch_mass = Ch_mass + 1
    Key = 1 ' Отмечается факт противоречия в данных
    End If
    End If
'Проверка группы
    q1 = Worksheets(1).Cells(it, 8).Value
    q2 = Worksheets(1).Cells(it, 3).Value
    q3 = Worksheets(1).Cells(it, 4).Value
    Zan_Gr = 0
    If q1 = Worksheets(1).Cells(N + 4, 8).Value And _
    q2 = Worksheets(1).Cells(N + 4, 3).Value And _
    q3 = Worksheets(1).Cells(N + 4, 4).Value Then
    For Ned = 10 To 16
        If Worksheets(1).Cells(N + 4, Ned).Value <> "" And _
        Worksheets(1).Cells(it, Ned).Value <> "" Then
        Zan_Gr = 1
        Exit For
    End If
    Next
        If Zan_Gr = 1 Then
        Mass2(Ch_mass2) = it
        Ch_mass2 = Ch_mass2 + 1
        Key = 1 ' Отмечается факт противоречия в данных
        End If
        End If
    Next ' Завершение цикла по заявкам
If Key = 1 Then
    If Ch_mass > 0 Then ' Если есть противоречия по преподавателю
    Inform_str = "" ' Формирование информационной строки
    For i = 0 To Ch_mass - 1
    If Inform_str <> "" Then
    Inform_str = Inform_str + ","
    End If
    Inform_str = Inform_str + CStr(Mass(i))
    Next
    Inform_str = "Преподаватель занят. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
    End If
    If Ch_mass2 > 0 Then ' Накладка по группе
    Inform_str = "" ' Формирование информационной строки
        For i = 0 To Ch_mass2 - 1
            If Inform_str <> "" Then
                Inform_str = Inform_str + ","
                End If
                Inform_str = Inform_str + CStr(Mass2(i))
        Next
        Inform_str = "У группы уже есть занятие. Заявка в стр. " + Inform_str
        MsgBox (Inform_str)
        End If
' Выбор варианта действия пользователя
Inform = MsgBox("Если все равно записать заявку - Да. " + _
        " Если продолжить редактирование - Отмена. " + _
        " Если удалить, то нажмите - Нет. ", _
        vbYesNoCancel)
If Inform = vbNo Or Inform = vbCancel Then
' Удаление только что введенных данных
    For i = 1 To 16
    Worksheets(1).Cells(N + 4, i).Value = ""
    Next
End If
End If
End Sub

В начале процедуры подсчитывается количество уже имеющихся заявок на первом листе:

1
2
3
4
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend

Это делается для того, чтобы записать новую заявку в очередную свободную строку. Однако до этого проверяется, все ли данные введены: заявитель, преподаватель, группа и т. д. Что касается полей со списками, то для них индикатором выбора элемента в списке является значение свойства ListIndex (номер выбранного элемента): -1 означает, что в списке не выбран ни один элемент. Например, если не указан день, то следующая конструкция выводит соответствующее сообщение и процедура на этом завершается:

1
2
3
4
If Day.ListIndex = -1 Then
MsgBox ("Выберите день")
Exit Sub
End If

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

1
2
3
4
If IsNumeric(Col_Stud.Text) = False Then
MsgBox ("Введите число студентов")
Exit Sub
End If

Функция IsNumeric возвращает значение False, если входной параметр не является числом. Таким образом, если вместо количества студентов пользователь введет строку с включением букв или других символов, то процедура воспримет подобную информацию как некорректную.

Итак, мы рассмотрели так называемый блок предварительной проверки данных. Далее в процедуре располагается фрагмент, позволяющий выявить противоречия с уже имеющимися данными. Для этой проверки вводится переменная Key, которая в начале проверки принимает значение 0, а если в процессе просмотра имеющихся заявок обнаруживается накладка (по преподавателю или по группе), программно устанавливается в значение 1. Это является индикатором для вывода информационного сообщения в конце процедуры. Сама проверка технически достаточно проста — проверяется, есть ли в указанное время занятия в выбранной группе и у данного преподавателя. Однако несколько деталей мы все же поясним.

Так, в начале процедуры определены массивы Mass и Mass2. При вводе новой заявки процедура просматривает все предыдущие, проверяя, нет ли накладок в расписании по преподавателю и группе. Допустим, преподаватель может вести занятие для нескольких групп. Тогда при вводе новой заявки, если у преподавателя уже есть заявка на это время, в массиве Mass запоминается ее строка на первом листе книги, а в счетчик заявок Ch_mass добавляется 1. Например, если в результате просмотра всех имеющихся заявок в переменной Ch_mass будет число 5, это говорит о том, что у преподавателя в это время уже есть 5 других занятий (такое возможно при проведении занятия для нескольких групп одновременно). В конце процедуры на экран будет выведено одно сообщение с упоминанием обо всех этих заявках.

Массив Mass2 предназначен для проверки накладок по группе. Если у рассматриваемой группы yжe есть заявка на это время, то в массиве Mass2 запоминается номер строки этой имеющейся заявки, а в счетчик заявок Ch_mass2 добавляется 1. Например, если в результате просмотра всех имеющихся заявок в переменной Ch_mass2 будет число 1, это говорит о том, что у группы в это время уже есть другое занятие. В конце процедуры на экран выводится окно сообщения с упоминанием обо всех этих заявках. Фактически предназначение массивов — служить буфером для хранения информации, который очищается в начале процедуры.

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

1
2
3
Inform = MsgBox("Если все равно записать, то нажмите — Да. " + _
" Если продолжить редактировать, то нажмите — Отмена. " + _
" Если удалить заявку, то нажмите — Нет. ", vbYesNoCancel)

В этом месте процедуры на экран выводится стандартное диалоговое окно с кнопками Да, Нет и Отмена. В случае выбора варианта Отмена либо Нет выполняется очистка только что введенных данных на листе:

1
2
3
4
5
If inform = vbNo Or inform = vbCancel Then
For i = 1 To 16
Worksheets(1).Cells(N + 4, i).Value = ""
Next
End If

Таким образом, пользователь может отредактировать имеющуюся заявку в форме либо создать новую. А если накладок нет, то набранная заявка просто остается записанной на первом листе. На рис. 5.18 показан результат ввода одной из заявок на занятие.

Рис. 5.18. Заполненная заявка на проведение занятий

Рис. 5.18. Заполненная заявка на проведение занятий

Процедура обработки щелчка на кнопке Зафиксировать и выйти принципиально не отличается от только что рассмотренной. Различия лишь в заключительном фрагменте программного кода, который отдельно приведен в листинге 5.25.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
' Листинг 5.25. Фрагмент процедуры щелчка на кнопке Зафиксировать и выйти
Private Sub Com_Wr_Out_Click()
If Key = 1 Then
    If Ch_mass > 0 Then ' Если есть противоречия по преподавателю
    Inform_str = "" ' Формирование информационной строки
    For i = 0 To Ch_mass - 1
    If Inform_str <> "" Then
    Inform_str = Inform_str + ","
    End If
    Inform_str = Inform_str + CStr(Mass(i))
    Next
    Inform_str = "Преподаватель занят. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
    End If
    If Ch_mass2 > 0 Then
' Накладка по группе
    Inform_str = "" ' Формирование информационной строки
        For i = 0 To Ch_mass2 - 1
            If Inform_str <> "" Then
                Inform_str = Inform_str + ","
            End If
            Inform_str = Inform_str + CStr(Mass2(i))
        Next
    Inform_str = "У группы уже есть занятие. Заявка в стр. " + Inform_str
    MsgBox (Inform_str)
End If
' Выбор варианта действия пользователя
Inform = MsgBox("Если все равно записать заявку - Да. " + _
    " Если продолжить редактирование - Отмена. " + _
    " Если удалить, то нажмите - Нет. ", _
    vbYesNoCancel)
If Inform = vbNo Or Inform = vbCancel Then
' Удаление только что введенных данных
    For i = 1 To 16
    Worksheets(1).Cells(N + 4, i).Value = ""
    Next
Else
Form_Add.Hide
End If
Else
Form_Add.Hide
End If
End Sub

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

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

Форма для подбора аудитории

В этом разделе мы рассмотрим один из наиболее интересных компонентов разработки — форму для подбора аудиторий для заявок на проведение учебных занятий. Сама форма с разнообразными элементами управления приведена на рис. 5.19, а для ее активизации на первом листе имеется кнопка с соответствующей надписью. В листинге 5.26 приведен текст процедуры, с помощью которой рассматриваемую электронную форму можно вывести на экран. Из текста видно, что в качестве значения свойства Name для формы подбора аудитории выбрано Form_Podbor.

1
2
3
4
' Листинг 5.26. Обработка щелчка на кнопке Подбор аудитории на первом листе
Private Sub Input_Auditoria_Click()
    Form_Podbor.Show
End Sub

Рис. 5.19. Форма подбора аудитории

Рис. 5.19. Форма подбора аудитории

Рассмотрим последовательно все основные расположенные на форме (рис. 5.19) элементы. В левом верхнем углу находится элемент управления типа ListBox (Name — Num_Str), а чуть выше располагается поясняющая подпись к нему — Номер строки. Этот список при активизации формы автоматически заполняется заявками, для которых еще не подобрана аудитория. Точнее не самими заявками, а номерами строк первого листа, где эти заявки расположены. В дальнейшем, выбрав (выделив) в списке номер заявки, мыс помощью специально разработанного алгоритма будем подбирать для нее подходящую аудиторию.

В левой части рис. 5.19 расположена группа элементов типа Label — они предназначены для отображения параметров заявки, выбранной в списке Num_Str. Эти элементы выделяются светлым цветом на фоне формы и снабжены поясняющими подписями. В табл. 5.3 приведены значения свойства Name элементов типа Label и соответствующие подписи.

Теперь перейдем к элементу управления Frame с подписью Поиск аудитории, который включает в себя несколько объектов. В верхней части этого условного контейнера объектов располагается кнопка Начать (Name — Begin_Poisk), щелчком на которой запускается алгоритм подбора аудитории для указанной в списке Num_Str заявки.

Таблица 5.3. Элементы управления Label для указания параметров заявок

Name Подпись
Boss Декан
Prepod Преподаватель
Day День
Times Время
Group Группа
Disp Дисциплина
Col_Stud Количество студентов

Программа обнаруживает совместные заявки на одно занятие для нескольких групп и подбирает им одну (достаточно вместительную) аудиторию. Так, при выборе в списке Num_Str заявки для обслуживания, возможна ситуация, когда у указанного преподавателя аналогичное занятие есть и в других группах. Эту ситуацию программа «видит» (при выделении одной из таких фупповых заявок в списке Num_Str) и запоминает во внутренней структуре данных. В дальнейшем по щелчку на кнопке Начать производится поиск общей аудитории для всех этих групп.

Продолжим обсуждение элементов, находящихся в рамке Поиск аудитории на форме. Элемент управления типа ListBox (Name — SpAyd), куда программная процедура записывает подходящие для заявки аудитории, расположен ниже кнопки Начать. Действия пользователя заключаются в указании конкретной аудитории в этом списке (щелчком мышью следует выделить одну из подходящих аудиторий). Элемент управления типа Label (Name — Inf_vmest), расположенный рядом с подписью Вместимость, используется для отображения вместимости выбранной аудитории в списке SpAyd. Теперь пользователю следует нажать кнопку Записать аудиторию (Name — Com_Write), что позволяет зафиксировать аудиторию, выбранную в списке, в строке заявки на первом листе.

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

В правой нижней части формы расположен элемент «Надпись» (Name — Inf_z), который предназначен для вывода информационных сообщений о наличии групповых заявок. Заполнение этого элемента производится при щелчке на списке Num_Str. В этом случае указывается, какие заявки комбинируются с выбранной. Таким образом, мы рассмотрели основные элементы управления, присутствующие на форме, и теперь можем перейти к описанию программного кода.

По щелчку на кнопке Подобрать аудиторию на первом листе происходит активизация этой формы. В этом случае выполняется предопределенная процедура UserForm_Activate (листинг 5.27).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
' Листинг 5.27. Процедура, выполняемая при активизации формы подбора аудиторий
Private Sub UserForm_Activate()
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
N = N + 1
Wend
' Подсчет числа аудиторий
N_Rooms = 0
While Worksheets(2).Cells(N_Rooms + 2, 1).Value <> ""
N_Rooms = N_Rooms + 1
Wend
' Заполнение списка заявок
Num_Str.Clear
For i = 1 To N
Obslz = Worksheets(1).Cells(i + 3, 6).Value
If Obslz = "" Then
Num_Str.AddItem Worksheets(1).Cells(i + 3, 1).Row
End If
Next
'Заполнение списка аудиторий
If Num_Str.ListCount > 0 Then
Num_Str.ListIndex = Num_Str.ListCount - 1
End If
Com_Write.Enabled = False
End Sub

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
' Листинг 5.28. Процедура, выполняемая при щелчке на списке Num_Str
Private Sub Num_Str_Click()
Inf_z.Caption = "" 'Очистка информационного поля
Select_vibor = CInt(Num_Str.Text) 'Номер выделенной заявки
' Перенос информации о параметрах заявки на форму
Boss.Caption = Worksheets(1).Cells(Select_vibor, 1).Value
Prepod.Caption = Worksheets(1).Cells(Select_vibor, 2).Value
Day.Caption = Worksheets(1).Cells(Select_vibor, 3).Value
Times.Caption = Worksheets(1).Cells(Select_vibor, 4).Value
Col_Stud.Caption = Worksheets(1).Cells(Select_vibor, 5).Value
Group.Caption = Worksheets(1).Cells(Select_vibor, 8).Value
Disp.Caption = Worksheets(1).Cells(Select_vibor, 9).Value
Ned.Caption = ""
For i = 10 To 16
    If Worksheets(1).Cells(Select_vibor, i).Value <> "" Then
    Ned.Caption = Ned.Caption + CStr(i - 9) + ","
    End If
Next
' Подсчет числа заявок на первом листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
N_Group = 0 ' Переменная для подсчета разных групп в одной аудитории
For i = 1 To N ' Основной цикл по заявкам
    Num = i + 3
    If Num <> Select_vibor Then ' Пропускаем выбранную заявку
    Prep = Worksheets(1).Cells(Num, 2).Value
    Day_Ned = Worksheets(1).Cells(Num, 3).Value
    Vre = Worksheets(1).Cells(Num, 4).Value
    Ob = Worksheets(1).Cells(Num, 6).Value
' Если у необслуженной заявки совпадают — день, время и преподаватель
    If Prep = Prepod.Caption And Day_Ned = Day.Caption And _
    Vre = Times.Caption And Ob = "" Then
    Zan = 0
    For j = 10 To 16
    If Worksheets(1).Cells(Num, j).Value = "*" And Worksheets(1).Cells(Select_vibor, j).Value = "*" Then
    Zan = 1 ' Если есть пересечение занятий
    Exit For
    End If
Next
If Zan = 1 Then
' Отмечаем информацию о совместных занятиях
    N_Group = N_Group + 1
    Mass_Group(N_Group) = Num
    End If
End If
End If
Next ' Завершение цикла по заявкам
' Выбранная завка сохраняется в элементе с нулевым индексом
Mass_Group(0) = Select_vibor
' Вывод информации о совместных заявках
If N_Group > 0 Then
    Inf_z.Caption = "Совместные заявки в строках "
    For i = 1 To N_Group
' Корректировка числа студентов
        Col_Stud.Caption = CInt(Col_Stud.Caption) + _
        Worksheets(1).Cells(Mass_Group(i), 5).Value
' Перечисление строк групповых занятий на 1-м листе
        Inf_z.Caption = Inf_z.Caption + Str(Mass_Group(i)) + ","
    Next
End If
End Sub

В начале процедуры в совокупность надписей на форме записывается информация о параметрах выбранной заявки. Например, строка Boss.Caption = Worksheets(1).Cells(Select_vibor, 2).Value заполняет поле заявителя на форме — элемент Label с именем Boss. Далее в цикле

1
2
3
4
5
For i = 10 To 16
    If Worksheets(1).Cells(Select_vibor, i).Value <> "" Then
    Ned.Caption = Ned.Caption + CStr(i - 9) + ","
    End If
Next

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

Для отслеживания групповых занятий в разделе General определяется счетчик количества групповых занятий (N_Group). Еще один массив предназначен для запоминания номеров строк заявок с общим одновременным занятием в одной аудитории (Mass_Group). На рис. 5.20 показана область описания общих переменных для рассматриваемой формы.

Рис. 5.20. Общие переменные формы подбора аудитории

Рис. 5.20. Общие переменные формы подбора аудитории

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

В процедуре Num_Str_Click основной цикл заключается в переборе всех необслуженных заявок на первом листе. В начале этой процедуры переменная N_Group устанавливается в 0, а при обнаружении такого же занятия (у того же преподавателя) в другой группе увеличивается на 1.

В результате, если у выбранной в списке Num_Str заявки находятся совместные, то информация о них выводится в элемент надпись, расположенный в нижней части формы:

1
2
3
4
5
6
7
8
If N_Group > 0 Then
Inf_z.Caption = "Совместные заявки в строках "
For i = 1 To N_Group
Col_Stud.Caption = CInt(Col_Stud.Caption) + _
Worksheets(1).Cells(Mass_Group(i), 5).Value
Inf_z.Caption = Inf_z.Caption + Str(Mass_Group(i)) + ","
Next
End If

Здесь производится суммирование количества студентов во всех объединяемых группах в надписи Col_Stud.

Таким образом, когда мы выделяем мышью в списке одну из заявок, то с помощью предопределенной процедуры, выполняемой по щелчку в списке Num_Str (с подписью Номер строки), выполняются следующие действия:

  • Заполняются информационные надписи на форме параметрами заявки.
  • Просматривается наличие групповых заявок, и если они есть, то в массив Mass_Group записываются номера строк, в которых эти заявки расположены на первом листе. Количество групповых заявок отображается в переменной N_Group.
  • Информация об имеющихся групповых занятиях выводится в информационную надпись в нижней части экрана.

Таким образом, в результате описанных действий мы подготовились к процедуре , выполняемой по кнопке Начать, которая запускает алгоритм поиска подходящих аудиторий для указанной заявки. Эта процедура Begin_Poisk_Click приведена в листинге 5.29, а далее мы прокомментируем ее основные моменты.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
' Листинг 5.29. Процедура, выполняемая при щелчке на кнопке Начать
Private Sub Begin_Poisk_Click()
Inf_vmest.Caption = ""
SpAyd.Clear
If Num_Str.ListIndex = -1 Then
    MsgBox ("Не выбрана заявка на занятие")
    Exit Sub
End If
' Подсчет числа аудиторий
Nom = 0
While Worksheets(2).Cells(Nom + 2, 1).Value <> ""
    Nom = Nom + 1
Wend
' Подсчет числа заявок
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To Nom ' Цикл по аудиториям
    Ayd = Worksheets(2).Cells(i + 1, 1).Value
' Проверка вместимости
    If Worksheets(2).Cells(i + 1, 2).Value >= CInt(Col_Stud.Caption)
Then
    SpAyd.AddItem Ayd
    End If
Next
End Sub

Например, на рис. 5.21 показано, что вместе с текущей заявкой есть еще одна — совместная (одно занятие для нескольких групп). В списке аудиторий приведен перечень подходящих для указанного занятия аудиторий (результат щелчка на кнопке Начать — в этом случае подбираются аудитории подходящие по вместимости для двух групп).

Рис. 5.21. Форма подбора аудиторий

Рис. 5.21. Форма подбора аудиторий

Так, в начале процедуры в листинге 5.28 проверяется, сделан ли выбор заявки, и если нет, то процедура завершается, так как обслуживать нечего:

1
2
3
4
If Num_Str.ListIndex.ListIndex = -1 Then
MsgBox ("Не выбран номер строки заявки")
Exit Sub
End If

После этого сравнивается количество мест в аудитории с числом студентов и если аудитория мала, то она также не рассматривается. Это реализуется с помощью следующей конструкции:

1
If Worksheets(2).Cells(i + 1, 2).Value >= CInt(Col_Stud.Caption) Then,

где учитывается, что во втором столбце на втором листе указано количество мест в аудитории.

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

При щелчке на списке выполняется предопределенная процедура SpAyd_Click. Основное ее назначение — фиксация (для процедуры, выполняемой по щелчку на кнопке Записать аудиторию) конкретной аудитории для заявки, а также вывод информации о ее вместимости. Сама процедура приведена в листинге 5.30.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
' Листинг 5.30. Процедура, выполняемая при щелчке на списке SpAyd
Private Sub SpAyd_Click()
' Подсчет числа аудиторий на втором листе
N = 0
While Worksheets(2).Cells(N + 2, 1).Value <> ""
    N = N + 1
Wend
For i = 2 To N + 1
    If SpAyd.Text = Worksheets(2).Cells(i, 1).Value Then
' При нахождении выбранной аудитории на втором листе
    Inf_vmest.Caption = Worksheets(2).Cells(i, 2).Value
    Exit For
    End If
Next
Com_Write.Enabled = True
End Sub

Для рассматриваемой формы осталось рассмотреть процедуру записи информации на лист Заявки (листинг 5.31).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
' Листинг 5.31. Процедура, выполняемая при щелчке на кнопке Записать
Private Sub Com_Write_Click()
If SpAyd.ListIndex = -1 Then
    MsgBox ("Не выбрана аудитория")
    Exit Sub
End If
Select_vibor = CInt(Num_Str.Text)
Inf_vmest.Caption = "" ' Очистка информационного поля
' Запись информации на первый лист
For i = 0 To N_Group
    Worksheets(1).Cells(Mass_Group(i), 6).Value = "да"
    Worksheets(1).Cells(Mass_Group(i), 7).Value = SpAyd.Text
Next
Com_Write.Enabled = False ' Запрет доступа для записи
Num_Str.Clear ' Очистка списков
SpAyd.Clear
' Заполнение списка заявок
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
If CStr(Worksheets(1).Cells(i + 3, 6).Value) = "" Then
    Num_Str.AddItem Worksheets(1).Cells(i + 3, 1).Row
End If
Next
End Sub

Лист Расписание

В этом разделе разберем одну из основных возможностей программы составление расписания. Для этого в программе используются два листа Расписание и Потоки.

Название потока может быть взято из списка групп (расположенного на втором листе книги), а может быть чисто символическим; запись в первом столбце даже может отсутствовать, но в последующих столбцах названия групп должны присутствовать (тогда они будут отражены в расписании).

Лист Потоки является вспомогательным и используется для задания потоков и групп, для которых мы намереваемся построить расписание занятий. Поэтому созданные нами ранее две группы объединим в общий поток и внесем в лист Потоки (рис. 5.22). Структура листа Потоки следующая: в первом столбце располагаются потоки, а последующих столбцах соответствующей строки — группы, входящие в поток.

Рис. 5.22. Организация листа Потоки

Рис. 5.22. Организация листа Потоки

Далее необходимо создать лист Расписание (рис. 5.23). Здесь три элемента управления: одна кнопка и два поля со списком. В полях со списком пользователю следует выбрать интервалы недель и затем щелкнуть на кнопке Заполнить. В результате на листе отобразится расписание для групп, указанных на листе Потоки.

Рис. 5.23. Организация листа Расписание

Рис. 5.23. Организация листа Расписание

На рис. 5.24 показан результат заполнения листа Расписание. И теперь разберем необходимые технические шаги для этого. Для работы с расписанием нам необходимо иметь заполненные списки недель. Данное заполнение мы выполним при активизации листа Расписание (листинг 5.32).

1
2
3
4
5
6
7
8
9
10
11
12
13
' Листинг 5.32. Процедура, выполняемая при активизации листа Расписание
Private Sub Worksheet_Activate()
N = 0
While Worksheets(2).Cells(N + 2, 3).Value <> ""
    N = N + 1
Wend
L1.Clear
L2.Clear
For i = 1 To N
    L1.AddItem Worksheets(2).Cells(i + 1, 3).Value
    L2.AddItem Worksheets(2).Cells(i + 1, 3).Value
Next
End Sub

Рис. 5.24. Формирование листа Расписание

Рис. 5.24. Формирование листа Расписание

Значения свойства Name элементов типа «Поле со списком» выберем L1 и L2 соответственно, а для кнопки Заполнить установим у аналогичного свойства значение Zapolnit. В листинге 5.33 приведена ключевая процедура, которая формирует заполнение листа Расписание.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
' Листинг 5.33. Процедура, выполняемая при щелчке на кнопке Заполнить
Private Sub Com_Start_Click()
Dim Mass(10) As Integer
' Очистка предыдущего расписания
Range("a5:AZ100").Select
Selection.ClearContents
Selection.Interior.ColorIndex = 0
' Подсчет числа потоков
NP = 0
While Worksheets("Потоки").Cells(NP + 2, 1).Value <> _
"" Or Worksheets("Потоки").Cells(NP + 2, 2).Value <> ""
NP = NP + 1
Wend
' Подсчет количества групп, входящих в поток
For i = 1 To NP
    Mass(i) = 0
    j = 0
    While Worksheets("Потоки").Cells(i + 1, j + 2).Value <> ""
    j = j + 1
    Wend
    Mass(i) = j
Next
' Подсчет числа аудиторий
N_Rooms = 0
While Worksheets("Нач. инф.").Cells(N_Rooms + 2, 1).Value <> ""
    N_Rooms = N_Rooms + 1
Wend
Sct = 0 ' Счетчик столбцов
'Заполнение названий групп и потоков
For i = 1 To NP
    Potok = Worksheets("Потоки").Cells(i + 1, 1).Value
    For j = 1 To Mass(i)
    Cells(5, Sct + 3).Value = Potok
    Cells(6, Sct + 3).Value = Worksheets("Потоки").Cells(i + 1, 1).Value
    Sct = Sct + 1
    Next
Next
' Подсчет числа дней
N_Days = 0
While Worksheets("Нач. инф.").Cells(N_Days + 2, 4).Value <> ""
N_Days = N_Days + 1
Wend
'Подсчет числа занятий в течение дня
N_Times = 0
While Worksheets("Нач. инф.").Cells(N_Times + 2, 5).Value <> ""
    N_Times = N_Times + 1
Wend
' Количество строк в расписании
DayTimes = N_Times * N_Days
' Заполнение первых двух столбцов
Stroka = 7
For i = 1 To N_Days
    For j = 1 To N_Times
    Cells(Stroka, 1).Value = Worksheets("Нач. инф.").Cells(i + 1, 4).Value
    Cells(Stroka, 2).Value = Worksheets("Нач. инф.").Cells(j + 1, 5).Value
    Stroka = Stroka + 1
    Next
Next
' Вычисление числа записей на первом листе
N = 0
While Worksheets("Заявки").Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
' Цикл по строкам первого листа
For i = 1 To N
    Days = CStr(Worksheets("Заявки").Cells(i + 3, 3).Value)
    Times = CStr(Worksheets("Заявки").Cells(i + 3, 4).Value)
    Group = CStr(Worksheets("Заявки").Cells(i + 3, 8).Value)
    Prepod = CStr(Worksheets("Заявки").Cells(i + 3, 2).Value)
    Disp = CStr(Worksheets("Заявки").Cells(i + 3, 9).Value)
    Aud = CStr(Worksheets("Заявки").Cells(i + 3, 7).Value)
    Obs = CStr(Worksheets("Заявки").Cells(i + 3, 6).Value)
    Indic = 0
' Попадает ли заявка в указанный интервал недель?
    For j = CInt(L1.Text) To CInt(L2.Text)
If CStr(Worksheets(1).Cells(i + 3, 9 + j).Value) = "*" Then
Indic = 1
    Exit For
    End If
Next
' Если заявка попадает в указанный интервал недель
If Indic = 1 Then
' Цикл по столбцам
For im = 1 To Sct
If Group = CStr(Cells(5, im + 2).Value) Or Group = CStr(Cells(6, im + 2).Value) Then
Stolbec = im + 2
For j = 1 To DayTimes
If CStr(Cells(6 + j, 1).Value) = Days And CStr(Cells(6 + j, 2).Value) = Times Then
    If Cells(6 + j, Stolbec).Value <> "" Then
    Cells(6 + j, Stolbec).Value = _
    Cells(6 + j, Stolbec).Value + Chr(10)
    End If
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + Disp + " "
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + Prepod
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + " Ауд." + Aud + Chr(10)
    For jj = CInt(L1.Text) To CInt(L2.Text)
    ask = CStr(Worksheets(1).Cells(i + 3, jj + 9).Value)
    If ask = "*" Then
    Cells(6 + j, Stolbec).Value = Cells(6 + j, Stolbec).Value + " " + Str(jj) + ","
    End If
    Next
    End If
    Next
    End If
    Next
    End If
Next
Cvet1 = 35 ' Оформление цветом
Cvet2 = 40
Cell1= Cells(7, 1).Value
For i = 7 To 100
    Cel12= Cells(i, 1).Value
    If Cell1 <> Cell2 Then
    Vr_cvet = Cvet1
    Cvet1 = Cvet2
    Cvet2 = Vr_cvet
    End If
        Cel11= Cel12
    Rows(i).Select
    Selection.Interior.ColorIndex = Cvet1
Next
Range("A7").Select
End Sub

Разберем некоторые конструкции процедуры, выполняемой по щелчку на кнопке Заполнить. Вначале производится очистка имеющейся старой информации на листе:

1
2
Range("A5:Z100").Select
Selection.ClearContents

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

1
2
3
4
5
NP = 0
While Worksheets("Потоки").Cells(NP + 2, 1).Value <> _
"" Or Worksheets("Потоки").Cells(NP + 2, 2).Value <> ""
NP = NP + 1
Wend

Затем в массиве Mass вычисляется, сколько групп в каждом потоке. Так, в элементе Mass (1) подсчитывается количество групп в первом выводимом в расписании потоке, в Mass (2) — во втором, и т. д. Процесс заполнения массива Mass выполняется следующим образом:

1
2
3
4
5
6
7
8
For i = 1 To NP
Mass(i) = 0
j = 0
While Worksheets("Потоки").Cells(i + 1, j + 2).Value <> ""
j = j + 1
Wend
Mass(i) = j
Next

Далее в пятую и шестую строки листа Расписание выводятся названия потоков и групп, для которых мы его составляем. Аналогичным образом в первые два столбца листа программно заносятся учебные дни и время начала занятий. После этого выполняется цикл но всем строкам на первом листе, и если при этом очередная заявка относится к одной из рассматриваемых групп, то она выводится в соответствующей ячейке (которая определяется днем, временем, группой либо потоком).

Если подвести некий промежуточный итог, то можно сказать следующее: мы имеем почти готовую версию расписания. На рис. 5.24 поля со списками позволяют выбрать интервал недель, для которого мы хотим составить расписание. Фактически на этом функциональные возможности листа можно было бы считать исчерпанными. Однако мы реализуем дополнительные сервисные возможности по вводу заявок. В большой доли случаев приходится копировать занятие по определенной дисциплине. Часто также приходится какие-то заявки удалять. Реализуем это с помощью дополнительных элементов управления. На рис. 5.25 добавлены:

  • кнопка Копировать (Name — Com_Copy);
  • кнопка Вставить (Name — Com_Paste);
  • кнопка Удалить (Name — Com_Delete);
  • текстовое окно (Name — Inform).

Рис. 5.25. Добавление элементов управления на лист Расписание

Рис. 5.25. Добавление элементов управления на лист Расписание

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
' Листинг 5.34. Процедура, выполняемая при щелчке на кнопке Копировать
Private Sub CommandButton4_Click()
NumRow = ActiveCell.Row
NumCol = ActiveCell.Column
Group = CStr(Cells(6, NumCol))
Days = CStr(Cells(NumRow, 1))
Times = CStr(Cells(NumRow, 2))
ColZaavok = 0
' Переменная для подсчета выделенных заявок
N = 0 ' Расчет числа заявок на 1-м листе
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
    Day1 = CStr(Worksheets(1).Cells(i + 3, 3).Value)
    Time1 = CStr(Worksheets(1).Cells(i + 3, 4).Value)
    Group1 = CStr(Worksheets(1).Cells(i + 3, 8).Value)
' Если параметры заявки совпадают
    If Time1 = Times And Day1 = Days And Group = Group1 Then
    For j = CInt(L1.Text) To CInt(L2.Text)
        Zan = Worksheets("Заявки").Cells(i + 3, 9 + j).Value
        If Zan = "*" Then
            ColZaavok = ColZaavok + 1
            MassZaavok(ColZaavok) = i + 3
            Exit For
        End If
        Next
    End If
Next
Inform.Text = ""
' Очистка текстового окна для сообщений
If ColZaavok > 0 Then
' Вывод номеров строк заявок в окно сообщений
    For i = 1 To ColZaavok
    Number.Text = Number.Text + Str(MassZaavok(i)) + ","
    Next
Else
    Number.Text = ""
End If
End Sub

Данная процедура фиксирует в переменной ColZaavok количество заявок в выделенной ячейке (как правило, эго одна заявка, однако может быть две или три). Также в массиве MassZaavok запоминаются номера строк первого листа, в которых размещаются отмеченные заявки. Разместить эти переменную и массив необходимо в общей области (рис. 5.26)

Рис. 5.26. Описание переменной и массива в общей области

Рис. 5.26. Описание переменной и массива в общей области

Теперь необходимо разместить процедуру обработки щелчка на кнопке Вставить. Она представлена в листинге 5.35.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
' Листинг 5.35. Процедура, выполняемая при щелчке на кнопке Вставить
Private Sub Com_Paste_Click()
NewRow = ActiveCell.Row
NewCol = ActiveCell.Column
If Inform.Text = "" Then
    Exit Sub
End If
Ngroup = 0
While Worksheets(2).Cells(Ngroup + 2, 8).Value <> ""
    Ngroup = Ngroup + 1
Wend
For i = 1 To ColZaavok ' Цикл по числу скопированных заявок
    N = 0
    While Worksheets("Заявки").Cells(N + 4, 1).Value <> ""
    N = N + 1
    Wend
    Worksheets(1).Cells(N + 4, 1).Value = _
    Worksheets(1).Cells(MassZaavok(i), 1).Value
    Worksheets(1).Cells(N + 4, 2).Value = _
    Worksheets(1).Cells(MassZaavok(i), 2).Value
    Worksheets(1).Cells(N + 4, 3).Value = CStr(Cells(NewRow, 1))
    Worksheets(1).Cells(N + 4, 4).Value = Cells(NewRow, 2)
    For j = 1 To Ngroup
    If Worksheets(2).Cells(j + 1, 8).Value = Cells(6, NewCol) Then
        Exit For
    End If
    Next
    Worksheets(1).Cells(N + 4, 5).Value = Worksheets(2).Cells(ib + 1, 9).Value
    Worksheets(1).Cells(N + 4, 8).Value = CStr(Cells(6, NewCol))
    For m = 9 To 16
    Worksheets(1).Cells(N + 4, m).Value = Worksheets(1).Cells(MassZaavok(i), m).Value
    Next
    Cells(NewRow, NewCol).Value = _
    Cells(NewRow, NewCol).Value + Worksheets(1).Cells(N + 4,
    9).Value + _
    " " + Worksheets(1).Cells(N + 4, 2).Value + Chr(10)
    For l = CInt(L1.Text) To CInt(L2.Text)
    If CStr(Worksheets(1).Cells(i + 3, l + 9).Value) = "*" Then
    Cells(NewRow, NewCol).Value = _
    Cells(NewRow, NewCol).Value + " " + Str(l) + ","
    End If
    Next
Next
End Sub

Теперь мы можем легко добавить еще одно занятие. На рис. 5.27 добавлено еще одно занятие к показанным на рис. 5.24. Для этого мы сначала выделили ячейку D14 и щелчком на кнопке Копировать зафиксировали параметры заявки во внутренней структуре данных. После этого необходимо выделить ячейку D10 и щелкнуть на кнопке Вставить. В результате на первом листе сформируется новая заявка и мы ее увидим на листе Расписание.

Рис. 5.27. Выполнение изменений н расписании занятий

Рис. 5.27. Выполнение изменений н расписании занятий

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
' Листинг 5.36. Процедура, выполняемая при щелчке на кнопке Удалить
Private Sub Com_Delete_Click()
Dim Mass(10) As Integer
NumRow = ActiveCell.Row
NumCol = ActiveCell.Column
Group = CStr(Cells(6, NumCol))
Days = CStr(Cells(NumRow, 1))
Times = CStr(Cells(NumRow, 2))
ColZaavok = 0
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
For i = 1 To N
If CStr(Worksheets(1).Cells(i + 3, 4).Value) = Times And _
Days = CStr(Worksheets(1).Cells(i + 3, 3).Value) _
And Group = CStr(Worksheets(1).Cells(i + 3, 8).Value) Then
    For j = CInt(L1.Text) To CInt(L2.Text)
    If Worksheets(1).Cells(i + 3, 9 + j).Value = "*" Then
    ColZaavok = ColZaavok + 1
    Mass(ColZaavok) = i + 3
    Exit For
    End If
    Next
End If
Next
Inform.Text = ""
For i = ColZaavok To 1 Step -1
	j = Mass(i)
    Worksheets(1).Rows(j).Delete
    Inform.Text = "Заявки удалены"
Next
Cells(NumRow, NumCol).Value = ""
End Sub

Лист Загрузка

Рассмотрим еще один лист, который дает представление о загрузке аудиторного фонда. Первый шаг заключается в несложном оформлении листа и создании двух элементов управления: поля со списком и кнопки (рис. 5.28).

Рис. 5.28. Организация листа Загрузка

Рис. 5.28. Организация листа Загрузка

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

1
2
3
4
5
6
7
8
9
10
11
' Листинг 5.37. Процедура, выполняемая при активизации листа Загрузка
Private Sub Worksheet_Activate()
N = 0
While Worksheets(2).Cells(N + 2, 3).Value <> ""
    N = N + 1
Wend
L1.Clear
For i = 1 To N
    L1.AddItem Worksheets(2).Cells(i + 1, 3).Value
Next
End Sub

Теперь пользователю необходимо выбрать интересующую его учебную неделю, после чего щелчок на кнопке Заполнить позволяет получить на листе информацию об использовании аудиторного фонда (рис. 5.29). Для этого необходимо оформить процедуру обработки щелчка на кнопке Заполнить в виде, представленном в листинге 5.38.

Рис. 5.29. Просмотр загрузки аудиторного фонда

Рис. 5.29. Просмотр загрузки аудиторного фонда

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
' Листинг 5.38. Процедура, выполняемая при щелчке на кнопке Заполнить
Private Sub Zapolnit_Click()
' Установка цветов для обозначения факультетов
Dim Colors(50) As Integer
Colors(1) = 4
Colors(2) = 22
Colors(3) = 19
Colors(4) = 24
Colors(5) = 26
For i = 6 To 50
    Colors(i) = 28
Next
If L1.ListIndex = -1 Then ' Выход, если не выбрана неделя
    MsgBox (" Не выбрана неделя ")
    Exit Sub
End If
Range("A5:AZ100").Select
' Очистка области данных
Selection.ClearContents
' Подсчет количества учебных дней в неделе
N_Day = 0
While Worksheets(2).Cells(N_Day + 2, 4).Value <> ""
    N_Day = N_Day + 1
Wend
' Подсчет количества занятий в течение дня
N_Times = 0
While Worksheets(2).Cells(N_Times + 2, 5).Value <> ""
    N_Times = N_Times + 1
Wend
' Подсчет количества аудиторий
N_Ayd = 0
While Worksheets(2).Cells(N_Ayd + 2, 1).Value <> ""
    N_Ayd = N_Ayd + 1
Wend
DaysTimes = N_Day * N_Times
N_Boss = 0 ' Подсчет заявителей
While Worksheets(2).Cells(N_Boss + 2, 6).Value <> ""
    N_Boss = N_Boss + 1
Wend
Range("B7:AZ100").Select
With Selection.Interior
' Заливка белым цветом области вывода
    .ColorIndex = 0
    .Pattern = xlSolid
End With
For i = 1 To 10
Cells(2, 2 + i * 2).Select
With Selection.Interior ' Установка обозначений цветов
.ColorIndex = colors(i) ' заявителей
.Pattern = xlSolid
End With
' Установка подписей заявителей для соответствующих цветов
Cells(1, 2 + i * 2).Value = Worksheets(2).Cells(i + 1, 6).Value
Next
' Подсчет количества строк с заявками на 1-м листе
N = 0
While Worksheets(1).Cells(N + 4, 1).Value <> ""
    N = N + 1
Wend
Stroka = 7
' Данные на листе размещаются начиная с седьмой строки
For i = 1 To N_Ayd ' Установка подписей аудиторий
Cells(Stroka, 1).Value = Worksheets(2).Cells(i + 1, 1).Value
Stroka = Stroka + 1
Next
St = 1
For i = 1 To N_Day ' Установка подписей занятий
    For j = 1 To N_Times
    St = St + 1
    Cells(5, St).Value = Worksheets(2).Cells(i + 1, 4).Value
    Cells(6, St).Value = Worksheets(2).Cells(j + 1, 5).Value
    Next
Next
For i = 1 To DaysTimes
    For j = 1 To N_Ayd
    Cells(6 + j, i + 1) = 0 'Инициализация ячеек
    Next
Next
For i = 4 To N + 3 ' Цикл по строкам заявок
    If CStr(Worksheets(1).Cells(i, 6).Value) = "да" Then
' Выполнение условия по обслуживанию заявки
    Stroka = 0
    For m = 1 To N_Ayd
    If CStr(Worksheets(1).Cells(i, 7).Value) = _
    CStr(Cells(m + 6, 1).Value) Then
    Stroka = m + 6
    Exit For
    End If
    Next
If Stroka > 0 And _
CStr(Worksheets(1).Cells(i, CInt(L1.Text) + 9).Value) ="*" Then
' Если есть строка с указанной аудиторией
    For m = 1 To DaysTimes
' Нахождение столбца на листе для помещения заявки
    If CStr(Worksheets(1).Cells(i, 3).Value) = _
    CStr(Cells(5, 1 + m).Value) Then
    If CStr(Worksheets(1).Cells(i, 4).Value) = _
    CStr(Cells(6, 1 + m).Value) Then
        Stolbec = 1 + m
        Exit For
    End If
End If
Next
Nomer = 1
For l = 1 To N_Boss 'Определение заявителя в заявке
    If CStr(Worksheets(1).Cells(i, 1).Value) _
    = CStr(Worksheets(2).Cells(l + 1, 6).Value) Then
    Nomer = l
    Exit For
End If
Next
Cells(Stroka, Stolbec).Value = Cells(Stroka, Stolbec).Value + Worksheets(1).Cells(i, 5).Value
Cells(Stroka, Stolbec).Select
With Selection.Interior
    .ColorIndex = colors(nomer) ' Установка заливки
    .Pattern = xlSolid ' для ячейки
End With
End If
End If
Next
End Sub

Рассмотренный в данном разделе отчет позволяет компактно, с помощью различных цветных заливок ячеек, представить информацию об использовании аудиторного фонда заявителями (факультетами или руководителями программ). Численная информация, выводимая в ячейках листа, показывает соотношение вместимости аудитории и количества учащихся в группах студентов.

Не говоря уже об отслеживании проектов и встреч — все в один день.

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

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

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

  • Что Такое Программное Обеспечение Для Составления Расписаний? ⌛
  • Что Вы Должны Искать В Программном Обеспечении Для Составления Расписаний? 👀
  • 11 Лучших Программ Для Составления Расписаний На 2023 год 🔧
  • Краткая Сравнительная Таблица ✅
  • Заключение 🔍
  • Важное раскрытие информации: мы являемся гордыми партнерами некоторых инструментов, упомянутых в этом руководстве. Если вы перейдете по партнерской ссылке и впоследствии совершите покупку, мы получим небольшую комиссию без дополнительных затрат с вашей стороны (вы ничего не платите дополнительно). Для получения дополнительной информации ознакомьтесь с нашим раскрытием информации о партнерах.

    Что Такое Программное Обеспечение Для Составления Расписаний? ⌛

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

    Все это поможет вам контролировать трудовые затраты и оптимизировать ресурсы вашего бизнеса.

    Существует множество различных инструментов планирования:

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

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

    Что Вы Должны Искать В Программном Обеспечении Для Составления Расписаний? 👀

    💡

    Правильные программные решения для составления расписаний оснащены различными функциями для оптимизации работы.

    Ниже приведены некоторые ключевые характеристики, на которые следует обратить внимание:

    Облачный Хостинг

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

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

    Мобильный Доступ Или Мобильное Приложение

    Мы живем в быстро меняющемся мире. Люди предпочитают делать все на ходу. Ваше программное обеспечение должно двигаться вместе с вами.

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

    via GIPHY

    Функциональность Перетаскивания

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

    Это самый быстрый способ составить расписание вручную «на лету» и облегчить процесс составления расписания.

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

    Опции Визуальной Приборной Панели

    Визуальные опции приборной панели позволяют с первого взгляда ответить на множество оперативных вопросов.

    Они нравятся каждому руководителю. Руководители и менеджеры по составлению расписаний тоже любят их по той же причине. Они помогают упростить даже самые сложные графики, делая процесс составления расписания легким.

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

    Интеграции

    Хорошее программное обеспечение для составления расписания имеет возможность синхронизации. Вы можете подключить его ко многим другим приложениям и функциям, которые вы уже используете, например, к Календарю Google или Календарям iCloud.

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

    Безопасность

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

    via GIPHY

    Аналитика И Отчетность

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

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

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

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

  • Calendly
  • ZoomShift
  • Bookafy
  • Adam.ai
  • Monday.com
  • Hive
  • Hubspot Meetings
  • Appointy
  • EngageBay
  • Squarespace Scheduling
  • Resource Guru
  • Краткая Сравнительная Таблица ✅

    Инструмент 🔧

    Тариф/Месяц (Выставляется Ежегодно)

    Рейтинг G2

    Простота Использования

    Качество Поддержки

    Calendly

    $8 за место

    4.7

    9.4

    9.1

    ZoomShift

    $2 на одного члена команды

    4.9

    9.7

    9.9

    Bookafy

    $7 на одного пользователя

    4.4

    9.8

    9.8

    Adam.ai

    $4.99

    4.6

    9.1

    9.2

    Monday.com

    $10

    4.7

    9.1

    9.1

    Hive

    $12 на одного пользователя

    4.6

    8.9

    9.2

    Hubspot Meetings

    $45 (два пользователя)

    4.4

    8.6

    8.8

    Appointy

    $19.99 на одного пользователя

    4.7

    9.6

    9.4

    EngageBay

    $13.49 за

    4.6

    9.1

    9.5

    Squarespace Scheduling

    $14

    4.4

    8.8

    8.5

    Resource Guru

    $2.50 на одного человека

    4.7

    9.6

    9.5

    1. Calendly

    Источник Изображения: Calendly

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

    Calendly имеет уникальный дизайн, который позволяет вам максимально эффективно использовать свое время и заполнять свободные места в календаре.

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

    Calendly интегрируется с различными инструментами, включая Salesforce, Outlook, Office 360 и т.д., для повышения производительности.

    Функция «выглядеть занятым» в Calendly — одна из самых востребованных среди пользователей. Она позволяет блокировать определенные даты, когда вы заняты.

    Плюсы

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

    Минусы

    • Иногда он неправильно воспринимает данные и назначает ложные встречи.
    • Он подключается только к одному календарю для каждой учетной записи.
    • Поддержка по электронной почте доступна только для премиум-версии программы планирования.

    Ценообразование

    У Calendly есть четыре тарифных плана, начиная с 8 долларов США за каждое место в месяц (счет выставляется ежегодно). Для крупных компаний лучше всего подойдет корпоративный тарифный план, поскольку он обладает более расширенными возможностями.

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

    С рейтингом G2 4,7 и интеграцией с такими крупными программами, как Zoom, Google и Microsoft, она считается лидером в области интуитивного планирования.

    Calendly — это ваш центр для профессионального и эффективного планирования встреч.

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

    2. ZoomShift

    Источник Изображения: ZoomShift

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

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

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

    Плюсы

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

    Минусы

    • Живая поддержка может занять много времени.
    • Такие желаемые функции, как интеграция с Календарем Google, напоминания о смене и текстовые уведомления, доступны только в премиум-планах.
    • У него нет бесплатного плана.
    • Длительное время буферизации для мобильного приложения.
    • У него мало интеграций с другими дополнительными программами.

    Ценообразование

    ZoomShift имеет три тарифных плана, начиная от $2 за одного активного члена команды ежемесячно (счет выставляется ежегодно).

    Его рейтинг G2 составляет 4,9. Учитывая множество услуг, к которым вы можете получить доступ, это хороший выбор для составления расписания работы сотрудников.

    3. Bookafy

    Источник Изображения: Bookafy

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

    Bookafy предлагает различные ценные интеграции с такими инструментами, как Zoom, Cisco Webex, Teams, Skype и GoToMeeting.

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

    Плюсы

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

    Минусы

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

    Ценообразование

    У Bookafy есть четыре тарифных плана, включая бесплатный. Однако первый платный план начинается с 7 долларов США в месяц за пользователя (счет выставляется ежегодно).

    Bookafy имеет рейтинг G2 4,4. Если вы все еще не уверены, подходит ли вам Bookafy, вы всегда можете попробовать их 7-дневную бесплатную пробную версию.

    4. Adam.ai

    Источник Изображения: Adam.ai

    Adam.ai — это интеллектуальное программное обеспечение «все-в-одном» для составления расписания, которое обрабатывает весь цикл совещаний. В нем есть инструмент «Элементы действий», который позволяет менеджерам устанавливать цели и ожидания для команд.

    Благодаря возможностям видеозвонков и видеоконференций вы можете удобно проводить совещания на программном обеспечении, где бы вы ни находились.

    Известно, что эта функция повышает вовлеченность сотрудников компаний, использующих Adam.ai.

    Он легко и интеллектуально собирает и извлекает информацию. Благодаря интеллектуальному сбору данных он превращает содержимое совещаний в активы знаний.

    Плюсы

    • Это интеллектуальное программное обеспечение для составления расписания, которое имеет дружественный пользовательский интерфейс.
    • Ведет учет пунктов повестки дня, заметок, принятых решений и пунктов действий для каждого заседания.
    • Предлагает интеграцию со многими популярными платформами, такими как Zoom, Google и Slack.
    • В нем есть инструмент для совместной работы на совещаниях в режиме реального времени.
    • Доступна функция расшифровки аудиозаписей совещаний.
    • В нем есть функция повторяющихся серий встреч для регулярных собраний.
    • Первоклассная поддержка клиентов.

    Минусы

    • В нем нет шаблонов.
    • На этом интерфейсе не доступны никакие функции автоматизации
    • Отсутствует двунаправленная синхронизация с Календарем Google

    Ценообразование

    У Adam.ai есть три ценовых плана, начиная с $4,99 (с ежегодной оплатой) для 100 пользователей. Существует также бесплатный тарифный план, а рейтинг G2 составляет 4,6.

    5. Monday.com

    Источник Изображения: Monday.com
    Monday.com — это инструмент управления сотрудниками, известный как простая альтернатива Google Sheets и Excel.

    Он позволяет быстрее составлять графики и помогает предприятиям повысить согласованность, эффективность и производительность своих команд, настраивая рабочий процесс в соответствии со всеми потребностями бизнеса.

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

    Плюсы

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

    Минусы

    • Это просто инструмент для решения задач с ограниченными возможностями для управления проектами.
    • Он имеет ограниченные возможности отчетности, которые необходимы для эффективного управления проектами.
    • Автоматизация доступна только для более высоких тарифных планов.

    Ценообразование

    Monday.com имеет пять тарифных планов, начиная с 10 долларов США в месяц (оплата производится ежегодно). Существует также индивидуальный тарифный план, в котором бесплатно предоставляется до 2 мест в месяц. Программное обеспечение имеет рейтинг G2 4,7.

    6. Hive

    Источник Изображения: Hive

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

    Hive позволяет пользователям отслеживать время выполнения задач, настраивать повторяющиеся задачи и автоматически планировать встречи. Он также интуитивно понятен и визуально приятен.

    Плюсы

    • Имеет удобный интерфейс.
    • Действует как централизованный инструмент коммуникации, где пользователи легко общаются благодаря встроенной интеграции чата и электронной почты.
    • Упорядочивает задачи и предоставляет атрибуты элементам, такие как файлы, дата, назначенец и бюджет. Это удобно для сложных проектов с разделением задач.
    • Он предлагает различные макеты проектов, такие как диаграмма Ганта, календарь, таблица и доска Канбан, между которыми можно легко переключаться.
    • Он предлагает обновления о движущихся частях проекта благодаря гибким представлениям проекта и функциям маркировки.
    • Помогает командам контролировать работу с помощью приборных панелей, которые показывают действенные данные о производительности команды.
    • Имеет мобильные и настольные приложения для использования на ходу.

    Минусы

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

    Ценообразование

    У Hive есть три ценовых плана, начиная от 12 долларов США за пользователя в месяц (счет выставляется ежегодно). Hive Solo — это бесплатный тарифный план, предназначенный для отдельных пользователей и небольших команд. Его рейтинг G2 составляет 4,6.

    7. HubSpot Meetings

    Источник Изображения: HubSpot Meetings

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

    Вы можете подключить другие календари к своему интегрированному календарю на HubSpot.

    Если контакт пытается заказать встречу с вами, HubSpot проверит вашу доступность в рабочее время и укажет, заняты вы или нет.

    Плюсы

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

    Минусы

    • Бесплатная версия имеет ограниченные возможности.
    • Это может быстро стать дорогостоящим, поскольку вам придется платить за каждого нового пользователя и контакт.
    • Досрочная отмена или возврат денег не предусмотрены. После заключения договора вам будет выставлен счет за весь выбранный вами период.
    • Ему не хватает гибкости, и он не приспособлен для настройки бизнеса.
    • Шаблоны немного сложно модифицировать.
    • Он имеет ограниченные возможности для составления отчетов.
    • Вам придется платить за дополнительную техническую поддержку.

    Ценообразование

    У HubSpot есть три тарифных плана, начиная с 45 долларов США в месяц для двух пользователей. Оплату с помощью кредитной карты можно произвести несколькими щелчками мыши. Рейтинг G2 составляет 4,4.

    8. Appointy

    Источник Изображения: Appointy
    Простая, функциональная и мощная программа для записи на прием к врачу.

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

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

    Плюсы

    • Она позволяет превратить учетную запись Facebook в платформу для онлайн-бронирования.
    • Имеет дружественный пользовательский интерфейс.
    • Легко интегрируемые виджеты веб-сайта для бронирования клиентами
    • Повторяющиеся бронирования можно автоматически отслеживать.
    • Синхронизируется с Google Calendar и имеет собственные функции календаря.
    • Она оснащена мобильной консолью администрирования для использования в любом месте и в любое время.
    • Функция автоматического уведомления и напоминания по электронной почте помогает сократить количество неявок.
    • Позволяет принимать онлайн-платежи от клиентов.
    • В нем есть мощная аналитика и отчетность, которые помогут вам установить SMART-цели.

    Минусы

    • SMS и электронная почта не могут быть настроены
    • Мобильные приложения периодически глючат и лагают, особенно версия для iOS
    • Ограниченные возможности интеграции
    • Он не может отслеживать полученные платежи
    • Сообщил о трудностях с отправкой и созданием счетов для назначений.

    Ценообразование

    Appointy имеет четыре тарифных плана, начиная от $19,99 за каждого сотрудника (оплата производится ежегодно). Имеется ограниченный бесплатный вариант, инструмент предлагает 14-дневную бесплатную пробную версию и имеет рейтинг G2 4,7.

    9. EngageBay

    Источник Изображения: EngageBay

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

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

    EngageBay обещает помочь вам выявить новые возможности, конвертировать посетителей и обеспечить счастье для клиентов.

    Плюсы

    • Он поддерживает автоматическое планирование встреч
    • Простая и мощная, универсальная CRM
    • Позволяет проводить маркетинг по электронной почте
    • Его программное обеспечение для автоматизации маркетинга просто в использовании
    • У него есть бесплатный чат и программное обеспечение для продажи билетов
    • Отличное программное обеспечение для службы поддержки
    • EngageBay содержит веб-формы для захвата онлайн-лидов
    • Он имеет онлайн-календарь, позволяющий планировать встречи.
    • 360-градусное представление клиента в отделах маркетинга, продаж и поддержки.

    Минусы

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

    Ценообразование

    EngageBay предлагает четыре тарифных плана, начиная от $13,49 за пользователя в месяц (счет выставляется ежегодно). Есть также

    10. Squarespace Scheduling

    Источник Изображения: Squarespace Scheduling

    Squarespace Scheduling — это программа для планирования встреч, встроенная в программное обеспечение для создания сайтов Squarespace. Оно работает как с веб-сайтом Squarespace, так и без него.

    Инструмент планирования Squarespace предоставляет высококачественные изображения, которые вы можете использовать для настройки целевых страниц планирования, делая их уникальными и визуально привлекательными.

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

    Клиенты могут быстро просмотреть вашу доступность и забронировать встречи или занятия несколькими щелчками мыши.

    Плюсы

    • Она позволяет отслеживать встречи на вашем сайте и каналах социальных сетей.
    • Настраиваемая и брендированная страница бронирования
    • Он содержит несколько шаблонов для использования
    • Он интегрируется с Zoom и Google Calendar
    • Показывает встречи в часовом поясе человека, назначающего встречу
    • Он предлагает напоминания о назначенных встречах
    • Он имеет беспрепятственный сбор платежей
    • Легкое изменение расписания и отмена

    Минусы

    • Его интерфейс календаря сложен для навигации
    • Изменения в назначениях могут быть сделаны только в задней части системы
    • Бесплатная версия больше не настраивается с помощью Google Calendar
    • Вы можете управлять только определенным количеством календарей, после чего вам придется платить больше.
    • Имеет ограниченные возможности интеграции с другим программным обеспечением
    • Он не рассчитывает налоги при сборе платежей.
    • Клиенты могут оплачивать онлайн и переносить встречу на другое время одним щелчком мыши. Вам больше никогда не придется спрашивать: «В какое время вам удобно».

    Ценообразование

    Программа планирования — это бесплатный инструмент, которым пока могут пользоваться все владельцы аккаунтов Squarespace. Ценовые пакеты, предлагаемые Squarespace, начинаются от $14 в месяц (с ежегодной оплатой). Рейтинг G2 составляет 4,4.

    11. Resource Guru

    Источник Изображения: Resource Guru

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

    Он также дает вам четкое представление о проектах и имеющихся ресурсах, что позволяет эффективно планировать.

    Следите за сроками проведения совещаний и проектов с помощью календарей, созданных на Resource Guru. Он предлагает функции, которые делают управление вашей работой чрезвычайно удобным.

    Плюсы

    • Он имеет очень удобный интерфейс.
    • Он имеет механику drag-and-drop, что позволяет легко выполнять модификации.
    • Позволяет пользователям указывать доступных членов компании для выполнения задачи
    • Он предлагает уведомления по электронной почте и механику синхронизации.
    • У него есть бесплатная пробная версия
    • Отчетность возможна как по проектам, так и по финансовым углам
    • Позволяет легко отслеживать выполнение задач членами команды
    • Позволяет пользователям из разных мест и часовых поясов просматривать одну и ту же страницу и соответствующие задачи.
    • Высокая настраиваемость

    Минусы

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

    Ценообразование

    Resource Guru имеет три тарифных плана, начиная от $2,50 на человека в месяц. Рейтинг G2 составляет 4,7. Этот инструмент также предлагает 30-дневную бесплатную пробную версию для всех доступных тарифных планов.

    Заключение 🔍

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

    Эти инструменты планирования проектов также позволяют с легкостью распределять соответствующие ресурсы по проектам.

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

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

    Понравилась статья? Поделить с друзьями:
  • Как найти километры в математике
  • Как найти диагональ параллелепипеда зная его измерения
  • Как найти sin cos если известен ctg
  • Как найти результаты розыгрыша русское лото
  • Как найти площадь закрашенного треугольника в треугольнике