Создание детали

Есть справочник в котором несколько полей, одно из них "Проект", которое в базе хранится, как ProjectId. Хочу сделать деталь для проекта в которой будут отображаться соответствующие записи из справочника.
Уже сделано:
1. Создал окно (потомок от базового окна детали).
2. В нем установил нужный дата сет, и создал дата гридвью с нужными полями.
3. Для окна проектов добавил новую закладку деталей с созданным окном
Теперь в окне проектов отображается созданная деталь, но она пуста.
Какие дальнейшие шаги должны быть проделаны?
Так же не совсем понятно, как правильно создать фильтр, чтобы отображались детали выбранного проекта.

Нравится

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

Вам нужно в функцию обновления деталей скрипта раздела добавить блок для обновления Вашей детали. Это выглядит примерно так:

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.

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