![]() |
#1 |
Участник
|
Ни как не могу выловить где происходит расчет значения Month...
валиться на коде: Month[i] := COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4); Приходит значение "Авг"? ну естествено тут и ошибка..... смотрю функцию, но ни чего серьезного я там не вижу: PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQ ty,TotalSalary,Month); =((((( |
|
![]() |
#2 |
Участник
|
А FORMAT для получения короткого обозначения месяца не пробовали использовать? Или я может быть чего-то не хочу понимать...
|
|
![]() |
#3 |
Участник
|
TmpMonth принимает значения:
Сентябрь 2006 Октяберь 2006 Ноябрь 2006 а потом просто "Авг" Вот и не могу понять почему "Авг"...... почему такое значение выходит |
|
![]() |
#4 |
Участник
|
Я тоже не понимаю. Если принимает Месяц + Год4, то вот тут COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4) она отрубает 4 символа с конца, то есть Год4. Остается название месяца. Почему от Август 2006 остался Авг непонятно )) Видимо передавался в TmpMonth не "Август 2006", а "Август "
|
|
![]() |
#5 |
Участник
|
скорей всего так оно и есть.... И как мне исправить эту ошибку??
|
|
![]() |
#6 |
Участник
|
Было бы легче, если бы вы запостили сюда сообщение об ошибке, о которой вы говорите. Или ошибка в том и состоит, что возвращается Авг вместо Августа? Если так, то надо смотреть почему в TmpMonth значение без года ...
|
|
![]() |
#7 |
Участник
|
Где ты вообще такой код нашел, у тебя какая версия нав? Если сам написал, то смотри где у тебя определяется TmpMonth.
|
|
![]() |
#8 |
Участник
|
Ошибка:
Значение COPYSTR параметра 3 находится за пределам и разрешеного интервала. Текущие значение: -1 Код: // calc work&fact time and salary by months PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQty,TotalSalary,Month); TempDate := "Starting Date AE"; FOR i := 1 TO 12 DO BEGIN IF (Month[i] <> '') THEN BEGIN TmpMonth := Month[i]; Month[i] := COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4); Y[i] := COPYSTR(TmpMonth,STRLEN(TmpMonth)-4,5); END; END; |
|
![]() |
#9 |
Участник
|
В TmpMonth у вас передается строка "Авг". Не "Август 2006", а "Авг". COPYSTR пытаясь срезать с конца 4 символа получает, что последний аргумент равен -1. Ищите почему в TmpMonth попадает "Авг".
Юзайте дебагер, сразу все станет понятно и без форума. |
|
![]() |
#10 |
Участник
|
Почему в TmpMonth ????? а не Month!!!!!......
в том то и дело что я не могу найти где происходит заполнение этого значения Month... Вообще где-то в функции PayrollCalculate.CalcTimes: Нашел вот этот код: Код: Months[Index] := FORMAT(CurrDate,0,'<Month Text>') + ' ' + FORMAT(DATE2DMY(CurrDate,3)); ![]() |
|
![]() |
#11 |
Участник
|
|
|
![]() |
#12 |
Участник
|
Код: // calc work&fact time and salary by months PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQty,TotalSalary,Month); TempDate := "Starting Date AE"; FOR i := 1 TO 12 DO BEGIN IF (Month[i] <> '') THEN BEGIN TmpMonth := Month[i]; // <-- ТУТ ПОСТАВЬТЕ ТОЧКУ ОСТАНОВА Month[i] := COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4); Y[i] := COPYSTR(TmpMonth,STRLEN(TmpMonth)-4,5); END; END; |
|
![]() |
#13 |
Участник
|
Строк очень много... так много что неделю сидеть прийдется
![]() щяс нах.. в окно выкину свой комп.... Последнее значение которое принмает ТmpMonth = август, но пред ним еще Июль... но ошибка на ней не падет |
|
![]() |
#14 |
Участник
|
В 3,7 я процедуры с именем CalcTimes() не нашел. Массива с именем Month не нашел.
|
|
![]() |
#15 |
MCTS
|
Эта строка там не спроста:
Код: PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQty,TotalSalary,Month); Копать - там. |
|
![]() |
#16 |
MCTS
|
Глянул одним глазком кодеюнит:
Массив в кодеюните заполняется с 1 по MQty. (как считатеся MonthQty, а он считается в том же кодеюните не смотрел). А читается с 1 по 12 (это уже в отчете). |
|
![]() |
#17 |
MCTS
|
Я подумал еще и передумал: Перед тем как вызывать PayrollCalculate.CalcTimes(...), очистите массив CLEAR(Month);
|
|
![]() |
#18 |
Участник
|
Цитата:
Сообщение от by_HT
![]() Ошибка:
Значение COPYSTR параметра 3 находится за пределам и разрешеного интервала. Текущие значение: -1 // calc work&fact time and salary by months PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQ ty,TotalSalary,Month); TempDate := "Starting Date AE"; FOR i := 1 TO 12 DO BEGIN IF (Month[i] <> '') THEN BEGIN TmpMonth := Month[i]; Month[i] := COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4); Y[i] := COPYSTR(TmpMonth,STRLEN(TmpMonth)-4,5); END; END; После 1 прохода переменная TmpMonth принимает полное значение. После второго прохода еще урезается на 4 символа!! (или я неправильно его читаю??) |
|
![]() |
#19 |
Участник
|
Нет. TmpMonth судя по всему не массив и принимает значение одного из элементов Month[]. В цикле идет последовательное присвоение нового значения Month[i]. А COPYSTR() урезает TmpMonth. То есть по идее последовательного урезания не должно быть.
|
|
![]() |
#20 |
Участник
|
TmpMonth не массив...
CLEAR(Month); перед PayrollCalculate.CalcTimes(...), выводит ошибку: Неопределенная дата не может быть использована для вычисления. Дата: 0D Форумал: -12M Щяс буду разбираться с этим... |
|