Аттестация "1С:Специалист" > Аттестация "1С:Специалист" ЗУП

ЗУП 3.0 Специалист Билет 3

<< < (2/13) > >>

mkanaev:
Модуль документа "Формирование рабочей группы":

--- Код: ---Процедура ОбработкаПроведения(Отказ, Режим)

Движения.РаботаНаПроектах.Записать();

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Проект", Проект);
Запрос.Текст = "ВЫБРАТЬ
               | Док.НомерСтроки,
               | Док.Сотрудник,
               | Док.НачалоПериода,
               | Док.КонецПериода,
               | Док.РольНаПроекте
               |ПОМЕСТИТЬ ДанныеДокумента
               |ИЗ
               | Документ.ФормированиеРабочейГруппы.Данные КАК Док
               |ГДЕ
               | Док.Ссылка = &Ссылка
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ВЗ.Сотрудник,
               | ВЗ.НачалоПериода,
               | ВЫБОР
               | КОГДА ВЗ.КонецПериода < ВЗ.ДатаДосрочногоВыбытия
               | ТОГДА ВЗ.КонецПериода
               | ИНАЧЕ ДОБАВИТЬКДАТЕ(ВЗ.ДатаДосрочногоВыбытия, ДЕНЬ, -1)
               | КОНЕЦ КАК КонецПериода,
               | ВЗ.РольНаПроекте
               |ПОМЕСТИТЬ ПериодыРаботы
               |ИЗ
               | (ВЫБРАТЬ
               | ДанныеДокумента.Сотрудник КАК Сотрудник,
               | ДанныеДокумента.НачалоПериода КАК НачалоПериода,
               | ВЫБОР
               | КОГДА ДанныеДокумента.КонецПериода = ДАТАВРЕМЯ(1, 1, 1)
               | ТОГДА ДАТАВРЕМЯ(3999, 12, 31)
               | ИНАЧЕ ДанныеДокумента.КонецПериода
               | КОНЕЦ КАК КонецПериода,
               | ДанныеДокумента.РольНаПроекте КАК РольНаПроекте,
               | МИНИМУМ(ЕСТЬNULL(РаботаНаПроектах.Период, ДАТАВРЕМЯ(3999, 12, 31))) КАК ДатаДосрочногоВыбытия
               | ИЗ
               | ДанныеДокумента КАК ДанныеДокумента
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК РаботаНаПроектах
               | ПО ДанныеДокумента.Сотрудник = РаботаНаПроектах.Сотрудник
               | И (КОНЕЦПЕРИОДА(ДанныеДокумента.НачалоПериода, ДЕНЬ) < РаботаНаПроектах.Период)
               | И (НЕ РаботаНаПроектах.Используется)
               | И (РаботаНаПроектах.Проект = &Проект)
               |
               | СГРУППИРОВАТЬ ПО
               | ДанныеДокумента.Сотрудник,
               | ДанныеДокумента.НачалоПериода,
               | ВЫБОР
               | КОГДА ДанныеДокумента.КонецПериода = ДАТАВРЕМЯ(1, 1, 1)
               | ТОГДА ДАТАВРЕМЯ(3999, 12, 31)
               | ИНАЧЕ ДанныеДокумента.КонецПериода
               | КОНЕЦ,
               | ДанныеДокумента.РольНаПроекте) КАК ВЗ
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ВЗ.Сотрудник,
               | ВЗ.НачалоПериода,
               | ВЗ.КонецПериода,
               | ВЗ.РольНаПроекте,
               | ВЗ.Проект
               |ИЗ
               | (ВЫБРАТЬ
               | ВЗ.Сотрудник КАК Сотрудник,
               | ВЗ.НачалоПериода КАК НачалоПериода,
               | ВЗ.КонецПериода КАК КонецПериода,
               | ВЗ.РольНаПроекте КАК РольНаПроекте,
               | РаботаНаПроектах.Проект КАК Проект
               | ИЗ
               | (ВЫБРАТЬ
               | ПериодыРаботы.Сотрудник КАК Сотрудник,
               | ПериодыРаботы.НачалоПериода КАК НачалоПериода,
               | ПериодыРаботы.КонецПериода КАК КонецПериода,
               | ПериодыРаботы.РольНаПроекте КАК РольНаПроекте,
               | МАКСИМУМ(РаботаНаПроектах.Период) КАК Период
               | ИЗ
               | ПериодыРаботы КАК ПериодыРаботы
               | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК РаботаНаПроектах
               | ПО ПериодыРаботы.Сотрудник = РаботаНаПроектах.Сотрудник
               | И (КОНЕЦПЕРИОДА(ПериодыРаботы.НачалоПериода, ДЕНЬ) >= РаботаНаПроектах.Период)
               |
               | СГРУППИРОВАТЬ ПО
               | ПериодыРаботы.Сотрудник,
               | ПериодыРаботы.НачалоПериода,
               | ПериодыРаботы.КонецПериода,
               | ПериодыРаботы.РольНаПроекте) КАК ВЗ
               | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК РаботаНаПроектах
               | ПО ВЗ.Сотрудник = РаботаНаПроектах.Сотрудник
               | И ВЗ.Период = РаботаНаПроектах.Период
               | И (РаботаНаПроектах.Используется)
               | И (РаботаНаПроектах.ДействуетДо >= НАЧАЛОПЕРИОДА(ВЗ.НачалоПериода, ДЕНЬ)
               | ИЛИ РаботаНаПроектах.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1))
               |
               | ОБЪЕДИНИТЬ
               |
               | ВЫБРАТЬ
               | ПериодыРаботы.Сотрудник,
               | ПериодыРаботы.НачалоПериода,
               | ПериодыРаботы.КонецПериода,
               | ПериодыРаботы.РольНаПроекте,
               | РаботаНаПроектах.Проект
               | ИЗ
               | ПериодыРаботы КАК ПериодыРаботы
               | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК РаботаНаПроектах
               | ПО ПериодыРаботы.Сотрудник = РаботаНаПроектах.Сотрудник
               | И (НАЧАЛОПЕРИОДА(ПериодыРаботы.НачалоПериода, ДЕНЬ) <= РаботаНаПроектах.Период)
               | И (КОНЕЦПЕРИОДА(ПериодыРаботы.КонецПериода, ДЕНЬ) >= РаботаНаПроектах.Период)
               | И (РаботаНаПроектах.Используется)) КАК ВЗ
               |
               |СГРУППИРОВАТЬ ПО
               | ВЗ.Сотрудник,
               | ВЗ.НачалоПериода,
               | ВЗ.КонецПериода,
               | ВЗ.РольНаПроекте,
               | ВЗ.Проект
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | Док.НомерСтроки
               |ИЗ
               | ДанныеДокумента КАК Док
               | ЛЕВОЕ СОЕДИНЕНИЕ ДанныеДокумента КАК Док1
               | ПО Док.Сотрудник = Док1.Сотрудник
               | И Док.НомерСтроки <> Док1.НомерСтроки
               | И (Док.НачалоПериода <= Док1.НачалоПериода
               | И Док.КонецПериода >= Док1.НачалоПериода
               | ИЛИ Док.НачалоПериода <= Док1.КонецПериода
               | И Док.КонецПериода >= Док1.КонецПериода
               | ИЛИ Док.НачалоПериода >= Док1.НачалоПериода
               | И Док.КонецПериода <= Док1.КонецПериода)
               |ГДЕ
               | НЕ Док1.НомерСтроки ЕСТЬ NULL
               |
               |СГРУППИРОВАТЬ ПО
               | Док.НомерСтроки";
   
