Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Проблема в z процедуре m_Долги

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ТЗК (Табельно-зарплатный контур)
Предыдущая тема :: Следующая тема  
Автор Сообщение
NewAge



Зарегистрирован: 11.06.2010
Сообщения: 108

СообщениеДобавлено: Вт Апр 21, 2020 11:44    Заголовок сообщения: Проблема в z процедуре m_Долги Ответить с цитатой

Добрый день.

Поймали проблему в m_Долги в функции CorrectCalcTableRe. Расчет зарплаты просто зависает. Вот код, в котором возникает проблема:
Код:

j = 0;
while (CalcCorrSumm != CorrSumm) {
   RE_VO[j][2] = RE_VO[j][2] + sAdd;
   CalcCorrSumm = CalcCorrSumm + sAdd;
   j = j + 1;
   if (j == CountReVo) {j = 0;};
};


Первоначально:
CorrSumm = -31216.19; CalcCorrSumm = -31216.17; sAdd = -0.01

Когда CorrSumm = -31216.19; CalcCorrSumm = -31216.19 программ из цикла while не выходит. Не могу понять почему. Может это связано с особенностями функций trunc и round, которые используются при расчете CorrSumm и CalcCorrSumm.

Меняю
Код:
while (CalcCorrSumm != CorrSumm) {

на
Код:
while (abs(CalcCorrSumm - CorrSumm) >= 0.01) {

все работает.

Может кто сталкивался с этой проблемой???

Еще в коде:
Код:

//корректируем
j = 0;
while (j < CountReVo) {
   setРасчСтрока(RE_VO[j][0], _i_Сумма_ВО, RE_VO[j][1] + RE_VO[j][2]); /*т.к. CorrSumm изначально с обратным знаком */
};


отсутствует:
Код:
j = j + 1;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DUCKKK
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 16.09.2009
Сообщения: 1681

СообщениеДобавлено: Вт Апр 21, 2020 12:53    Заголовок сообщения: Ответить с цитатой

А есть какой-то пример с цифрами, на котором расчет гарантированно зависнет?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
NewAge



Зарегистрирован: 11.06.2010
Сообщения: 108

СообщениеДобавлено: Вт Апр 21, 2020 13:20    Заголовок сообщения: Ответить с цитатой

Такой пример конечно есть у нас на рабочей базе. Только вот не знаю как получится ли у меня воспроизвести такую ситуацию на модельной. Там работник с очень "богатой" историей. Там порядка пяти исполнительных листов и плюс еще больничные. Запустили в апреле по нему перерасчет через ВО 300 и получили бесконечный цикл при корректировки расчетной таблицы.

Мне больше всего не понятно почему вот это условие истино:
Код:
-31216.19 != -31216.19[quote]???[/quote]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DUCKKK
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 16.09.2009
Сообщения: 1681

СообщениеДобавлено: Вт Апр 21, 2020 13:23    Заголовок сообщения: Ответить с цитатой

Мне для проверки на серийной базе все-таки нужен пример .... На уровне "непонятности" в коде рассуждать не получится.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
NewAge



Зарегистрирован: 11.06.2010
Сообщения: 108

СообщениеДобавлено: Вт Апр 21, 2020 13:33    Заголовок сообщения: Ответить с цитатой

Ну над первым тогда подумаем как смоделировать ситуацию на модельной базе.

А в части отсутствия строки j = j + 1; передадите привет разработчикам?))))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
DUCKKK
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 16.09.2009
Сообщения: 1681

СообщениеДобавлено: Вт Апр 21, 2020 13:37    Заголовок сообщения: Ответить с цитатой

Я уже все передал. Кроме разработчиков - есть тестировщики. Они без "пощупать на цифрах" работать отказываются ...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
NewAge



Зарегистрирован: 11.06.2010
Сообщения: 108

СообщениеДобавлено: Вт Апр 21, 2020 13:42    Заголовок сообщения: Ответить с цитатой

Но вот тут то цифры совсем не причем. Здесь явная ошибка. Отсутствует выражение, которое изменяет переменную цикла j.

Еще в коде:
Код:

//корректируем
j = 0;
while (j < CountReVo) {
   setРасчСтрока(RE_VO[j][0], _i_Сумма_ВО, RE_VO[j][1] + RE_VO[j][2]); /*т.к. CorrSumm изначально с обратным знаком */
};


отсутствует:
Код:
j = j + 1;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: ТЗК (Табельно-зарплатный контур) Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU