• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы RyDmi
  • Дата начала
R

RyDmi

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

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

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

jcnby

Во первых! Говарим правильно - в ЗиК счетов НЕТ! НЕБЫЛО и НЕБУДЕТ!!!! Только при выгрузке, и то назначаются циферками в модуле)).
В ЗиК есть ВидыРачетов.
В данном случае - твоя проблема решается следующим способом:
1. Заходишь в конфигуратор.
2. Смотришь в ГруппеРасчетов ( там и такое есть!!!) - и ищешь ОплатаПоСреднему
3. Смотришь какие расчеты там есть - и лишние исключаешь из группы, а недостающие добовляешь.

Зы1: В каждой конфе эта группа обозначается по разному, а так же может вообще отсутствовать ( убивайте тех кто делал конфу).
Зы2: Так же можно войти в данный расчет ( например который не нужен ) и из него удалить группу расчетов ( чтобы он туда не входил).
Зы3: Посмотреть индификатор группы расчетов и алгаритм можно в документе - Оплата по зреднему.

Вопросы?
 
R

RyDmi

Вопросы? Вопросы есть :)
Указанную проблему я решал не в конфигураторе, а исключением ненужных счетов из списка в "Справочники -> Расчёты зарплаты -> Виды расчётов -> Оплата по среднему заработку", НО
как сделать так, чтобы "надбавка за выслугу лет" считалась по отработанным дням? Т.е. у меня в получившемся "Расчёте среднего заработка" человек за 1 рабочий день февраля получил 3300, чего быть не должно! Т.е. там эта надбавка составила 1800, что неверно. Так вот, как исправить?
 
J

jcnby

Ну опять же.... Открываешь конфигуратор, находишь данный вид расчета и ищешь группу "УчитоватьДни", "РаспределятьПропорционально" и т.д. либо что-то похожее, т.е. для корректной работы, в глобальнике должна быть функция которая определяет отработанные дни по сотруднику. И должна быть группа расчетов, которая показывала бы программе какие расчеты нужно считать по дням. В Справочнике ты можешь разве что задать базу для расчета.....
ЗЫ: исперавить можно в ручную)))
А вообще не совсем понятно что к чему- 3300 непрально...1800 не прально....я по вашим цифрам вообще не ориентируюсь)))
 
R

RyDmi

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

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

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

СуммаПериода = СуммаПериода + ((Оклад * ТабДанныхОСреднем.ДнейОтработано * Процент / 100)/ДнейВсего);
------

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

jcnby

Ну уволился он либо нет в основном определяется приказом об увольнении либо если есть в справочнике сотрудников ( например у меня к справочнику привязанны кадровые данные) - следовательно - есть параметр ( уволен). А так же есть и группа ( у мну 8 групп ( по расчетчикам) + группа "уволенные" ). Вариантов масса- но правильнее всего будет реализовать через приказ об увольнении ( если таковой есть в конфе и кадровики нормально работают ( т.е. своевременно вводят данные приказы).
Далее- вставляешь проверку- если уволен и в текущем месяце ( сравниваем дату увольнения с текущей датой) тогда перекидовай на данный расчет - если нет - тогда тупо по % вне зависимости по дням.
А еще можешь позванить на контору которая обслуживала конфу и уточнить у них все вопросы и в конце конков посоветоваться с человеком - который разрабатывал конфу- он наверняка может подсказать самый лутший вариант для ТВОЕЙ ( написанной им) конфигурации.
 
N

NomadSoul

Российская конфа у Вас, однако. И расчет надбавки тоже российский. :D
Я бы для расчета надбавки за выслугу лет проанализировал бы дату увольнения сотрудника, и если месяц и год этой даты совпадает месяцем и годом текущего расчетным периода, то подсчитывал бы сумму отработанных дней/часов по записям ЖурналаЗарплата, по видам расчетов которые входят в группу ОсновныеНачисления. ИМХО, это проще.
 
R

RyDmi

.. то подсчитывал бы сумму отработанных дней/часов по записям ЖурналаЗарплата, по видам расчетов которые входят в группу ОсновныеНачисления.

А как можно реализовать сабж? Как определить количество отработанных часов?
 
J

jcnby

используя календарь.....собственно он для этого и предноздначен....
 
N

NomadSoul

//IMHO, можно и не использовать календарь, так как доплата за выслугу считается после подсчета
//оплаты за отработанное время. Делюсь этим мега-алгоритмом. :(

ДнейОтработано = 0;
ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ЖЗ.ВыбратьЗаписиПоОбъекту(Объект,ЖЗ.НачалоПериодаПоДате(ДатаНачала),ЖЗ.КонецПери
одаПоДате(ДатаНачала));
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
Если ЖЗ.ВидРасч.ВходитВГруппу(ГруппаРасчетов.ОсновныеНачисления)=1 Тогда
ДнейОтработано = ДнейОтработано + ЖЗ.Дни;
КонецЕсли;
КонецЦикла;
 
J

jcnby

:rolleyes: насколько я помню тема шла о том чтобы определить полный месяц или не полный...а в конфе уже есть расчет этих самых дней... Зачем еще раз изобретать велосипед?
Еще 1 ИМХО: Календарь для данного сотрудника 1 , а сколько записей в ЖР-ке? В данном случае можно судить о КПД мега-алгаритма (указанного выше). Если у вас от 10 пользователей в программе и свыше 3-5 тыс. человек в штате- лутше не мучайте машинку и идите через календарь, и через функцию которая уже есть в конфе ( а она есть), а если у вас норм машинка и не пугают трудности, либо же вам принципиально нравиться ЖР - то идите через вышеописакнный алгаритм))
 
