Вопрос

Invalid Argument...

Что может быть причиной озвученной ошибки в последней строке?

ContractBalDataset.Parameters.ItemsByName('pin_status_id').ValAsStr = ContractDataset.ValAsStr('BillingIDStatus');

ContractBalDataset.Parameters.ItemsByName('pin_currency_id').ValAsStr = ContractDataset.ValAsStr('Currency');

ContractBalDataset.Parameters.ItemsByName('pin_owner_id').ValAsInt = ContractDataset.ValAsInt('UrFaceBillingID');

т.е. не может прочитать значение в ContractDataset.ValAsInt('UrFaceBillingID')

ContractBalDataset - тип ADODataset
ContractDataset - тип DBDataset

Поле 'UrFaceBillingID' было добавлено в таблицу и в датасет перед их использованием в скрипте, права на таблицу у пользователя есть.
Что интересно - у меня выполняется, на компе пользователя выдает эту ошибку...

Нравится

12 комментариев

Уточните, пожалуйста, какой тип у колонки UrFaceBillingID в таблице и в датасете: целое число, строка или uniqueidentifier?

Целочисленное и там и там.
Я тоже сразу о типах задумался, но ведь - "у меня выполняется, на компе пользователя выдает эту ошибку..."

Вы проверяли значения этого поля в момент возникновения проблемы? Проверка у Вас и у пользователя происходит на одном и том же наборе данных, или есть отличия?

Поле имеет корректное значение. Набор данных один и тот же. Но, по-моему проблема решена - заголовок поля в датасете отличался от названия в скрипте... хотя всё равно не понятно почему у меня работало... отпишусь позже, этот функционал используется всего раза два-три в день.

Добрый день! У меня тоже проблемма при выполнении метода OnDatasetCalcFields, ошибка:
"Ошибка выполнения метода 'adods_ContactOnDatasetCalcFields'. Invalid argument".
Вот код функции:

function adods_ContactOnDatasetCalcFields(Dataset) {
	var Year = Number(Dataset('BirthYear'));
	var Month = Dataset.ValAsInt('BirthMonth');
	var Day = Dataset.ValAsInt('BirthDate');
	if (Day == 0) {
		Day++;
	}
	if (Year > 0) {
		Dataset('BirthDay') = new Date(Year, Month, Day).getVarDate();
	} else {
		Dataset('BirthDay') = null;
	}
}

Тип вычисляемого поля 'BirthDay' - дата/время.

Больше того, я поставил для теста в эту функцию блок try-catch, чтобы посмотреть, на какой записи воспроизводится ошибка, но лог мне этого не выдал. Просто показал ошибку, как и раньше.

Year, Month, Day проверяйте значения

Так ведь Dataset.ValAsInt вернет 0, если там null.

new Date(Year, Month, Day)

Month должен быть от 0 до 11, возможно в базе хранится число от 1 до 12 ?

ну я к тому что может быть дата нереальная выходит))
debugger сразу в начале функции ставьте и смотрите где слетит...
или просто задайте var Day = 22 и так далее да попробуйте

Только что попробывал написать сдедующее

new Date(2010, 14, 38).getVarDate()

Результат: 07.04.2011
Наверное дело не в некорректных месяцах и днях.

Михаил, проверьте отладчиком, на какой строке происходит сбой. Блок try...catch в этом не поможет, а сразу перебросит курсор отладчика на catch. Попробуйте проверять, как советует Александр. Возможно, проблема возникает ещё на этапе инициализации переменных. Например, значение поля Dataset('BirthYear') не является числом. В этом случае Number(Dataset('BirthYear')) вернёт NaN.

Нашел, в чем проблемма:
Dataset.ValAsInt возвращает ошибку Invalid argument если значение поля пустая строка (''), а не null.
Month = Dataset.ValAsInt('BirthMonth') - равно 0, если 'BirthMonth' null
Month = Dataset.ValAsInt('BirthMonth') - ошибка Invalid argument, если 'BirthMonth' ''

Показать все комментарии