Untitled
unknown
plain_text
2 years ago
9.5 kB
3
Indexable
Процедура РассчитатьНачисления(Регистратор, НаборЗаписей, Отказ) Экспорт // Определение курсов доллара и евро ЗапросКурсы = Новый Запрос; ЗапросКурсы.Текст = "ВЫБРАТЬ | КурсыВалютСрезПоследних.Курс КАК Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта.Код = 840) КАК КурсыВалютСрезПоследних |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КурсыВалютСрезПоследних.Курс КАК Курс |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта.Код = 978) КАК КурсыВалютСрезПоследних"; ЗапросКурсы.УстановитьПараметр("ДатаСреза", Регистратор.Дата); МассивРезультатов = ЗапросКурсы.ВыполнитьПакет(); РезультатДоллар = МассивРезультатов[0]; РезультатЕвро = МассивРезультатов[1]; Если РезультатДоллар.Пустой() Или РезультатЕвро.Пустой() Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "В регистре курсов валют должны быть заполнены курсы доллара и евро"; Сообщение.Сообщить(); Отказ = Истина; Возврат; КонецЕсли; Данные = РезультатДоллар.Выбрать(); Данные.Следующий(); КурсДоллара = Данные.Курс; Данные = РезультатЕвро.Выбрать(); Данные.Следующий(); КурсЕвро = Данные.Курс; // Формирование движений // РАСЧЕТ ОКЛАДА // Формула расчета: [Количество отработанных часов] * [Тарифная ставка] Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки, | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.РабочихЧасовФактическийПериодДействия, 0) КАК ЧасовФакт, | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.РабочихЧасовПериодДействия, 0) КАК ЧасовПлан, | ЕСТЬNULL(ТарифныеСтавки.Ставка, 0) КАК Ставка |ИЗ | РегистрРасчета.ОсновныеНачисления.ДанныеГрафика( | Регистратор = &Регистратор | И ВидРасчета = &ВидРасчетаОклад) КАК ОсновныеНачисленияДанныеГрафика | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТарифныеСтавки КАК ТарифныеСтавки | ПО ОсновныеНачисленияДанныеГрафика.Подразделение = ТарифныеСтавки.Подразделение | И ОсновныеНачисленияДанныеГрафика.РабочихЧасовФактическийПериодДействия >= ТарифныеСтавки.ОтработаноОт | И ОсновныеНачисленияДанныеГрафика.РабочихЧасовФактическийПериодДействия < ТарифныеСтавки.ОтработаноДо"; Запрос.УстановитьПараметр("Регистратор", Регистратор); Запрос.УстановитьПараметр("ВидРасчетаОклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); СтруктураПоиска = Новый Структура(); СтруктураПоиска.Вставить("НомерСтроки", 0); Для Каждого Запись Из НаборЗаписей Цикл СтруктураПоиска.НомерСтроки = Запись.НомерСтроки; Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда РезультатВРублях = Выборка.ЧасовФакт * Выборка.Ставка; Запись.РезультатВДолларах = РезультатВРублях / КурсДоллара; Запись.РезультатВЕвро = РезультатВРублях / КурсЕвро; Запись.РабочихЧасов = Выборка.ЧасовПлан; КонецЕсли; Выборка.Сбросить(); КонецЦикла; КонецЕсли; // РАСЧЕТ СВЕРХУРОЧНЫХ // Формула расчета: [Сумма базы (по всем начислениям)] / [Количество рабочих часов в базовом периоде] * [Количество сверхурочных часов] * 1.5 Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки, | ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.СверхурочныхЧасовФактическийПериодДействия, 0) КАК СверхурочныхЧасов, | ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.РезультатВДолларахБаза, 0) КАК БазаВДолларах, | ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.РезультатВЕвроБаза, 0) КАК БазаВЕвро, | ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.РабочихЧасовБаза, 0) КАК РабочихЧасов |ИЗ | РегистрРасчета.ОсновныеНачисления.ДанныеГрафика( | Регистратор = &Регистратор | И ВидРасчета = &ВидРасчетаСверхурочные) КАК ОсновныеНачисленияДанныеГрафика | ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления( | &Измерения, | &Измерения, | , | Регистратор = &Регистратор | И ВидРасчета = &ВидРасчетаСверхурочные) КАК ОсновныеНачисленияБазаОсновныеНачисления | ПО ОсновныеНачисленияДанныеГрафика.НомерСтроки = ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки"; Измерения = Новый Массив(2); Измерения[0] = "Сотрудник"; Измерения[1] = "Подразделение"; Запрос.УстановитьПараметр("Измерения", Измерения); Запрос.УстановитьПараметр("Регистратор", Регистратор); Запрос.УстановитьПараметр("ВидРасчетаСверхурочные", ПланыВидовРасчета.ОсновныеНачисления.Сверхурочные); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); СтруктураПоиска = Новый Структура(); СтруктураПоиска.Вставить("НомерСтроки", 0); Для Каждого Запись Из НаборЗаписей Цикл СтруктураПоиска.НомерСтроки = Запись.НомерСтроки; Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда Если Выборка.РабочихЧасов = 0 Тогда Продолжить; КонецЕсли; Запись.РезультатВДолларах = Выборка.БазаВДолларах / Выборка.РабочихЧасов * Выборка.СверхурочныхЧасов * 1.5; Запись.РезультатВЕвро = Выборка.БазаВЕвро / Выборка.РабочихЧасов * Выборка.СверхурочныхЧасов * 1.5; КонецЕсли; Выборка.Сбросить(); КонецЦикла; КонецЕсли; НаборЗаписей.Записать(, Истина); КонецПроцедуры
Editor is loading...