Результат = Запрос.ВыполнитьПакет();

ВыборкаПроверка1 = Результат[2].Выбрать();
ВыборкаПроверка2 = Результат[3].Выбрать();

Пока ВыборкаПроверка1.Следующий() Цикл

СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = "Сотрудник " + Строка(ВыборкаПроверка1.Сотрудник) + " в период с " + формат(ВыборкаПроверка1.НачалоПериода, "ДЛФ=DD") + " по " + формат(ВыборкаПроверка1.КонецПериода, "ДЛФ=DD") + " уже работает на проекте: " + Строка(ВыборкаПроверка1.Проект);
СообщениеПользователю.Сообщить();
Отказ = Истина;

КонецЦикла;

Пока ВыборкаПроверка2.Следующий() Цикл

СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = "Пересекаются периоды в строке № " + Строка(ВыборкаПроверка2.НомерСтроки);
СообщениеПользователю.Сообщить();
Отказ = Истина;

КонецЦикла;   

Если Отказ Тогда
Возврат;
КонецЕсли;        

Движения.РаботаНаПроектах.Записывать = Истина;
Для Каждого ТекСтрокаДанные Из Данные Цикл
Движение = Движения.РаботаНаПроектах.Добавить();
Движение.Период = ТекСтрокаДанные.НачалоПериода;
Движение.Сотрудник = ТекСтрокаДанные.Сотрудник;
Движение.Проект = Проект;
Движение.Роль = ТекСтрокаДанные.РольНаПроекте;
Движение.ДействуетДо = ТекСтрокаДанные.КонецПериода;
Движение.Используется = Истина;
КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

