Настройка - Расчет Зарплаты - Настройка состава начислений - Применение почасовой оплаты - Истина Настройка - Начисления - Создать - "Доплата за участие в проекте" - Редактировать формулу - Создать показатель - "Процент доплаты за участие в проекте" - Во всех месяцах - Записать - Создать показатель - "Коэффициент участия" - Точность(2) - Разовое использование - Записать - Формула "ПроцентДоплатыЗаУчастиеВПроекте / 100 * КоэффициентУчастия * РасчетнаяБаза" - ОК Настройка - Начисления - Вкладка Расчет базы - Подбор - Оплата по окладу по часам - Записать Зарплата - Изменение оплаты сотрудников - Создать - Назначение планового начисления - Дата (01.02.2024) Настройка - Шаблоны ввода исходных данных - Создать - "Ввод коэффициента участия" - Коэффициент участия (Истина) - Вкладка Дополнительно - Сотрудников(истина) - Записать Зарплата - Данные для расчета зарплаты - Создать Ввод коэффициента участия - Месяц(Февраль 2024) - Дата(01.02.2024) - Заполняем сотрудников и коэффициенты(0.8, 0.6, 0.5) Зарплата - Начисление зарплаты и взносов - Создать Начисление зарплаты и взносов - месяц(Февраль) - Дата(01.02.2024) - Заполнить Зарплата - Изменение оплаты сотрудников - Создать Прекращение планового начисления - Все даты одинаковые Создаем справочник - Проекты Создаем перечисление "СтепениСложностиПроекта", значения - обычный, средний, сложный, очень сложный Создаем перечисление "РолиРаботника", значения - исполнитель, руководитель Создаем РС ПроцентПремииПоПроекту, измерения СтепеньСложности, РольРаботника, ресурсы - ПроцентПремии Создаем РС РаботаСотрудниковПоПроектам, периодчиность - в пределах месяца, подчинен регистратору, измерения Сотрудник ресурсы - РольРаботника, Проект Создаем документ "Формирование рабочей группы проекта", реквизиты Организация, Начисление, Проект, Показатель ТЧСотрудники, реквизиты Сотрудник, ДатаНачалаПроекта, ДатаОкончанияПроекта, РольУчастника Модуль объекта копируем из НазначениеПлановогоНачисления Документ делает движения в ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, ПлановыеНачисления, РаботаСотрудниковПоПроектам ################################################################################### Модуль объекта "Формирование рабочей группы проекта" #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Проведение документа ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДанныеДляПроведения = ПолучитьДанныеДляПроведения(); СтруктураПлановыхНачислений = Новый Структура; СтруктураПлановыхНачислений.Вставить("ДанныеОПлановыхНачислениях", ДанныеДляПроведения.ПлановыеНачисления); СтруктураПлановыхНачислений.Вставить("ЗначенияПоказателей", ДанныеДляПроведения.ЗначенияПоказателей); РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, СтруктураПлановыхНачислений); СформироватьДвиженияРаботаСотрудниковПоПроектам(Отказ, РежимПроведения); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Получает данные для формирования движений. // Возвращает Структуру с полями. // ПлановыеНачисления - данные, необходимые для формирования истории плановых начислений. // (см. РасчетЗарплатыРасширенный.СформироватьДвиженияПлановыхНачислений) // ЗначенияПоказателей (см. там же). // Функция ПолучитьДанныеДляПроведения() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ФормированиеРабочейГруппыПроектаСотрудники.ДатаНачалаПроекта КАК ДатаСобытия, | ДОБАВИТЬКДАТЕ(ФормированиеРабочейГруппыПроектаСотрудники.ДатаОкончанияПроекта, ДЕНЬ, 1) КАК ДействуетДо, | ФормированиеРабочейГруппыПроектаСотрудники.Сотрудник КАК Сотрудник, | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка.Начисление КАК Начисление, | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка КАК ДокументОснование, | ИСТИНА КАК Используется, | ЛОЖЬ КАК ИспользуетсяПоОкончании, | 0 КАК Размер, | ФормированиеРабочейГруппыПроектаСотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка.Организация КАК ГоловнаяОрганизация |ИЗ | Документ.ФормированиеРабочейГруппыПроекта.Сотрудники КАК ФормированиеРабочейГруппыПроектаСотрудники |ГДЕ | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка = &Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка.Организация КАК Организация, | ФормированиеРабочейГруппыПроектаСотрудники.Сотрудник КАК Сотрудник, | ФормированиеРабочейГруппыПроектаСотрудники.ДатаНачалаПроекта КАК ДатаСобытия, | ДОБАВИТЬКДАТЕ(ФормированиеРабочейГруппыПроектаСотрудники.ДатаОкончанияПроекта, ДЕНЬ, 1) КАК ДействуетДо, | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка КАК ДокументОснование, | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка.Показатель КАК Показатель, | ЕСТЬNULL(ПроцентПремииПоПроекту.ПроцентПремии, 0) КАК Значение, | ФормированиеРабочейГруппыПроектаСотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо |ИЗ | Документ.ФормированиеРабочейГруппыПроекта.Сотрудники КАК ФормированиеРабочейГруппыПроектаСотрудники | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПроцентПремииПоПроекту КАК ПроцентПремииПоПроекту | ПО ФормированиеРабочейГруппыПроектаСотрудники.РольУчастника = ПроцентПремииПоПроекту.РольРаботника | И ФормированиеРабочейГруппыПроектаСотрудники.Ссылка.Проект.СтепеньСложности = ПроцентПремииПоПроекту.СтепеньСложности |ГДЕ | ФормированиеРабочейГруппыПроектаСотрудники.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); ДанныеДляПроведения = Новый Структура; // Первый набор данных для проведения - таблица для формирования плановых начислений. ПлановыеНачисления = РезультатыЗапроса[0].Выгрузить(); ДанныеДляПроведения.Вставить("ПлановыеНачисления", ПлановыеНачисления); // Второй набор данных для проведения - таблица для формирования значений показателей. ЗначенияПоказателей = РезультатыЗапроса[1].Выгрузить(); ДанныеДляПроведения.Вставить("ЗначенияПоказателей", ЗначенияПоказателей); Возврат ДанныеДляПроведения; КонецФункции #КонецОбласти #КонецЕсли #Область ОбработчикиСобытий Процедура СформироватьДвиженияРаботаСотрудниковПоПроектам(Отказ, РежимПроведения) // регистр РаботаСотрудниковПоПроектам Движения.РаботаСотрудниковПоПроектам.Записывать = Истина; Движения.Записать(); Движения.РаботаСотрудниковПоПроектам.Записывать = Истина; Для Каждого ТекСтрокаСотрудники Из Сотрудники Цикл Движение = Движения.РаботаСотрудниковПоПроектам.Добавить(); Движение.Сотрудник = ТекСтрокаСотрудники.Сотрудник; Движение.Проект = Проект; Движение.Период = НачалоМесяца(Дата); Движение.РольСотрудника = ТекСтрокаСотрудники.РольУчастника; КонецЦикла; КонецПроцедуры #КонецОбласти ##################################################################################### Создаем документ «Исключение из рабочей группы проекта», реквизиты - Организация, Начисление ТЧСотрудники, реквизиты Сотрудник, ДатаПрекращения Модуль объекта копируем из НазначениеПлановогоНачисления Документ делает движения в ПлановыеНачисления #################################################################################### Модуль объекта "Исключение из рабочей группы проекта" #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Проведение документа ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДанныеДляПроведения = ПолучитьДанныеДляПроведения(); СтруктураПлановыхНачислений = Новый Структура; СтруктураПлановыхНачислений.Вставить("ДанныеОПлановыхНачислениях", ДанныеДляПроведения.ПлановыеНачисления); РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, ЭтотОбъект.Движения, СтруктураПлановыхНачислений); КонецПроцедуры #Область СлужебныеПроцедурыИФункции // Получает данные для формирования движений. // Возвращает Структуру с полями. // ПлановыеНачисления - данные, необходимые для формирования истории плановых начислений. // (см. РасчетЗарплатыРасширенный.СформироватьДвиженияПлановыхНачислений) // ЗначенияПоказателей (см. там же). // Функция ПолучитьДанныеДляПроведения() Запрос = Новый Запрос; //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ИсключениеИзРабочейГруппыПроектаСотрудники.ДатаПрекращения КАК ДатаСобытия, | ИсключениеИзРабочейГруппыПроектаСотрудники.Сотрудник КАК Сотрудник, | ИсключениеИзРабочейГруппыПроектаСотрудники.Ссылка.Начисление КАК Начисление, | ИсключениеИзРабочейГруппыПроектаСотрудники.Ссылка КАК ДокументОснование, | ЛОЖЬ КАК Используется, | 0 КАК Размер, | ИсключениеИзРабочейГруппыПроектаСотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | ИсключениеИзРабочейГруппыПроектаСотрудники.Ссылка.Организация КАК ГоловнаяОрганизация |ИЗ | Документ.ИсключениеИзРабочейГруппыПроекта.Сотрудники КАК ИсключениеИзРабочейГруппыПроектаСотрудники |ГДЕ | ИсключениеИзРабочейГруппыПроектаСотрудники.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); ДанныеДляПроведения = Новый Структура; // Таблица для формирования плановых начислений. ДанныеДляПроведения.Вставить("ПлановыеНачисления", РезультатыЗапроса[0].Выгрузить()); Возврат ДанныеДляПроведения; КонецФункции #КонецОбласти #КонецЕсли ############################################################################## Создаем документ "ОценкаРаботПоПроекту", реквизиты Организация, Показатель, Проект, Месяц. ТЧИсполнители, ТЧРуководители, реквизиты - Сотрудник, ОценкаПоСроку, ОценкаПоКачеству, ДоляПремии Форма документа &НаКлиенте Процедура Исполнители(Команда) ИсполнителиНаСервере(); КонецПроцедуры &НаСервере Процедура ИсполнителиНаСервере() Элементы.Проект.Видимость=Истина; Элементы.Руководители.Видимость=Ложь; Элементы.Исполнители.Видимость=Истина; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РаботаСотрудниковПоПроектам.Сотрудник КАК Сотрудник |ИЗ | РегистрСведений.РаботаСотрудниковПоПроектам КАК РаботаСотрудниковПоПроектам |ГДЕ | РаботаСотрудниковПоПроектам.Проект = &Проект | И РаботаСотрудниковПоПроектам.РольСотрудника = &РольСотрудника"; Запрос.УстановитьПараметр("Проект", Объект.Проект); Запрос.УстановитьПараметр("РольСотрудника", Перечисления.РолиРаботника.Исполнитель); Если Объект.Исполнители.Количество()=0 Тогда Объект.Исполнители.Загрузить(Запрос.Выполнить().Выгрузить()); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Руководители(Команда) РуководителиНаСервере(); КонецПроцедуры &НаСервере Процедура РуководителиНаСервере() Элементы.Проект.Видимость=Ложь; Элементы.Руководители.Видимость=Истина; Элементы.Исполнители.Видимость=Ложь; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РаботаСотрудниковПоПроектам.Сотрудник КАК Сотрудник |ИЗ | РегистрСведений.РаботаСотрудниковПоПроектам КАК РаботаСотрудниковПоПроектам |ГДЕ | РаботаСотрудниковПоПроектам.РольСотрудника = &РольСотрудника"; Запрос.УстановитьПараметр("РольСотрудника", Перечисления.РолиРаботника.Руководитель); Если Объект.Руководители.Количество()=0 Тогда Объект.Руководители.Загрузить(Запрос.Выполнить().Выгрузить()); КонецЕсли КонецПроцедуры ############################################################################ Модуль объекта копируем из "РегистрацияПереработок" Документ делает движения ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников Модуль объекта Оценка работ по проекту #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Проведение документа ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ЗаписатьЗначенияПоказателейРасчетаЗарплаты(Движения, Отказ); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции Процедура ЗаписатьЗначенияПоказателейРасчетаЗарплаты(Движения, Отказ) ЗначенияПоказателей = Новый ТаблицаЗначений; ЗначенияПоказателей.Колонки.Добавить("ПериодДействия", Новый ОписаниеТипов("Дата")); ЗначенияПоказателей.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); ЗначенияПоказателей.Колонки.Добавить("Показатель", Новый ОписаниеТипов("СправочникСсылка.ПоказателиРасчетаЗарплаты")); ЗначенияПоказателей.Колонки.Добавить("Значение", Новый ОписаниеТипов("Число")); Для каждого Сотрудник Из Исполнители Цикл НоваяСтрока = ЗначенияПоказателей.Добавить(); НоваяСтрока.ПериодДействия = НачалоМесяца(Месяц); НоваяСтрока.Сотрудник = Сотрудник.Сотрудник; НоваяСтрока.Показатель = Показатель; НоваяСтрока.Значение = Сотрудник.ДоляПремии; КонецЦикла; Для каждого Сотрудник Из Руководители Цикл НоваяСтрока = ЗначенияПоказателей.Добавить(); НоваяСтрока.ПериодДействия = НачалоМесяца(Месяц); НоваяСтрока.Сотрудник = Сотрудник.Сотрудник; НоваяСтрока.Показатель = Показатель; НоваяСтрока.Значение = Сотрудник.ДоляПремии; КонецЦикла; РасчетЗарплатыРасширенный.ЗарегистрироватьЗначенияРазовыхПоказателейСотрудников(Движения, Организация, ЗначенияПоказателей); КонецПроцедуры #КонецОбласти #КонецЕсли ##################################################################################### ---Отчет--- ВЫБРАТЬ РаботаСотрудниковПоПроектам.Сотрудник КАК Сотрудник, РаботаСотрудниковПоПроектам.РольСотрудника КАК РольСотрудника, РаботаСотрудниковПоПроектам.Проект КАК Проект, КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность, КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение, ЕСТЬNULL(НачисленияУдержанияПоСотрудникамОбороты.СуммаОборот, 0) КАК Премия, ЕСТЬNULL(НачисленияУдержанияПоСотрудникамОбороты1.СуммаОборот, 0) КАК Оклад, ЕСТЬNULL(ПроцентПремииПоПроекту.ПроцентПремии, 0) * ЕСТЬNULL(ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Значение, 0) КАК ФактическийПроцентПремии, РаботаСотрудниковПоПроектам.Период КАК Период ИЗ РегистрСведений.РаботаСотрудниковПоПроектам КАК РаботаСотрудниковПоПроектам ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПроцентПремииПоПроекту КАК ПроцентПремииПоПроекту ПО (ПроцентПремииПоПроекту.СтепеньСложности = РаботаСотрудниковПоПроектам.Проект.СтепеньСложности) И РаботаСотрудниковПоПроектам.РольСотрудника = ПроцентПремииПоПроекту.РольРаботника ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(, ) КАК КадроваяИсторияСотрудниковСрезПоследних ПО РаботаСотрудниковПоПроектам.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников КАК ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников ПО РаботаСотрудниковПоПроектам.Период = ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.ПериодДействия И (ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Сотрудник = РаботаСотрудниковПоПроектам.Сотрудник) ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(&НачалоПериода, &КонецПериода, Регистратор, НачислениеУдержание = &НачислениеПремия) КАК НачисленияУдержанияПоСотрудникамОбороты ПО РаботаСотрудниковПоПроектам.Сотрудник = НачисленияУдержанияПоСотрудникамОбороты.Сотрудник И РаботаСотрудниковПоПроектам.Период = НачисленияУдержанияПоСотрудникамОбороты.Период ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(&НачалоПериода, &КонецПериода, Регистратор, НачислениеУдержание = &НачислениеОклад) КАК НачисленияУдержанияПоСотрудникамОбороты1 ПО РаботаСотрудниковПоПроектам.Период = НачисленияУдержанияПоСотрудникамОбороты1.Период И (НачисленияУдержанияПоСотрудникамОбороты1.Сотрудник = РаботаСотрудниковПоПроектам.Сотрудник) ГДЕ ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Показатель = &ПоказательКоэф И ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода Параметры Параметр НачислениеОклад - выражение ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия за работу по проекту") Параметр НачислениеПремия - ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оплата по окладу (по часам)") Настройки - Таблица - Строки - Группировка Проект, Период - Сотрудник, Должность, Подразделение, РольСотрудника, Оклад, Премия, ФактическийПроцентПремии ########################################################################################### ---Пояснительная записка--- Добавлен показатель "Процент доплаты за участие в проекте" - Во всех месяцах Добавлено начисление "Доплата за участие в проекте" Формула "ПроцентДоплатыЗаУчастиеВПроекте / 100 * КоэффициентУчастия * РасчетнаяБаза" Объекты конфигурации Создаем РС ПроцентПремииПоПроекту, измерения СтепеньСложности, РольРаботника, ресурсы - ПроцентПремии для сопоставления Процента Премии к степени сложности Создаем РС РаботаСотрудниковПоПроектам, периодчиность - в пределах месяца, подчинен регистратору, измерения Сотрудник ресурсы - РольРаботника, Проект для учета Проектов и Роли сотруднииков для отчета Создаем документ "Формирование рабочей группы проекта" Создаем документ «Исключение из рабочей группы проекта» Создаем документ "ОценкаРаботПоПроекту" Создан отчет Вознаграждения по проектам Источники данных для отчета РаботаСотрудниковПоПроектам - Работник, Роль на проекте, Проект, Период - месяц КадроваяИсторияСотрудников - Подразделение, Должность НачисленияУдержанияПоСотрудникам - Премия, Оклад ПроцентПремииПоПроекту - Фактический процент премии