26.08.2008, 10:41 | #1 |
Участник
|
Ни как не могу выловить где происходит расчет значения Month...
валиться на коде: Month[i] := COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4); Приходит значение "Авг"? ну естествено тут и ошибка..... смотрю функцию, но ни чего серьезного я там не вижу: PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQ ty,TotalSalary,Month); =((((( |
|
26.08.2008, 10:57 | #2 |
Участник
|
А FORMAT для получения короткого обозначения месяца не пробовали использовать? Или я может быть чего-то не хочу понимать...
|
|
26.08.2008, 11:30 | #3 |
Участник
|
TmpMonth принимает значения:
Сентябрь 2006 Октяберь 2006 Ноябрь 2006 а потом просто "Авг" Вот и не могу понять почему "Авг"...... почему такое значение выходит |
|
26.08.2008, 11:42 | #4 |
Участник
|
Я тоже не понимаю. Если принимает Месяц + Год4, то вот тут COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4) она отрубает 4 символа с конца, то есть Год4. Остается название месяца. Почему от Август 2006 остался Авг непонятно )) Видимо передавался в TmpMonth не "Август 2006", а "Август "
|
|
26.08.2008, 12:16 | #5 |
Участник
|
скорей всего так оно и есть.... И как мне исправить эту ошибку??
|
|
26.08.2008, 12:23 | #6 |
Участник
|
Было бы легче, если бы вы запостили сюда сообщение об ошибке, о которой вы говорите. Или ошибка в том и состоит, что возвращается Авг вместо Августа? Если так, то надо смотреть почему в TmpMonth значение без года ...
|
|
26.08.2008, 12:28 | #7 |
Участник
|
Где ты вообще такой код нашел, у тебя какая версия нав? Если сам написал, то смотри где у тебя определяется TmpMonth.
|
|
26.08.2008, 12:28 | #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; |
|
26.08.2008, 12:35 | #9 |
Участник
|
В TmpMonth у вас передается строка "Авг". Не "Август 2006", а "Авг". COPYSTR пытаясь срезать с конца 4 символа получает, что последний аргумент равен -1. Ищите почему в TmpMonth попадает "Авг".
Юзайте дебагер, сразу все станет понятно и без форума. |
|
26.08.2008, 12:42 | #10 |
Участник
|
Почему в TmpMonth ????? а не Month!!!!!......
в том то и дело что я не могу найти где происходит заполнение этого значения Month... Вообще где-то в функции PayrollCalculate.CalcTimes: Нашел вот этот код: Код: Months[Index] := FORMAT(CurrDate,0,'<Month Text>') + ' ' + FORMAT(DATE2DMY(CurrDate,3)); Я бы сюда не писал если было бы здесь все просто... |
|
26.08.2008, 12:51 | #11 |
Участник
|
|
|
26.08.2008, 12:51 | #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; |
|
26.08.2008, 13:15 | #13 |
Участник
|
Строк очень много... так много что неделю сидеть прийдется
убейте меня щяс нах.. в окно выкину свой комп.... Последнее значение которое принмает ТmpMonth = август, но пред ним еще Июль... но ошибка на ней не падет |
|
26.08.2008, 14:23 | #14 |
Участник
|
В 3,7 я процедуры с именем CalcTimes() не нашел. Массива с именем Month не нашел.
|
|
26.08.2008, 14:55 | #15 |
MCTS
|
Эта строка там не спроста:
Код: PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQty,TotalSalary,Month); Копать - там. |
|
26.08.2008, 15:07 | #16 |
MCTS
|
Глянул одним глазком кодеюнит:
Массив в кодеюните заполняется с 1 по MQty. (как считатеся MonthQty, а он считается в том же кодеюните не смотрел). А читается с 1 по 12 (это уже в отчете). |
|
26.08.2008, 15:19 | #17 |
MCTS
|
Я подумал еще и передумал: Перед тем как вызывать PayrollCalculate.CalcTimes(...), очистите массив CLEAR(Month);
|
|
26.08.2008, 16:21 | #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 символа!! (или я неправильно его читаю??) |
|
26.08.2008, 16:53 | #19 |
Участник
|
Нет. TmpMonth судя по всему не массив и принимает значение одного из элементов Month[]. В цикле идет последовательное присвоение нового значения Month[i]. А COPYSTR() урезает TmpMonth. То есть по идее последовательного урезания не должно быть.
|
|
27.08.2008, 09:41 | #20 |
Участник
|
TmpMonth не массив...
CLEAR(Month); перед PayrollCalculate.CalcTimes(...), выводит ошибку: Неопределенная дата не может быть использована для вычисления. Дата: 0D Форумал: -12M Щяс буду разбираться с этим... |
|