Есть справочник в котором несколько полей, одно из них "Проект", которое в базе хранится, как ProjectId. Хочу сделать деталь для проекта в которой будут отображаться соответствующие записи из справочника.
Уже сделано:
1. Создал окно (потомок от базового окна детали).
2. В нем установил нужный дата сет, и создал дата гридвью с нужными полями.
3. Для окна проектов добавил новую закладку деталей с созданным окном
Теперь в окне проектов отображается созданная деталь, но она пуста.
Какие дальнейшие шаги должны быть проделаны?
Так же не совсем понятно, как правильно создать фильтр, чтобы отображались детали выбранного проекта.
Нравится
Вам нужно в функцию обновления деталей скрипта раздела добавить блок для обновления Вашей детали. Это выглядит примерно так:
else if (pcDetails.ActivePage.Name == pg<Название справочника>Detail.Name) { RefreshCommonDetail(BaseWorkspace, wnd<Название справочника>Detail, 'ProjectId', 'ProjectId'); }
Необходимо в запросе справочника создать фильтр сравнения с кодом ProjectId, который сравнивает поле ProjectId таблицы справочника с одноименным параметром типа "Уникальный идентификатор".
добавил в скрипт scr_ProjectWorkspace код:
function RefreshDetails() {... else if (pcDetails.ActivePage.Name == pgDomainDetail.Name) { RefreshCommonDetail(BaseWorkspace, wndDomainDetail, 'ProjectID', 'ProjectID'); }...
теперь при загрузке террасофта выскакивают ошибки:
Ошибка выполнения Microsoft JScript: 'wndMaster' - определение отсутствует // скрипт wnd_BaseMasterDetailScript // функция function PrepareEmbeddedWindows // строка var MasterWindow = wndMaster.Window; TSDskWindowLibrary.DskWindow: OLE error 80020101 // скрипт scr_WorkspaceUtils // функция function RefreshCommonDetail // строка Window.Prepare();
Антон, добавленная Вами деталь в окне раздела проектов действительно имеет название wndDomainDetail, а страница - pgDomainDetail? Окно детали у Вас наследуется от wnd_BaseGridArea, или от wnd_BaseMasterDetail? Базовое окно детали - это wnd_BaseGridArea.
Спасибо. Получилось. Случайно скрипт выставился для окна детали wnd_BaseMasterDetail, после изменения его на scr_BaseGridArea почему-то не заработало. Пришлось окно детали удалить и создать сначала.
последний вопрос по деталям. Где прописать окно для редактирования детали, а то выдает ошибку при попытке редактирования или добавления: "'EditWindowUSI' значение атрибута не определено"
Это можно сделать разными способами. В Вашем конкретном случае (при использовании функции RefreshCommonDetail) код окна редактирования можно передать входящим параметром:
RefreshCommonDetail(BaseWorkspace, WindowContainer,
ParentItemFieldName, ChildFilterName, DatasetUSI, EditWindowUSI,
AdditionalAttributes, AlwaysRefresh, SimpleRefresh, ParentItemID,
DoNotDisableAllFilters).
Если бы деталь инициализировалась с помощью отдельных функций инициализации и обновления, можно установить этот атрибут непосредственно при инициализации (посмотрите примеры в скрипте scr_AccountsWorkspace, например, функцию InitializeAddressesDetail).
Наконец, этот атрибут можно установить при инициализации самого окна детали. Пример - функция Initialize скрипта scr_AccountBillingInfoGridArea.