Деталь визы для раздела Задачи

Есть задача расширить раздел Задачи деталью Визы. Сделал по аналогии с разделом Документы сервис Таблицу tbl_TaskVises, Запрос sq_TaskVises,Датасет ds_TaskVises. Добавил в wnd_TaskWorkSpace деталь Визы, с рабочим окном wnd_VisesDetailGridArea, а теперь вопрос, как дальше все это связать и заставить работать.

Нравится

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

Вам нужно в скрипте scr_TasksWorkspace раздела задач в функции RefreshDetails дописать код обновления детали "Визы" по аналогии со скриптом scr_DocumentsWorkspace раздела документов (т.е. добавить вызов функции RefreshVisesDetail и сами функции RefreshVisesDetail и InitializeVisesDetail). Кроме того в запросе на выборку sq_TaskVises проверить наличие параметра TaskID типа уникальный идентификатор и фильтра сравнения вида tbl_TaskVises.TaskID = Parameter: TaskID. В функции RefreshVisesDetail передавать в функцию RefreshDetailData четвертым аргументом 'TaskID'.

Спасибо, в скрипте
scr_TasksWorkspace
сделал все по аналогии

"Стоян Виталий" написал:Кроме того в запросе на выборку sq_TaskVises проверить наличие параметра TaskID типа уникальный идентификатор и фильтра сравнения вида tbl_TaskVises.TaskID = Parameter: TaskID.

Это все есть тоже делал по аналогии с Документами.
Датасет инициализируется. Визы добавляются, НО установить визу не получается нажатие кнопки "Установить" выдает сообщение "У Вас нет права на установку Виз". В отладчике выяснил - "собака порылась" при вызове функции ChangeIsSetFieldValue(), там есть проверка на предмет вхождения текущего пользователя в список лиц, которые указаны в справочнике Виз, как лица устанавливающие визу.

	var Dataset = BaseGridArea.GridDataset;
	var ContactID = Connector.CurrentUser.ContactID;
	if (!CanContactSetVisa(GetSelectedViseIDArray(), ContactID)) {
		ShowWarningDialog("Вы не имеете разрешений для установки/сброса выделенных виз.");
		return;
	}

Функция GetSelectedViseIDArray() дает пустое значение. В этой функции

function GetSelectedViseIDArray() {
	var Dataset = grdData.DatasetLink.Dataset;
	var ArrayIDs = GetArrayByCollection(grdData.SelectedIDs);
	var ArrayVisaIDs = new Array();
	Dataset.DisableEvents();
	try {
		for (var i = 0; i < ArrayIDs.length; i++) {
			Dataset.Locate('ID', ArrayIDs[i]);
			ArrayVisaIDs.push(Dataset.ValAsStr('VisaID'));
		}
	} finally {			 
		Dataset.EnableEvents();	
	};
	return ArrayVisaIDs;
}

В этом скрипте, как я понимаю, мы должны получить список выделенных виз которые нужно установить, так вот функция GetArrayByCollection(grdData.SelectedIDs)- возвращает пустой список, хотя виза на детали Визы - есть и на ней установлен курсор, отсюда вопрос, почему стандартная функция не работает, хотя в остальных объектах к которым есть деталь визы, список не пустой?

"Стоян Виталий" написал:RefreshVisesDetail передавать в функцию RefreshDetailData четвертым аргументом 'TaskID'

Да это тоже все сделал...

А в grdData.SelectedIDs в Items(i) тоже нет значений?

"Стоян Виталий" написал:А в grdData.SelectedIDs в Items(i) тоже нет значений?

В смысле? В отладчике GetArrayByCollection(grdData.SelectedIDs).length = 0
ArrayIDs[0] = пусто, ArrayIDs.length=0
Или проверить значение grdData.SelectedIDs.Items(0)..(n)?

"Черных Руслан" написал:Или проверить значение grdData.SelectedIDs.Items(0)..(n)?

Да, именно проверить, есть ли выбранные элементы реестра.

grdData.SelectedIDs.Items(0)
List index out of bounds (0)

Значения grdData.SelectedIDs заполняются автоматически. Пока непонятно, почему они у Вас пустые.
Указанную Вами проблему нужно воспроизвести. Есть предложение решение проблемы перенести в формат e-mail (письмом на support@tscrm.com с пометкой "Виталию"), поскольку она является индивидуальной и для ее решения необходимо обсудить способ воспроизведения (удаленное подключение, резервная копия базы).

Письмо отправил

Добрый день!
Мы получили Ваше письмо и приступили к тестированию. Как только будут результаты, мы сразу же Вам сообщим.
Номер Вашего обращения 086362

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