Добрый день!

Есть необходимость из окна wnd_SolutionsGridArea (которое вызывается из окна поиска в БЗ) сделать кнопку, по нажатию которой будет открываться окно отображения деталей для файлов (wnd_FilesDetail или wnd_FilesDetailGridArea). Сделал кнопку, повесил на неё обработчик:

function btnOpenFileOnClick(Control) {
        var FilesDetailWindow = GetSingleItemByCode('wnd_FilesDetailGridArea');
        FilesDetailWindow.Attributes('ParentItemID') = dlData.Dataset.Values('ID');
        FilesDetailWindow.Attributes('ParentItemFieldName') = 'ItemID';
        FilesDetailWindow.Attributes('TableUSI') = 'tbl_FileInSolution';
        FilesDetailWindow.Attributes('InsertLinkUSI') = 'iq_FileInSolution';
        FilesDetailWindow.Prepare();
        if (!FilesDetailWindow.ComponentsByName('dlData').Dataset.IsActive) {
                FilesDetailWindow.ComponentsByName('dlData').Dataset.Open();
        }
        FilesDetailWindow.Show();
}

После того как дописал открытие датасета вручную - стал появляться список файлов, но с ним невозможно работать: при добавлении файлов выскакивает ошибка. И этот список файлов не зависит от выбранного решения из БЗ. Наставьте на путь истинный, где и что я не так делаю?

Нравится

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

Добрый день.

Мне кажется, правильнее было бы устанавливать значение атрибута "ParentItemFieldName" так:

FilesDetailWindow.Attributes('ParentItemFieldName') = 'SolutionID';

Уточните, пожалуйста, какое именно сообщение об ошибке появляется.

Установил значение атрибута "ParentItemFieldName" как Вы и рекомендовали. При этом после открытия окна файлов всё равно отобразился список всех файлов, которые есть. Но зато при попытке добавить файл появилась другая ошибка (окошко с надписью "Несоответствие типа"). При этом файл добавляется и в списке файлов остаются только связанные с данным решением из БЗ файлы.

Попробуйте перед открытием датасета накладывать фильтр по записи:

var FilesDataset = FilesDetailWindow.ComponentsByName('dlData').Dataset;
if (!FilesDataset.IsActive) {
        ApplyDatasetFilter(FilesDataset, 'ItemID', dlData.Dataset.Values('ID'), true);
        FilesDataset.Open();
}

Что касается сообщения "Несоответствие типа" - нужна более подробная информация. Попробуйте включить отладчик и посмотреть, в каком месте скрипта возникает проблема. Определите с помощью профайлера текст запроса, который посылается в это время на сервер.

Спасибо, Олег! Окно деталей файла открывается нормально, отфильтровано.
Ошибку "Несоответствие типа" я попытался выловить с помощью отладчика. Получилось что в функции SetupGiveRightsByParentItemInsertSelectQuery скрипта scr_FilesDetailGridArea в строке кода PrimarySelect.FromTable = ItemRightsTable; переменная ItemRightsTable имеет значение null. Возможно при создании окна еще нужно указать какие-то атрибуты или выставить параметры, но, к сожалению, я не знаю какие. Не могли бы Вы помочь? (из раздела БЗ функция Добавить файл в детали Файлы работает нормально).

Кажется разобрался, добавил атрибут окна

FilesDetailWindow.Attributes('ItemRightsTable') = dlData.Dataset.SelectQuery.Items(0).FromTable.RightsTable;

и ошибка пропала. Теперь еще одна маленькая проблемка: как только открываешь файл *.xls на просмотр, то тут же выскакивает сообщение "Сохранить измененый файл в базу данных?". Хотя я его еще только открыл. В чем может быть проблема? Куда копать?

PS. Хотя это происходит и при использовании стандартной кнопки Действия-Открыть файл из детали файлы.

Данная ситуация исправлена в версии Terrasoft 3.3.2, т.к. это не является ошибкой, а особенностью работы MS Excel, который при открытии любого файла *.xls посылает сообщение, что файл уже был изменен. На данный момент исправить такое “поведение” системы при открытии файлов формата MS Excel не представляется возможным.
Как вариант, можете убрать появление данного окна и всегда сохранять файл в базу.
В том случае, если Вы хотите убрать появление этого сообщения и сохранять всегда внесенные изменения,независимо от выбора ответа в диалоговом окне, Вам нужно закомментировать строки вызова этого сообщения.
В сервисе scr_Consts объявлена переменная var DoYouWantToSaveChangedFileToDatabase = "Сохранить измененный файл в базу данных?";
Эта переменная используется в функции ShowConfirmationDialog в качестве параметра для вызова диалогового окна. Этот вызов осуществляется в функции function SetFileIsChanged сервиса scr_FilesDetailGridArea.
Если Вам необходимо, чтобы изменения, внесенные в открытый файл сохранялись в базу без появления сообщения, Вам нужно закомментировать строки вызова этого сообщения.

Да, Татьяна, спасибо большое. Сделал так, как Вы и рекомендовали. Думаю так будет лучше. Теперь сохранение в БД файла происходит в зависимости от того, сохранили мы во временный файл изменения в этом документе или нет.

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