--- Конец кода ---

Модуль документа "Исключение из рабочей группы"

--- Код: ---Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Движения.РаботаНаПроектах.Записать();

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Проект", Проект);
Запрос.Текст = "ВЫБРАТЬ
               | Док.Сотрудник,
               | Док.ДатаИсключения,
               | МАКСИМУМ(РаботаНаПроектах.Период) КАК Период
               |ПОМЕСТИТЬ ДанныеДокумента
               |ИЗ
               | Документ.ИсключениеИзрабочейГруппы.Данные КАК Док
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК РаботаНаПроектах
               | ПО (КОНЕЦПЕРИОДА(Док.ДатаИсключения, ДЕНЬ) >= РаботаНаПроектах.Период)
               | И Док.Сотрудник = РаботаНаПроектах.Сотрудник
               |ГДЕ
               | Док.Ссылка = &Ссылка
               |
               |СГРУППИРОВАТЬ ПО
               | Док.Сотрудник,
               | Док.ДатаИсключения
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | ДанныеДокумента.Сотрудник,
               | ДанныеДокумента.ДатаИсключения
               |ИЗ
               | ДанныеДокумента КАК ДанныеДокумента
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК РаботаНаПроектах
               | ПО ДанныеДокумента.Период = РаботаНаПроектах.Период
               | И ДанныеДокумента.Сотрудник = РаботаНаПроектах.Сотрудник
               | И (РаботаНаПроектах.Проект = &Проект)
               | И (РаботаНаПроектах.Используется)
               |ГДЕ
               | (РаботаНаПроектах.Период ЕСТЬ NULL
               | ИЛИ ВЫБОР
               | КОГДА РаботаНаПроектах.ДействуетДо ЕСТЬ NULL
               | ТОГДА ИСТИНА
               | КОГДА РаботаНаПроектах.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
               | ТОГДА ЛОЖЬ
               | ИНАЧЕ НЕ РаботаНаПроектах.ДействуетДо > ДанныеДокумента.ДатаИсключения
               | КОНЕЦ)";
   
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = "Сотрудник " + Строка(Выборка.Сотрудник) + " не работает на проекте " + Строка(Выборка.ДатаИсключения);
СообщениеПользователю.Сообщить();
Отказ = Истина;      

КонецЦикла;

Если Отказ Тогда

Возврат;

КонецЕсли;

// регистр РаботаНаПроектах
Движения.РаботаНаПроектах.Записывать = Истина;
Для Каждого ТекСтрокаДанные Из Данные Цикл
Движение = Движения.РаботаНаПроектах.Добавить();
Движение.Период = ТекСтрокаДанные.ДатаИсключения;
Движение.Сотрудник = ТекСтрокаДанные.Сотрудник;
Движение.Проект = Проект;
Движение.Используется = Ложь;
КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

