Деталь "Трудозатраты" в разделе "Проекты"

Здравствуйте!
Возникает ошибка в следующих действиях. Когда заходим в детали "Трудозатраты" и создаем новую /удаляем запись для "Работы" в разделе проекты. Возникает ошибка "ParentID is undefined".

function ds_ProjectOnDatasetBeforePost(Dataset, DoPost) {
        InitializeActionsObjectByDataset(Dataset);
        Project.IsAppend = (Dataset.State == dstInsert);
        Project.ParentID = Dataset.Values('ParentID'); //Ошибка
        var HasChilds = Dataset.Values('HasChilds');
        var ProjectID = Dataset('ID');
        if (Project.IsAppend) {
                SetProjectElementDefaultValues(Dataset);
                Dataset.Values('SortOrder') = GetProjectMaxSortOrder() + 1;
        } else {
                if ((HasChilds) && (Dataset.DataFields('StateID').ValueIsChanged)) {
                        if (!IsStateAllowedByChildElements(ProjectID, Dataset('StateID'))) {
                                DoPost.Value = false;
                                return;
                        }

При созданий значений для других деталий ошибка не возникает.
Еще ко всему прочему при закрытии Terrasoft XRM стала возникать ошибка "Access violation at address in module 'vcl70.bpl'. Read of address 0C528834".
Версия системы Terrasoft XRM 3.3.2.254.
Подскажите, в чем может быть проблема?
Благодарю заранее.

Нравится

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

Здравствуйте, Валентина!

Данные два сбоя, вероятнее всего, не связаны между собой. Access violation, как правило, указывает на то, что не зарегистрированы бинарные файлы системы. Иногда может появляться, если ядру передана неверная информация.

Что касается сбоя при удалении работы, уточните, пожалуйста, вносились ли изменения в базовую логику раздела? Если да, тогда необходима отладка программного кода.

Здравствуйте, Анна!
На счет Access violation, перерегистрация не помогла. Помогла очистка cache и profile.
Но ошибка появляется при совершении следующих действий:

Первый вариант: Создаю "Проект". К этому проекту в детали "Трудозатраты" создаю новую запись. Ошибка "ParentID is undefined" не возникает. Но возникает ошибка Access violation при закрытии.
Второй вариант: Создаем "Стадию". К этой стадии, в детали "Трудозатраты" создаю новую запись.
Ошибка "ParentID is undefined" не возникает. Но возникает ошибка Access violation при закрытии.
Третий вариант:Создаем "Работу". К этой работе, в детали "Трудозатраты" создаю новую запись. Ошибка "ParentID is undefined" возникает. И возникает ошибка Access violation при закрытии.
Но новые записи создаются по трудозатратам, в любом случаи.

Думаю эти ошибки взаимосвязаны. При удалении новых записей по трудозатратам и очиски cache profile, ошибка Access violation, не возникает.

На счет того, что мы изменяли или нет что-то в террасофте не могу точно сказать. Т.к. до меня были другие сотрудники. Но проверив, бэкап за 2010 год. Это самый ранний период. Возникают те же ошибки. Ну сомневаюсь, что были совершены изменения в те времена. Может при создании трудозатрат нужно соблюсти какие-то определенные действия, которые я нарушаю. По докумету TSClient UG, вроде не имеет значение начну создавать новую запись по трудозатратам в "Проекте", а потом в "Задачах" или наоборот.
Можно у ли у вас запросить исходные файлы по разделу "проекты"? Я бы заменила файлы на тестовой версии и попробовала реализовать возможности создание новых записей по "Трудозатратам" для проектов.
Благодарю заранее за помощь!

Здравствуйте, Валентина!

В таком случае технической поддержке необходима резервная копия базы данных для того, чтобы протестировать сбой и произвести отладку. Если ли у Вас возможность предоставить скриншот окна отладчика Call Stack?

Здравствуйте, Анна!
Предоставляю Вам скриншот, каким образом возникает ошибка. Call Stack не вызывается. Хорошо, я сделаю backup базы данных. И пришлю письмо наверное в support (support@terrasoft.ru) с необходимой информацией для доступа к backup через ftp (если нужно Вам прислать письмо, то оставьте пожалуйста свою почту).

Валентина, попробуйте в запросе sq_Project установить галочку "всегда выбирать в запросе" для колонки ParentID:

parentID

Да, Анна я тоже думала, что ошибка связанна с запросом. Галочка уже установлена.

Валентина, а в датасете установлены галочки енерировать запрос на вставку и Генерировать запрос на удаление?

"Alimova Anna" написал:

Валентина, а в датасете установлены галочки енерировать запрос на вставку и Генерировать запрос на удаление?

С уважением, Анна Алимова

Специалист II линии технической поддержки Terrasoft


Да, установлено. Скидываю скриншоты для подтверждения.

Валентина, в таком случае необходима отладка скриптов. Вопрос с резервной копией базы данных актуален.

"Alimova Anna" написал:

Валентина, в таком случае необходима отладка скриптов. Вопрос с резервной копией базы данных актуален.

С уважением, Анна Алимова

Специалист II линии технической поддержки Terrasoft


Да, Анна я отправила еще с утра в support (support@terrasoft.ru) всю необходимую информацию для того чтобы скачать backup. Были какие-то проблемы у ваших сотрудников со скачкой файла, я им отправила ответ с возможностью решение проблемы. Если ответ не написали, значит проблем не возникло.

Валентина, попробуйте отредактировать строку function ds_ProjectOnDatasetBeforePost(Dataset, DoPost в скрипте ds_ProjectScript, на которой появляется сбой, следующим образом:

Project.ParentID = GetFieldValueFromDisabledField(Dataset, 'ParentID');

disImg

Анна, после того как отредактировала функцию function ds_ProjectOnDatasetBeforePost(Dataset, DoPost). Я попробовала добавть новую запись в трудозатраты. Возникает все равно ошибка, но уже в scr_ProjectExport .

Здравствуйте, Валентина!

В данном случае рекомендую Вам посмотреть сбой отладчиком скриптов.

Сообщение, которое возникает, говорит о том, что Вы пытаетесь присвоить полю CreatedOn значение null.

Для устранения сбоя следует написать дополнительную обработку пустого значения поля ds.Values('EstimatedStartDate'). Пример:

	var CreatedOn;
	if(ds.Values('EstimatedStartDate') != null){	
		CreatedOn =		System.DateTimeToStr(GetFieldValueFromDisabledField(ds, 'EstimatedStartDate'));
	} else {
		CreatedOn =     new Date(System.Now());
	}

Здравствуйте Анна!

В общем такая ситуация происходит. В скрипте scr_ProjectExport в функцию CreateUpdateProject(ds) написала дополнительную обработку пустого значения.

function CreateUpdateProject(ds){
	var ProjectID = 	ds.Values('ID');
	var ProjectName = ds.Values('Name');
	var ClientID = ds.Values('ClientID');
	var ClientName = ds.DataFields.ItemsByName('ClientID').DisplayValue;
//	var CreatedOn = System.DateTimeToStr(ds.Values('EstimatedStartDate'));
	var CreatedOn;
        if(ds.Values('EstimatedStartDate') != null){   
                CreatedOn =  System.DateTimeToStr(GetFieldValueFromDisabledField(ds, 'EstimatedStartDate'));
        } else {
                CreatedOn = new Date(System.Now());
        }

После чего повалило еще куча ошибок. Вот тут в плановых показателях я заменила Dataset.Values на GetFieldValueFromDisabledField. Ошибка прекратила появляться.

function SetDuration(Dataset) {
	if (Dataset.Attributes('IsDurationCalculated')) {
		return;
	}
//	var CalendarID = Dataset.Values('CalendarID');
//	var EstimatedStartDate = Dataset.Values('EstimatedStartDate');
//	var EstimatedDueDate = Dataset.Values('EstimatedDueDate');
   	var CalendarID = GetFieldValueFromDisabledField(Dataset,'CalendarID');
	var EstimatedStartDate = GetFieldValueFromDisabledField(Dataset,'EstimatedStartDate');
	var EstimatedDueDate = GetFieldValueFromDisabledField(Dataset,'EstimatedDueDate');

Далее в скрипте ds_ProjectScript. Произвела замену.

function IsProjectResized(Dataset) {
//	var NewDateDifference = Dataset.Values('EstimatedDueDate') - 
//		Dataset.Values('EstimatedStartDate');
	var NewDateDifference = GetFieldValueFromDisabledField (Dataset, 'EstimatedDueDate') - 
		 GetFieldValueFromDisabledField(Dataset,'EstimatedStartDate');
	var OldDateDifference = Dataset.DataFields('EstimatedDueDate').OldValue -
		Dataset.DataFields('EstimatedStartDate').OldValue;
	return (NewDateDifference != OldDateDifference);
}
function ds_ProjectOnDatasetAfterPost(Dataset) {
	//Project.ParentID = Dataset.Values('ParentID');
	Project.ParentID = GetFieldValueFromDisabledField(Dataset, 'ParentID');
	var ProjectID = Dataset.Values('ID');

В скрипте scr_ProjectUtils

function SetDuration(Dataset) {
	if (Dataset.Attributes('IsDurationCalculated')) {
		return;
	}
/**	
var CalendarID = Dataset.Values('CalendarID');
	var EstimatedStartDate = Dataset.Values('EstimatedStartDate');
	var EstimatedDueDate = Dataset.Values('EstimatedDueDate');
	/**/
 
	var CalendarID = GetFieldValueFromDisabledField(Dataset,'CalendarID');
	var EstimatedStartDate = GetFieldValueFromDisabledField(Dataset,'EstimatedStartDate');
	var EstimatedDueDate = GetFieldValueFromDisabledField(Dataset,'EstimatedDueDate');
	if (!CheckDatasetFieldsFilling(Dataset, 'EstimatedStartDate',
		'EstimatedDueDate', 'CalendarID')) {
		return;
	}

Исчезли все ошибки. Подскажите, может то что я исправила не совсем верно.

Здравствуйте, Валентина!

В данном случае все исправлено корректно.

Вероятнее всего, сбои возникли из-за того, что Вами были добавлены дополнительные обработки, требующие включения полей, которые в запросе не включены.

Здравствуйте, Анна.
Спасибо за ответ!

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