Проблема с алгоритмом расчета аванса, переопределенным через пользовательский скрипт
Здравствуйте. С вашей помощью написал программу расчета аванса, но то ли плохо потестировал, то ли одно из двух...
Когда одно человека считаем, то всё хорошо. Когда нескольких, то почему то записывает только одного. Прошу помочь, а то самому точно не осилить.
Полный код в приложении.USAVANS.zip
Ответ
В отладке то точно прошлись? У вас в самом начале расчета проверяется наличие строк аванса (201 и 222) и если их нет, то расчет не выполняется.
Весь аванс не анализировал, но есть ощущение что расчет за первую половину месяца даст тот же самый результат, если конечно настроить столбец ТВХ по которому считать за первую половину.
Я тоже думал об этом, но после того, как моё начальство озвучило хотелки, посмотрел настройки и подобного не нашел. Дело вот в чем. Нужно считать аванс пропорционально ФРВ/НРВ. НО, пропорционально за 1 половину месяца. Например, любимый январь. В первой половине января НРВ 5 дней, соответственно, если человек отработал все пять дней, то получает весь аванс - половину заработка по видам. Причем, в феврале половина месяца - по 14 число, в остальные месяцы - по 15 число. Есть там, конечно, подводные камни, связанные с переплатой. Но пока вот так, потом передумают может.
Ваш алгоритм, как будто, считает НРВ за весь месяц, что более, конечно, безопасно.
P.S. Повторюсь, что для одного человека весь расчет выполнятся нормально. Проблема при расчете нескольких человек. Догадываюсь, что где-то надо сбрасывать настройки...
Он не безопаснее, он правильнее. Возьмем ваш любимый январь. Оклад 10000. Ваше начальство с какого-то перепуга решило, что на первую половину января приходится 5000, хотя в первой половине всего 5 рабочих дней а во второй 12. То есть переплата аванса где-то в 1.7 раза.
И непонятно из-за чего все эти премудрости? Может быть ваше начальство просто не понимает как правильно считается зарплата за первую половину месяца?
посмотрел настройки и подобного не нашел.
Используемые настройки:
В первой половине января НРВ 5 дней, соответственно, если человек отработал все пять дней, то получает весь аванс - половину заработка по видам.
Более чем странный расчёт.
Если человек отработал все 5 дней в первой половине января, значит "весь аванс" = зарплата именно за эти 5 дней, а ни как не половина заработка по видам.
Ваш алгоритм, как будто, считает НРВ за весь месяц, что более, конечно, безопасно.
Не безопасно, а единственно верно.
Чтобы посчитать зарплату за первую половину месяца пропорционально отработанному времени в первой половине месяца, необходимо:
1. Определить средний дневной заработок в месяце:
СДЗ = (Оклад+надбавки за полный месяц)/НРВ в месяце
2. Умножить СДЗ на количество отработанных дней в первой половине месяца.
Добрый день.
Нет задачи "благороднее" разбираться в чужом коде, да еще и при отсутствии комментариев :(
Вообще для этих целей есть отладчик...
Если не можете понять причину сами - выложите сохраненку с 2мя ЛС, на которых ваш алгоритм не работает
отладчик тут не поможет, я им толком то не научился еще пользоваться, отлаживаю через выдачу сообщений ))). По любому ЛС алгоритм отрабатывает нормально, если ЛС рассчитывается один одновременно.
проверил тут кое-что - поставил выдачу сообщений на входе в процедуру - и увидел, что заходит только один раз, в другие разы не заходит.
Если не сложно, можете выложить типовой файл AVANS.S? А то я похоже с каким-то старым работал,\ (с него часть кода заимствовал), с серверной части брал; он тоже не рассчитывает.
Может и понимает, но решило что так справедливее. По крайней мере, я написал ТЗ, мне его все подписали: и это начальство (зам начальника отдела) и сам начальник отдела. Одна надежда, что бухгалтерия победит, но это будет позже.
Однако вопрос не в этом.
Скачал у вас поставку (hb которая), установил, ничего не менял, запустилась в демо-режиме, сразу попробовал сделать расчет аналогично. Т.е. выделяю в списке ЛС всех кто есть, нажимаю Alt+F1, выбираю "рассчитать автоматически", и... рассчитывает только одного, т.е. также.
Сейчас еще раз проверил, похоже что считает только того, на ком стоит курсор.
Если делать расчет за месяц или просто расчет с установкой галочки "расчет за первую половину" то получается полный расчет за первую половину, а мне нужно чтобы рассчитанная сумма легла на 1 вид оплаты. форму при этом примерно такая (Оклад + Надбавки + Доплаты) * ФРВ / НРВ, где оклад, надбавки, доплаты равны половинам сумм положенным за месяц. Надбавки и доплаты строго определены.
Сервис поддержки клиентов работает на платформе UserEcho
Поставочный файл AVANS.zip
Пользоваться отладчиком надо так