--- Конец кода ---

Модуль формы "Оценка работ на проекте"


--- Код: ---&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере()

Дата = ?(Объект.Дата = '00010101000000', ТекущаяДата(), Объект.Дата);

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Дата));
Запрос.УстановитьПараметр("КонецПериода",  КонецМесяца(Дата));
Запрос.Текст = "ВЫБРАТЬ
               | ВЗ.Сотрудник,
               | ВЗ.Проект,
               | ВЗ.Роль,
               | ВЗ.НачалоПериода,
               | ВЗ.ДействуетДо,
               | МИНИМУМ(ЕСТЬNULL(Рег.Период, ДАТАВРЕМЯ(3999, 12, 31))) КАК ДатаДосрочногоВыбытия
               |ПОМЕСТИТЬ Данные
               |ИЗ
               | (ВЫБРАТЬ
               | Рег.Сотрудник КАК Сотрудник,
               | Рег.Проект КАК Проект,
               | Рег.Роль КАК Роль,
               | &НачалоПериода КАК НачалоПериода,
               | ВЫБОР
               | КОГДА Рег.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
               | ИЛИ Рег.ДействуетДо > &КонецПериода
               | ТОГДА &КонецПериода
               | ИНАЧЕ Рег.ДействуетДо
               | КОНЕЦ КАК ДействуетДо
               | ИЗ
               | РегистрСведений.РаботаНаПроектах.СрезПоследних(&НачалоПериода, ) КАК Рег
               | ГДЕ
               | Рег.Используется
               | И (Рег.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
               | ИЛИ Рег.ДействуетДо > &НачалоПериода)
               |
               | ОБЪЕДИНИТЬ
               |
               | ВЫБРАТЬ
               | Рег.Сотрудник,
               | Рег.Проект,
               | Рег.Роль,
               | Рег.Период,
               | ВЫБОР
               | КОГДА Рег.ДействуетДо = ДАТАВРЕМЯ(1, 1, 1)
               | ИЛИ Рег.ДействуетДо > &КонецПериода
               | ТОГДА &КонецПериода
               | ИНАЧЕ Рег.ДействуетДо
               | КОНЕЦ
               | ИЗ
               | РегистрСведений.РаботаНаПроектах КАК Рег
               | ГДЕ
               | Рег.Период > КОНЕЦПЕРИОДА(&НачалоПериода, ДЕНЬ)
               | И Рег.Период <= &КонецПериода
               | И Рег.Используется) КАК ВЗ
               | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботаНаПроектах КАК Рег
               | ПО (КОНЕЦПЕРИОДА(ВЗ.НачалоПериода, ДЕНЬ) < Рег.Период)
               | И ВЗ.Сотрудник = Рег.Сотрудник
               | И ВЗ.Проект = Рег.Проект
               |
               |СГРУППИРОВАТЬ ПО
               | ВЗ.Сотрудник,
               | ВЗ.Проект,
               | ВЗ.Роль,
               | ВЗ.НачалоПериода,
               | ВЗ.ДействуетДо
               |;
               |
               |////////////////////////////////////////////////////////////////////////////////
               |ВЫБРАТЬ
               | Данные.Сотрудник,
               | Данные.Проект,
               | Данные.Роль,
               | Данные.НачалоПериода,
               | ВЫБОР
               | КОГДА Данные.ДействуетДо < Данные.ДатаДосрочногоВыбытия
               | ТОГДА Данные.ДействуетДо
               | ИНАЧЕ ДОБАВИТЬКДАТЕ(Данные.ДатаДосрочногоВыбытия, ДЕНЬ, -1)
               | КОНЕЦ КАК КонецПериода,
               | ВЫБОР
               | КОГДА Данные.Роль = ЗНАЧЕНИЕ(Перечисление.РольНаПроекте.Исполнитель)
               | ТОГДА ПлановыйРазмерПремииЗаРаботуНаПроекте.Исполнитель
               | ИНАЧЕ ПлановыйРазмерПремииЗаРаботуНаПроекте.Руководитель
               | КОНЕЦ КАК ПлановыйПроцентПремии
               |ИЗ
               | Данные КАК Данные
               | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыйРазмерПремииЗаРаботуНаПроекте КАК ПлановыйРазмерПремииЗаРаботуНаПроекте
               | ПО Данные.Проект.СтепеньСекретности = ПлановыйРазмерПремииЗаРаботуНаПроекте.СтепеньСекретности";
   
   Если Объект.ВидОперации = Перечисления.ВидОперации_ОценкаРаботНаПроектах.Исполнители Тогда
   
   Запрос.УстановитьПараметр("Проект", Объект.Проект);
   Запрос.Текст = Запрос.Текст + " Где Данные.Роль = Значение(Перечисление.РольНаПроекте.Исполнитель) И Данные.Проект = &Проект";
   
   Иначе
   
   Запрос.Текст = Запрос.Текст + " Где Данные.Роль = Значение(Перечисление.РольНаПроекте.Руководитель)";
   
   КонецЕсли;
   
