Есть задача расширить раздел Задачи деталью Визы. Сделал по аналогии с разделом Документы сервис Таблицу tbl_TaskVises, Запрос sq_TaskVises,Датасет ds_TaskVises. Добавил в wnd_TaskWorkSpace деталь Визы, с рабочим окном wnd_VisesDetailGridArea, а теперь вопрос, как дальше все это связать и заставить работать.
Нравится
Вам нужно в скрипте 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) тоже нет значений?
В смысле? В отладчике GetArrayByCollection(grdData.SelectedIDs).length = 0
ArrayIDs[0] = пусто, ArrayIDs.length=0
Или проверить значение grdData.SelectedIDs.Items(0)..(n)?
"Черных Руслан" написал:Или проверить значение grdData.SelectedIDs.Items(0)..(n)?
Да, именно проверить, есть ли выбранные элементы реестра.
Значения grdData.SelectedIDs заполняются автоматически. Пока непонятно, почему они у Вас пустые.
Указанную Вами проблему нужно воспроизвести. Есть предложение решение проблемы перенести в формат e-mail (письмом на support@tscrm.com с пометкой "Виталию"), поскольку она является индивидуальной и для ее решения необходимо обсудить способ воспроизведения (удаленное подключение, резервная копия базы).
Добрый день!
Мы получили Ваше письмо и приступили к тестированию. Как только будут результаты, мы сразу же Вам сообщим.
Номер Вашего обращения 086362