7.7 Неправильно считается "Расчёт среднего заработка" (1С:ЗиК v7.7)

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем RyDmi, 10 апр 2008.

  1. TopicStarter Overlay
    RyDmi
    Offline

    RyDmi

    Регистрация:
    27 мар 2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Проблема следущего характера:
    При расчёте среднего заработка (Документы -> Прочие отклонения -> Оплата по среднему заработку) выводит неверную сумму, т.е. при подсчёте плюсуются счета, которых в сумме быть не должно!
    А именно, сейчас там следущие статьи:

    1) Оплата по окладу
    2) Оплата за праздничные и выходные дни
    3) Доплата за праздничные
    4) Надбавка за выслугу лет
    5) Доплата за замещение
    6) Ежемесечная премия
    7) Отпуск очередной
    8) Оплата б/л
    9) Оплата б/л за счёт работодателя

    Так вот, как мне сказала бухгалтер, из этого списка в сумму не должны входить счета 3, 7, 8, 9 из приведённого списка.
    Так вот вопрос в том, как исключить их, чтобы в сумму они не входили?
  2. XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Открываешь - Справочник/РасчетЗарплаты/ВидыРасчетов. Ищешь в списке - Оплата по среднему, встаешь на него и нажимаешь кнопку БАЗА... Там из окна - Состав облагаемой базы убираешь не нужные пункты (переносом в соседнее окно). Все.
  3. antares
    Offline

    antares Опытный в 1С

    Регистрация:
    30 ноя 2006
    Сообщения:
    340
    Симпатии:
    7
    Баллы:
    29
    У тебя трассировка что показывает?

    p.s. полностью согласен. В любой момент можно восстановить список "базовых" видов расчетов.
  4. TopicStarter Overlay
    RyDmi
    Offline

    RyDmi

    Регистрация:
    27 мар 2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Указанную проблему я так и решил, НО
    как сделать так, чтобы "надбавка за выслугу лет" считалась по отработанным дням? Т.е. у меня в получившемся "Расчёте среднего заработка" человек за 1 рабочий день февраля получил 3300, чего быть не должно! Т.е. там эта надбавка составила 1800, что неверно. Так вот, как исправить?
  5. XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    а как вообще у вас начисляется надбавка за выслугу? процентом, суммой? какая сумма написана в ЖурналеРасчетов за данный месяц, сколько дней в этом месяце отработал человек?
  6. TopicStarter Overlay
    RyDmi
    Offline

    RyDmi

    Регистрация:
    27 мар 2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Блин, поговорил с бухгалтерами.. походу мы говорим на совсем разных языках((
    Вобщем с "Оплатой по среднему" вопрос отпал (они там эту набавку исключили вовсе и будут как-то по-другому считать), а вместо этого надо сделать вот что:
    сейчас "надбавка за выслугу лет" при начислении зарплаты выдаётся процентом от оклада рабочего и не зависит от количества отработанных дней (так и должно быть), но когда человек увольняется, скажем, 15 числа, то выслуга должна пересчитываться в зависимости от этих отработанных дней, т.е. должна быть начислена только за 15 дней, отработанных уволившимся сотрудником.

    Я решил реализовать сабж путём изменения модуля расчёта "Конфигурация -> Виды Расчётов -> НадбавкаЗаВыслугуЛет". Так вот, там есть переменная "СуммаПериода" в ней нах-ся рассчитанная сумма Надбавки.

    --------
    Код:
    ...
    ТабДанныхОСреднем = глЗаполнитьДанныеСреднегоЗаработка(Объект,ДобавитьМесяц(ДатаНачалаПроцента, 1),1,"1");
    ТабДанныхОСреднем.ВыбратьСтроки(); 
    ТабДанныхОСреднем.ПолучитьСтроку();
    
    СуммаПериода = СуммаПериода + ((Оклад * ТабДанныхОСреднем.ДнейОтработано * Процент / 100)/ДнейВсего);  
    
    
    ------

    "глЗаполнитьДанныеСреднегоЗаработка" и "ТабДанныхОСреднем" я выдернул из документа "ПриказНаОплатуПоСреднему" для того, чтобы можно было узнать, сколько человек отработал в месяце, в котором осуществляется расчёт з/п.
    Приведённая формула расчёта "СуммаПериода" как раз рассчитывает "Надбавку" пропорционально количеству отработанных дней. Но её нужно применить только к тому месяцу, в котором человек уволился.
    Как определить уволился ли человек именно в этом месяце? И вообще в правильную ли сторону я копаю? Может как-то иначе можно решить?
  7. XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    Сделай так - если кол-во отработанных дней = количеству рабочих дней в месяце, то доплата полная, иначе доплата = СуммаЗаПериод, то что ты написал.
  8. Gucci76
    Offline

    Gucci76 Опытный в 1С

    Регистрация:
    9 мар 2008
    Сообщения:
    67
    Симпатии:
    0
    Баллы:
    26
    Зачем вам дни??????????
    Т.е. получается за 15 дней вы платите весь оклад сотруднику, раз процент от этого оклада (таже надбавка за выслугу лет) вам еще надо корректировать по дням.
    Другими словами. надбавка за выслугу лет - 50%
    10 000 - оклад за весь месяц ---- 5 000 надбавка
    5 000 - оклад за полмесяца ---- 2 500 надбавка за полмесяца
    Зачем еще 2 500 делить на два??????????
    Поянтно выражаюсь??????
  9. XXL
    Offline

    XXL Опытный в 1С Команда форума

    Регистрация:
    22 янв 2007
    Сообщения:
    1.159
    Симпатии:
    19
    Баллы:
    29
    а если надо именно при увольнении, по ищи Приказ об увальнении, если есть, то считай дни.
  10. TopicStarter Overlay
    RyDmi
    Offline

    RyDmi

    Регистрация:
    27 мар 2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Вот примрно так сейчас и делаю.. Код пытаюсь выдернуть из Формы справочника "Сотрудники", тот самый код,
    который определяет статус сотрудника (эта информация отображается при просмотре справочника) и оттуда уже пляшу.
    Вобщем так вот примерно делаю:

    Код:
    ДатаПриема = Дата(0);
    ДатаУвольнения = Дата(0);
    //ДатаАктуальности = Сотр.ИспользоватьДату();
    ДатаАктуальности = ТекущаяДата();
    Периодический.ИспользоватьОбъект("СостояниеФизлица",Объект);
    СостояниеФЗ = Периодический.ЗначениеНаДату(ДатаАктуальности);
    Если ПустоеЗначение(СостояниеФЗ)=0 Тогда
    Если Периодический.НайтиЗначение(ДатаАктуальности,-1)=1 Тогда
    ДатаПриема = Периодический.ДатаЗнач
    КонецЕсли;
    Если Периодический.НайтиЗначение(ДатаАктуальности+1,1)=1 Тогда
    ДатаУвольнения = Периодический.ДатаЗнач-1
    КонецЕсли;
    Если Объект.ОсновнойЭлемент<>Объект Тогда
    ОписаниеСостояния = "Внутреннее совместительство";
    Если СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботает Тогда
    ОписаниеСостояния = "Внутреннее совмест-во, временно не работает";
    ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботаетВоеннослужащий Тогда
    ОписаниеСостояния = "Внутреннее совмест-во, военнослужащий, временно не работает";            
    КонецЕсли;
    ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.СотрудникОсновной Тогда
    
    ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.СотрудникНеосновной Тогда
    
    ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.Госслужащий Тогда
    
    ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботает Тогда
    
    ИначеЕсли СостояниеФЗ=Перечисление.СостояниеФизлица.ВременноНеРаботаетВоеннослужащий Тогда
    
    Иначе
    
    КонецЕсли;
    //ОписаниеСостояния = ОписаниеСостояния+" с "+
    //             ДатаПриема+?(ПустоеЗначение(ДатаУвольнения)=1,""," по "+ДатаУвольнения)
    Если ПустоеЗначение(ДатаУвольнения)=0 Тогда
    Если (ДатаМесяц(ДатаУвольнения) = ДатаМесяц(ДатаНачалаПроцента)) и 
    (ДатаГод(ДатаУвольнения) = ДатаГод(ДатаНачалаПроцента)) Тогда
    СуммаПериода = СуммаПериода + ((Оклад * ТабДанныхОСреднем.ДнейОтработано * Процент / 100)/ДнейВсего);
    КонецЕсли;
    КонецЕсли;
    Иначе  //Сотрудник уволен.
    Периодический.ОбратныйПорядок();
    Периодический.ВыбратьЗначения(,ДатаАктуальности);
    Пока Периодический.ПолучитьЗначение()=1 Цикл
    Если ПустоеЗначение(Периодический.Значение)=1 Тогда                
    Если (ДатаМесяц(Периодический.ДатаЗнач-1) = ДатаМесяц(ДатаНачалаПроцента)) и 
    (ДатаГод(Периодический.ДатаЗнач-1) = ДатаГод(ДатаНачалаПроцента)) Тогда
    СуммаПериода = СуммаПериода + 
    ((Оклад * ТабДанныхОСреднем.ДнейОтработано * Процент / 100)/ДнейВсего);
    КонецЕсли;
    Прервать;                
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    
    
    
    
    
  11. TopicStarter Overlay
    RyDmi
    Offline

    RyDmi

    Регистрация:
    27 мар 2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Всё, проблему решил взятием старой версии конфы. Теперь считается как надо.

    Код:
    ...
    ГрафикРаботы	= Объект.ГрафикРаботы.Получить(ДатаОкончания);
    Календарь		= ГрафикРаботы.ОсновныеЧасы;
    Оклад = глПолучитьСуммуИзРеквизита(Объект.Оклад.Получить(ДатаНачала),ДатаНачала)
    ДнейВсего = Календарь.Дней(НачалоПериодаПоДате(ДатаНачала),КонецПериодаПоДате(ДатаОкончания));
    Дней = Календарь.Дней(ДатаНачалаПроцента,ДатаОкончанияПроцента);   
    СуммаПериода = СуммаПериода + ((Оклад * Дней * Процент / 100)/ДнейВсего);                       
    ...
    
    

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