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

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

(1/13) > >>

demos:
Исходя из описания документа ОценкаРаботПоПроекту примем за факт, что 1 сотрудник в 1 проекте в 1 роли может участвовать в 1 месяце только 1 раз )

 1. Создаем Начисление - ежемесячно, оплата за отработанное время, формула: РасчетнаяБаза * ПроцентПремии / 100 , где РасчетнаяБаза зависит от начисления по дням.

 2. РН - РаботаВПроектах, периодический в пределах суток
 измерения: Сотрудник, Проект, Роль
 Ресурс: Дней
 Регистраторы: ФормированиеРабочейГруппы, ИсключениеИзрабочейГруппы
 (будет работать по аналогии с РН РабочееВремяСотрудников... если Сотрудник исключен, выставляется Дней -1, если включен +1)

 3. Документ ФормированиеРабочейГруппы
 только здесь используется физ таблица РН РаботаВПроектах, если использовать обороты, тогда нужно брать за факт, что Дата начала всех периодов в таблице >= Дата документа

 КодПроцедура ОбработкаПроведения(Отказ, Режим)
            
        Движения.РаботаВПроектах.Очистить();
        Движения.РаботаВПроектах.Записать();
        Движения.РаботаВПроектах.Записывать = Истина;
            

        Запрос = Новый Запрос;
        Запрос.Текст =     
        "ВЫБРАТЬ
        |    ФормированиеРабочейГруппыПроектаТаблицаУчастников.НомерСтроки,
        |    ФормированиеРабочейГруппыПроектаТаблицаУчастников.Сотрудник,
        |    ФормированиеРабочейГруппыПроектаТаблицаУчастников.Роль,
        |    ФормированиеРабочейГруппыПроектаТаблицаУчастников.НачалоПериода,
        |    ФормированиеРабочейГруппыПроектаТаблицаУчастников.КонецПериода
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |    Документ.ФормированиеРабочейГруппыПроекта.ТаблицаУчастников КАК ФормированиеРабочейГруппыПроектаТаблицаУчастников
        |ГДЕ
        |    ФормированиеРабочейГруппыПроектаТаблицаУчастников.Ссылка = &Ссылка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ.НомерСтроки,
        |    ВТ.Сотрудник,
        |    ВТ.Роль,
        |    ВТ.НачалоПериода,
        |    ВТ.КонецПериода,
        |    СУММА(ЕСТЬNULL(РаботаВПроектах.Дней, 0)) КАК Дней
        |ИЗ
        |    ВТ КАК ВТ
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РаботаВПроектах КАК РаботаВПроектах
        |        ПО ВТ.Сотрудник = РаботаВПроектах.Сотрудник
        |            И (РаботаВПроектах.Период МЕЖДУ ВТ.НачалоПериода И ВТ.КонецПериода)
        |            И (РаботаВПроектах.Активность = ИСТИНА)
        |
        |СГРУППИРОВАТЬ ПО
        |    ВТ.Роль,
        |    ВТ.КонецПериода,
        |    ВТ.НачалоПериода,
        |    ВТ.Сотрудник,
        |    ВТ.НомерСтроки";
            
        Запрос.УстановитьПараметр("Ссылка", Ссылка);
        РезультатЗапроса = Запрос.Выполнить();
            
        Выборка = РезультатЗапроса.Выбрать();
            
        Пока Выборка.Следующий() Цикл
            Если Выборка.Дней = 0 Тогда
                СчетчикДата = Выборка.НачалоПериода;
                Пока СчетчикДата <= Выборка.КонецПериода Цикл
                    Движение = Движения.РаботаВПроектах.Добавить();
                    Движение.Период = СчетчикДата;
                    Движение.Проект = Проект;
                    Движение.Сотрудник = Выборка.Сотрудник;
                    Движение.Роль = Выборка.Роль;
                    Движение.Дней = 1;
                    СчетчикДата = СчетчикДата + 24*60*60;
                КонецЦикла;
            Иначе
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "В данный период сотрудник занят над другим проектом";
                Сообщение.Поле = "ТаблицаУчастников["+(Выборка.НомерСтроки-1)+"].НачалоПериода";
                Сообщение.УстановитьДанные(ЭтотОбъект);
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЕсли;            
                
        КонецЦикла;
            
 КонецПроцедуры

 4. Документ ИсключениеИзрабочейГруппы
 КодПроцедура ОбработкаПроведения(Отказ, Режим)
            
        Движения.РаботаВПроектах.Очистить();
        Движения.РаботаВПроектах.Записать();        
        Движения.РаботаВПроектах.Записывать = Истина;
            
        Запрос = Новый Запрос;
        Запрос.Текст =     
        "ВЫБРАТЬ
        |    ЕСТЬNULL(РаботаВПроектахОбороты.ДнейОборот, 0) КАК ДнейОборот,
        |    РаботаВПроектахОбороты.Роль
        |ИЗ
        |    РегистрНакопления.РаботаВПроектах.Обороты(
        |            &НачалоПериода,
        |            ,
        |            ,
        |            Проект = &Проект
        |                И Сотрудник = &Сотрудник) КАК РаботаВПроектахОбороты";
            
        Запрос.УстановитьПараметр("НачалоПериода", ДатаИсключения);
        Запрос.УстановитьПараметр("Проект", Проект);
        Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
            
        РезультатЗапроса = Запрос.Выполнить();
            
        Выборка = РезультатЗапроса.Выбрать();
            
        Пока Выборка.Следующий() Цикл
                
            Если Выборка.ДнейОборот > 0 Тогда
                СчетчикДата = ДатаИсключения;
                Пока СчетчикДата <= ДатаИсключения + ((Выборка.ДнейОборот-1)*24*60*60) Цикл
                    Движение = Движения.РаботаВПроектах.Добавить();
                    Движение.Период = СчетчикДата;
                    Движение.Проект = Проект;
                    Движение.Сотрудник = Сотрудник;
                    Движение.Роль = Выборка.Роль;
                    Движение.Дней =  -1;
                    СчетчикДата = СчетчикДата + (24*60*60);
                КонецЦикла;                
            Иначе
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "В этот период пользователь не работает над проектом!";
                Сообщение.Поле = "ДатаИсключения";
                Сообщение.УстановитьДанные(ЭтотОбъект);
                Сообщение.Сообщить();
                Отказ = Истина;                
            КонецЕсли;     
        КонецЦикла;
            
            
 КонецПроцедуры

 5. Документ ОценкаРаботПоПроекту

 5.1. Форма
 Код&НаСервере
 Процедура ПроектПриИзмененииНаСервере()

 ОбъектФормы = РеквизитФормыВЗначение("Объект");

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

 Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца( ОбъектФормы.Дата ) );
 Запрос.УстановитьПараметр("КонецПериода", КонецМесяца( ОбъектФормы.Дата ) );
 Запрос.УстановитьПараметр("Проект", ОбъектФормы.Проект);

 РезультатЗапроса = Запрос.Выполнить();

 ОбъектФормы.ОценкаИсполнителей.Загрузить( РезультатЗапроса.Выгрузить() );

 ЗначениеВРеквизитФормы(ОбъектФормы,"Объект");

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

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

 ОбъектФормы = РеквизитФормыВЗначение("Объект");

 Запрос = Новый Запрос;
 Запрос.Текст =
 "ВЫБРАТЬ
 |    РаботаВПроектахОбороты.Проект,
 |    РаботаВПроектахОбороты.Сотрудник
 |ИЗ
 |    РегистрНакопления.РаботаВПроектах.Обороты(&НачалоПериода,
 &КонецПериода, , Роль =
 ЗНАЧЕНИЕ(Перечисление.РолиСотрудниковВПроектах.Руководитель)) КАК
 РаботаВПроектахОбороты";

 Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца( ОбъектФормы.Дата ) );
 Запрос.УстановитьПараметр("КонецПериода", КонецМесяца( ОбъектФормы.Дата ) );

 РезультатЗапроса = Запрос.Выполнить();

 ОбъектФормы.ОценкаРуководителей.Загрузить( РезультатЗапроса.Выгрузить() );

 ЗначениеВРеквизитФормы(ОбъектФормы,"Объект");

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

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

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

 5.2. Модуль объекта, здесь пишем в РC ПлановыеНачисления и РС ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
 КодПроцедура ОбработкаПроведения(Отказ, Режим)

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

 Запрос.УстановитьПараметр("Ссылка", Ссылка);
 Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(Дата) );
 Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Дата) );

 РезультатЗапроса = Запрос.Выполнить();

 Выборка = РезультатЗапроса.Выбрать();

 // получаем организацию по умолчанию
 ОрганизацияПоУмолчанию = Новый Структура("Организация");
 ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(ОрганизацияПоУмолчанию, НачалоМесяца(Дата) );
 // создаем пустые таблицы начислений и показателей
 ПлановыеНачисления = РасчетЗарплатыРасширенный.ПустаяТаблицаРегистрацииПлановыхНачислений();
 ЗначенияПоказателей = РасчетЗарплатыРасширенный.ПустаяТаблицаРегистрацииЗначенийПериодическихПоказателей();

 Пока Выборка.Следующий() Цикл
 Начисление = ПлановыеНачисления.Добавить();
 Начисление.ДатаСобытия = Выборка.ДатаСобытия;
 Начисление.Сотрудник = Выборка.Сотрудник;
 Начисление.ФизическоеЛицо = Выборка.ФизическоеЛицо;
 Начисление.Начисление = ПланыВидовРасчета.Начисления.НайтиПоКоду("ОЗРНП");
 Начисление.Используется = ИСТИНА;
 Начисление.Размер = 0;
 Начисление.ДействуетДо = Выборка.ДействуетДо;

 Показатель = ЗначенияПоказателей.Добавить();
 Показатель.ДатаСобытия = Выборка.ДатаСобытия;
 Показатель.Сотрудник = Выборка.Сотрудник;
 Показатель.Организация = ОрганизацияПоУмолчанию.Организация;
 Показатель.ФизическоеЛицо = Выборка.ФизическоеЛицо;
 Показатель.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоРеквизиту("Идентификатор","ПроцентПремии");
 Показатель.Значение = Выборка.ПроцентПремии * Выборка.Оценка;
 Показатель.ДействуетДо = Выборка.ДействуетДо;
 КонецЦикла;

 СтруктураПлановыхНачислений = Новый Структура;
 СтруктураПлановыхНачислений.Вставить("ДанныеОПлановыхНачислениях", ПлановыеНачисления);
 СтруктураПлановыхНачислений.Вставить("ЗначенияПоказателей", ЗначенияПоказателей);
 РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, СтруктураПлановыхНачислений);

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

 6. Отчет. После создания предопределенного отчета нужно сделать обработку,
 которая вызывает следующую функцию -
 Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();

 После этого отчет будет работать.
 КодВЫБРАТЬ РАЗРЕШЕННЫЕ
 НачисленияБазаНачисления.ПериодДействия КАК Период,
 НачисленияБазаНачисления.Сотрудник КАК Сотрудник,
 НачисленияБазаНачисления.ОтработаноДнейБаза КАК ОтработаноДней,
 НачисленияБазаНачисления.РезультатБаза КАК НачисленоПоДневнойСтавке,
 НачисленияБазаНачисления.Результат КАК НачисленоПремии,
 РаботаВПроектахОбороты.Проект,
 РаботаВПроектахОбороты.Роль,
 ЕСТЬNULL(ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Значение, 0) КАК ФактическийПроцентПремии
 ПОМЕСТИТЬ ВТДанные
 ИЗ
 РегистрРасчета.Начисления.БазаНачисления(
 &Измерения,
 &Измерения,
 ,
 ВидРасчета = &ВидРасчета
 И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияБазаНачисления
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ
 РегистрНакопления.РаботаВПроектах.Обороты(&НачалоПериода,
 &КонецПериода, День, ) КАК РаботаВПроектахОбороты
 ПО НачисленияБазаНачисления.Сотрудник = РаботаВПроектахОбороты.Сотрудник
 И НачисленияБазаНачисления.ПериодДействияНачало = РаботаВПроектахОбороты.Период
 ВНУТРЕННЕЕ СОЕДИНЕНИЕ
 РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
 КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
 ПО НачисленияБазаНачисления.ПериодДействияНачало = ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Период
 И НачисленияБазаНачисления.Сотрудник = ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Сотрудник
 И (ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Активность = ИСТИНА)
 И (ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Показатель = &ПоказательПроцентПремии)

 ИНДЕКСИРОВАТЬ ПО
 Сотрудник,
 Период
 ;

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

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

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

 Итого - с минимальным изменением конфигурации, точнее вообще ничего не меняли )

Olga91:
Скажите, пожалуйста. А какие измерения задавать в отчете у виртуальной таблицы РегистрРасчета.Начисления.БазаНачисления?

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

FireAlex:

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

--- Конец цитаты ---
Как в таком случае лучше получить сотрудников у которых есть действующее начисление (премия) в текущем месяце? самому писать запрос или есть типовая функция?

mkanaev:
Мое решение:

Описание.
1. Завел показатель "Работа на проектах". Действует во всех месяцах после ввода значения, так как начисления периодические.
Вывел показатель в константы для использования в документах и отчетах.

2.Завел начисление "Работа на проектах". Формула начисления: "РасчетнаяБаза * ПоказательРаботаНаПроектах / 100". В базу входит оплата по окладу.
Вывел начисление в константы для использования в документах и отчетах.

3. Завел справочник "Проекты". Завел перечисление "Степени секретности". Создал реквизит справочника "Проекты" - "Степень секретности".

4. Завел не периодический регистр сведений " ПлановыйРазмерПремииЗаРаботуНаПроекте " для хранения процентов премии по степени секретности проекта.

5. Завел перечисление "Роли на проекте" для хранения ролей: "Руководитель", "Исполнитель".

6. Создал периодический регистр сведений "РаботаНаПроектах" для хранения периодов работы на проекте. Измерения: Сотрудник, Проект. Ресурсы: Роль, ДействуетДо, Используется.
Используется - ресурс который определяет является ли запись началом работы на проекте или прекращением работы на проекте.
ДействуетДо - если не заполнен то по плану работа на проекте бес срочна. ДействуетДо - последний день работы на проекте, например если период = 01.01.2016 ДействуетДо = 12.01.2016 то период работы будет с 01.01.2016 по 12.01.2016. Запись с ресурсом "Используется  = ложь", является записью досрочного прекращения работы на проекте.
Дата досрочного прекращения это дата с которой сотрудник не работает на проекте, например период (запись начало работы) = 01.01.2016 период (запись досрочного прекращения работы) = 12.01.2016 то период работы будет с 01.01.2016 по 11.01.2016.

4. Разработал документ "Формирование рабочей группы", для включения сотрудника в рабочую группу. Документ имеет реквизит шапки "Проект", в котором указывается проект в который включается сотрудник. Создал табличную часть "Данные" с реквизитами "Сотрудник", "НачалоПериода", "КонецПериода", "Роль".
При проведении документа проверяется не работает ли сотрудник на других или этом проекте на начало периода и не началась ли работа на проекте в середине периода. Для адекватного проведения получаю реальную дату окончания работы на проекте если таковая есть в базе данных.
Например:
Документ формирование рабочей группы № 1, с 01.01.2016 по 31.03.2016.
Документ Исключение из рабочей группы № 1, с 15.01.2016.
Документ формирование рабочей группы № 2, с 15.01.2016 по 31.01.2016.

Для адекватной проверки (при перепроведении) не работает ли сотрудник в период документа 1 необходимо получить не только период документ с 01.01.2016 по 31.03.2016
но и досрочные исключения, после чего получиться период с 01.01.2016 по 14.01.2016 и как следствие не пересекается с периодом из документ исключения из рабочей группы.
При проведении проверяю нет ли в документе записей которые пересекаются, если есть то выдаю ошибку.
Документ формирует движения в регистр сведений "РаботаНаПроектах"

7. Разработал документ "Исключение из рабочей группы". При проведении проверяю работает ли человек на проекте из которого его пытаются исключить, для того что бы в регистре не было лишних записей, если не работает то выдаю ошибку. Документ формирует движения в регистр сведений "РаботаНаПроектах" с ресурсом Используется = Ложь. В шапку документа добавлен реквизит "Проект", создана табличная часть "Данные" с реквизитами: "Сотрудник", "ДатаИсключения".

