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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.08.2008, 12:28   #1  
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   #2  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
В TmpMonth у вас передается строка "Авг". Не "Август 2006", а "Авг". COPYSTR пытаясь срезать с конца 4 символа получает, что последний аргумент равен -1. Ищите почему в TmpMonth попадает "Авг".
Юзайте дебагер, сразу все станет понятно и без форума.
Старый 26.08.2008, 12:51   #3  
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, 16:21   #4  
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   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от RedFox Посмотреть сообщение
Обратите внимание на код в цикле. Мне он кажется некорректным.
После 1 прохода переменная TmpMonth принимает полное значение. После второго прохода еще урезается на 4 символа!! (или я неправильно его читаю??)
Нет. TmpMonth судя по всему не массив и принимает значение одного из элементов Month[]. В цикле идет последовательное присвоение нового значения Month[i]. А COPYSTR() урезает TmpMonth. То есть по идее последовательного урезания не должно быть.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:20.