Выборка = Запрос.Выполнить().Выбрать();

Объект.Данные.Очистить();

Пока Выборка.Следующий() Цикл

СтрокаТаблицыДанные = Объект.Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТаблицыДанные, Выборка);

КонецЦикла;
     
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ИзменитьОтображениеЭлементов();

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

Процедура ИзменитьОтображениеЭлементов()

Если Объект.ВидОперации = Перечисления.ВидОперации_ОценкаРаботНаПроектах.Исполнители Тогда

Элементы.Проект.Видимость = Истина;
Элементы.ДанныеПроект.Видимость = Ложь;

Иначе

Элементы.Проект.Видимость = Ложь;
Элементы.ДанныеПроект.Видимость = Истина;

КонецЕсли;

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

&НаКлиенте
Процедура ВидОперацииПриИзменении(Элемент)

ИзменитьОтображениеЭлементов();

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

&НаКлиенте
Процедура ДанныеОценкаКачестваПриИзменении(Элемент)

Пересчитать();

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

&НаКлиенте
Процедура Пересчитать()

ТекущаяСтрока = Элементы.Данные.ТекущиеДанные;

Если ТекущаяСтрока = Неопределено Тогда

Возврат;

КонецЕсли;

ТекущаяСтрока.ФактическийПроцент = ТекущаяСтрока.ПлановыйПроцентПремии * ТекущаяСтрока.ОценкаКачества * ТекущаяСтрока.ОценкаСкорости;

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

&НаКлиенте
Процедура ДанныеПлановыйПроцентПремииПриИзменении(Элемент)

Пересчитать();

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

&НаКлиенте
Процедура ДанныеОценкаСкоростиПриИзменении(Элемент)
Пересчитать();
КонецПроцедуры

--- Конец кода ---

mkanaev:
Модуль документа "Оценка работ на проекте"

--- Код: ---Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Если Константы.Показатель_РаботаНаПроектах.Получить().Пустая() Тогда

СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = "Не заполнен показатель ""Показатель_РаботаНаПроектах""";
СообщениеПользователю.Сообщить();
Отказ = Истина;
Возврат;

КонецЕсли;

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = "ВЫБРАТЬ
               | Док.НомерСтроки
               |ИЗ
               | Документ.ОценкаРаботНаПроектах.Данные КАК Док
               | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОценкаРаботНаПроектах.Данные КАК Док1
               | ПО Док.НомерСтроки <> Док1.НомерСтроки
               | И Док.Сотрудник = Док1.Сотрудник
               | И (Док.НачалоПериода <= Док1.НачалоПериода
               | И Док.КонецПериода >= Док1.НачалоПериода
               | ИЛИ Док.НачалоПериода <= Док1.КонецПериода
               | И Док.КонецПериода >= Док1.КонецПериода
               | ИЛИ Док.НачалоПериода >= Док1.НачалоПериода
               | И Док.КонецПериода <= Док1.КонецПериода)
               |ГДЕ
               | Док.Ссылка = &Ссылка
               | И НЕ Док1.НомерСтроки ЕСТЬ NULL
               |
               |СГРУППИРОВАТЬ ПО
               | Док.НомерСтроки";
   
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл

СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = "Пересекаются периоды в строке № " + Строка(Выборка.НомерСтроки);
СообщениеПользователю.Сообщить();
Отказ = Истина;
Возврат;

КонецЦикла;

// регистр ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Записывать = Истина;
Движения.ПлановыеНачисления.Записывать = Истина;
Для Каждого ТекСтрокаДанные Из Данные Цикл

Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
Движение.Период = ТекСтрокаДанные.НачалоПериода;
Движение.Сотрудник = ТекСтрокаДанные.Сотрудник;
Движение.Организация = Организация;
Движение.ФизическоеЛицо = ТекСтрокаДанные.Сотрудник.ФизическоеЛицо;
Движение.Показатель = Константы.Показатель_РаботаНаПроектах.Получить();   
Движение.Значение = ТекСтрокаДанные.ФактическийПроцент;
Движение.ДействуетДо = ТекСтрокаДанные.КонецПериода +60*60*24;

Движение = Движения.ПлановыеНачисления.Добавить();
Движение.Период = ТекСтрокаДанные.НачалоПериода;
Движение.Сотрудник = ТекСтрокаДанные.Сотрудник;
Движение.ГоловнаяОрганизация = Организация;
Движение.ФизическоеЛицо = ТекСтрокаДанные.Сотрудник.ФизическоеЛицо;
Движение.Начисление = Константы.Начисление_РаботаНаПроектах.Получить();   
Движение.Размер = ТекСтрокаДанные.ФактическийПроцент;
Движение.ДействуетДо = ТекСтрокаДанные.КонецПериода +60*60*24;
Движение.Используется = Истина;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

--- Конец кода ---

Отчет СКД:

--- Код: ---ВЫБРАТЬ
НачисленияБазаНачисления.Сотрудник,
НАЧАЛОПЕРИОДА(НачисленияБазаНачисления.ПериодДействияНачало, МЕСЯЦ) КАК Месяц,
НачисленияБазаНачисления.ПериодДействияНачало КАК ПериодСреза,
НачисленияБазаНачисления.ОтработаноДнейБаза КАК ОтработаноДней,
НачисленияБазаНачисления.РезультатБаза КАК НачисленоПоДневнойСтавке,
НачисленияБазаНачисления.Результат КАК НачисленоПремии,
ЗначенияПоказателейНачислений.Значение КАК ФактическийПроцентПремии
ПОМЕСТИТЬ Данные
ИЗ
РегистрРасчета.Начисления.БазаНачисления(
&Измерения,
&Измерения,
,
ГоловнаяОрганизация = &Организация
И ВидРасчета = &ВидРасчета) КАК НачисленияБазаНачисления
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПоказателейНачислений КАК ЗначенияПоказателейНачислений
ПО НачисленияБазаНачисления.Регистратор = ЗначенияПоказателейНачислений.РегистраторИзмерение
И НачисленияБазаНачисления.ИдентификаторСтроки = ЗначенияПоказателейНачислений.ИдентификаторСтроки
И (ЗначенияПоказателейНачислений.Показатель = &Показатель)
ГДЕ
НЕ НачисленияБазаНачисления.Сторно
И НачисленияБазаНачисления.Активность
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Данные.Сотрудник,
Данные.ПериодСреза
ПОМЕСТИТЬ ТаблицаСрезов
ИЗ
Данные КАК Данные

