AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.08.2008, 10:41   #1  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Ни как не могу выловить где происходит расчет значения 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  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
А FORMAT для получения короткого обозначения месяца не пробовали использовать? Или я может быть чего-то не хочу понимать...
Старый 26.08.2008, 11:30   #3  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
TmpMonth принимает значения:
Сентябрь 2006
Октяберь 2006
Ноябрь 2006
а потом просто
"Авг"

Вот и не могу понять почему "Авг"...... почему такое значение выходит
Старый 26.08.2008, 11:42   #4  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от by_HT Посмотреть сообщение
Вот и не могу понять почему "Авг"...... почему такое значение выходит
Я тоже не понимаю. Если принимает Месяц + Год4, то вот тут COPYSTR(TmpMonth,1,STRLEN(TmpMonth)-4) она отрубает 4 символа с конца, то есть Год4. Остается название месяца. Почему от Август 2006 остался Авг непонятно )) Видимо передавался в TmpMonth не "Август 2006", а "Август "
Старый 26.08.2008, 12:16   #5  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
скорей всего так оно и есть.... И как мне исправить эту ошибку??
Старый 26.08.2008, 12:23   #6  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от by_HT Посмотреть сообщение
скорей всего так оно и есть.... И как мне исправить эту ошибку??
Было бы легче, если бы вы запостили сюда сообщение об ошибке, о которой вы говорите. Или ошибка в том и состоит, что возвращается Авг вместо Августа? Если так, то надо смотреть почему в TmpMonth значение без года ...
Старый 26.08.2008, 12:28   #7  
Corleone is offline
Corleone
Участник
 
355 / 10 (1) +
Регистрация: 27.05.2004
Адрес: London
Где ты вообще такой код нашел, у тебя какая версия нав? Если сам написал, то смотри где у тебя определяется TmpMonth.
Старый 26.08.2008, 12:28   #8  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Ошибка:
Значение 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  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
В TmpMonth у вас передается строка "Авг". Не "Август 2006", а "Авг". COPYSTR пытаясь срезать с конца 4 символа получает, что последний аргумент равен -1. Ищите почему в TmpMonth попадает "Авг".
Юзайте дебагер, сразу все станет понятно и без форума.
Старый 26.08.2008, 12:42   #10  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Почему в TmpMonth ????? а не Month!!!!!......
в том то и дело что я не могу найти где происходит заполнение этого значения Month...
Вообще где-то в функции PayrollCalculate.CalcTimes:
Нашел вот этот код:
Код:
	  Months[Index] := FORMAT(CurrDate,0,'<Month Text>') + ' ' + FORMAT(DATE2DMY(CurrDate,3));
Но он мне абсолютно не помогает.......значение выводятся нормально!!!!
Я бы сюда не писал если было бы здесь все просто...
Старый 26.08.2008, 12:51   #11  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Цитата:
Сообщение от Gmc Посмотреть сообщение
Где ты вообще такой код нашел, у тебя какая версия нав? Если сам написал, то смотри где у тебя определяется TmpMonth.
4.0 SP2
У вас что то по другому написано?????
Старый 26.08.2008, 12:51   #12  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Код:
  // 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;
Поставьте точку останова, где я написал и в дебагере посмотрите, что заносится в TmpMonth. Если встретите "Авг" надо смотреть корректность заполнения массива Month[i].
Старый 26.08.2008, 13:15   #13  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Строк очень много... так много что неделю сидеть прийдется

убейте меня

щяс нах.. в окно выкину свой комп....

Последнее значение которое принмает ТmpMonth = август, но пред ним еще Июль... но ошибка на ней не падет
Старый 26.08.2008, 14:23   #14  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
В 3,7 я процедуры с именем CalcTimes() не нашел. Массива с именем Month не нашел.
Старый 26.08.2008, 14:55   #15  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Эта строка там не спроста:
Код:
PayrollCalculate.CalcTimes(EmployeeSalary,UOM,TypeCalc::Vacation,VacationData,MQty,TotalSalary,Month);
Наверное в ней и происходит заполнение Month, по крайней мере она в данный кодеюнит передается.

Копать - там.
Старый 26.08.2008, 15:07   #16  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Глянул одним глазком кодеюнит:

Массив в кодеюните заполняется с 1 по MQty. (как считатеся MonthQty, а он считается в том же кодеюните не смотрел).

А читается с 1 по 12 (это уже в отчете).
Старый 26.08.2008, 15:19   #17  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Я подумал еще и передумал: Перед тем как вызывать PayrollCalculate.CalcTimes(...), очистите массив CLEAR(Month);
Старый 26.08.2008, 16:21   #18  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от 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  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от RedFox Посмотреть сообщение
Обратите внимание на код в цикле. Мне он кажется некорректным.
После 1 прохода переменная TmpMonth принимает полное значение. После второго прохода еще урезается на 4 символа!! (или я неправильно его читаю??)
Нет. TmpMonth судя по всему не массив и принимает значение одного из элементов Month[]. В цикле идет последовательное присвоение нового значения Month[i]. А COPYSTR() урезает TmpMonth. То есть по идее последовательного урезания не должно быть.
Старый 27.08.2008, 09:41   #20  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
TmpMonth не массив...

CLEAR(Month); перед PayrollCalculate.CalcTimes(...), выводит ошибку:
Неопределенная дата не может быть использована для вычисления.
Дата: 0D
Форумал: -12M

Щяс буду разбираться с этим...
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:25.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.