Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример диплом.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
24.46 Mб
Скачать

Модуль формы элемента справочника «Понятия»

//_____________________________________________________________________________

Процедура ПриЗаписи() //предопределенная

Если (ПравильныйОтвет=0)ИЛИ(ПустоеЗначение(ПолучитьАтрибут("Ответ"+Строка(ПравильныйОтвет)))=1) Тогда

Предупреждение("Не указан правильный ответ!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

КолОтветов=0;

Для Л=1 по 5 Цикл

КолОтветов=КолОтветов+ПустоеЗначение(ПолучитьАтрибут("Ответ"+Строка(Л)));

КонецЦикла;

Если КолОтветов>3 Тогда

Предупреждение("Задайте не менее 2-х вариантов ответов!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

КонецПроцедуры //ПриЗаписи

Модуль формы элемента справочника «Уровни сложности»

//_____________________________________________________________________________

Процедура ПриВсехВопросах()

Форма.КолВопросовОбучения.Доступность(1-ВсеВопросы);

КолВопросовОбучения=1-ВсеВопросы;

КонецПроцедуры //ПриВсехВопросах

//_____________________________________________________________________________

Процедура ПриВсехПонятиях()

Форма.КолПонятийОбучения.Доступность(1-ВсеПонятия);

КолПонятийОбучения=1-ВсеПонятия;

КонецПроцедуры //ПриВсехВопросах

//_____________________________________________________________________________

Процедура ВводНового()

Балл1=30;

Балл2=45;

Балл3=60;

Балл4=75;

Балл5=90;

ПроходнойБалл=60;

КоличествоВопросов=3;

КоличествоПонятий=2;

КолОтветовНаВопросы=3;

КолОтветовНаПонятия=4;

Зачет=1;

ИспользоватьПонятия=1;

Время=30;

КонецПроцедуры //ВводНового

//_____________________________________________________________________________

Процедура ПриВыбореПонятий()

Форма.КоличествоПонятий.Доступность(ИспользоватьПонятия);

Форма.КолОтветовНаПонятия.Доступность(ИспользоватьПонятия);

КонецПроцедуры //ПриВыбореПонятий

//_____________________________________________________________________________

Процедура ПриВыбореВидаОпроса()

Форма.Балл1.Доступность(2-Зачет);

Форма.Балл2.Доступность(2-Зачет);

Форма.Балл3.Доступность(2-Зачет);

Форма.Балл4.Доступность(2-Зачет);

Форма.Балл5.Доступность(2-Зачет);

Форма.ПроходнойБалл.Доступность(Зачет-1);

КонецПроцедуры //ПриВыбореВидаОпроса

//_____________________________________________________________________________

Процедура ПриВыбореЗакладки(Номер,Значение) //предопределенная

Если Значение=1 Тогда

Форма.ИспользоватьСлой("Основной,Кнопки");

ПриВыбореВидаОпроса();

ПриВыбореПонятий();

Иначе

ВсеВопросы=?(КолВопросовОбучения=0,1,0);

ВсеПонятия=?(КолПонятийОбучения=0,1,0);

Форма.КолВопросовОбучения.Доступность(1-ВсеВопросы);

Форма.КолПонятийОбучения.Доступность(1-ВсеПонятия);

Форма.ИспользоватьСлой("Обучение,Кнопки");

КонецЕсли;

КонецПроцедуры //ПриВыбореЗакладки

//_____________________________________________________________________________

Процедура ПриОткрытии() //предопределенная

Форма.ИспользоватьЗакладки(1);

Форма.Закладки.ДобавитьЗначение(1,"Тестирование");

Форма.Закладки.ДобавитьЗначение(2,"Обучение");

ПриВыбореЗакладки(1,1)

КонецПроцедуры //ПриОткрытии

Модуль формы списка справочника «Уровни сложности»

//_____________________________________________________________________________

Процедура ПриОткрытии() //предопределенная

ВыборГруппы(0);

КонецПроцедуры //ПриОткрытии

Модуль формы списка справочника «Ссылки на понятия»

//_____________________________________________________________________________

Процедура ПриОткрытии()

Форма.ПанельИнструментов(0);

КонецПроцедуры //ПриОткрытии()

//_____________________________________________________________________________

Процедура ПриВводеСтроки()

СтатусВозврата(0);

КонецПроцедуры //ВводНового

//_____________________________________________________________________________

Процедура кнДобавить()

Перем Понят;

Спр=СоздатьОбъект("Справочник.СсылкиНаПонятия");

Спр.ИспользоватьВладельца(Форма.Параметр);

Если ВвестиЗначение(Понят,"Выберите понятие","Справочник.Понятия")=1 Тогда

Если Спр.НайтиПоРеквизиту("Понятие",Понят,0)=0 Тогда

Спр.Новый();

Спр.Понятие=Понят;

Спр.Записать();

Форма.Обновить();

Иначе

Предупреждение("Такое понятие уже зарегистрировано для данного вопроса!");

КонецЕсли;

КонецЕсли;

КонецПроцедуры //кнДобавить

Модуль формы документа «Протокол»

Перем СписокВопросов,СписокПонятий,ВремяНачала,ТекВопрос,ТекПонятие,ЗаданоВопросов;

Перем КолВопросов,КолПонятий,ТекстВопр,СписокОтветов,ТаблОтветов,глРежим;

//_____________________________________________________________________________

Процедура Сохранение()

УдалитьСтроки();

ЗагрузитьТабличнуюЧасть(ТаблОтветов);

Записать();

КонецПроцедуры //Сохранение

//_____________________________________________________________________________

Процедура ПриРедактированииНовойСтроки()

Предупреждение("Займитесь лучше делом!",3);

СтатусВозврата(0);

КонецПроцедуры //Сохранение

//_____________________________________________________________________________

Процедура ВидимостьОтветов(Кол=0)

Если Кол>0 Тогда

Форма.ВариантОтвета.Видимость(1);

Иначе

Форма.ВариантОтвета.Видимость(0);

Ответ1="";

ТекстВопр="";

КонецЕсли;

Если Кол>1 Тогда

Форма.Вар2.Видимость(1);

Иначе

Форма.Вар2.Видимость(0);

Ответ2="";

КонецЕсли;

Если Кол>2 Тогда

Форма.Вар3.Видимость(1);

Иначе

Форма.Вар3.Видимость(0);

Ответ3="";

КонецЕсли;

Если Кол>3 Тогда

Форма.Вар4.Видимость(1);

Иначе

Форма.Вар4.Видимость(0);

Ответ4="";

КонецЕсли;

Если Кол>4 Тогда

Форма.Вар5.Видимость(1);

Иначе

Форма.Вар5.Видимость(0);

Ответ5="";

КонецЕсли;

КонецПроцедуры //ВидимостьОтветов

//_____________________________________________________________________________

Процедура ВремяВышло()

ВидимостьОтветов();

Форма.Подсказка.Заголовок("У Вас закончилось время!");

Форма.Обновить();

Форма.кнДалее.Видимость(0);

ОбработкаОжидания("ПроверкаВремени",0);

ТаблОтветов.УдалитьСтроку();

ОстатокВремени=0;

ОценкаБалл="Overtime";

Форма.тВопрос.Видимость(0);

Сохранение();

КонецПроцедуры //ВремяВышло

//_____________________________________________________________________________

Процедура ЗадатьПонятие(ТекВопр)

ТекПонятие=ТекПонятие+1;

СписокОтветов=СоздатьОбъект("СписокЗначений");

СписОтветов=СоздатьОбъект("СписокЗначений");

НомВопроса=1+AddComp.RND(СписокПонятий.РазмерСписка()-1);

ТаблОтветов.НоваяСтрока();

ТаблОтветов.Понятие=СписокПонятий.ПолучитьЗначение(НомВопроса);

СписокПонятий.УдалитьЗначение(НомВопроса);

ТаблОтветов.ЗаданВопрос=ТекВопр;

ТекстВопр=ТаблОтветов.Понятие.ТекстВопроса;

Форма.Подсказка.Заголовок("Подвопрос "+ТекПонятие+" из "+КолПонятий);

Форма.Обновить();

Для Л=1 по 5 Цикл

отв=ТаблОтветов.Понятие.ПолучитьАтрибут("Ответ"+Строка(Л));

Если ПустоеЗначение(отв)=0 Тогда

Если Л=ТаблОтветов.Понятие.ПравильныйОтвет Тогда

СписОтветов.ДобавитьЗначение(Л,отв);

Иначе

СписокОтветов.ДобавитьЗначение(Л,отв);

КонецЕсли;

КонецЕсли;

КонецЦикла;

Если УровеньСложности.КолОтветовНаПонятия-1>СписокОтветов.РазмерСписка() Тогда

Для Л=1 по СписокОтветов.РазмерСписка() Цикл

Строк="";

Значен=СписокОтветов.ПолучитьЗначение(Л,Строк);

СписОтветов.ДобавитьЗначение(Значен,Строк);

КонецЦикла;

Иначе

Для Л=1 по УровеньСложности.КолОтветовНаПонятия-1 Цикл

Строк="";

Ном=1+AddComp.RND(СписокОтветов.РазмерСписка()-1);

Значен=СписокОтветов.ПолучитьЗначение(Ном,Строк);

СписОтветов.ДобавитьЗначение(Значен,Строк);

СписокОтветов.УдалитьЗначение(Ном);

КонецЦикла;

КонецЕсли;

СписокОтветов.УдалитьВсе();

ВидимостьОтветов(СписОтветов.РазмерСписка());

Для Л=1 по СписокОтветов.РазмерСписка()+СписОтветов.РазмерСписка() Цикл

Строк="";

Ном=1+AddComp.RND(СписОтветов.РазмерСписка()-1);

Значен=СписОтветов.ПолучитьЗначение(Ном,Строк);

СписокОтветов.ДобавитьЗначение(Значен,Строк);

СписОтветов.УдалитьЗначение(Ном);

УстановитьАтрибут("Ответ"+Строка(Л),Строк);

КонецЦикла;

Форма.Обновить();

КонецПроцедуры //ЗадатьПонятие

//_____________________________________________________________________________

Процедура ЗадатьВопрос()

ТекВопрос=ТекВопрос+1;

СписокОтветов=СоздатьОбъект("СписокЗначений");

СписОтветов=СоздатьОбъект("СписокЗначений");

НомВопроса=1+AddComp.RND(СписокВопросов.РазмерСписка()-1);

ТаблОтветов.НоваяСтрока();

ТаблОтветов.ЗаданВопрос=СписокВопросов.ПолучитьЗначение(НомВопроса);

СписокВопросов.УдалитьЗначение(НомВопроса);

ТекстВопр=ТаблОтветов.ЗаданВопрос.ТекстВопроса;

Для Л=1 по 5 Цикл

отв=ТаблОтветов.ЗаданВопрос.ПолучитьАтрибут("Ответ"+Строка(Л));

Если ПустоеЗначение(отв)=0 Тогда

Если Л=ТаблОтветов.ЗаданВопрос.ПравильныйОтвет Тогда

СписОтветов.ДобавитьЗначение(Л,отв);

Иначе

СписокОтветов.ДобавитьЗначение(Л,отв);

КонецЕсли;

КонецЕсли;

КонецЦикла;

Если УровеньСложности.КолОтветовНаВопросы-1>СписокОтветов.РазмерСписка() Тогда

Для Л=1 по СписокОтветов.РазмерСписка() Цикл

Строк="";

Значен=СписокОтветов.ПолучитьЗначение(Л,Строк);

СписОтветов.ДобавитьЗначение(Значен,Строк);

КонецЦикла;

Иначе

Для Л=1 по УровеньСложности.КолОтветовНаВопросы-1 Цикл

Строк="";

Ном=1+AddComp.RND(СписокОтветов.РазмерСписка()-1);

Значен=СписокОтветов.ПолучитьЗначение(Ном,Строк);

СписОтветов.ДобавитьЗначение(Значен,Строк);

СписокОтветов.УдалитьЗначение(Ном);

КонецЦикла;

КонецЕсли;

СписокОтветов.УдалитьВсе();

ВидимостьОтветов(СписОтветов.РазмерСписка());

Для Л=1 по СписокОтветов.РазмерСписка()+СписОтветов.РазмерСписка() Цикл

Строк="";

Ном=1+AddComp.RND(СписОтветов.РазмерСписка()-1);

Значен=СписОтветов.ПолучитьЗначение(Ном,Строк);

СписокОтветов.ДобавитьЗначение(Значен,Строк);

СписОтветов.УдалитьЗначение(Ном);

УстановитьАтрибут("Ответ"+Строка(Л),Строк);

КонецЦикла;

Форма.Обновить();

КонецПроцедуры //ЗадатьВопрос

//_____________________________________________________________________________

Процедура ВводНового(Копирование) //предопределенная

Студент=глПользователь;

Тема=?(ПустоеЗначение(глТема)=1,Студент.Группа.ТемаПоУмолчанию,глТема);

УровеньСложности=?(ПустоеЗначение(глУровеньСложности)=1,Константа.УровеньПоУмолчанию,глУровеньСложности);

глУровеньСложности=УровеньСложности;

КонецПроцедуры //ВводНового

//_____________________________________________________________________________

Процедура ПриОткрытии() //предопределенная

Форма.ПрогрессВремени.Видимость(0);

Спр=СоздатьОбъект("Справочник.Вопросы");

СписокВопросов=СоздатьОбъект("СписокЗначений");

Спр.ИспользоватьВладельца(Тема);

СВ=СоздатьОбъект("ТаблицаЗначений");

ВыгрузитьТабличнуюЧасть(СВ,"ЗаданВопрос");

СВ.Свернуть("ЗаданВопрос",);

ЗаданоВопросов=0;

ЗаданоВопросов=СВ.КоличествоСтрок();

//CВ.УдалитьСтроки();

//ВыгрузитьТабличнуюЧасть(СВ,"Понятие");

//СВ.Свернуть("ЗаданВопрос",);

глРежим=0;

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент()=1 Цикл

Строчка=ПолучитьПустоеЗначение("Число");

Если СВ.НайтиЗначение(Спр.ТекущийЭлемент(),Строчка,1)=0 Тогда

СписокВопросов.ДобавитьЗначение(Спр.ТекущийЭлемент());

КонецЕсли;

КонецЦикла;

СВ.Очистить();

Если УровеньСложности.КоличествоВопросов>СписокВопросов.РазмерСписка() Тогда

КолВопросов=СписокВопросов.РазмерСписка();

Иначе

КолВопросов=УровеньСложности.КоличествоВопросов;

КонецЕсли;

ВидимостьОтветов();

Форма.кнДалее.Видимость(0);

Форма.тВопрос.Видимость(0);

Если (КолВопросов=0)И(ПустоеЗначение(ОценкаБалл)=1) Тогда

Форма.кнСтарт.Видимость(0);

Предупреждение("Отсутствуют вопросы к данной теме!");

СтатусВозврата(0);

Возврат;

КонецЕсли;

Если ПустоеЗначение(ОценкаБалл)=0 Тогда

Форма.кнСтарт.Видимость(0);

Форма.Подсказка.Заголовок("Оценка - "+СокрП(ОценкаБалл)+" , % правильных ответов - "+Строка(ОценкаПроцент));

Форма.Обновить();

КонецЕсли;

КонецПроцедуры //ПриОткрытии

//_____________________________________________________________________________

Процедура кнСтарт()

Перем Часы,Минуты,Секунды;

AddComp.MaximizeReport();

AddComp.SetGauge();

ТаблОтветов.УдалитьСтроки();

ВыгрузитьТабличнуюЧасть(ТаблОтветов);

Если ОстатокВремени>0 Тогда

Предупреждение("У Вас осталось "+Строка(Цел(ОстатокВремени/60))+"мин.");

КонецЕсли;

ТекВопрос=0;

Форма.кнСтарт.Видимость(0);

Форма.кнДалее.Видимость(1);

ОценкаБалл="";

Форма.тВопрос.Видимость(1);

ТекущееВремя(Часы,Минуты,Секунды);

глВремяНачала=(Часы*60+Минуты)*60+Секунды;

Если ОстатокВремени>0 Тогда

глВремяОкончания=глВремяНачала+ОстатокВремени-1;

Иначе

глВремяОкончания=глВремяНачала+глУровеньСложности.Время*60-1;

КонецЕсли;

ОбработкаОжидания("ПроверкаВремени",5);

ЗадатьВопрос();

глРежим=1;

КонецПроцедуры //кнСтарт

//_____________________________________________________________________________

Процедура кнДалее()

Перем Часы,Минуты,Секунды;

Если ПустоеЗначение(ВариантОтвета)=1 Тогда

Предупреждение("Укажите вариант ответа!");

Возврат;

КонецЕсли;

Если глРежим=2 Тогда

ТаблОтветов.ОтветНаПонятие=СписокОтветов.ПолучитьЗначение(ВариантОтвета);

ВариантОтвета=0;

Если ТаблОтветов.ОтветНаПонятие=ТаблОтветов.Понятие.ПравильныйОтвет Тогда

ОценкаПроцент=ОценкаПроцент+1/КолПонятий;

Сообщить("Подвопрос № "+(ТекВопрос+ЗаданоВопросов)+"."+ТекПонятие+" - ответ верный!"," ");

Иначе

Сообщить("Подвопрос № "+(ТекВопрос+ЗаданоВопросов)+"."+ТекПонятие+" - ответ не верный!","!!");

КонецЕсли;

Если ТекПонятие<КолПонятий Тогда

ЗадатьПонятие(ТаблОтветов.ЗаданВопрос);

Возврат;

Иначе

глРежим=1;

Форма.Подсказка.Заголовок("");

Форма.Обновить();

Перейти ~М1

КонецЕсли;

Иначе

ТаблОтветов.ОтветНаВопрос=СписокОтветов.ПолучитьЗначение(ВариантОтвета);

ВариантОтвета=0;

Если ТаблОтветов.ОтветНаВопрос=ТаблОтветов.ЗаданВопрос.ПравильныйОтвет Тогда

ОценкаПроцент=ОценкаПроцент+1;

Сообщить("Вопрос № "+(ТекВопрос+ЗаданоВопросов)+" - ответ верный!"," ");

Иначе

Сообщить("Вопрос № "+(ТекВопрос+ЗаданоВопросов)+" - ответ не верный!","!");

Если УровеньСложности.ИспользоватьПонятия=1 Тогда

СписокПонятий=СоздатьОбъект("СписокЗначений");

Спр=СоздатьОбъект("Справочник.СсылкиНаПонятия");

Спр.ИспользоватьВладельца(ТаблОтветов.ЗаданВопрос);

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент()=1 Цикл

СписокПонятий.ДобавитьЗначение(Спр.Понятие);

КонецЦикла;

Если УровеньСложности.КоличествоПонятий>СписокПонятий.РазмерСписка() Тогда

КолПонятий=СписокПонятий.РазмерСписка();

Иначе

КолПонятий=УровеньСложности.КоличествоПонятий;

КонецЕсли;

Если КолПонятий=0 Тогда Перейти ~М1;КонецЕсли;

глРежим=2;

ТекПонятие=0;

ЗадатьПонятие(ТаблОтветов.ЗаданВопрос);

Возврат;

КонецЕсли;

КонецЕсли;

КонецЕсли;

~М1:Если ТекВопрос<КолВопросов Тогда

ЗадатьВопрос();

Иначе

ОбработкаОжидания("ПроверкаВремени",0);

ТекущееВремя(Часы,Минуты,Секунды);

AddComp.GaugePosition(100);

ОценкаПроцент=ОценкаПроцент/(КолВопросов+ЗаданоВопросов)*100;

Если УровеньСложности.Зачет=2 Тогда

Если УровеньСложности.ПроходнойБалл>ОценкаПроцент Тогда

ОценкаБалл="Незачет";

Иначе

ОценкаБалл="Зачет";

КонецЕсли;

Иначе

ОценкаБалл="Идиот";

Для Л=1 по 5 Цикл

Если ОценкаПроцент>=УровеньСложности.ПолучитьАтрибут("Балл"+Строка(6-Л)) Тогда

ОценкаБалл=Строка(6-Л);

Прервать;

КонецЕсли;

КонецЦикла;

КонецЕсли;

Форма.кнДалее.Видимость(0);

Форма.тВопрос.Видимость(0);

ВидимостьОтветов();

ОстатокВремени=глВремяОкончания-(Часы*60+Минуты)*60+Секунды;

Сохранение();

Форма.Подсказка.Заголовок("Ваша оценка - "+ОценкаБалл);

Форма.Обновить();

КонецЕсли;

КонецПроцедуры //кнДалее

//_____________________________________________________________________________

Процедура ПриЗакрытии() //предопределенная

Если (глРежим=3)ИЛИ(глРежим=0) Тогда

Иначе

СтатусВозврата(0);

КонецЕсли;

КонецПроцедуры //ПриЗакрытии

//_____________________________________________________________________________

Процедура кнВыход()

Перем Часы,Минуты,Секунды;

Если (глРежим=2)И(ТекВопрос=КолВопросов) Тогда

Возврат;

КонецЕсли;

Если (ПустоеЗначение(ОценкаБалл)=1)И(глРежим<>0) Тогда

Если Вопрос("Сохранить данный тест для последующего продолжения?",4)=6 Тогда

ТаблОтветов.УдалитьСтроку();

ТекущееВремя(Часы,Минуты,Секунды);

ОстатокВремени=глВремяОкончания-(Часы*60+Минуты)*60+Секунды;

Сохранение();

Иначе

Возврат;

КонецЕсли;

КонецЕсли;

глРежим=3;

Форма.Закрыть(0);

КонецПроцедуры //кнВыход

//_____________________________________________________________________________

ТаблОтветов=СоздатьОбъект("ТаблицаЗначений");

ТаблОтветов.НоваяКолонка("ЗаданВопрос","Справочник.Вопросы");

ТаблОтветов.НоваяКолонка("ОтветНаВопрос","Число",1,0);

ТаблОтветов.НоваяКолонка("Понятие","Справочник.Понятия");

ТаблОтветов.НоваяКолонка("ОтветНаПонятие","Число",1,0);

Модуль формы документа «Обучение»

Перем СписокВопросов,ТекстВопр,глРежим;

//_____________________________________________________________________________

Процедура ПриРедактированииНовойСтроки()

Предупреждение("Займитесь лучше делом!",3);

СтатусВозврата(0);

КонецПроцедуры //Сохранение

//_____________________________________________________________________________

Процедура ЗадатьВопрос()

ТекВопрос=ТекВопрос+1;

НомВопроса=1+AddComp.RND(СписокВопросов.РазмерСписка()-1);

НоваяСтрока();

ТВ=СписокВопросов.ПолучитьЗначение(НомВопроса);

Если Режим=2 Тогда

ЗаданВопрос=ТВ;

ТекстВопр=ЗаданВопрос.ТекстВопроса;

ИначеЕсли Режим=3 Тогда

Понятие=ТВ;

ТекстВопр=Понятие.ТекстВопроса;

КонецЕсли;

СписокВопросов.УдалитьЗначение(НомВопроса);

УстановитьАтрибут("Ответ",ТВ.ПолучитьАтрибут("Ответ"+Строка(ТВ.ПравильныйОтвет)));

Форма.Обновить();

КонецПроцедуры //ЗадатьВопрос

//_____________________________________________________________________________

Процедура ВводНового(Копирование) //предопределенная

Студент=глПользователь;

Тема=?(ПустоеЗначение(глТема)=1,Студент.Группа.ТемаПоУмолчанию,глТема);

УровеньСложности=?(ПустоеЗначение(глУровеньСложности)=1,Константа.УровеньПоУмолчанию,глУровеньСложности);

глУровеньСложности=УровеньСложности;

Режим=Форма.Параметр;

КонецПроцедуры //ВводНового

//_____________________________________________________________________________

Процедура ПриОткрытии() //предопределенная

СписокВопросов=СоздатьОбъект("СписокЗначений");

Если Режим=2 Тогда

Спр=СоздатьОбъект("Справочник.Вопросы");

Спр.ИспользоватьВладельца(Тема);

КолВопросов=УровеньСложности.КолВопросовОбучения;

ИначеЕсли Режим=3 Тогда

Спр=СоздатьОбъект("Справочник.Понятия");

КолВопросов=УровеньСложности.КолПонятийОбучения;

КонецЕсли;

Если Режим<>1 Тогда

Спр.ВыбратьЭлементы();

Пока Спр.ПолучитьЭлемент()=1 Цикл

СписокВопросов.ДобавитьЗначение(Спр.ТекущийЭлемент());

КонецЦикла;

Если (КолВопросов>СписокВопросов.РазмерСписка())ИЛИ(КолВопросов=0) Тогда

КолВопросов=СписокВопросов.РазмерСписка();

КонецЕсли;

Если КолВопросов=0 Тогда

Форма.кнСтарт.Видимость(0);

Предупреждение("Отсутствуют вопросы к данной теме!");

Форма.Закрыть(0);

КонецЕсли;

КонецЕсли;

Форма.кнДалее.Видимость(0);

Форма.тВопрос.Видимость(0);

КонецПроцедуры //ПриОткрытии

//_____________________________________________________________________________

Процедура кнСтарт()

УдалитьСтроки();

AddComp.MaximizeReport();

ТекВопрос=0;

Форма.кнСтарт.Видимость(0);

Если Режим=1 Тогда

ИФ=СокрЛП(Тема.Справка);

Если ФС.СуществуетФайл(ИФ)=1 Тогда

Спр=СоздатьОбъект("Текст");

Спр.Открыть(ИФ);

Спр.ТолькоПросмотр(1);

Спр.Показать("Справочная информация");

Иначе

Предупреждение("Справочная информация по данной теме отсутствует!");

КонецЕсли;

Иначе

Форма.кнДалее.Видимость(1);

Форма.тВопрос.Видимость(1);

ЗадатьВопрос();

КонецЕсли;

КонецПроцедуры //кнСтарт

//_____________________________________________________________________________

Процедура кнДалее()

Если ТекВопрос<КолВопросов Тогда

ЗадатьВопрос();

Иначе

Форма.кнДалее.Видимость(0);

Форма.тВопрос.Видимость(0);

Форма.Обновить();

КонецЕсли;

КонецПроцедуры //кнДалее

//_____________________________________________________________________________

Процедура кнВыход()

Если ТекВопрос<КолВопросов Тогда

Если Вопрос("Вы действительно хотите прервать обучение?",4)=6 Тогда

Иначе

Возврат;

КонецЕсли;

КонецЕсли;

глРежим=3;

Записать();

Форма.Закрыть(0);

КонецПроцедуры //кнВыход

//_____________________________________________________________________________

Процедура ПриЗакрытии() //предопределенная

Если глРежим<>3 Тогда

кнВыход();

КонецЕсли;

КонецПроцедуры //ПриЗакрытии

Модуль формы журнала «Обучение»

//_____________________________________________________________________________

Функция ВидОбучения()

ТекРеж=ТекущийДокумент.Режим;

Если ТекРеж=1 Тогда

Возврат "Справка";

ИначеЕсли ТекРеж=2 Тогда

Возврат "Вопросы";

Иначе

Возврат "Понятия";

КонецЕсли;

КонецФункции //ВидОбучения

Модуль формы отчета «Отчет по студенту»

//*******************************************

//

Процедура Сформировать()

Перем Запрос, ТекстЗапроса, Таб;

Запрос=СоздатьОбъект("Запрос");

ТекстЗапроса="Период с ВыбНачПериода по ВыбКонПериода;

|ОбрабатыватьДокументы НеПроведенные;

|ТекДокумент = Документ.Протокол.ТекущийДокумент;

|Студент = Документ.Протокол.Студент;

|Тема = Документ.Протокол.Тема;

|ОценкаПроцент = Документ.Протокол.ОценкаПроцент;

|УровеньСложности = Документ.Протокол.УровеньСложности;

|ОценкаБалл = Документ.Протокол.ОценкаБалл;

|ЗаданВопрос = Документ.Протокол.ЗаданВопрос;

|ОтветНаВопрос = Документ.Протокол.ОтветНаВопрос;

|Понятие = Документ.Протокол.Понятие;

|ОтветНаПонятие = Документ.Протокол.ОтветНаПонятие;

|Функция Счётчик = Счётчик();

|Функция СчётчикПравильныхВопр = Счётчик() когда(ЗаданВопрос.ПравильныйОтвет=ОтветНаВопрос);

|Функция СчётчикПравильныхПонятий = Счётчик() когда((Понятие.ПравильныйОтвет=ОтветНаПонятие)И(ОтветНаПонятие<>0));

|Функция СчетчикПонятий = Счётчик() когда(ПустоеЗначение(Понятие)=0);

|Группировка Тема без групп;

|Группировка ТекДокумент упорядочить по ТекДокумент.ДатаДок;

|Условие(Студент = ВыбСтудент);

|Условие(Тема в ВыбТема);";

Если ВыбДокумент.Выбран()=1 Тогда

ТекстЗапроса=ТекстЗапроса+"Условие(ТекДокумент=ВыбДокумент);";

КонецЕсли;

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

Таб = СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Сформировать");

Таб.ВывестиСекцию("Заголовок");

Состояние("Заполнение выходной таблицы...");

Таб.Опции(0, 0, Таб.ВысотаТаблицы(),0);

НомТем=0;

НомДок=0;

ОбщПроцент=0;

Пока Запрос.Группировка(1) = 1 Цикл

НомТем=НомТем+1;

Таб.ВывестиСекцию("Тема");

НомДок=0;

Пока Запрос.Группировка(2) = 1 Цикл

НомДок=НомДок+1;

ТекДок=Запрос.ТекДокумент;

ОбщПроцент=ОбщПроцент+ТекДок.ОценкаПроцент;

Таб.ВывестиСекцию("ТекДок");

Если РазворачиватьПоВопросам=1 Тогда

ТекДок.ВыбратьСтроки();

ТекВопр=0;

НомВопр=0;

Пока ТекДок.ПолучитьСтроку()=1 Цикл

Если ТекВопр<>ТекДок.ЗаданВопрос Тогда

ТекВопр=ТекДок.ЗаданВопрос;

НомВопр=НомВопр+1;

ТекПонят=0;

СпрВопр=ТекДок.ЗаданВопрос;

ТВопр=СпрВопр.ТекстВопроса;

ТПравОтвет=СпрВопр.ПравильныйОтвет;

ТОтвет=ТекДок.ОтветНаВопрос;

Иначе

ТекПонят=ТекПонят+1;

СпрВопр=ТекДок.Понятие;

ТВопр=СпрВопр.ТекстВопроса;

ТПравОтвет=СпрВопр.ПравильныйОтвет;

ТОтвет=ТекДок.ОтветНаПонятие;

КонецЕсли;

Таб.ВывестиСекцию("Вопрос"+Строка(?(ТПравОтвет=ТОтвет,"",1)));

КонецЦикла;

КонецЕсли;

КонецЦикла;

КонецЦикла;

Таб.ВывестиСекцию("Итого");

Таб.ТолькоПросмотр(1);

Таб.Показать("Сформировать", "");

КонецПроцедуры

ВыбНачПериода=НачМесяца(ТекущаяДата());

ВыбКонПериода=КонМесяца(ТекущаяДата());

Модуль формы отчета «Отчет по группам»

//*******************************************

//

Процедура Сформировать()

Перем Запрос,ТекстЗапроса,Таб;

Запрос=СоздатьОбъект("Запрос");

ТекстЗапроса="Период с ВыбНачПериода по ВыбКонПериода;

|ОбрабатыватьДокументы все;

|Обрабатывать НеПомеченныеНаУдаление;

|Студент = Документ.Протокол.Студент;

|Группа = Документ.Протокол.Студент.Группа;

|Тема = Документ.Протокол.Тема;

|ОценкаПроцент = Документ.Протокол.ОценкаПроцент;

|ОценкаБалл = Документ.Протокол.ОценкаБалл;

|ТекущийДокумент = Документ.Протокол.ТекущийДокумент;

|Функция Счётчик = Счётчик();

|Группировка Группа упорядочить по Группа.Наименование без групп;

|Группировка Тема без групп;

|Группировка Студент упорядочить по Студент.Наименование без групп;

|Группировка ТекущийДокумент упорядочить по ТекущийДокумент.ДатаДок;

|Условие(Группа в ВыбГруппа);

|Условие(Студент в ВыбСтудент);

|Условие(Тема в ВыбТема);";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

Таб=СоздатьОбъект("Таблица");

Таб.ИсходнаяТаблица("Сформировать");

Таб.ВывестиСекцию("Заголовок");

Состояние("Заполнение выходной таблицы...");

Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);

НомГрупп=0;

Пока Запрос.Группировка(1)=1 Цикл

НомГрупп=НомГрупп+1;

Таб.ВывестиСекцию("Группа");

НомТем=0;

Пока Запрос.Группировка(2)=1 Цикл

НомТем=НомТем+1;

Таб.ВывестиСекцию("Тема");

НомСтуд=0;

Пока Запрос.Группировка(3)=1 Цикл

НомСтуд=НомСтуд+1;

Таб.ВывестиСекцию("Студент");

НомДок=0;

Пока Запрос.Группировка(4)=1 Цикл

НомДок=НомДок+1;

Таб.ВывестиСекцию("Док");

КонецЦикла;

КонецЦикла;

КонецЦикла;

КонецЦикла;

Таб.ВывестиСекцию("Итого");

Таб.ТолькоПросмотр(1);

Таб.Показать("Сформировать", "");

КонецПроцедуры

Модуль формы обработки «Авторизация»

Перем глОбъект;

//_____________________________________________________________________________

Процедура ПриЗакрытии() //предопределенная

Если Вопрос("Выйти из программы?",4)<>6 Тогда

СтатусВозврата(0);

Возврат;

КонецЕсли;

ЗавершитьРаботуСистемы(0);

КонецПроцедуры //ПриЗаписи

//_____________________________________________________________________________

Процедура УправлениеДиалогом()

Форма.тСложность.Видимость(ПустоеЗначение(УровеньСложности));

Форма.УровеньСложности.Видимость(ПустоеЗначение(УровеньСложности));

Форма.Экзамен.Видимость(1-УровеньСложности.ЗапретитьОбучение);

Форма.тЭкзамен.Видимость(1-УровеньСложности.ЗапретитьОбучение);

Форма.Обучение.Видимость(1-УровеньСложности.ЗапретитьОбучение);

Форма.тОбучение.Видимость(1-УровеньСложности.ЗапретитьОбучение);

Если УровеньСложности.ЗапретитьОбучение=1 Тогда

Экзамен=1;

КонецЕсли;

Форма.Тема.Доступность(ПустоеЗначение(Тема));

КонецПроцедуры //УправлениеДиалогом

//_____________________________________________________________________________

Процедура ПриВыбореСтудента()

Если Студент.Выбран()=1 Тогда

Тема=Студент.Группа.ТемаПоУмолчанию;

УровеньСложности=Студент.Группа.УровеньПоУмолчанию;

КонецЕсли;

УправлениеДиалогом();

КонецПроцедуры //ПриВыбореСтудента

//_____________________________________________________________________________

Процедура ПриВыбореТемы()

Если ПустоеЗначение(Студент)=1 Тогда

Предупреждение("Сначала нужно указать студента!");

Тема=0;

КонецЕсли;

КонецПроцедуры //ПриВыбореТемы

//_____________________________________________________________________________

Процедура ПриОткрытии() //предопределенная

Форма.Заголовок("Авторизация пользователя...");

УровеньСложности=Константа.УровеньПоУмолчанию;

Экзамен=1;

Флаг=0;

УправлениеДиалогом();

КонецПроцедуры //ПриОткрытии

//*******************************************

//

Процедура Экзамен()

Перем Запрос,ТекстЗапроса,Док;

Запрос=СоздатьОбъект("Запрос");

НачПериода='01.01.1980';

КонПериода=ТекущаяДата();

ТекстЗапроса="Период с НачПериода по КонПериода;

|ОбрабатыватьДокументы все;

|Обрабатывать НеПомеченныеНаУдаление;

|ТекДок=Документ.Протокол.ТекущийДокумент;

|ЗСтудент=Документ.Протокол.Студент;

|ОценкаБалл=Документ.Протокол.ОценкаБалл;

|ОстатокВремени=Документ.Протокол.ОстатокВремени;

|Функция Счётчик=Счётчик();

|Группировка ТекДок упорядочить по ТекДок.ДатаДок;

|Условие(ЗСтудент=Студент);

|Условие(Число(ОценкаБалл)=0);

|Условие(ОстатокВремени>0);";

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

СписДок=СоздатьОбъект("СписокЗначений");

Пока Запрос.Группировка(1) = 1 Цикл

ТД=Запрос.ТекДок;

СписДок.ДобавитьЗначение(ТД,Строка(ТД.ДатаДок)+" "+СокрЛП(ТД.Тема.Наименование));

КонецЦикла;

Если СписДок.РазмерСписка()>0 Тогда

Если Вопрос("У Вас остались недоделанные задания."+РазделительСтрок+"Хотите доделать?",4)=6 Тогда

Если СписДок.ВыбратьЗначение(Док,,,,)=1 Тогда

глОбъект=Док;

Возврат;

КонецЕсли;

КонецЕсли;

КонецЕсли;

глОбъект="Документ.Протокол";

КонецПроцедуры

//*******************************************

Процедура Выполнить()

Перем Парам;

Если ПустоеЗначение(УровеньСложности)+ПустоеЗначение(Тема)+ПустоеЗначение(Студент)<>0 Тогда

Предупреждение("Не указан один из параметров!");

Возврат;

КонецЕсли;

глУровеньСложности=УровеньСложности;

глТема=Тема;

глПользователь=Студент;

Если Экзамен=1 Тогда

Экзамен();

Иначе

Меню=СоздатьОбъект("СписокЗначений");

Меню.ДобавитьЗначение(1,"Справка по теме");

Меню.ДобавитьЗначение(2,"Ответы на вопросы");

Меню.ДобавитьЗначение(3,"Ответы на понятия");

Если Меню.ВыбратьЗначение(Парам,,,,1)=0 Тогда

Возврат;

КонецЕсли;

глОбъект="Документ.Обучение";

КонецЕсли;

ОткрытьФорму(глОбъект,Парам);

КонецПроцедуры