Задача:
Согласно утвержденных положений в нашем предприятии, сотруднику, направленного в командировку, ему должна осуществляется доплата по полного оклада с учётом районного коэффициента и северной надбавки. Доплата должна отражаться в листке начислений сотруднику отдельной строкой. Не должна включаться в расчет среднего заработка в следующих оплатах по среднему (это идет в разрез с мнением 1С и некоторых комментариев финансистов, но наши юристы/аудиторы абсолютно уверены что так правильно - это тема для отдельного холивара).
Исследуя задачу доплаты, мне не удалось решить ее без конфигурирования, более того, хотелось увидеть доплату сразу в документе "оплата по среднему заработку", но там нельзя указать одновременно два вида начисления.
Что создаем план работ.
План:
1. Создаем отдельное начисление в основных начислениях организаций.
2. Добавляем на форму документа "Оплата по среднему заработку" поле с выбором вида доплаты.
3. При расчете начислений в документе "Оплата по среднему заработку" добавляем вторую запись в начисления - "Доплата до оклада".
4. Проверяем листок начислений сотрудника, отражения сумм доплаты в 6-НДФЛ, 4-ФСС
После дискуссий с кадровиками и расчетчиками было ясно, что доплаты могут бать в дальнейшем различные, более того, они назначаются не всем сотрудникам в командировках. Ну и конечно изменения не должны затронуть расчеты за более старые периоды, даже в случае их пересчета.
Было принято решение создать в документе дополнительное поле с видом расчета, в случае заполнение которого, будет производится расчет доплаты по выбранному методу.
Выполнение:
Снимаем с поддержки корень документа "ОплатаПоСреднемуЗаработку" добавляем в шапку новый реквизит "ИТ_ВидРасчетаДоплата" с типом "ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций".
Заходим в модуль документа и находим экспортную процедуру "СформироватьДвиженияПоНачислениям", она формирует записи регистра "ОсновныеНачисленияРаботниковОрганизаций" по данным шапки документа. Перед строкой "ТекущаяДатаНачала = ТекущаяДатаОкончания + 1;" продублируем код по добавлению записи в набор начислений сотруднику, в случае выбора вида начисления в поле "ИТ_ВидРасчетаДоплата".
Код в результате выглядит так:
// Формирует записи регистра "ОсновныеНачисленияРаботниковОрганизаций" по данным шапки документа
//
Процедура СформироватьДвиженияПоНачислениям(ВыборкаПоШапкеДокумента, НаборОсновныеНачисления) Экспорт
Если ВыборкаПоШапкеДокумента.СуммированныйУчетРабочегоВремени Или ВыборкаПоШапкеДокумента.ЯвляетсяПочасовымОтклонением Тогда
ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоЧасам;
Иначе
ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоДням;
КонецЕсли;
ТекущаяДатаНачала = ДатаНачала;
ТекущаяДатаОкончания = Мин(КонецМесяца(ТекущаяДатаНачала), ДатаОкончания);
МассивДат = Новый Массив;
Пока ТекущаяДатаНачала <= ТекущаяДатаОкончания Цикл
МассивДат.Добавить(НачалоМесяца(ТекущаяДатаНачала));
ТекущаяДатаНачала = ТекущаяДатаОкончания + 1;
ТекущаяДатаОкончания = Мин(КонецМесяца(ТекущаяДатаНачала), ДатаОкончания);
КонецЦикла;
МесяцыРасчетаВремениПоТабелю = ПолучитьГрафикРаботыСотрудника(ВыборкаПоШапкеДокумента.Сотрудник, МассивДат);
ТекущаяДатаНачала = ДатаНачала;
ТекущаяДатаОкончания = Мин(КонецМесяца(ТекущаяДатаНачала), ДатаОкончания);
УчетнаяПолитикаПоПерсоналуОрганизации = глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации");
Пока ТекущаяДатаНачала <= ТекущаяДатаОкончания Цикл
// строка движений
Движение = НаборОсновныеНачисления.Добавить();
// Свойства
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.ПериодДействияНачало = НачалоДня(ТекущаяДатаНачала);
Движение.ПериодДействияКонец = КонецДня(ТекущаяДатаОкончания);
Движение.ВидРасчета = ВидРасчета;
// Измерения
Движение.Сотрудник = ВыборкаПоШапкеДокумента.Сотрудник;
Движение.ФизЛицо = ВыборкаПоШапкеДокумента.ФизЛицо;
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
// Реквизиты
Движение.Показатель1 = ВыборкаПоШапкеДокумента.ПроцентОплаты;
Движение.ПодразделениеОрганизации = ВыборкаПоШапкеДокумента.ПодразделениеОрганизации;
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Если МесяцыРасчетаВремениПоТабелю.Найти(НачалоМесяца(ТекущаяДатаНачала)) = Неопределено Тогда
Движение.ГрафикРаботы = ВыборкаПоШапкеДокумента.ГрафикРаботы;
Иначе
Движение.ГрафикРаботы = ВыборкаПоШапкеДокумента.Сотрудник;
КонецЕсли;
Движение.ВидУчетаВремени = ВидУчетаВремени;
Движение.ПериодРасчетаСреднегоЗаработкаНачало = ВыборкаПоШапкеДокумента.ПериодРасчетаСреднегоЗаработкаНачало;
Движение.ПериодРасчетаСреднегоЗаработкаОкончание= ВыборкаПоШапкеДокумента.ПериодРасчетаСреднегоЗаработкаОкончание;
Движение.ДатаНачалаСобытия = ВыборкаПоШапкеДокумента.ДатаНачалаСобытия;
Движение.Авторасчет = Истина;
//++ ИТ:Дима ************* НАЧАЛО: ЭТО ДОБАВЛЕННЫЙ КОД ДЛЯ ОТРАЖЕНИЯ ВТОРОГО НАЧИСЛЕНИЯ ***********
Если НЕ ИТ_ВидРасчетаДоплата.Пустая() Тогда
// строка движений
Движение = НаборОсновныеНачисления.Добавить();
// Свойства
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.ПериодДействияНачало = НачалоДня(ТекущаяДатаНачала);
Движение.ПериодДействияКонец = КонецДня(ТекущаяДатаОкончания);
Движение.ВидРасчета = ИТ_ВидРасчетаДоплата;
// Измерения
Движение.Сотрудник = ВыборкаПоШапкеДокумента.Сотрудник;
Движение.ФизЛицо = ВыборкаПоШапкеДокумента.ФизЛицо;
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
// Реквизиты
Движение.Показатель1 = ВыборкаПоШапкеДокумента.ПроцентОплаты;
Движение.ПодразделениеОрганизации = ВыборкаПоШапкеДокумента.ПодразделениеОрганизации;
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Если МесяцыРасчетаВремениПоТабелю.Найти(НачалоМесяца(ТекущаяДатаНачала)) = Неопределено Тогда
Движение.ГрафикРаботы = ВыборкаПоШапкеДокумента.ГрафикРаботы;
Иначе
Движение.ГрафикРаботы = ВыборкаПоШапкеДокумента.Сотрудник;
КонецЕсли;
Движение.ВидУчетаВремени = ВидУчетаВремени;
Движение.ПериодРасчетаСреднегоЗаработкаНачало = ВыборкаПоШапкеДокумента.ПериодРасчетаСреднегоЗаработкаНачало;
Движение.ПериодРасчетаСреднегоЗаработкаОкончание= ВыборкаПоШапкеДокумента.ПериодРасчетаСреднегоЗаработкаОкончание;
Движение.ДатаНачалаСобытия = ВыборкаПоШапкеДокумента.ДатаНачалаСобытия;
Движение.Авторасчет = Истина;
КонецЕсли;
//-- ИТ:Дима ************* КОНЕЦ: ЭТО ДОБАВЛЕННЫЙ КОД ДЛЯ ОТРАЖЕНИЯ ВТОРОГО НАЧИСЛЕНИЯ ***********
ТекущаяДатаНачала = ТекущаяДатаОкончания + 1;
ТекущаяДатаОкончания = Мин(КонецМесяца(ТекущаяДатаНачала), ДатаОкончания);
КонецЦикла;
КонецПроцедуры // СформироватьДвиженияПоНачислениям()
Вывод на форму поля "ИТ_ВидРасчетаДоплата" можно произвести непосредственно в конфигураторе.
Но поскольку мы используем механизм программирования форм документов, добавлю просто код в свой общий модуль ИТ_РаботаСДиалогами.
Процедура ДополнитьФормуДокумента(ДокументОбъект, ФормаДокумента) Экспорт
//...
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ОплатаПоСреднемуЗаработку") Тогда
ПриОткрытии_ОплатаПоСреднемуЗаработку(ДокументОбъект, ФормаДокумента);
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии_ОплатаПоСреднемуЗаработку(ДокументОбъект, ФормаДокумента)
Если ДокументОбъект.Метаданные().Реквизиты.Найти("ИТ_ВидРасчетаДоплата") = Неопределено Тогда
Возврат;
КонецЕсли;
ЭлементыФормы=ФормаДокумента.ЭлементыФормы;
СтараяСтраница = ЭлементыФормы.Панель.ТекущаяСтраница;
СтраницаДополнительно = ЭлементыФормы.Панель.Страницы.Найти("Страница1");
Если НЕ СтраницаДополнительно=Неопределено Тогда
ЭлементыФормы.Панель.ТекущаяСтраница=СтраницаДополнительно;
Если ФормаДокумента.ЭлементыФормы.Найти("ИТ_ВидРасчетаДоплата") = Неопределено тогда
НовоеПолеВвода = ДобавитьПолеВводаНаФорму(ФормаДокумента,"Вид доплаты:","ИТ_ВидРасчетаДоплата","Панель",10,Ложь,Ложь);
КонецЕсли;
ЭлементыФормы.Панель.ТекущаяСтраница=СтараяСтраница;
КонецЕсли;
КонецПроцедуры
Форма будет выглядеть так:
Теперь приступим к описанию и созданию самого вида расчета "Доплата до оклада".
Поскольку для правильного расчета доплаты до оклада нужно несколько расчетных баз начисления (оклад, РК, СН, оплата по среднему), использовать стандартный способ расчета "Произвольная формула расчета" не возможно.
Тут ест два способа решений:
- Использовать любой стандартный способ расчета (например тот же "произвольная формула расчета") и перехватить нужный нам расчет, например по названию.
- Я выбрал путь, более кардинальный, создал совсем свой способы расчета, с ним и буду дальше работать
Снимаем с поддержки перечисление "СпособыРасчетаОплатыТруда" и добавляем новый способ "ИТ_ДоплатаДоОклада"
Снимаем с поддержки форму вида расчета. Прописываем наш новый вид расчета в необходимых переменных.
// используем для показа одной из закладок Прочее
РасчетИмеетБазовыеНачисления = СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.Процентом
//...
Или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада; //++ ИТ:Дима
// используем для показа нужной страницы панели ПанельРасчеты
ЭтоРасчетПоСреднемуЗаработку = СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработку
//...
Или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада;//++ ИТ:Дима
ЭтоВторичноеНачисление = СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.Процентом
//...
ИЛИ СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада; //++ ИТ:Дима
ЭтоРасчетПоСреднемуЗаработку = СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработку
//...
ИЛИ СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада;//++ ИТ:Дима
РасчетИмеетБазовыеНачисления = СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.Процентом
//...
ИЛИ СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада; //++ ИТ:Дима
Очень странно что программисты 1С раскидали эти переменные по всему модулю формы. Куда лучше и изящней было бы создать функцию для получения сразу всех этих переменных в виде структуры к конкретному виду расчета. Надеюсь тому программисту зачтется такая халатность перед небесным судом.
Переходим непосредственно к перехвату расчета основных начислений сотрудника.
Тут спасибо 1С, нам предоставили специальный общий модуль "ПроведениеРасчетовПереопределяемый". Снимаем его с поддержки.
Несколько переменных нужно предварительно поправить для авто расчета показателей в дальнейшем.
Функция ПолучитьСтруктуруНеобходимыхДанных(МассивСпособовРасчета, ТаблицаПоказателей) Экспорт
//...
// данный Если... необходимо пополнять при появлении новых способ расчета или
// видов расчета, которые не укладываются ни в один из способов
Для Каждого СпособРасчета Из МассивСпособовРасчета Цикл
//...
//++ ИТ:Дима
ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада Тогда
НеобходимыеДанные.ОтработаноВремени = Истина;
НеобходимыеДанные.СреднийЗаработок = Истина;
НеобходимыеДанные.НормаВремениЗаМесяц = Истина;
НеобходимыеДанные.РайонныйКоэффициентРФОрганизации = Истина;
НеобходимыеДанные.ВремяВКалендарныхДнях = Истина;
НеобходимыеДанные.База = Истина;
//-- ИТ:Дима
//...
КонецЕсли;
//...
КонецЦикла;
НеобходимыеДанные.Вставить("ПроизвольныеСтажи", МассивСтажей);
Возврат НеобходимыеДанные;
КонецФункции
Функция ДополнитьСписокОсновныхВариантовНачисленийОрганизации(СписокСпособов) Экспорт
СписокСпособов.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ДоначислениеПоУправленческомуУчету);
СписокСпособов.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада); //++ ИТ:Дима
Возврат СписокСпособов
КонецФункции // ДополнитьСписокОсновныхВариантовНачисленийОрганизации()
Функция ПолучитьСписокСпособовРасчетаНеТребующихУказанияВалюты() Экспорт
//...
СписокСпособов.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада); //++ ИТ:Дима
Возврат СписокСпособов;
КонецФункции
Функция ПолучитьОписаниеДополнительногоСпособа(СпособРасчета, Режим) Экспорт
СтрокаФормулы = "";
Если СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоначислениеПоУправленческомуУчету Тогда
Если Режим = "Текст" Тогда
СтрокаФормулы = "<От обратного>";
Иначе
СтрокаФормулы = "
|Результат = <FONT color=#0000ff>От обратного</FONT>"
КонецЕсли;
ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада Тогда //++ ИТ:Дима
Если Режим = "Текст" Тогда
СтрокаФормулы = "Макс((Оклад по дням * Районный коэффициент * Северная надбавка / Норма времени в днях * Время в днях)- Расчетная база,0)";
Иначе
СтрокаФормулы = "
|Результат = <FONT color=#0000ff>Макс((Оклад по дням * Районный коэффициент * Северная надбавка / Норма времени в днях * Время в днях)- Расчетная база,0)</FONT>"
КонецЕсли; //-- ИТ:Дима
КонецЕсли;
Возврат СтрокаФормулы;
КонецФункции // ПолучитьОписаниеДополнительногоСпособа()
Находим сакральную процедуру ЗУПа "РассчитатьЗаписиНабора"
Добавляем наш способ расчета в необходимость расчета времени, благодаря этому, стандартный механизм сам нам рассчитает оплачиваемое время и нормативы рабочего времени
БылоСообщениеОРабочемВремени = (
СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработку или
//...
СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада или //++ ИТ:Дима
СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоплатаЗаНочныеЧасы);
Ну и добавляем непосредственно сам расчет доплаты.
Его нужно добавить в следующий раздел кода:
// расчет будем проводить только для авторассчитываемой записи
Если СтрокаДвижений.Авторасчет Тогда
//...
// Процентом и от стажа процентом
//
Если ПроведениеРасчетов.ПолучитьСписокНачисленийПроцентом().Найти(СпособРасчета) <> НеОпределено Тогда
//...
ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула Тогда
//...
//++ ИТ:Дима ИТ_ДоплатаДоОклада ЭТО ТО МЕСТО, ГДЕ МЫ ДОБАЛЯЕМ СВОЙ СПОСОБ РАСЧЕТА
ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИТ_ДоплатаДоОклада Тогда
ПроцентОплаты = ?(СтрокаДвижений[ПоказательРазмер] = 0, 100, СтрокаДвижений[ПоказательРазмер]);
ОплачиваемоеВремя = ОплачиваемоеВремя(ИсходныеДанные, СтрокаДвижений, КомментироватьРасчет, КомментарийВидаРасчета, , ГрафикиБезРабочегоВремени);
БазаОплаченнаяПоСреднему = ИсходныеДанные.РезультатБаза;
ОкладНормаОплачиваемыхДней = ИсходныеДанные.НормаОплачиваемыхДней;
ОкладНормаВремениЗаМесяц = ИсходныеДанные.НормаВремениЗаМесяц ;
ПоказательОклад=0;
Если ИсходныеДанные.ВидУчетаВремени=Перечисления.ВидыУчетаВремени.ПоДням Тогда
ПоказательОклад = ЗаполнениеДокументовЗК.ПоказателиСтроки(СтрокаДвижений.Сотрудник, ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням, СтрокаДвижений.ПодразделениеОрганизации, СтрокаДвижений.Организация, СтрокаДвижений.ПериодДействияНачало).Показатель1;
ИначеЕсли ИсходныеДанные.ВидУчетаВремени=Перечисления.ВидыУчетаВремени.ПоЧасам Тогда
ПоказательОклад = ЗаполнениеДокументовЗК.ПоказателиСтроки(СтрокаДвижений.Сотрудник, ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоЧасам, СтрокаДвижений.ПодразделениеОрганизации, СтрокаДвижений.Организация, СтрокаДвижений.ПериодДействияНачало).Показатель1;
КонецЕсли;
ПоказательРК = ЗаполнениеДокументовЗК.ПоказателиСтроки(СтрокаДвижений.Сотрудник, ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.РайонныйКоэффициент, СтрокаДвижений.ПодразделениеОрганизации, СтрокаДвижений.Организация, СтрокаДвижений.ПериодДействияНачало).Показатель1;
ЗапросСтаж = Новый Запрос("ВЫБРАТЬ
| СведенияОСтажеРаботыНаСевереСрезПоследних.НачальныйПроцентСевернойНадбавки
|ИЗ
| РегистрСведений.СведенияОСтажеРаботыНаСевере.СрезПоследних(&ДатаСведений, ФизЛицо = &ФизЛицо) КАК СведенияОСтажеРаботыНаСевереСрезПоследних");
ЗапросСтаж.УстановитьПараметр("ФизЛицо",СтрокаДвижений.Сотрудник.Физлицо);
ЗапросСтаж.УстановитьПараметр("ДатаСведений",СтрокаДвижений.ПериодДействияНачало);
ВыборкаСтаж = ЗапросСтаж.Выполнить().Выбрать();
Если ВыборкаСтаж.Следующий() Тогда
ПоказательСН = ВыборкаСтаж.НачальныйПроцентСевернойНадбавки;
Иначе
ПоказательСН = 0;
КонецЕсли;
Если ОплачиваемоеВремя=0 Тогда
Результат=0;
СтрокаДвижений.ДополнительныеДанные=0;
Иначе
МаксимальнаяДоплата = (ПоказательОклад+(ПоказательОклад*ПоказательРК/100)+(ПоказательОклад*ПоказательСН/100))/ОкладНормаВремениЗаМесяц*ОплачиваемоеВремя;
Результат = Макс(МаксимальнаяДоплата-БазаОплаченнаяПоСреднему,0);
СтрокаДвижений.ДополнительныеДанные = Результат/ОплачиваемоеВремя;
КонецЕсли;
СтрокаДвижений.ОплаченоДнейЧасов = ОплачиваемоеВремя * ?(СтрокаДвижений.Сторно,-1,1);
Если КомментироватьРасчет Тогда
ОбщегоНазначенияЗК.КомментарийРасчета("Процент оплаты: " + ПроцентОплаты, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Оклад Норма Оплачиваемых Дней: " + ОкладНормаОплачиваемыхДней, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Оклад Норма Времени За Месяц: " + ОкладНормаВремениЗаМесяц, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Оклад: " + ПоказательОклад, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Районный коэффициент: " + ПоказательРК, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Северная надбавка: " + ПоказательСН, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Оплачиваемое время: " + ОплачиваемоеВремя, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Расчетная оплата по окладу: " + МаксимальнаяДоплата, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Уже оплачено по среднему: " + БазаОплаченнаяПоСреднему, КомментарийВидаРасчета);
ОбщегоНазначенияЗК.КомментарийРасчета("Размер доплаты: " + Результат, КомментарийВидаРасчета);
КонецЕсли;
//-- ИТ:Дима ИТ_ДоплатаДоОклада
Иначе // Не найден способ расчета
ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": вид расчета не предусмотрен");
КонецЕсли;
Обратите внимание, что оклад, районный коэффициент, и северная надбавка берется на начало периода доплаты (командировки).
Кстати о северной надбавке, 1С при получении ставки северной надбавки для сотрудника самостоятельно не проверяет количество лет работы в районах крайнего севера, вместо этого ждет, когда кадровик в сведениях о стаже работы на севере руками внесет новый процент надбавки. Я также не стал рассчитывать, а просто взял текущую ставку.
Вы можете изменить код расчета так, как вам захочется.
Сохраняем конфигурацию и запускаем 1С для настройки.
Создаем в списке основных начислений организации новый элемент плана вида расчета. Заполняем как указано ниже.
В расчет средней заработной платы данный вид начислений не включаем. Это требование наших аудиторов.
Напомню, что судя по ИТС 1С думает по-другому, они включают доплаты в расчет по среднему.
Проверяем.
Создаем документ Оплата по среднему заработку.
Если не указан вид расчета доплаты, все считается по старому.
А если указать вид доплаты, производится расчет доплаты в закладке "Оплата".
При этом, как и оплата по среднему, доплата до оклада осуществляется только в рабочие дни командировки.
Если дни в пути попадают на выходные дни, отдельная выплата в двойном размере производится уже через документ "Оплата праздничных и выходных дней организаций".
Формируем расчетный листок.
Видим доплату отдельной строкой.
Перепроверяем расчет:
Оклад сотрудника = 40250 руб.
Районный коэффициент для Красноярска = 30%
Северная надбавка (группа 4) месяцев 101 = 30%
Расчетный оклад = 40250+( 40250*(30+30)/100) = 64400
Размер оклада за один рабочий день в мае = 64400/20=3220
За три рабочих дня командировки должен получить по окладу = 3220* 3 =9660
Фактически оплачено по средней зарплате = 6767,67
Требуется доплатить 9660-6767,67 = 2892,33
НДФЛ: (80500все выплаты за месяц-1400вычет)*0,13 = 10283