Диплом: Автоматизация процесса управления знаниями в ПАО "Нижнекамскенефтехим"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
107
ТЗ.ПолучитьСтрокуПоНомеру(Рандом);
ВарОтв = 0;
ПравОтв = 0;
НескОтв = "";
НескПрав = "";
НескОтв_1 = 0;
НескОтв_2 = 0;
НескОтв_3 = 0;
НескОтв_4 = 0;
ТекстВопр = ТЗ.ТекстВопроса;
Отв1 = ТЗ.Ответ1;
Отв2 = ТЗ.Ответ2;
Отв3 = ТЗ.Ответ3;
Отв4 = ТЗ.Ответ4;
Если ТЗ.ПравНесколько = Перечисление.ДаНет.Нет Тогда
ПравОтв = ТЗ.ПравОтв;
Форма.ИспользоватьСлой("ОдинОтвет", 1);
Форма.ИспользоватьСлой("НесколькоОтветов", 0);
Иначе
НП_1 = ТЗ.НескПрав_1;
НП_2 = ТЗ.НескПрав_2;
НП_3 = ТЗ.НескПрав_3;
НП_4 = ТЗ.НескПрав_4;
Форма.ИспользоватьСлой("ОдинОтвет", 0);
Форма.ИспользоватьСлой("НесколькоОтветов", 1);
КонецЕсли;
Иначе
//ТАЙМЕР
Таймер("Стоп");
ДокРез.ВремяСдачи = глВремяНаФорме;
ДокРез.ЗакончилосьВремя = Перечисление.ДаНет.Нет;
ДокРез.Процент = Окр(КолПрав/КолВопр*100,1,1);
Если ДокРез.Процент >= Константа.ПроцентСдачи Тогда
ДокРез.ТестСдан = Перечисление.ДаНет.Да;
Предупреждение("Тест окончен!
|Вы ответили правильно на " +
ДокРез.Процент + "% вопросов.
|Поздравляю! Тест сдан!");
Иначе
ДокРез.ТестСдан = Перечисление.ДаНет.Нет;
Предупреждение("Тест окончен!
108
|Вы ответили правильно на " +
ДокРез.Процент + "% вопросов.
|Для успешной сдачи теста нужно
правильно
|ответить не менее чем на " +
Константа.ПроцентСдачи + "% вопросов.");
КонецЕсли;
ДокРез.ТестОкончен = Перечисление.ДаНет.Да;
флОкончания = 1;
ДокРез.Записать();
ОткрытьФорму(ДокРез.ТекущийДокумент(),,1);
Форма.Закрыть();
КонецЕсли;
КонецПроцедуры
//**********************************************************************************
***
Процедура ЗаписатьОтвет()
ДокРез.НоваяСтрока();
ДокРез.Вопрос = ТекстВопр;
Если ТЗ.ПравНесколько = Перечисление.ДаНет.Нет Тогда
ДокРез.ДанОтв = ВарОтв;
ДокРез.ПравОтв = ПравОтв;
Иначе
ДокРез.ДанОтв = НескОтв;
ДокРез.ПравОтв = НескПрав;
КонецЕсли;
ДокРез.Верно = Верно;
ТЗ.УдалитьСтроку();
КонецПроцедуры
//**********************************************************************************
***
Процедура ДатьОтвет()
Если ТЗ.ПравНесколько = Перечисление.ДаНет.Нет Тогда
Если ВарОтв <> 0 Тогда
Если ПравОтв = ВарОтв Тогда
КолПрав = КолПрав + 1;
Верно = Перечисление.ДаНет.Да;
Иначе
Верно = Перечисление.ДаНет.Нет;
КонецЕсли;
109
ЗаписатьОтвет();
ТекВопр = ТекВопр + 1;
ПолучитьСлучайныйЭлемент();
Иначе
Предупреждение("Вы не выбрали вариант ответа!");
КонецЕсли;
Иначе
Если (НескОтв_1 = 0) И (НескОтв_2 = 0) И (НескОтв_3 = 0) И (НескОтв_4 = 0) Тогда
Предупреждение("Вы не выбрали вариант ответа!");
Иначе
Если (НескОтв_1 = НП_1) И (НескОтв_2 = НП_2) И (НескОтв_3 =
НП_3) И (НескОтв_4 = НП_4) Тогда
КолПрав = КолПрав + 1;
Верно = Перечисление.ДаНет.Да;
Иначе
Верно = Перечисление.ДаНет.Нет;
КонецЕсли;
Если НП_1 = 1 Тогда
НескПрав = Строка(НескПрав) + "1, ";
КонецЕсли;
Если НП_2 = 1 Тогда
НескПрав = Строка(НескПрав) + "2, ";
КонецЕсли;
Если НП_3 = 1 Тогда
НескПрав = Строка(НескПрав) + "3, ";
КонецЕсли;
Если НП_4 = 1 Тогда
НескПрав = Строка(НескПрав) + "4";
КонецЕсли;
Если НескОтв_1 = 1 Тогда
НескОтв = Строка(НескОтв) + "1, ";
КонецЕсли;
Если НескОтв_2 = 1 Тогда
НескОтв = Строка(НескОтв) + "2, ";
КонецЕсли;
Если НескОтв_3 = 1 Тогда
НескОтв = Строка(НескОтв) + "3, ";
КонецЕсли;
Если НескОтв_4 = 1 Тогда
НескОтв = Строка(НескОтв) + "4";
110
КонецЕсли;
ЗаписатьОтвет();
ТекВопр = ТекВопр + 1;
ПолучитьСлучайныйЭлемент();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//**********************************************************************************
***
Функция КоличествоВопросовВТесте()
Если (Константа.КолВопрВТесте = 0) Или (ТЗ.КоличествоСтрок() <
Константа.КолВопрВТесте) Тогда
КолВопр = ТЗ.КоличествоСтрок();
Иначе
КолВопр = Константа.КолВопрВТесте;
КонецЕсли;
Возврат КолВопр;
КонецФункции
//**********************************************************************************
***
Процедура ПодготовкаВопросов(Тема)
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("ТекстВопроса");
ТЗ.НоваяКолонка("Ответ1");
ТЗ.НоваяКолонка("Ответ2");
ТЗ.НоваяКолонка("Ответ3");
ТЗ.НоваяКолонка("Ответ4");
ТЗ.НоваяКолонка("ПравОтв");
ТЗ.НоваяКолонка("ПравНесколько");
ТЗ.НоваяКолонка("НескПрав_1");
ТЗ.НоваяКолонка("НескПрав_2");
ТЗ.НоваяКолонка("НескПрав_3");
ТЗ.НоваяКолонка("НескПрав_4");
СпрВопросы = СоздатьОбъект("Справочник.Вопросы");
СпрВопросы.НайтиЭлемент(Тема);
СпрВопросы.ИспользоватьРодителя(СпрВопросы.ТекущийЭлемент());
СпрВопросы.ВыбратьЭлементы();
Пока СпрВопросы.ПолучитьЭлемент() = 1 Цикл
111
СправочникВТЗ();
КонецЦикла;
// Сообщить(ТЗ.КоличествоСтрок());
КолВопр = КоличествоВопросовВТесте();
КонецПроцедуры
//**********************************************************************************
***
Процедура ПересдатьТест()
ДокРез = СоздатьОбъект("Документ.РезультатТестирования");
ДокРез.НайтиПоНомеру(глНомерДок);
ДокРез.УдалитьСтроки();
КатегорияПересдаваемогоТеста = ДокРез.ПолучитьАтрибут("Категория");
ПодготовкаВопросов(КатегорияПересдаваемогоТеста);
ТекВопр = 1;
ПолучитьСлучайныйЭлемент();
Форма.ИспользоватьСлой("Начало", 0);
Форма.ИспользоватьСлой("Основной, Вопрос", 1);
//ТАЙМЕР
Таймер("Запуск");
КонецПроцедуры
//**********************************************************************************
***
Процедура ПродолжитьТестирование()
Если Вопрос("Внимание! У Вас есть неоконченный тест!
|Пока Вы его не сдадите, Вы не сможете сдавать другие тесты!
|Хотите продолжить его сдачу?", "Да+Нет", 0) = "Да" Тогда
ПодготовкаВопросов(глКатегорияПродолжаемогоТеста);
ДокРез = СоздатьОбъект("Документ.РезультатТестирования");
ДокРез.НайтиПоНомеру(глНомерДок);
ДокРез.ВыбратьСтроки();
Пока ДокРез.ПолучитьСтроку() = 1 Цикл
Если ДокРез.ПолучитьАтрибут("Верно") = Перечисление.ДаНет.Да
Тогда
КолПрав = КолПрав + 1;
КонецЕсли;
ТЗ.ВыбратьСтроки();
112
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
Если Найти(СокрЛП(ТЗ.ТекстВопроса),
СокрЛП(ДокРез.ПолучитьАтрибут("Вопрос"))) <> 0 Тогда
ТЗ.УдалитьСтроку();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТекВопр = ДокРез.КоличествоСтрок() + 1;
ПолучитьСлучайныйЭлемент();
Форма.ИспользоватьСлой("Начало", 0);
Форма.ИспользоватьСлой("Основной, Вопрос", 1);
//ТАЙМЕР
ТекущееВремя(Часов, Минут, Секунд);
глНачВрем = Секунд + Минут*60 + Часов*60*60 -
Число(Прав(ДокРез.ВремяСдачи, 2));
глМинута = Число(Лев(ДокРез.ВремяСдачи, 2));
глСекунда = 0;
ОбработкаОжидания("глТаймер", 1);
Форма.ОбработкаОжидания("КонтрольВремени", 1);
Иначе
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры
//**********************************************************************************
***
Процедура НачатьТестирование()
Если глПроверкаПересдачи(Категория.ПолучитьЗначение(Категория.ТекущаяСтрока()))
= 0 Тогда
ПодготовкаВопросов(Категория.ПолучитьЗначение(Категория.ТекущаяСтрока()));
ТекВопр = 1;
ПолучитьСлучайныйЭлемент();
ДокРез = СоздатьОбъект("Документ.РезультатТестирования");
ДокРез.Новый();
ДокРез.Тестируемый = Пользователь;
ДокРез.Категория = Категория.ПолучитьЗначение(Категория.ТекущаяСтрока());
Форма.ИспользоватьСлой("Начало", 0);
113
Форма.ИспользоватьСлой("Основной, Вопрос", 1);
//ТАЙМЕР
Таймер("Запуск");
ИначеЕсли
глПроверкаПересдачи(Категория.ПолучитьЗначение(Категория.ТекущаяСтрока())) = 1 Тогда
Если Вопрос("Вы уже сдавали этот тест!
|Хотите его пересдать?", "Да+Нет", 0) = "Да" Тогда
ПересдатьТест();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//**********************************************************************************
***
Процедура ПриОткрытии()
глКонтекстОбновляемойФормы = глВзятьКонтекст(Контекст);
Если НазваниеНабораПрав() = "Пользователь" Тогда
Форма.Пользователь.Доступность(0);
Форма.флПараметра.Доступность(1);
Иначе
Форма.флПараметра.Доступность(0);
КонецЕсли;
Если Форма.Параметр = "Пересдача" Тогда
ПересдатьТест();
Иначе
СпрПольз = СоздатьОбъект("Справочник.Пользователи");
СпрПольз.НайтиПоНаименованию(СокрЛП(глПользователь),1,1);
Пользователь = СпрПольз.ТекущийЭлемент();
флПараметра = СпрПольз.Параметр;
СпрВопросы = СоздатьОбъект("Справочник.Вопросы");
Если глПроверкаПродолжения() = 1 Тогда
ПродолжитьТестирование();
Иначе
Форма.ИспользоватьСлой("Основной, Начало", 1);
Форма.ИспользоватьСлой("Вопрос, ОдинОтвет, НесколькоОтветов", 0);
СпрВопросы.ВыбратьЭлементы();
Пока СпрВопросы.ПолучитьЭлемент() = 1 Цикл
Если СпрВопросы.ЭтоГруппа() = 1 Тогда
114
Если СпрВопросы.Доступность =
Перечисление.ДаНет.Да Тогда
Категория.ДобавитьЗначение(СпрВопросы.ТекущийЭлемент());
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Категория.РазмерСписка() = 0 Тогда
Категория.ДобавитьЗначение("<Нет тестов для сдачи>");
Форма.кнНачать.Доступность(0);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//**********************************************************************************
***
Процедура ПриЗакрытии()
Если (ТекВопр > 1) И (флОкончания <> 1) Тогда
Если Вопрос("Хотите сохранить предварительные результаты,
|чтобы потом продолжить сдачу теста?", "Да+Нет", 0) = "Да" Тогда
ДокРез.ВремяСдачи = глВремяНаФорме;
ДокРез.ЗакончилосьВремя = Перечисление.ДаНет.Нет;
ДокРез.Процент = Окр(КолПрав/(ТекВопр-1)*100,1,1);
ДокРез.ТестОкончен = Перечисление.ДаНет.Нет;
ДокРез.ТестСдан = Перечисление.ДаНет.Нет;
ДокРез.Записать();
КонецЕсли;
КонецЕсли;
//ТАЙМЕР
Таймер("Стоп");
глВремяНаФорме = "";
КонецПроцедуры
ТекВопр = 0;
КолПрав = 0;
КолВопр = 0;
флОкончания = 0;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)