N

NomadSoul

RyDmi спросил как реализовать "подсчет суммы отработанных дней/часов по записям ЖурналаЗарплата, по видам расчетов которые входят в группу ОсновныеНачисления". Я и ответил. :rolleyes:

Приведенный мной алгоритм должен выполняться если по дате увольнения было определено, что месяц, отработанный сотрудником, не полный.

Можно делать и через календарь, но один введенный больничный или невыход приведет к тому что сумма доплаты будет подсчитана неверно. Будут предложения, что в этом случае можно смотреть документ ТабельОтработанногоВремени. Можно и так. Но быстродействие, вероятно, в этом случае будет тем же, что и у приведенного алгоритма, если не хуже.
 
R

RyDmi

Уааа! Круть :rolleyes: Всем спасибо за ответы! NomadSoul спасибо за код.
Проблему решил взятием старой версии конфы, где этот модуль был изменён человеком, который собственно и адаптировал "Зарплату" по моё предприятие. Сделано там как раз через календарь, кстати.

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

NomadSoul

Rydmi и Jcnby, а что Вы думаете на счет больничного приходящегося на период надбавки за выслугу лет? Ведь в календаре хранится плановый график, а не фактически отработанное время...

В вашем случае ошибка возникнет только если человек заболел и в том же месяце уволился. Принесем возможность ошибки в жертву быстродействию?
 
J

jcnby

Нивкое случае))) ошибиться - значит быть съеденым бухами заживо).
Зы: Календарь щитает количество дней и часов по ним в месяце- это основная его функция- календарь не определяет работали ли в этот день либо нет. Поэтому собственно табель и придуман (ну я так пологаю). И все равно, календари быстрее)))). ( у меня штат более 10 000 людей) - очень заметна разница выполнения перебора ЖР-ки и Календарей.
Кста: нуна еще же с бухоми посоветоваться- как етот больничный должен влиять) а далее проблем не вижу - почему бы его не ВЫТЕСНИТЬ либо Заместить им?
 
N

NomadSoul

Уважаемый jcnby, у нас с Вами (в Беларуси то есть), доплата за выслугу лет считается обычно просто процентом от начисленной повременной оплаты. Так что у нас по-любому будет перебор ЖР. :(

А вот в России покрутить с алгоритмом можно. Соглашусь, что там эффективнее было бы сделать вытеснение больничным надбавки за выслугу лет. Но там засада в том, что если человек не увольняется, то надбавка идет в полном размере без разницы сколько человек отработал. Так что вытеснение там делать низзя и его в российской конфе нет.
 
J

jcnby

Уважаемый jcnby, у нас с Вами (в Беларуси то есть), доплата за выслугу лет считается обычно просто процентом от начисленной повременной оплаты. Так что у нас по-любому будет перебор ЖР.

У нас с вами в Белоруси ( считается в зависимости от того какое это предприятие ) просто процентом))) поэтому у нас и неоходимо считать как необходимо заказчику))))) уж вот такая у нас расстановка)))

Насчет России не в курсе)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!