|
Больничный вытесняет оклад, но сама сумма больничного не рассчитывается | ☑ | ||
---|---|---|---|---|
0
bayron1
30.06.24
✎
09:04
|
Приветствую, уважаемые знатоки. Прошу помочь с расчетом больничного. Он вытесняет оклад, т.е.оклад считается правильно с учетом больничного. Но размер и сумма самого больничного листа не записывается в регистр. Расчет зарплаты ведется через общий модуль:
Процедура РассчитатьРегистрРасчета(Набор, Отказ) Экспорт Ссылка = Набор.Отбор.Регистратор.Значение; ИмяРегистра = Набор.Метаданные().Имя; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисления.ВидРасчета.КатегорияРасчета КАК Категория, | ОсновныеНачисления.ВидРасчета.СпособРасчета КАК Способ |ИЗ | РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления |ГДЕ | ОсновныеНачисления.Регистратор = &Ссылка | |УПОРЯДОЧИТЬ ПО | Категория |ИТОГИ ПО | Категория"; Запрос.Текст = СтрЗаменить(Запрос.Текст, "ОсновныеНачисления", ИмяРегистра); Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); ВыборкаКатегории = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаКатегории.Следующий() Цикл ВыборкаСпособы = ВыборкаКатегории.Выбрать(); Параметры = ПолучитьСтруктуруНеобходимыхДанных(ВыборкаСпособы); Результат = ПолучитьДанныеДляРасчета(Параметры, ИмяРегистра, Ссылка, ВыборкаКатегории.Категория); Выборка = Результат.Выбрать(); РассчитатьЗаписиРегистраРасчета(Выборка, Набор, Отказ); Набор.Записать(,Истина); КонецЦикла; КонецПроцедуры Процедура РассчитатьЗаписиРегистраРасчета(Выборка, Набор, Отказ) Поиск = Новый Структура("НомерСтроки"); Для каждого Запись Из Набор Цикл Поиск.НомерСтроки = Запись.НомерСтроки; Выборка.Сбросить(); Если Выборка.НайтиСледующий(Поиск) Тогда Если Выборка.Способ = Перечисления.СпособыРасчета.ПоОтработанномуВремени Тогда Результат = Выборка.Размер*Выборка.Факт; ИначеЕсли Выборка.Способ = Перечисления.СпособыРасчета.ПоБольничномуЛисту Тогда Результат = Выборка.Размер*Выборка.Факт/3; ИначеЕсли Выборка.Способ = Перечисления.СпособыРасчета.Процентом Тогда Результат = Выборка.Размер*Выборка.База/100; КонецЕсли; Запись.Результат = Результат * ?(Запись.Сторно, -1, 1); КонецЕсли; КонецЦикла; КонецПроцедуры Функция ПолучитьСтруктуруНеобходимыхДанных(Выборка) Параметры = Новый Структура; Параметры.Вставить("ДанныеГрафика", Ложь); Параметры.Вставить("База", Ложь); Пока Выборка.Следующий() Цикл Если Выборка.Способ = Перечисления.СпособыРасчета.ПоБольничномуЛисту ИЛИ Выборка.Способ = Перечисления.СпособыРасчета.ПоОтработанномуВремени Тогда Параметры.ДанныеГрафика = Истина; ИначеЕсли Выборка.Способ = Перечисления.СпособыРасчета.Процентом Тогда Параметры.База = Истина; КонецЕсли; КонецЦикла; Возврат Параметры; КонецФункции Функция ПолучитьДанныеДляРасчета(Параметры, ИмяРегистра, Ссылка, КатегорияРасчета) Запрос = Новый Запрос; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); Измерения = Новый Массив; Измерения.Добавить("Сотрудник"); Измерения.Добавить("Подразделение"); Запрос.УстановитьПараметр("Измерения", Измерения); Запрос.УстановитьПараметр("КатегорияРасчета", КатегорияРасчета); Если ИмяРегистра = "ОсновныеНачисления" Тогда Запрос.Текст = "ВЫБРАТЬ | ОсновныеНачисления.НомерСтроки, | ОсновныеНачисления.ВидРасчета.СпособРасчета КАК Способ, | ОсновныеНачисления.Размер"; Если Параметры.ДанныеГрафика Тогда Запрос.Текст = Запрос.Текст + " | ,ЕстьNull(ОсновныеНачисленияДанныеГрафика.ЗначениеПериодДействия,0) КАК План, | ЕстьNull(ОсновныеНачисленияДанныеГрафика.ЗначениеФактическийПериодДействия,0) КАК Факт"; КонецЕсли; Если Параметры.База Тогда Запрос.Текст = Запрос.Текст + " |,ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.СуммаБаза, 0) + ЕСТЬNULL(ОсновныеНачисленияБазаОсновныеНачисления.Результат, 0) КАК База"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ИЗ | РегистрРасчета.ОсновныеНачисления КАК ОсновныеНачисления"; Если Параметры.ДанныеГрафика Тогда Запрос.Текст = Запрос.Текст + " | ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.ДанныеГрафика ( | Регистратор = &Ссылка | И ВидРасчета.КатегорияРасчета= &КатегорияРасчета) КАК ОсновныеНачисленияДанныеГрафика | ПО ОсновныеНачисления.НомерСтроки = ОсновныеНачисленияДанныеГрафика.НомерСтроки"; КонецЕсли; Если Параметры.База Тогда Запрос.Текст = Запрос.Текст + " |ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаОсновныеНачисления(&Измерения, &Измерения, , Регистратор = &Ссылка И ВидРасчета.КатегорияРасчета=&Категория) КАК ОсновныеНачисленияБазаОсновныеНачисления | ПО ОсновныеНачисления.НомерСтроки = ОсновныеНачисленияБазаОсновныеНачисления.НомерСтроки |ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисления.БазаДополнительныеНачисления(&Измерения, &Измерения, , Регистратор = &Ссылка И ВидРасчета.КатегорияРасчета=&Категория) КАК ОсновныеНачисленияБазаДополнительныеНачисления | ПО ОсновныеНачисления.НомерСтроки = ОсновныеНачисленияБазаДополнительныеНачисления.НомерСтроки"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ГДЕ | ОсновныеНачисления.Регистратор = &Ссылка | И ОсновныеНачисления.ВидРасчета.КатегорияРасчета = &КатегорияРасчета"; ИначеЕсли ИмяРегистра = "ДополнительныеНачисления" Тогда Запрос.Текст = "ВЫБРАТЬ | ДополнительныеНачисления.НомерСтроки, | ДополнительныеНачисления.ВидРасчета.СпособРасчета КАК Способ, | ДополнительныеНачисления.Размер"; Если Параметры.База Тогда Запрос.Текст = Запрос.Текст + ", | ДополнительныеНачисленияБазаОсновныеНачисления.РезультатБаза"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ИЗ | РегистрРасчета.ДополнительныеНачисления КАК ДополнительныеНачисления"; Если Параметры.База Тогда Запрос.Текст = Запрос.Текст + " | ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисления.БазаОсновныеНачисления(&Измерения, &Измерения, , Регистратор = &Ссылка) КАК ДополнительныеНачисленияБазаОсновныеНачисления | ПО ДополнительныеНачисления.Регистратор = ДополнительныеНачисленияБазаОсновныеНачисления.Регистратор | И ДополнительныеНачисления.НомерСтроки = ДополнительныеНачисленияБазаОсновныеНачисления.НомерСтроки"; Измерения = Новый СписокЗначений; Измерения.Добавить("Сотрудник"); Измерения.Добавить("Подразделение"); Запрос.УстановитьПараметр("Измерения", Измерения); КонецЕсли; Запрос.Текст = Запрос.Текст + " |ГДЕ | ДополнительныеНачисления.Регистратор = &Ссылка | И ДополнительныеНачисления.ВидРасчета.КатегорияРасчета = &КатегорияРасчета"; КонецЕсли; Результат = Запрос.Выполнить(); Возврат Результат; КонецФункции
|
|||
1
bayron1
30.06.24
✎
09:06
|
Обработка проведения документа "начисление зарплаты":
Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОсновныеНачисления.Записывать = Истина; Движения.ДополнительныеНачисления.Записывать = Истина; Для Каждого ТекСтрокаНачисления Из Начисления Цикл Если ТипЗнч(ТекСтрокаНачисления.ВидРасчета) = Тип("ПланВидовРасчетаСсылка.ОсновныеНачисления") Тогда Движение = Движения.ОсновныеНачисления.Добавить(); Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала; Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания); Если ТекСтрокаНачисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.БольничныйЛист Тогда Движение.ТипГрафика = Константы.Пятидневка.Получить(); Иначе Движение.ТипГрафика = ТекСтрокаНачисления.ТипГрафика; КонецЕсли; ИначеЕсли ТипЗнч(ТекСтрокаНачисления.ВидРасчета) = Тип("ПланВидовРасчетаСсылка.ДополнительныеНачисления") Тогда Движение = Движения.ДополнительныеНачисления.Добавить(); КонецЕсли; Движение.ПериодРегистрации = ПериодРегистрации; Движение.Сторно = ТекСтрокаНачисления.Сторно; Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета; Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаНачисления.Подразделение; Движение.БазовыйПериодНачало = НачалоМесяца(ПериодРегистрации); Движение.БазовыйПериодКонец = КонецМесяца(ПериодРегистрации); Движение.Размер = ТекСтрокаНачисления.Размер; КонецЦикла; Движения.Записать(); РасчетЗП.РассчитатьРегистрРасчета(Движения.ОсновныеНачисления, Отказ); РасчетЗП.РассчитатьРегистрРасчета(Движения.ДополнительныеНачисления, Отказ); КонецПроцедуры |
|||
2
Гена
30.06.24
✎
09:42
|
Эх, Семён, Семён... Что ж Вы оптовичка-то светите, коль решили написать модуль неналоговой зарплаты? )
И оплачивать дни болезни только в 1/3 - это как-то не по-людски, согласитесь... ну ладно там 3/4 или 1/2 в зависимости от стажа работы у этого оптовичка, но треть - это даже не жаба, а жабища ) Главное: ну кто начисления считает от графика? От табеля, батенька, надо считать, от табеля. Отработал день - получи по труду, больше отработал - больше получи. Ну и назвать процедуру РассчитатьРегистрРасчета - это не эстетично... это фи ) |
|||
3
bayron1
30.06.24
✎
10:13
|
Спасибо) можно закрыть
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |