datalist
25.04.2013, 09:21
По заданию, написал отчет, подскажите где, что можно было бы оптимизировать ? ;)))) Обоснованная критика - приветствуется )))))
Процедура КнопкаСформироватьНажатие (Кнопка)
МассивВР = Новый Массив;
ТаблПоСотр = Новый("ТаблицаЗначений");
ТаблПоСотрДоп = Новый("ТаблицаЗначений");
ТаблПоВидамРасч = Новый("ТаблицаЗначений");
ТабДок = Новый("ТабличныйДокумент");
Макет = ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОсновныеНачисленияРаботни ковОрганизаций.Сотрудник КАК Сотрудник,
| ПРЕДСТАВЛЕНИЕ(ОсновныеНач� �сленияРаботниковОрганиза� �ий.Сотрудник),
| ОсновныеНачисленияРаботни ковОрганизаций.Сотрудник.Д олжность,
| ПРЕДСТАВЛЕНИЕ(ОсновныеНач� �сленияРаботниковОрганиза� �ий.Сотрудник.Должность),
| ОсновныеНачисленияРаботни ковОрганизаций.ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(ОсновныеНач� �сленияРаботниковОрганиза� �ий.ВидРасчета),
| ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияНачало,
| ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияКонец,
| ОсновныеНачисленияРаботни ковОрганизаций.Активность,
| ОсновныеНачисленияРаботни ковОрганизаций.Показатель1 ,
| ОсновныеНачисленияРаботни ковОрганизаций.Сотрудник.К од
|ИЗ
| РегистрРасчета.ОсновныеНа� �исленияРаботниковОрганиз� �ций КАК ОсновныеНачисленияРаботни ковОрганизаций
|ГДЕ
| ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияНачало = &ДН
| И ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияКонец = &ДК
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник
|ИТОГИ ПО
| Сотрудник";
Запрос.УстановитьПараметр("ДН",НачПериода);
Запрос.УстановитьПараметр("ДК",КонПериода);
Результат = Запрос.Выполнить();
ТаблПоСотр = Результат.Выгрузить();
ТаблПоВидамРасч = Результат.Выгрузить();
ТаблПоСотрДоп = Результат.Выгрузить();
КолонкаСвертки = ТаблПоВидамРасч.Колонки.Ви дРасчета.Имя;
КолонкаСверткиДоп = ТаблПоВидамРасч.Колонки.Со трудник.Имя;
ТаблПоВидамРасч.Свернуть(К олонкаСвертки);
ТаблПоСотрДоп.Свернуть(Кол онкаСверткиДоп);
СтрокаСотрДляСорт = КолонкаСверткиДоп + " Возр";
ТаблПоСотрДоп.Сортировать( СтрокаСотрДляСорт);
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ПодШапкаГор|ПодШапкаВерт");
ТабДок.Вывести(ОбластьШапк аТаблицы);
Для Каждого Стр Из ТаблПоВидамРасч Цикл
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ПодШапкаГор|ПодШапкаВертВ� �");
Если НЕ Стр.ВидРасчета = NULL Тогда
ОбластьШапкаТаблицы.Парам� �тры.ВидРасч = Стр.ВидРасчета;
ТабДок.Присоединить(Област ьШапкаТаблицы);
МассивВР.Добавить(Стр.ВидР� �счета);
КонецЕсли;
КонецЦикла;
СотрДляПровер = "";
Для Каждого СтрСотр Из ТаблПоСотрДоп Цикл
Если СотрДляПровер <> СтрСотр.Сотрудник Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаботникиОрганизацийСрезП оследних.Сотрудник,
| ПРЕДСТАВЛЕНИЕ(РаботникиОр� �анизацийСрезПоследних.Сот рудник),
| РаботникиОрганизацийСрезП оследних.ПодразделениеОрг� �низации,
| ПРЕДСТАВЛЕНИЕ(РаботникиОр� �анизацийСрезПоследних.Под разделениеОрганизации),
| РаботникиОрганизацийСрезП оследних.Должность
|ИЗ
| РегистрСведений.Работники� �рганизаций.СрезПоследних КАК РаботникиОрганизацийСрезП оследних
|ГДЕ
| РаботникиОрганизацийСрезП оследних.Сотрудник = &Сотрудник";
Запрос.УстановитьПараметр("Сотрудник", СтрСотр.Сотрудник);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ОбластьТаблица = Макет.ПолучитьОбласть("СтрокаГор|ПодШапкаВерт");
Пока ВыборкаДетальныеЗаписи.Сл� �дующий() Цикл
ОбластьТаблица.Параметры.Д олж = ВыборкаДетальныеЗаписи.До� �жность;
ОбластьТаблица.Параметры.П одр = ВыборкаДетальныеЗаписи.По� �разделениеОрганизации;
КонецЦикла;
СотрДляПровер = СтрСотр.Сотрудник;
ОбластьТаблица.Параметры.С отр = СтрСотр.Сотрудник;
ТабДок.Вывести(ОбластьТабл ица);
КонецЕсли;
Для Каждого Поиск Из МассивВР Цикл
ОбластьТаблица = Макет.ПолучитьОбласть("СтрокаГор|ПодШапкаВертВР");
Отбор = Новый Структура();
Отбор.Вставить("Сотрудник",СтрСотр.Сотрудник);
Отбор.Вставить("ВидРасчета",Поиск);
Итого = ТаблПоСотр.НайтиСтроки(Отб ор);
Если Итого.Количество() > 0 Тогда
ОбластьТаблица.Параметры.В Р = Итого[0].Показатель1;
Иначе
ОбластьТаблица.Параметры.В Р = 0;
КонецЕсли;
ТабДок.Присоединить(Област ьТаблица);
КонецЦикла;
КонецЦикла;
ТабДок.Показать();
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.Редактир� �ватьКакИнтервал = Истина;
НастройкаПериода.Редактир� �ватьКакПериод = Истина;
НастройкаПериода.ВариантН� �стройки = ВариантНастройкиПериода.П� �риод;
НастройкаПериода.Установи� �ьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактир� �вать() Тогда
НачПериода = НастройкаПериода.Получить� �атуНачала();
КонПериода = НастройкаПериода.Получить� �атуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура КнопкаСформироватьНажатие (Кнопка)
МассивВР = Новый Массив;
ТаблПоСотр = Новый("ТаблицаЗначений");
ТаблПоСотрДоп = Новый("ТаблицаЗначений");
ТаблПоВидамРасч = Новый("ТаблицаЗначений");
ТабДок = Новый("ТабличныйДокумент");
Макет = ПолучитьМакет("Макет");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОсновныеНачисленияРаботни ковОрганизаций.Сотрудник КАК Сотрудник,
| ПРЕДСТАВЛЕНИЕ(ОсновныеНач� �сленияРаботниковОрганиза� �ий.Сотрудник),
| ОсновныеНачисленияРаботни ковОрганизаций.Сотрудник.Д олжность,
| ПРЕДСТАВЛЕНИЕ(ОсновныеНач� �сленияРаботниковОрганиза� �ий.Сотрудник.Должность),
| ОсновныеНачисленияРаботни ковОрганизаций.ВидРасчета,
| ПРЕДСТАВЛЕНИЕ(ОсновныеНач� �сленияРаботниковОрганиза� �ий.ВидРасчета),
| ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияНачало,
| ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияКонец,
| ОсновныеНачисленияРаботни ковОрганизаций.Активность,
| ОсновныеНачисленияРаботни ковОрганизаций.Показатель1 ,
| ОсновныеНачисленияРаботни ковОрганизаций.Сотрудник.К од
|ИЗ
| РегистрРасчета.ОсновныеНа� �исленияРаботниковОрганиз� �ций КАК ОсновныеНачисленияРаботни ковОрганизаций
|ГДЕ
| ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияНачало = &ДН
| И ОсновныеНачисленияРаботни ковОрганизаций.ПериодДейс� �вияКонец = &ДК
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник
|ИТОГИ ПО
| Сотрудник";
Запрос.УстановитьПараметр("ДН",НачПериода);
Запрос.УстановитьПараметр("ДК",КонПериода);
Результат = Запрос.Выполнить();
ТаблПоСотр = Результат.Выгрузить();
ТаблПоВидамРасч = Результат.Выгрузить();
ТаблПоСотрДоп = Результат.Выгрузить();
КолонкаСвертки = ТаблПоВидамРасч.Колонки.Ви дРасчета.Имя;
КолонкаСверткиДоп = ТаблПоВидамРасч.Колонки.Со трудник.Имя;
ТаблПоВидамРасч.Свернуть(К олонкаСвертки);
ТаблПоСотрДоп.Свернуть(Кол онкаСверткиДоп);
СтрокаСотрДляСорт = КолонкаСверткиДоп + " Возр";
ТаблПоСотрДоп.Сортировать( СтрокаСотрДляСорт);
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ПодШапкаГор|ПодШапкаВерт");
ТабДок.Вывести(ОбластьШапк аТаблицы);
Для Каждого Стр Из ТаблПоВидамРасч Цикл
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ПодШапкаГор|ПодШапкаВертВ� �");
Если НЕ Стр.ВидРасчета = NULL Тогда
ОбластьШапкаТаблицы.Парам� �тры.ВидРасч = Стр.ВидРасчета;
ТабДок.Присоединить(Област ьШапкаТаблицы);
МассивВР.Добавить(Стр.ВидР� �счета);
КонецЕсли;
КонецЦикла;
СотрДляПровер = "";
Для Каждого СтрСотр Из ТаблПоСотрДоп Цикл
Если СотрДляПровер <> СтрСотр.Сотрудник Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаботникиОрганизацийСрезП оследних.Сотрудник,
| ПРЕДСТАВЛЕНИЕ(РаботникиОр� �анизацийСрезПоследних.Сот рудник),
| РаботникиОрганизацийСрезП оследних.ПодразделениеОрг� �низации,
| ПРЕДСТАВЛЕНИЕ(РаботникиОр� �анизацийСрезПоследних.Под разделениеОрганизации),
| РаботникиОрганизацийСрезП оследних.Должность
|ИЗ
| РегистрСведений.Работники� �рганизаций.СрезПоследних КАК РаботникиОрганизацийСрезП оследних
|ГДЕ
| РаботникиОрганизацийСрезП оследних.Сотрудник = &Сотрудник";
Запрос.УстановитьПараметр("Сотрудник", СтрСотр.Сотрудник);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ОбластьТаблица = Макет.ПолучитьОбласть("СтрокаГор|ПодШапкаВерт");
Пока ВыборкаДетальныеЗаписи.Сл� �дующий() Цикл
ОбластьТаблица.Параметры.Д олж = ВыборкаДетальныеЗаписи.До� �жность;
ОбластьТаблица.Параметры.П одр = ВыборкаДетальныеЗаписи.По� �разделениеОрганизации;
КонецЦикла;
СотрДляПровер = СтрСотр.Сотрудник;
ОбластьТаблица.Параметры.С отр = СтрСотр.Сотрудник;
ТабДок.Вывести(ОбластьТабл ица);
КонецЕсли;
Для Каждого Поиск Из МассивВР Цикл
ОбластьТаблица = Макет.ПолучитьОбласть("СтрокаГор|ПодШапкаВертВР");
Отбор = Новый Структура();
Отбор.Вставить("Сотрудник",СтрСотр.Сотрудник);
Отбор.Вставить("ВидРасчета",Поиск);
Итого = ТаблПоСотр.НайтиСтроки(Отб ор);
Если Итого.Количество() > 0 Тогда
ОбластьТаблица.Параметры.В Р = Итого[0].Показатель1;
Иначе
ОбластьТаблица.Параметры.В Р = 0;
КонецЕсли;
ТабДок.Присоединить(Област ьТаблица);
КонецЦикла;
КонецЦикла;
ТабДок.Показать();
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.Редактир� �ватьКакИнтервал = Истина;
НастройкаПериода.Редактир� �ватьКакПериод = Истина;
НастройкаПериода.ВариантН� �стройки = ВариантНастройкиПериода.П� �риод;
НастройкаПериода.Установи� �ьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
Если НастройкаПериода.Редактир� �вать() Тогда
НачПериода = НастройкаПериода.Получить� �атуНачала();
КонПериода = НастройкаПериода.Получить� �атуОкончания();
КонецЕсли;
КонецПроцедуры