Ниже опишу процесс создания детали “Автопарк” менеджера деталей для раздела [Контрагенты]: 1. Создать группу – [Common\Workspaces\Accounts\Details\Avtopark] 2. Cоздаем таблицу детали. Указать код [tbl_AccountAvtopark], добавить поля, указать внешние ключи (с помощью контекстного меню): ID AccountID tbl_Account.ID Name - «Строка Unicode» Description - «Строка Unicode» Добавить Relations для полей: AccountID 3. Создаем новый запрос Select Query [sq_AccountAvtopark], добавляем через контекстное меню колонки с типом основная колонка и указываем для них ссылки на поля таблицы, в блоке From указываем таблицу tbl_AccountAvtopark: Добавляем колонки: AccountID tbl_Account.ID AccountName tbl_Account.Name Name Description Далее добавляем JOIN на таблицу контрагентов по полю AccountID: Добавляем колонку с названием контрагента: ID Создаем два параметра ID и AccountID: В блок WHERE добавить два фильтра сравнения: Выключаем фильтры (снимаем галочки): 4. Создаем сервис Dataset ds_AccountAvtopark, указываем запрос на выборку и создаем поля: ID AccountID Строковое поле Name Строковое поле Description Строковое поле Для датасета проставляем ключевое поля и поле для отображения: 5. Создаем сервис окна Window [wnd_AccountAvtoparkGridArea] наследник (wnd_BaseGridArea) Далее в элементе grdData добавляем новый DataGridView У окна на закладке невизуальных компонентов для dlData указываем наш Dataset: У DataGridView определяем колонки: Для грида grdData указываем ActiveView: 6. Создаем окно карточки редактирования Window [wnd_AccountAvtoparkEdit] наследник от wnd_BaseDBEdit: 7. На закладке невизуальных компонентов карточки указать Dataset: Изменить название окна: После этого необходимо добавлять TextDataControl для нужных полей и устанавливать для них поля: 8. В окне раздела в компоненте pcDetails создать компонент [Page] c именем [pgAccountAvtoparkDetail] c заголовком (Автопарк клиента), в котором создать компонент [WindowContainer] с именем [wndAccountAvtoparkDetail]: 9. Для компонента [wndAccountAvtoparkDetail] (WindowContainer) указать сервис окна [wnd_AccountAvtoparkGridArea] 10. В скрипт wnd_AccountsWorkspaceScript добавить 11. Добавить в раздел для объекта pcDetails событие OnChangeActivePage: function pcDetailsOnChangeActivePage(Pages) { RefreshDetails(); } 12. В функцию RefreshDetails добавить строки: function RefreshDetails() { if (dlOrders.Dataset.State == dstInactive) { return; } if (pcDetails.ActivePage.Name == pgCallsDetail.Name) { RefreshCommonDetail(BaseWorkspace, wndCallsDetail, 'AccountID', 'AccountID'); } else if (pcDetails.ActivePage.Name == pgAccountAvtoparkDetail.Name) { RefreshCommonDetail(BaseWorkspace, wndAccountAvtoparkDetail, 'AccountID', 'AccountID'); } } В данном скрипте прописываем функцию инициализации детали: function InitializeAccountAvtoparkDetail() { AccountsWorkspace.AccountAvtoparkWindow = wndAccountAvtoparkDetail.Window; var DetailWindow = AccountsWorkspace.AccountAvtoparkWindow; DetailWindow.Prepare(); AccountsWorkspace.AccountAvtoparkDataset = DetailWindow.ComponentsByName('dlData').Dataset; } Далее реализовываем для wnd_AccountAvtoparkGridAreaOnPrepare: события OnPrepare грида При этом создается скрипт, в котором прописана инициализация и указывается карточка редактироввания: //----------------------------------------------------------------------------// wnd_AccountAvtoparkGridAreaScript //----------------------------------------------------------------------------function Initialize(Window) { Window.Attributes('EditWindowUSI') = 'wnd_AccountAvtoparkEdit'; } function wnd_AccountAvtoparkGridAreaOnPrepare(Window) { Initialize(Window); wnd_BaseGridAreaOnPrepare(Window); } Подключаем скрипт scr_BaseGridAreaUtils: После этого сохраняете изменения работоспособность новой детали: и перезапускаете приложение, проверьте