Как на деталь "Подчиненные/родительские документы" добавить фрейм с файлами
Может кто подскажет.
Есть задача переделать деталь "Подчиненные/родительские документы", так чтобы в ней в отдельном фрейме отображались соответствующие документам прикрепленные файлы (прикрепленые черезь деталь Файлы). Т.е. деталь состоит из двух частей: слева грид докуметов, справа для выбранного документа отображается список файлов (как в детали Файлы).
Соответственно вопрос насчет реализации этого:
Т.е. нужно добавить на wnd_DocumentInDocumentGridArea новый фрейм, который будет содержать другие элементы для отображения нужной информации.
Проблема в том, что wnd_DocumentInDocumentGridArea унаследовано от wnd_BaseGridArea, а нужно переместить элемент grdData (унаследованный) в этот новый фрейм.
Нравится
Не меняйте внешний вид wnd_DocumentInDocumentGridArea. На родительском Page просто добавьте еще один WindowContainer и там уже реестр файлов. Реализация обновления - аналогично обновлению делали из основного реестра воркспейса.
нет. Представить что wnd_DocumentInDocumentGridArea - это и есть воркспейс, и на изменение выделенного документа обновлять подчиненую деталь(с файлами).
Только сейчас дошли руки попробовать сделать. Для начала решил попробовать на детали Документы (показалось что проще чем Род/Подч документы) из раздела Продажи. Добавил контейнер с wnd_FilesDetail, для обновления данных попробовал использовать стандартную функцию RefreshFilesDetail где вместо параметра BaseWorkspace
указал OpportunitiesWorkspace.DocumentsWindow, но так не получилось т.к. внутри функции есть создание переменной
var Dataset = BaseWorkspace.GridDataset;
пришлось создать свой вариант этой функции изменив эту строку на
var Dataset = BaseWorkspace.ComponentsByName('dlData').Dataset;
Аналогично поступил с RefreshCommonDetail.
т.е. так в wnd_OpportunitiesWorkspaceScript
else if (pcDetails.ActivePage.Name == pgDocumentsDetail.Name) {
RefreshDocumentsDetail(); changedRefreshFilesDetail(OpportunitiesWorkspace.DocumentsWindow, wndFilesInDocumentDetail, 'DocumentID', 'tbl_FileInDocument', 'iq_FileInDocument');
}
Теперь окно Файлы отображается на детали Документы.
Остался один вопрос: не понятно на какое событие повесить обновление окна файлы при выборе разных документов в детали Документы. Сейчас обновление происходит при смене записи в основном реестре раздела (т.е. при смене продажи).
Подобно тому, как в окне любого раздела функция RefreshDetails вызывается при обработке событий даталинка OnDatasetAfterPositionChange, OnDatasetRefreshRecord, OnDatasetAfterPost, нужно поступать и здесь: обновлять реестр файлов при обработке событий dlDataOnDatasetAfterPositionChange, dlDataOnDatasetRefreshRecord и dlDataOnDatasetAfterPost, где dlData - даталинк детали wnd_DocumentInDocumentGridArea.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Примерно так и думал, но как добраться до этих событий?
(еще раз уточню я сейчас делаю это в разделе Продажи в детали Документы)
Через wnd_OpportunitiesWorkspace я до них добраться не могу.
Напрямую через wnd_DocumentsGridArea с обработкой событий в scr_DocumentsGridArea вроде не-то.
Судя по всему, именно там и нужно обрабатывать. Но при этом необходимо учитывать, что этот реестр используется и как основной реестр раздела "Документы". Поэтому можно ввести дополнительный атрибут, по которому будем идентифицировать местонахождение грида, и в зависимости от его значения (если мы находимся в детали раздела "Продажи") обновлять или не обновлять деталь "Файлы".
Также обратите внимание: в базовой версии обработка этих событий наследуется из wnd_BaseGridArea, поэтому в скрипте scr_DocumentsGridArea обработчики не объявлены. В Вашем случае необходимо их переопределить, например, так:
function dlDataOnDatasetRefreshRecord(Dataset, KeyValue, AddNewRecordOnPage) { scr_BaseGridArea.dlDataOnDatasetRefreshRecord(Dataset, KeyValue, AddNewRecordOnPage); ..... (Ваш код) }
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Будет ли работать, если я использую стандартную функцию
RefreshFilesDetail ?
Т.е. пишу в scr_DocumentsGridArea:
function dlDataOnDatasetAfterPositionChange(Dataset) {
RefreshFilesDetail(BaseGridArea, wndFilesInDocumentDetail, 'DocumentID', 'tbl_FileInDocument', 'iq_FileInDocument');
}
И вопрос как получить wndFilesInDocumentDetail, чтобы подставить в эту функцию из этого места?
Да, работать будет. Но для этого необходимо подключить к скрипту scr_DocumentsGridArea скрипт scr_WorkspaceUtils.
Вместо wndFilesInDocumentDetail Вам необходимо подставить название WindowContainer'а, который содержит wnd_FilesDetail.
Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.
Получилось практически то что нужно.
wndParentDocFilesDetail получил как Self.ParentContainer.ParentWindow.ComponentsByName('wndParentDocFilesDetail');
Спасибо за помощь.
Осталось еще немного причесать эту конструкцию и можно пользоваться.