Skip to content

Instantly share code, notes, and snippets.

@FragsterAt
Created May 28, 2019 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save FragsterAt/3cc9026407d96aa1258ce143fd8f34c3 to your computer and use it in GitHub Desktop.
Save FragsterAt/3cc9026407d96aa1258ce143fd8f34c3 to your computer and use it in GitHub Desktop.
&НаСервере
Процедура СоздатьДополнительныеКолонкиПланФакта();
Если Не ЗначениеЗаполнено(_ДобавленныеРеквизитыПланФакт) Тогда
_ДобавленныеРеквизитыПланФакт = ОбщегоНазначенияУУСервер.СериализоватьЗначение(Новый Массив);
_ДобавленныеЭлементыПланФакт = ОбщегоНазначенияУУСервер.СериализоватьЗначение(Новый Массив);
КонецЕсли;
ДобавленныеЭлементыПланФакт = ОбщегоНазначенияУУСервер.ДесериализоватьЗначение(_ДобавленныеЭлементыПланФакт);
ДобавленныеРеквизитыПланФакт = ОбщегоНазначенияУУСервер.ДесериализоватьЗначение(_ДобавленныеРеквизитыПланФакт);
Для каждого Элемент Из ДобавленныеЭлементыПланФакт Цикл
Элементы.Удалить(Элементы[Элемент]);
КонецЦикла;
ДобавленныеЭлементыПланФакт.Очистить();
Если ДобавленныеРеквизитыПланФакт.Количество() > 0 Тогда
ИзменитьРеквизиты(, ДобавленныеРеквизитыПланФакт);
КонецЕсли;
ДобавленныеРеквизитыПланФакт.Очистить();
Для каждого СтрКПЭ Из Объект.КлючевыеПоказатели Цикл
ДобавленныеРеквизитыПланФакт.Добавить(Новый РеквизитФормы("План" + СтрКПЭ.НомерСтроки, Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой))
, "Объект.Пользователи", "План", Ложь) );
ДобавленныеРеквизитыПланФакт.Добавить(Новый РеквизитФормы("Факт" + СтрКПЭ.НомерСтроки, Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой))
, "Объект.Пользователи", "Факт", Ложь) );
ДобавленныеРеквизитыПланФакт.Добавить(Новый РеквизитФормы("ФактАвто" + СтрКПЭ.НомерСтроки, Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой))
, "Объект.Пользователи", "ФактАвто", Ложь) );
ДобавленныеРеквизитыПланФакт.Добавить(Новый РеквизитФормы("ФактДельта" + СтрКПЭ.НомерСтроки, Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Любой))
, "Объект.Пользователи", "ФактДельта", Ложь) );
ДобавленныеРеквизитыПланФакт.Добавить(Новый РеквизитФормы("Мотивация" + СтрКПЭ.НомерСтроки, Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(10, 2, ДопустимыйЗнак.Любой))
, "Объект.Пользователи", "Мотивация", Ложь) );
ДобавленныеРеквизитыПланФакт.Добавить(Новый РеквизитФормы("УсловиеВыполнено" + СтрКПЭ.НомерСтроки, Новый ОписаниеТипов("Булево")
, "Объект.Пользователи", "УсловиеВыполнено", Ложь) );
КонецЦикла;
ИзменитьРеквизиты(ДобавленныеРеквизитыПланФакт);
Для Сч = 0 По ДобавленныеРеквизитыПланФакт.Вграница() Цикл
ДобавленныеРеквизитыПланФакт[Сч] = ДобавленныеРеквизитыПланФакт[Сч].Путь + "." + ДобавленныеРеквизитыПланФакт[Сч].Имя;
КонецЦикла;
УсловноеОформление.Элементы.Очистить();
Для каждого СтрКПЭ Из Объект.КлючевыеПоказатели Цикл
ГруппаКолонок = Элементы.Вставить("ГруппаПланФактСтроки" + СтрКПЭ.НомерСтроки, Тип("ГруппаФормы"), Элементы.Пользователи, Элементы.ПользователиМотивацияКВыплате);
ГруппаКолонок.Заголовок = СтрКПЭ.Заголовок;
ГруппаКолонок.Группировка = ГруппировкаКолонок.Вертикальная;
ГруппаКолонок.ОтображатьВШапке = Истина;
ГруппаКолонок.РастягиватьПоГоризонтали = Ложь;
ГруппаКолонок.Ширина = 35;
ГруппаКолонокПлан = Элементы.Вставить("ГруппаПланФактПлан" + СтрКПЭ.НомерСтроки, Тип("ГруппаФормы"), ГруппаКолонок);
ГруппаКолонокПлан.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаКолонокПлан.ОтображатьВШапке = Ложь;
ГруппаКолонокПлан.РастягиватьПоГоризонтали = Ложь;
ГруппаПланФактФакт = Элементы.Вставить("ГруппаПланФактФакт" + СтрКПЭ.НомерСтроки, Тип("ГруппаФормы"), ГруппаКолонок);
ГруппаПланФактФакт.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаПланФактФакт.ОтображатьВШапке = Ложь;
ГруппаПланФактФакт.РастягиватьПоГоризонтали = Ложь;
ДобавленныеЭлементыПланФакт.Добавить(ГруппаПланФактФакт.Имя);
ДобавленныеЭлементыПланФакт.Добавить(ГруппаКолонокПлан.Имя);
ДобавленныеЭлементыПланФакт.Добавить(ГруппаКолонок.Имя);
СоздатьПоле(ГруппаКолонокПлан, СтрКПЭ, "План", 12);
СоздатьПоле(ГруппаКолонокПлан, СтрКПЭ, "Факт", 12, , "Факт Учет");
СоздатьПоле(ГруппаКолонокПлан, СтрКПЭ, "УсловиеВыполнено", 3, Истина, "Выполнено");
СоздатьПоле(ГруппаПланФактФакт, СтрКПЭ, "ФактАвто", 12, Истина, "Факт Расч");
СоздатьПоле(ГруппаПланФактФакт, СтрКПЭ, "ФактДельта", 12, , "Корр.");
СоздатьПоле(ГруппаПланФактФакт, СтрКПЭ, "Мотивация", 8);
Элементы["Факт"+СтрКПЭ.НомерСтроки].УстановитьДействие("ПриИзменении", "ФактПриИзменении");
Элементы["ФактДельта"+СтрКПЭ.НомерСтроки].УстановитьДействие("ПриИзменении", "ФактДельтаПриИзменении");
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементОформления.Отбор, "Объект.Пользователи.Факт" + СтрКПЭ.НомерСтроки
, ВидСравненияКомпоновкиДанных.НеРавно, Новый ПолеКомпоновкиДанных("Объект.Пользователи.ФактАвто" + СтрКПЭ.НомерСтроки));
//ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Пользователи.Факт" + СтрКПЭ.НомерСтроки);
//ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
//ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Пользователи.ФактАвто" + СтрКПЭ.НомерСтроки);;
//ЭлементОтбора.Использование = Истина;
//ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.СобытиеОтказ);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(
"Шрифт", Новый Шрифт(ШрифтыСтиля.ОбычныйШрифтТекста, , , Истина));
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Использование = Истина;
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Факт"+СтрКПЭ.НомерСтроки);
КонецЦикла;
ПеренестиПланФактВСводнуюТаблицу(Объект);
_ДобавленныеЭлементыПланФакт = ОбщегоНазначенияУУСервер.СериализоватьЗначение(ДобавленныеЭлементыПланФакт);
_ДобавленныеРеквизитыПланФакт = ОбщегоНазначенияУУСервер.СериализоватьЗначение(ДобавленныеРеквизитыПланФакт);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПеренестиСводнуюТаблицуВПланФакт(Объект)
Для каждого СтрПланФакт Из Объект.ПланФакт Цикл
СтрПланФакт.НужноУдалить = Истина;
КонецЦикла;
МассивПолей = Новый Массив;
МассивПолей.Добавить("План");
МассивПолей.Добавить("Факт");
МассивПолей.Добавить("ФактАвто");
МассивПолей.Добавить("Мотивация");
МассивПолей.Добавить("УсловиеВыполнено");
Для каждого СтрПользователи Из Объект.Пользователи Цикл
СтрПользователи.МотивацияКВыплате = 0;
Для каждого СтрКПЭ Из Объект.КлючевыеПоказатели Цикл
ПараметрыОтбора = Новый Структура("Пользователь, УИД, КлючевойПоказатель", СтрПользователи.Пользователь, СтрКПЭ.УИД, СтрКПЭ.КлючевойПоказатель);
НайденныеСтроки = Объект.ПланФакт.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() = 0 Тогда
СТрПланФакт = Объект.ПланФакт.Добавить();
ЗаполнитьЗначенияСвойств(СтрПланФакт, ПараметрыОтбора);
КонецЕсли;
Для каждого СтрПланФакт Из НайденныеСтроки Цикл
СтрПланФакт.НужноУдалить = Ложь;
Для каждого Поле Из МассивПолей Цикл
СтрПланФакт[Поле] = СтрПользователи[Поле + СтрКПЭ.НомерСтроки];
КонецЦикла;
Если МеньшеЛучше(СтрПланФакт.КлючевойПоказатель) Тогда
СтрПланФакт.УсловиеВыполнено = СтрПланФакт.Факт <= СтрПланФакт.План
Иначе
СтрПланФакт.УсловиеВыполнено = СтрПланФакт.Факт >= СтрПланФакт.План
КонецЕсли;
СтрПользователи["УсловиеВыполнено" + СтрКПЭ.НомерСтроки] = СтрПланФакт.УсловиеВыполнено;
Если СтрПланФакт.УсловиеВыполнено Тогда
СтрПользователи.МотивацияКВыплате = СтрПользователи.МотивацияКВыплате + СтрПользователи["Мотивация" + СтрКПЭ.НомерСтроки];
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
НайденныеСтроки = Объект.ПланФакт.НайтиСтроки(Новый СТруктура("НужноУдалить", Истина));
Для каждого СтрПланФакт Из НайденныеСтроки Цикл
Объект.ПланФакт.Удалить(СтрПланФакт);
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция МеньшеЛучше(КлючевойПоказатель)
Возврат КлючевойПоказатель.МеньшеЛучше
КонецФункции
Процедура СоздатьПоле(Знач ГруппаКолонок, Знач СтрКПЭ, Знач Путь, Знач Ширина, Знач ТолькоПросмотр = Ложь, Знач Заголовок = "")
Перем Поле;
Поле = Элементы.Добавить(Путь + СтрКПЭ.НомерСтроки, Тип("ПолеФормы"), ГруппаКолонок);
Поле.ПутьКДанным = "Объект.Пользователи." + Путь + СтрКПЭ.НомерСтроки;
Поле.ТолькоПросмотр = ТолькоПросмотр;
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.Ширина = Ширина;
Поле.Заголовок = Заголовок;
Поле.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment