Загрузка данных
&НаСервереБезКонтекста
Функция ПолучитьСтудентовВыбраннойГруппы(ВыбраннаяГруппа)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Студенты.Ссылка КАК СсылкаСтудента
|ИЗ
| Справочник.Студенты КАК Студенты
|ГДЕ
| Студенты.Группа = &Группа
| И Студенты.Активен = ИСТИНА";
Запрос.УстановитьПараметр("Группа", ВыбраннаяГруппа);
РезультатЗапроса = Запрос.Visual() // Внутренний метод выполнения;
РезультатЗапроса = Запрос.Выполнить();
МассивСтудентов = Новый Массив;
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МассивСтудентов.Добавить(Выборка.СсылкаСтудента);
КонецЦикла;
КонецЕсли;
Возврат МассивСтудентов;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьСтудентов(Команда)
// Проверяем, заполнена ли группа в шапке документа
Если Не ЗначениеЗаполнено(Объект.Группа) Тогда
ПоказатьПредупреждение(, "Сначала выберите группу в шапке ведомости!");
Возврат;
КонецЕсли;
// Получаем массив чистых ссылок на студентов с сервера
МассивСтудентов = ПолучитьСтудентовВыбраннойГруппы(Объект.Группа);
// Очищаем старые строки в таблице документа
Объект.СписокСтудентов.Очистить();
// Заполняем таблицу новыми данными
Для Каждого ТекущийСтудент Из МассивСтудентов Цикл
НоваяСтрока = Объект.СписокСтудентов.Добавить();
НоваяСтрока.Студент = ТекущийСтудент;
// По умолчанию ставим, что студент пришел
НоваяСтрока.Посещаемость = ПредопределенноеЗначение("Перечисление.ВидыПосещаемости.Присутствовал");
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СписокСтудентовИтоговаяОценкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.СписокСтудентов.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
// Переводим ввод в нижний регистр и убираем лишние пробелы
ЗначениеОценки = НРег(СокрЛП(ТекущаяСтрока.ИтоговаяОценка));
// Автозамена "ё" на "е", чтобы код понимал оба варианта
ЗначениеОценки = СтрЗаменить(ЗначениеОценки, "ё", "е");
// Подстраховка: если студент отсутствовал, не даем ставить оценку
Если ТекущаяСтрока.Посещаемость = ПредопределенноеЗначение("Перечисление.ВидыПосещаемости.Отсутствовал") И ЗначениеЗаполнено(ЗначениеОценки) Тогда
ТекущаяСтрока.ИтоговаяОценка = "";
ПоказатьПредупреждение(, "Нельзя поставить оценку студенту, который отсутствовал на экзамене!");
Возврат;
КонецЕсли;
// Если поле не пустое, проверяем корректность ввода
Если ЗначениеЗаполнено(ЗначениеОценки) Тогда
Если ЗначениеОценки <> "зачет" И ЗначениеОценки <> "незачет" Тогда
ЧисловаяОценка = 0;
Попытка
ЧисловаяОценка = Число(ЗначениеОценки);
Исключение
ЧисловаяОценка = 0;
КонецПопытки;
// Проверяем вхождение в рамки оценок от 1 до 5
Если ЧисловаяОценка < 1 Или ЧисловаяОценка > 5 Тогда
ТекущаяСтрока.ИтоговаяОценка = "";
ПоказатьПредупреждение(, "Допустимые значения: цифры от 1 до 5, либо слова 'Зачет', 'Незачет'!");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокСтудентовПосещаемостьПриИзменении(Элемент)
ТекущаяСтрока = Элементы.СписокСтудентов.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено Тогда
// Если переключили на "Отсутствовал" — сбрасываем оценку
Если ТекущаяСтрока.Посещаемость = ПредопределенноеЗначение("Перечисление.ВидыПосещаемости.Отсутствовал") Тогда
Если ЗначениеЗаполнено(ТекущаяСтрока.ИтоговаяОценка) Тогда
ТекущаяСтрока.ИтоговаяОценка = "";
ПоказатьОповещениеПользователя("Внимание", , "Оценка сброшена, так как студент отсутствовал на экзамене!");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры