Настройка - Начисления - Создать - Доплата за работу на открытом воздухе Редактировать формулу - Создать показатель - Процент доплаты за работу на свежем воздухе - Во всех месяцах Доплата за работу на открытом воздухе - Назначение начисления = Запрашивать Формула РасчетнаяБаза * Процент доплаты за работу на свежем воздухе / 100 РасчетнаяБаза - ОплатаПоОкладу Кадры - Изменение оплаты сотрудников - Создать - Назначение планового начисления - Дата < Дата Назначения < ДатаНазначенияТЧ Зарплата - Начисления зарплаты и взносов (Месяц < Дата) - Заполнить (0.3,0.5,0.8) ###################################################################################### Создаем документ "ГрафикРаботНаОткрытомВоздухе", реквизиты Организация, Начисление, Показатель ТЧСотрудники - реквизиты Сотрудник, ДатаНачалаРаботы(дата), ДатаОкончанияРаботы(дата), Температура Данные в документе заполняются по кнопке Заполнить из выбранного файла а также вручную Создаем РН "ЗапланированоДнейРаботыНаОткрытомВоздухе", измерения - Сотрудник, ресуры - ДнейЗапланировано - для учета запланированных дней для отчета Создаем РС РазмерДоплатыОтТемпературы, измерения - ТемператураОт, ТемператураДо, ресурсы - ПроцентДоплаты для сопоставления зависимости доплаты от температуры ############################################################################################# Форма документа "ГрафикРаботНаОткрытомВоздухе" &НаКлиенте Процедура Заполнить(Команда) Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.Фильтр = ".txt"; ОписаниеОповещения = Новый ОписаниеОповещения("НачалоРаботыСФайлом",ЭтотОбъект); Диалог.Показать(ОписаниеОповещения); КонецПроцедуры &НаСервере Процедура НачалоРаботыСФайлом(ВыбранныйФайл, ДопПараметры) Экспорт Если ВыбранныйФайл = Неопределено Тогда Возврат; КонецЕсли; Путь = ВыбранныйФайл[0]; ДвДанные = Новый ДвоичныеДанные(Путь); ДвДанные.Записать(Путь); ВрФайл = ПоместитьВоВременноеХранилище(ДвДанные); РаботаСФайлом(ВрФайл); КонецПроцедуры Процедура РаботаСФайлом(ВрФайл) ДвДанные = ПолучитьИзВременногоХранилища(ВрФайл); Файл = ПолучитьИмяВременногоФайла("txt"); ДвДанные.Записать(Файл); ЧтениеТекста = Новый ЧтениеТекста(Файл); СтрФайл = ЧтениеТекста.ПрочитатьСтроку(); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("ДатаНазначения",Новый ОписаниеТипов("Дата")); ТЗ.Колонки.Добавить("Температура",Новый ОписаниеТипов("Число")); Пока СтрФайл <> Неопределено Цикл СтрТЗ = ТЗ.Добавить(); мСтр = СтрРазделить(СтрФайл,";"); СтрТЗ.ДатаНазначения = СтроковыеФункцииКлиентСервер.СтрокаВДату(мСтр[0]); СтрТЗ.Температура = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(мСтр[1]); СтрФайл = ЧтениеТекста.ПрочитатьСтроку(); КонецЦикла; ЧтениеТекста.Закрыть(); УдалитьФайлы(Файл); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.ДатаНазначения КАК ДатаНазначения, | ТЗ.Температура КАК Температура |ПОМЕСТИТЬ ВТ_ТЗ |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Сотрудники.Сотрудник КАК Сотрудник, | Сотрудники.ДатаНачалаРаботы КАК ДатаНачалаРаботы, | Сотрудники.ДатаОкончанияРаботы КАК ДатаОкончанияРаботы |ПОМЕСТИТЬ ВТ_Сотрудники |ИЗ | &Сотрудники КАК Сотрудники |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(ВТ_ТЗ.Температура, 1000) КАК Температура, | ВТ_Сотрудники.Сотрудник КАК Сотрудник, | ВТ_Сотрудники.ДатаНачалаРаботы КАК ДатаНачалаРаботы, | ВТ_Сотрудники.ДатаОкончанияРаботы КАК ДатаОкончанияРаботы |ИЗ | ВТ_Сотрудники КАК ВТ_Сотрудники | ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТЗ КАК ВТ_ТЗ | ПО ВТ_Сотрудники.ДатаНачалаРаботы = ВТ_ТЗ.ДатаНазначения"; Запрос.УстановитьПараметр("ТЗ", ТЗ); Запрос.УстановитьПараметр("Сотрудники", Объект.Сотрудники.Выгрузить()); Объект.Сотрудники.Загрузить(Запрос.Выполнить().Выгрузить()); КонецПроцедуры; ############################################################################################## документ "ГрафикРаботНаОткрытомВоздухе" будет записывать в Плановые начисления и ЗначенияПериодическихПоказателейРасчетаЗарплаты, ЗапланированоДнейРаботыНаОткрытомВоздухе Данные берем из документа НазначениеПлановогоНачисления Модуль объекта "ГрафикРаботНаОткрытомВоздухе" #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Проведение документа ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДанныеДляПроведения = ПолучитьДанныеДляПроведения(); СтруктураПлановыхНачислений = Новый Структура; СтруктураПлановыхНачислений.Вставить("ДанныеОПлановыхНачислениях", ДанныеДляПроведения.ПлановыеНачисления); СтруктураПлановыхНачислений.Вставить("ЗначенияПоказателей", ДанныеДляПроведения.ЗначенияПоказателей); РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, СтруктураПлановыхНачислений); СформироватьДвиженияДнейРаботНаОткрытомВоздухе(Отказ, РежимПроведения); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Получает данные для формирования движений. // Возвращает Структуру с полями. // ПлановыеНачисления - данные, необходимые для формирования истории плановых начислений. // (см. РасчетЗарплатыРасширенный.СформироватьДвиженияПлановыхНачислений) // ЗначенияПоказателей (см. там же). // Функция ПолучитьДанныеДляПроведения() Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | ГрафикРаботНаОткрытомВоздухеСотрудники.ДатаНачалаРаботы КАК ДатаСобытия, | ДОБАВИТЬКДАТЕ(ГрафикРаботНаОткрытомВоздухеСотрудники.ДатаОкончанияРаботы, ДЕНЬ, 1) КАК ДействуетДо, | ГрафикРаботНаОткрытомВоздухеСотрудники.Сотрудник КАК Сотрудник, | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка.Начисление КАК Начисление, | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка КАК ДокументОснование, | ИСТИНА КАК Используется, | ЛОЖЬ КАК ИспользуетсяПоОкончании, | ГрафикРаботНаОткрытомВоздухеСотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка.Организация КАК ГоловнаяОрганизация |ИЗ | Документ.ГрафикРаботНаОткрытомВоздухе.Сотрудники КАК ГрафикРаботНаОткрытомВоздухеСотрудники |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка.Организация КАК Организация, | ГрафикРаботНаОткрытомВоздухеСотрудники.Сотрудник КАК Сотрудник, | ГрафикРаботНаОткрытомВоздухеСотрудники.ДатаНачалаРаботы КАК ДатаСобытия, | ДОБАВИТЬКДАТЕ(ГрафикРаботНаОткрытомВоздухеСотрудники.ДатаОкончанияРаботы, ДЕНЬ, 1) КАК ДействуетДо, | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка КАК ДокументОснование, | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка.Показатель КАК Показатель, | ГрафикРаботНаОткрытомВоздухеСотрудники.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | ЕСТЬNULL(РазмерДоплатыОтТемпературы.ПроцентДоплаты, 0) КАК Значение |ИЗ | Документ.ГрафикРаботНаОткрытомВоздухе.Сотрудники КАК ГрафикРаботНаОткрытомВоздухеСотрудники | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерДоплатыОтТемпературы КАК РазмерДоплатыОтТемпературы | ПО ГрафикРаботНаОткрытомВоздухеСотрудники.Температура >= РазмерДоплатыОтТемпературы.ТемператураОт | И ГрафикРаботНаОткрытомВоздухеСотрудники.Температура < РазмерДоплатыОтТемпературы.ТемператураДо |ГДЕ | ГрафикРаботНаОткрытомВоздухеСотрудники.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); ДанныеДляПроведения = Новый Структура; // Первый набор данных для проведения - таблица для формирования плановых начислений. ПлановыеНачисления = РезультатыЗапроса[0].Выгрузить(); ДанныеДляПроведения.Вставить("ПлановыеНачисления", ПлановыеНачисления); // Второй набор данных для проведения - таблица для формирования значений показателей. ЗначенияПоказателей = РезультатыЗапроса[1].Выгрузить(); ДанныеДляПроведения.Вставить("ЗначенияПоказателей", ЗначенияПоказателей); Возврат ДанныеДляПроведения; КонецФункции #КонецОбласти #КонецЕсли Процедура СформироватьДвиженияДнейРаботНаОткрытомВоздухе(Отказ, РежимПроведения) // регистр ДнейРаботНаОткрытомВоздухе Движения.ЗапланированоДнейРаботыНаОткрытомВоздухе.Записывать = Истина; Для Каждого ТекСтрокаСотрудники Из Сотрудники Цикл Движение = Движения.ЗапланированоДнейРаботыНаОткрытомВоздухе.Добавить(); Движение.Период = ТекСтрокаСотрудники.ДатаНачалаРаботы; Движение.Сотрудник = ТекСтрокаСотрудники.Сотрудник; Движение.ДнейЗапланировано = 1; КонецЦикла; //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры #КонецОбласти #КонецЕсли ########################################################################################## ---Отчет--- ВЫБРАТЬ ЗапланированоДнейРаботыНаОткрытомВоздухеОбороты.Сотрудник КАК Сотрудник, ЗапланированоДнейРаботыНаОткрытомВоздухеОбороты.ДнейЗапланированоОборот КАК ДнейЗапланированоОборот, ЕСТЬNULL(ОтработанноеВремяПоСотрудникамОбороты.ОплаченоДнейОборот, 0) КАК ОплаченоДнейОборот, ОтработанноеВремяПоСотрудникамОбороты.Период КАК Период, ЕСТЬNULL(НачисленияУдержанияПоСотрудникамОбороты.СуммаОборот, 0) КАК СуммаОборот, ВЫБОР КОГДА ЕСТЬNULL(ОтработанноеВремяПоСотрудникамОбороты.ОплаченоДнейОборот, 0) = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(НачисленияУдержанияПоСотрудникамОбороты.СуммаОборот, 0) / ЕСТЬNULL(ОтработанноеВремяПоСотрудникамОбороты.ОплаченоДнейОборот, 0) КОНЕЦ КАК СреднийРазмерДоплаты ИЗ РегистрНакопления.ЗапланированоДнейРаботыНаОткрытомВоздухе.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ЗапланированоДнейРаботыНаОткрытомВоздухеОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработанноеВремяПоСотрудникам.Обороты(&НачалоПериода, &КонецПериода, Месяц, Начисление = &Начисление) КАК ОтработанноеВремяПоСотрудникамОбороты ПО ЗапланированоДнейРаботыНаОткрытомВоздухеОбороты.Сотрудник = ОтработанноеВремяПоСотрудникамОбороты.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(&НачалоПериода, &КонецПериода, , НачислениеУдержание = &НачисленияОткрытыйВоздух) КАК НачисленияУдержанияПоСотрудникамОбороты ПО ЗапланированоДнейРаботыНаОткрытомВоздухеОбороты.Сотрудник = НачисленияУдержанияПоСотрудникамОбороты.Сотрудник Параметр Начисление - ПланВидовРасчетаСсылка.Начисления - ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Доплата за работу на свежем воздухе") Настройки отчета - Таблица - Строки Сотрудник, Колонки - Период Выбранные поля - ДнейЗапланированоОборот, СуммаОборот, ОплаченоДнейОборот, СреднийРазмерДоплаты ################################################################################################# ---Пояснительная записка--- Добавлен показатель "Процент доплаты за работу на свежем воздухе" - Во всех месяцах Добавлено начисление "Доплата за работу на открытом воздухе" Формула РасчетнаяБаза * ПроцентДоплатыЗаРаботуНаСвежемВоздухе/100 Объекты конфигурации Создан РС РазмерДоплатыОтТемпературы, измерения - ТемператураОт, ТемператураДо, ресурсы - ПроцентДоплаты для сопоставления зависимости доплаты от температуры Создан РН "ЗапланированоДнейРаботыНаОткрытомВоздухе", измерения - Сотрудник, ресуры - ДнейЗапланировано - для учета запланированных дней для отчета Создан документ "ГрафикРаботНаОткрытомВоздухе", табличная часть может заполняться из файла Документ делает движения по типовому регистру ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников и ПлановыеНачисления а также по созданному РН ЗапланированоДнейРаботыНаОткрытомВоздухе Создан отчет "Работы на открытом воздухе" Источники данных для отчета: РН ЗапланированоДнейРаботыНаОткрытомВоздухе - Сотрудник, Запланировано дней работ на открытомВоздухе РН НачисленияУдержанияПоСотрудникам - Начислено доплаты РН ОтработанноеВремяПоСотрудникам - Фактически отработано дней, Период-месяц, Средний размер доплаты за один день работы Заполнение На работу приняты 3 сотрудника Введены данные на 8 января 2025 года в документ ГрафикРаботНаОткрытомВоздухе путем кнопки Заполнить из указанного файла