Аттестация "1С:Специалист" > Аттестация "1С:Специалист" ЗУП
ЗУП 3.0 Специалист Билет 3
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
На данный момент считаю что сдать экзамен дистанционно очень сложно.
Я сдавал первый раз пришли ошибки, достаточно спорные, второй раз сдавал преподавателю, сдал и решил спросить по поводу ошибок при первой сдаче, он сказал что это не ошибки, вполне нормальные решения и имеют право на жизнь.
Кстати вопрос использования РС "ЗначениеПериодическихПоказателейРасчетаЗарплатыСотрудников" стоял как в билете так и обсуждении, ответ был такой, "ну конечно можно использовать данный регистр, а что вы кроме него можете использовать что бы придти к результату, описанному в задании?".
Навигация
Перейти к полной версии