СГРУППИРОВАТЬ ПО
Данные.Сотрудник,
Данные.ПериодСреза
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодСреза,
ЗНАЧЕНИЕ(Перечисление.РольНаПроекте.ПустаяСсылка) КАК Роль,
ЗНАЧЕНИЕ(Справочник.Проекты.ПустаяСсылка) КАК Проект
ПОМЕСТИТЬ Представления_ДанныеПроекта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ДАТАВРЕМЯ(1, 1, 1) КАК ПериодСреза,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность
ПОМЕСТИТЬ Представления_Должности
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Данные.Сотрудник,
Данные.Месяц,
СУММА(Данные.ОтработаноДней) КАК ОтработаноДней,
СУММА(Данные.НачисленоПоДневнойСтавке) КАК НачисленоПоДневнойСтавке,
СУММА(Данные.НачисленоПремии) КАК НачисленоПремии,
Данные.ФактическийПроцентПремии,
Представления_ДанныеПроекта.Роль,
Представления_ДанныеПроекта.Проект,
Представления_Должности.Должность
ИЗ
Данные КАК Данные
ЛЕВОЕ СОЕДИНЕНИЕ Представления_ДанныеПроекта КАК Представления_ДанныеПроекта
ПО Данные.Сотрудник = Представления_ДанныеПроекта.Сотрудник
И Данные.ПериодСреза = Представления_ДанныеПроекта.ПериодСреза
ЛЕВОЕ СОЕДИНЕНИЕ Представления_Должности КАК Представления_Должности
ПО Данные.Сотрудник = Представления_Должности.Сотрудник
И Данные.ПериодСреза = Представления_Должности.ПериодСреза

СГРУППИРОВАТЬ ПО
Данные.Сотрудник,
Данные.Месяц,
Данные.ФактическийПроцентПремии,
Представления_ДанныеПроекта.Роль,
Представления_ДанныеПроекта.Проект,
Представления_Должности.Должность
--- Конец кода ---

paxanb:

--- Цитата: Tex от Февраль 17, 2015, 10:22:17 am ---Демос написал, что за третий билет ему отняли два бала за неправильный выбор регистра. В связи с этим переделал этот билет. Писал периоды работы работников по проектам в РС ПлановыеНачислении. Исключение писал туда же, с Используется = ЛОЖЬ. Далее оценки писал в  в РС ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.
Все прекрасно работает. Получилось компактнее, легче. "Все гениальное просто"  ;)

--- Конец цитаты ---

Понравилось это решение. Действительно, компактно выходит, в рамках нехватки времени на экзамене самое оно.


--- Цитата: FireAlex от Август 21, 2015, 07:54:38 am ---Как в таком случае лучше получить сотрудников у которых есть действующее начисление (премия) в текущем месяце? самому писать запрос или есть типовая функция?

--- Конец цитаты ---

Присоединяюсь к вопросу. Написание своей функции отнимает много времени на экзамене.

zst001:
Сдавал экзамен 16.06.16 Для документа "ОценкаРаботПоПроекту" делал движения по регистру свед. "ЗначениеПериодическихПоказателейРасчетаЗарплатыСотрудников". И получил такой ответ
" Не верно выбран регистр движений для документа "Оценка работ по проекту". Регистр сведений: ЗначениеПериодическихПоказателейРасчетаЗарплатыСотрудников предназначен для хранения плановых показателей, по условиям задания требовалось регистрировать ежемесячно изменяемые показатели."

mkanaev:
zst001

На данный момент считаю что сдать экзамен дистанционно очень сложно.
Я сдавал первый раз пришли ошибки, достаточно спорные, второй раз сдавал преподавателю, сдал и решил спросить по поводу ошибок при первой сдаче, он сказал что это не ошибки, вполне нормальные решения и имеют право на жизнь.

Кстати вопрос использования РС "ЗначениеПериодическихПоказателейРасчетаЗарплатыСотрудников" стоял как в билете так и обсуждении, ответ был такой, "ну конечно можно использовать данный регистр, а что вы кроме него можете использовать что бы придти к результату, описанному в задании?".

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Перейти к полной версии