Отчисление при невыходе из академического отпуска (1С Университет)

Дано: 1С:Университет ПРОФ (версия 2.1.1).
Задача: отчислить студента по причине его невыхода из академического отпуска.
Проблема: в приказе на отчисление по умолчанию нельзя выбрать студента в состоянии "Находится в академическом отпуске" (предлагаются к выбору только студенты в состоянии "Является студентом").


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

Самый простой вариант решения: добавить в тип приказа "Отчисление" в правилах перехода состояний состояние "Находится в академическом отпуске":


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

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

Для этого копированием вида приказа "Отчисление" создаем новый вид "Отчисление в связи с невыходом из академического отпуска":


А также на вкладке "Ограничения" в блоке "Настройки подбора обучающихся" устанавливаем состояние "Находится в академическом отпуске":


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

При необходимости корректируем аналитику вида приказа:


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


Таким образом, в приказ "Отчисление" можно будет добавить только студентов в состоянии "Является студентом", а в приказ "Отчисление в связи с невыходом из академического отпуска" - только студентов, находящихся в академическом отпуске.

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

Для этого у вида приказа "Отчисление в связи с невыходом из академического отпуска" на вкладке "Обработки проведения" в поле "Дополнительная обработка проведения" добавляем новую обработку (например, "Отчисление. Доп.проверка даты окончания ак.отпуска") со следующим текстом (кодом):

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

ФизическоеЛицо = ТекСтрокаФизическиеЛица.ФизическоеЛицо;    
ЗачетнаяКнига = ТекСтрокаФизическиеЛица.ЗачетнаяКнига;
ДатаНачала = ТекСтрокаФизическиеЛица.ДатаНачала;

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |   СостояниеСтудентовСрезПоследних.ДатаОкончания КАК ДатаОкончания
    |ИЗ
    |   РегистрСведений.СостояниеСтудентов.СрезПоследних(
    |           &ДатаАктуальности,
    |           ЗачетнаяКнига = &ЗачетнаяКнига
    |               И ФизическоеЛицо = &ФизическоеЛицо) КАК СостояниеСтудентовСрезПоследних
    |УПОРЯДОЧИТЬ ПО
    |   СостояниеСтудентовСрезПоследних.Период УБЫВ";
   
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
Запрос.УстановитьПараметр("ДатаАктуальности", Новый Граница(ДатаНачала, ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ЗачетнаяКнига", ЗачетнаяКнига);

РезультатЗапроса = Запрос.Выполнить();  
СообщениеОбОшибке = "";

Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Если Выборка.Следующий() Тогда
        СтрокаРезультатЗапроса = Выборка;
        ДатаОкончанияОтпуска = СтрокаРезультатЗапроса.ДатаОкончания;
        Если ЗначениеЗаполнено (ДатаОкончанияОтпуска) Тогда
            Если ДатаОкончанияОтпуска > ДатаНачала Тогда
                СообщениеОбОшибке = ФизическоеЛицо.Наименование + " - срок академического отпуска не завершен - " + Формат(ДатаОкончанияОтпуска, "ДЛФ=Д") + " (см. приказ об уходе в академический отпуск). Невозможно отчислить студента, находящегося в академическом отпуске.";
            КонецЕсли;   
        Иначе
            СообщениеОбОшибке = ФизическоеЛицо.Наименование + " - дата окончания отпуска не заполнена (см. приказ об уходе в академический отпуск).";
        КонецЕсли;
    Иначе
        СообщениеОбОшибке = ФизическоеЛицо.Наименование + " - проблема с получением состояния.";
    КонецЕсли;
Иначе
    СообщениеОбОшибке = ФизическоеЛицо.Наименование + " - проблема с получением состояния.";
КонецЕсли;

Если ЗначениеЗаполнено (СообщениеОбОшибке) Тогда
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю (СообщениеОбОшибке);
    Отказ = Истина;
КонецЕсли;




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

Теперь при попытке провести приказ на отчисление, в который включен студент, находящийся в академическом отпуске и срок отпуска не прошел, будет выдано сообщение и приказ не будет проведен:
"Не удалось провести Приказ…"


Примечание:
Возможно также потребуется настроить выбытие по данному приказу в форме ВПО-1:


Вернуться к содержанию раздела "1С:Университет"

(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет :

Отправить комментарий