7.7 доплаты сдельщикам

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем ДмитрийF, 21 сен 2006.

  1. TopicStarter Overlay
    ДмитрийF
    Offline

    ДмитрийF

    Регистрация:
    19 сен 2006
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Зарплата и кадры 7.7
    Сдельщики работают по бригадному наряду. Форма оплаты сдельно-премиальная.
    В расчетных листках стоит оплата по тарифу -0
    Есть доплаты (вредность, профмастерство и т.д.) которые должны считаться исходя из часовой ставки и отработанных часов в месяц (процентом). Как это сделать?
    Для тех кто по окладу или по часовому тарифу проблем нет.
  2. TopicStarter Overlay
    ДмитрийF
    Offline

    ДмитрийF

    Регистрация:
    19 сен 2006
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Ну что, никто не знает?
    У меня появилась идея. Я создал новый вид расчета "Доплата за вредность(12%)"(в конфигураторе ПроизвольнаяДоплата17). Потом скопировал текст модуля расчета "ОплатаПоТарифу" вместо модуля в ПроизвольнаяДоплата17. Далее нашел строку касающуюся сдельщиков (Результат=0) и заменил на (Результат=Оклад*Часов*0.12). Но в расчетах всегда берется количество часов по календарю. А вот если человек отработал не полный месяц, итог не правильный. Почему тогда в квитке "оплата по тарифу" количество отработанных дней и часов правильное, а в моем расчете в том же квитке берется по календарю?
    Я чего понять не могу, ведь в обоих случаях используется один и тот же код за исключением одной строки (которая на расчет отработанных часов не влияет).
    В чем дело?
  3. TopicStarter Overlay
    ДмитрийF
    Offline

    ДмитрийF

    Регистрация:
    19 сен 2006
    Сообщения:
    47
    Симпатии:
    0
    Баллы:
    1
    Помог мне тут один человек. Вот код:
    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПровестиРасчет()

    // если запись исправлена или фиксирована, то ее не рассчитываем
    Если (Исправлена=1) или (Фиксирована=1) Тогда
    глСообщениеТрассировки(глСообщенияТрассировки, "" + ?(Исправлена=1,"Результат записи исправлен вручную","Запись фиксирована") + ". Расчет не проводился.", , 1);
    Возврат
    КонецЕсли;

    НачалоПериода = НачалоПериодаПоДате(ДатаНачала);
    КонецПериода = КонецПериодаПоДате(ДатаОкончания);
    Коэффициент = ?(Перерасчет = 1, 0, ?(Сторно = 1, -1, 1));
    ДатаРеквизитов=ДатаОкончания;

    Оклад = глПолучитьСуммуИзРеквизита(Объект.Оклад.Получить(ДатаРеквизитов),ДатаРеквизитов);
    Ставка = Объект.Ставка.Получить(ДатаРеквизитов);

    //шуб Если у человека именно тариф и не меняется за период расчёта, то достаточно
    //собрать часы по тарифу за этот период, иначе надо учитывать возможные изменения формы оплаты и прочее, тогда всё
    //будет выглядеть замысловатее !!
    ЖР = СоздатьОбъект("ЖурналРасчетов.Зарплата");
    Часов = 0;
    Дней = 0;

    Если ЖР.ВыбратьЗаписиПоОбъекту(Объект,НачалоПериода,КонецПериода)=1 Тогда
    Пока ЖР.ПолучитьЗапись()=1 Цикл
    Если ЖР.ВидРасч=ВидРасчета.ОплатаПоТарифу Тогда
    Часов = Часов +ЖР.Часы;
    Дней = Дней +ЖР.Дни;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    //шуб Вот и всё

    Часов = Часов * Ставка;

    Результат = Оклад*Часов*0.12;
    Дни = Дней * Коэффициент;
    Часы = Часов * Коэффициент;
    КонецПроцедуры // ПровестиРасчет()

Поделиться этой страницей