Читайте также:
|
|
функция ОценкаКритерия(значение,мин,макс,максоценка)
Если значение>=макс тогда
Возврат максоценка;
КонецЕсли;
КвЧисла = Новый КвалификаторыЧисла(2,0,ДопустимыйЗнак.Неотрицательный);
масс=новый Массив;
масс.Добавить(Тип("Число"));
тип=новый ОписаниеТипов(масс,,,КвЧисла);
баллы=0;
баллы=тип.ПривестиЗначение(баллы);
макс=макс-мин;
значение=значение-мин;
баллы=1;
для а=1 по максоценка цикл
если макс*(а/максоценка)<значение и значение<макс*((а+1)/максоценка) тогда
баллы=а;
КонецЕсли;
КонецЦикла;
возврат баллы;
КонецФункции
функция максимальный(массив)
максимальн=0;
для а=0 по массив.Количество()-1 цикл
если массив[а]>массив[максимальн] тогда
максимальн=а;
КонецЕсли;
КонецЦикла;
Возврат массив[максимальн];
КонецФункции
функция ф1(а)
если а<0 тогда
возврат 0;
иначе
Возврат а;
КонецЕсли;
КонецФункции
функция минимальный(массив)
миниимальн=0;
для а=0 по массив.Количество()-1 цикл
если массив[а]<массив[миниимальн] тогда
миниимальн=а;
КонецЕсли;
КонецЦикла;
Возврат массив[миниимальн];
КонецФункции
функция минимальныйиндекс(массив)
минимальн=0;
для а=0 по массив.Количество()-1 цикл
если массив[а]>массив[минимальн] тогда
минимальн=а;
КонецЕсли;
КонецЦикла;
Возврат минимальн;
КонецФункции
функция количествоодинаковых(массив,индекс)
к=0;
для а=0 по массив.количество()-1 цикл
если массив[индекс]=массив[а] тогда
к=к+1;
КонецЕсли;
КонецЦикла;
Возврат к;
КонецФункции
функция ПоискВСпискеЗначений(списокзнач,строка)
для а=0 по списокзнач.Количество()-1 цикл
если строка(списокзнач[а])=строка тогда
возврат а;
КонецЕсли;
КонецЦикла;
возврат -1;
сообщить("Строка не найдена");
КонецФункции
Процедура Кнопка1Нажатие(Элемент)
ЭлементыФормы.РезультирующиеОценки.Значение.Очистить();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|Наряд_на_ремонт.Ссылка,
|Наряд_на_ремонт.ТипРемонта КАК ТипРемонта,
|Наряд_на_ремонт.ТипКонструкции КАК ТипКонструкции,
|Наряд_на_ремонт.Затраты КАК Затраты,
|Наряд_на_ремонт.Рекомендация.ФизическийИзнос КАК ФизическийИзнос
|ИЗ
|РегистрСведений.СтатусПроекта.СрезПоследних(&дата,) КАК СтатусПроектаСрезПоследних
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.Наряд_на_ремонт КАК Наряд_на_ремонт
|ПО СтатусПроектаСрезПоследних.НарядНаРемонт = Наряд_на_ремонт.Ссылка
|ГДЕ
|СтатусПроектаСрезПоследних.Затраты - СтатусПроектаСрезПоследних.Финансирование > 0"; запрос.УстановитьПараметр("дата",ТекущаяДата());
//Запрос.УстановитьПараметр("Статус",Перечисления.Статус.Не_обслужен);
Результат = Запрос.Выполнить();
если Результат.Выгрузить().Количество()>0 тогда
ЭлементыФормы.ТабличноеПоле1.Значение=Результат.Выгрузить();
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
оценки=новый ТаблицаЗначений;
таблица=Результат.Выгрузить();
оценки.Колонки.Добавить("Сметы",,,);//.Ширина=20;
КвЧисла = Новый КвалификаторыЧисла(2,0,ДопустимыйЗнак.Неотрицательный);
масс=новый Массив;
масс.Добавить(Тип("Число"));
тип=новый ОписаниеТипов(масс,,,КвЧисла);
оценки.Колонки.Добавить("ТипРемонта",тип,"ТипРемонта",2);
оценки.Колонки.Добавить("ТипКонструкции",тип,"ТипКонструкции",2);
оценки.Колонки.Добавить("Затраты",тип,"Затраты",2);
оценки.Колонки.Добавить("ФизическийИзнос",тип,"ФизическийИзнос",2);
для а=0 по таблица.Количество()-1 цикл
оценки.Добавить();
ЭлементыФормы.РезультирующиеОценки.ДобавитьСтроку();
КонецЦикла;
оценки.ЗагрузитьКолонку(таблица.ВыгрузитьКолонку(0),0);
ЭлементыФормы.РезультирующиеОценки.Значение.ЗагрузитьКолонку
(таблица.ВыгрузитьКолонку(0),0);
миним=минимальный(таблица.ВыгрузитьКолонку(3));
максим=максимальный(таблица.ВыгрузитьКолонку(3));
для а=0 по оценки.Количество()-1 цикл
если таблица[а].ТипРемонта=Перечисления.Тип_ремонта.капитальный тогда
оценки[а].ТипРемонта=7;иначе оценки[а].ТипРемонта=3;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
запрос.УстановитьПараметр
("Ссылка",ЭлементыФормы.РанжированиеТиповКонструкции.Значение);
запрос.УстановитьПараметр("ТипКонструкции",таблица[а].ТипКонструкции);
Результат = Запрос.Выполнить();
оценки[а].ТипКонструкции=12-Результат.Выгрузить()[0][0]; оценки[а].Затраты=ОценкаКритерия(таблица[а].Затраты,миним,максим,11);
оценки[а].ФизическийИзнос=ОценкаКритерия(таблица[а].ФизическийИзнос,0,100,11);
КонецЦикла;
ЭлементыФормы.ТабличноеПоле2.Значение=оценки;
ЭлементыФормы.ТабличноеПоле2.СоздатьКолонки();
В=новый СписокЗначений;
для а=0 по ЭлементыФормы.РанжированныеКритерии.Значение.РанжированиеКритериев.
Выгрузить().Количество()-1 цикл
в.Добавить(ЭлементыФормы.РанжированныеКритерии.Значение.РанжированиеКритериев.
Выгрузить()[а][6],,,);
КонецЦикла;
для а=0 по таблица.Количество()-1 цикл
к=0;
к=к+оценки[а][1]*в[ПоискВСпискеЗначений(ЭлементыФормы.РанжированныеКритерии.
Значение.РанжированиеКритериев.Выгрузить().ВыгрузитьКолонку(1),"Тип ремонта")].Значение;
к=к+оценки[а][2]*в[ПоискВСпискеЗначений(ЭлементыФормы.РанжированныеКритерии.
Значение.РанжированиеКритериев.Выгрузить().ВыгрузитьКолонку(1),"Тип конструкции")].Значение;
к=к+оценки[а][3]*в[ПоискВСпискеЗначений(ЭлементыФормы.РанжированныеКритерии.
Значение.РанжированиеКритериев.Выгрузить().ВыгрузитьКолонку(1),"Сумма затрат")].Значение;
к=к+оценки[а][4]*в[ПоискВСпискеЗначений(ЭлементыФормы.РанжированныеКритерии.
Значение.РанжированиеКритериев.Выгрузить().ВыгрузитьКолонку(1),"Износ")].Значение;
ЭлементыФормы.РезультирующиеОценки.Значение[а].Оценка=к;
КонецЦикла;
оценк=ЭлементыФормы.РезультирующиеОценки.Значение.Выгрузить().ВыгрузитьКолонку
("Оценка");
ранги=новый Массив(оценк.Количество());
для б=0 по ранги.Количество()-1 цикл
ранги[б]=0;
КонецЦикла;
упорядоч=новый Массив(оценк.Количество());
для б=0 по ранги.Количество()-1 цикл
упорядоч[б]=оценк[б];
КонецЦикла;
для а=0 по упорядоч.Количество()-1 цикл
м=а;
для б=а по упорядоч.Количество()-1 цикл
если упорядоч[б]>упорядоч[м] тогда
м=б;
КонецЕсли;
КонецЦикла;
к=упорядоч[м];
упорядоч[м]=упорядоч[а];
упорядоч[а]=к;
КонецЦикла;
к=0;
для б=0 по упорядоч.Количество()-1 цикл
для а=0 по оценк.Количество()-1 цикл
если упорядоч[б]=оценк[а] и ранги[а]=0 тогда
к=а; прервать;
КонецЕсли;
КонецЦикла;
ранги[к]=б+1;
КонецЦикла;
ЭлементыФормы.РезультирующиеОценки.Значение.ЗагрузитьКолонку(ранги,2);
ЭлементыФормы.РезультирующиеОценки.Значение.Сортировать("Ранг Возр");
иначе
сообщить("Нет проектов нуждающихся в финансировании");
КонецЕсли;
КонецПроцедуры
Дата добавления: 2015-08-17; просмотров: 123 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Приложение Ж | | | Фрагмент листинга программного кода реализации метода экспертных оценок |