8. Создал документ "Оценка работы на проектах".
Реквизиты документа:
   -"Организация" - для стандартных регистров подсистемы.
   - "Вид операции", тип    ПеречислениеСсылка.ВидыОперации_ОценкаРаботНаПроектах, который согласно    тех. заданию разделяет документ на оценку руководителей и оценку исполнителей.
   - Проект, необходим и появляется на форме только если это оценка исполнителей
Табличная часть "Данные", реквизиты: Сотрудник, Проект(если оценка руководителей),    НачалоПериода, КонецПериода, ПлановыйПроцентПремии, ОценкаКачетва,    ОценкаСкорости, ФактическийПроцентПремии.
На форме разработал процедуру заполнения документа периодами работы сотрудников на проектах, согласно тех. заданию если оценка руководителей то подбираются все работы на проектах в роли руководителей, если исполнители то подбираются периоды работы сотрудников в качестве исполнителей на проекте указанном в шапке. Так же при заполнении из регистра сведений берется значение "ПлановыйПроцентПремии" в соответствии с секретностью проекта.
На форме реализована процедура расчета: ФактическийПроцентПремии = ПлановыйПроцентПремии * ОценкаСкорости * ОценкаКачетва.

Документ формирует движения по регистрам сведений:

   - "ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников"
   - "ПлановыеНачисления"
   
ФактическийПроцентПремии является реальным процентом премии.

Пробовал обойтись без регистра "ПлановыеНачисления" не получилось, если в начислении указать что вводиться только если указано значение показателя то требуется разовый показатель, в данной задачи необходим периодический показатель, по этому пришлось пользоваться регистром сведений "ПлановыеНачисления".

9. Разработал отчет согласно тех. заданию. Получаю данные по отработанным дням и начисленному окладу за период расчета премии с помощью виртуальной таблицы "БазаНачисления", значение процента премии беру из регистра сведений " ЗначенияПоказателейНачислений", получение данных по должности и данных работы на проектах вывел в механизм "Представления".

10. Заполнил базу данных по двум сотрудникам за 3 месяца.

Навигация

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

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

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