Отображение детали в карточке редактирования.

Была создана новая деталь, все работает.

Попробовал отобразить данную деталь в карточке редактирования(раздел Документы). Создал новый WindowContainer, в свойстве Window указал окно грида новой детали, на событие OnPrepare карточки редактирования документа происходит фильтрация и открытие датасета новой детали по ID документа - то есть данные детали отображаются корректно.

Но при попытке создать, копировать или изменить запись (нажатие но соотв. кнопку) ничего не происходит, кнопка "Удалить" работает. Кнопки "Копировать", "Создать" и "Изменить" в детали работают корректно.

Подскажите, пожалуйста в чем может быть проблема и как ее устранить.
Спасибо.

P.S. Если выше сказанное сильно абстрактно, то можно, как вариант, на примере реализации полноценной детали "Файлы" в карточке редактирования Документа (с прикреплением и отображением файлов привязанных к документу).

Нравится

2 комментария

Здравствуйте Дмитрий,
Задача
Вынести деталь [Файлы] в карточку редактирования документа wnd_DocumentEdit.
Решение
Предварительно, необходимо создать WindowsContainer в карточке редактирования и указать в качестве значения Window название сервиса окна детали. О том, как это делается можно прочитать в инструкции в прикрепленных файлах.
В итоге мы получим следующий вид карточки
1

2
В скрипте карточки (scr_DocumentEdit) необходимо:

  1. Подключить скрипт scr_WorkspaceUtils
  2. Добавить функцию инициализации InitializeFilesDetail вкладки Файлы:
    function InitializeFilesDetail(Window) {
    RefreshFilesDetail({GridDataset: dlData.Dataset},
    		wndFilesInEditCart, 'DocumentID', 'tbl_FileInDocument','iq_FileInDocument');
    }

    Функция RefreshFilesDetail со скрипта scr_WorkspaceUtils ждет в первом аргументе, объект BaseWorkspace, с данного объекта функция RefreshFilesDetail использует GridDataset с которого мы берем датасет, в случае карточки это будет dlData.Dataset, где dlData - название невизуального компонента в карточке (DatasetLink)

  3. В scr_DocumentEdit на событие wnd_DocumentEditOnPrepare дописать вызов функции InitializeFilesDetail
    function wnd_DocumentEditOnPrepare(Window) {
    	wnd_BaseDBEditOnPrepare(Window);
    	InitializeWindow(Window);
    	InitializeFilesDetail(Window);
    }

    В случае с деталью Файлы использовалась особая функция InitializeFilesDetail, в общем случае попробуйте воспользоваться функцией RefreshCommonDetail и передать в нее первый аргумент {GridDataset: dlData.Dataset}, остальные значения переменных для функции можно узнать, поставив точку остановки скрипта и посмотрев в отладчике значения в скрипте scr_DocumentsWorkspace на событии RefreshDetails интересующей Вас вкладки (Page)

  4. Пример:

    ........
    /* MODULE PURCHASES */	
    	if (pcDetails.ActivePage.Name == pgPurchaseDetail.Name) {
    		RefreshCommonDetail(BaseWorkspace, wndPurchaseDetail, 
    			'DocumentID', 'DocumentID');
    	} else
    /* ENDMODULE PURCHASES */		
    	if (pcDetails.ActivePage.Name == pgFilesDetail.Name) {
    	if (System.GetLocalComputerName() == 'A_YAVORSKIY') { debugger; }
    		RefreshFilesDetail(BaseWorkspace, wndFilesDetail, 'DocumentID',
    			'tbl_FileInDocument', 'iq_FileInDocument');
    	}
    	//%Refresh Details BookMark% (Workspace Wizard Bookmark)
    ........

Сервисы изменной карточки Документов с дополнительной вкладкой Файлы в прикрепленных файлах

Алексей, спасибо за развернутый ответ.

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