Добавление детали в карточку

Добрый день!
Понимаю, что тема избитая, но всё же не могу пока нормально добавить в карточку контрагента вкладку, в которой будут отображаться договора, прикрепленные к данному контрагенту.
Что сделал:
1 - В форме контрагента wnd_AccountEdit добавил еще одну вкладку pgContracts.
2 - На кладку добавил форму frmContracts и контейнер cntContracts
3 - В свойствах контейнера указал окно wnd_ContractsGridArea, окно отображается, но данных нет.
4 - К скрипту scr_AccountEdit добавил скрипт scr_WorkspaceUtils
5 - В функцию wnd_AccountEditOnPrepare(Window) дописал вызов InitializeContractsDetail(Window)
Код вызова:

function InitializeContractsDetail(Window) {
        RefreshCommonDetail('{GridDataset: dlData.Dataset}', 'cntContracts','CustomerID' , 'ID', '', 'wnd_AccountEdit');
}

В результате при открытии окна карточки контрагента получаю сообщение об ошибке "исключен OLE error 80020102"

Не совсем разобрал функцию RefreshCommonDetail. Что я упустил?
Заранее благодарен.

Нравится

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

"Беланов Андрей" написал:function InitializeContractsDetail(Window) {
        RefreshCommonDetail('{GridDataset: dlData.Dataset}', 'cntContracts','CustomerID' , 'ID', '', 'wnd_AccountEdit');
}

это что-то странное

Вот пример использования RefreshCommonDetail

		RefreshCommonDetail(BaseWorkspace, wndContractsDetail, 
			'CustomerID', 'CustomerID',	'ds_Contract');

Вот пример скрипта при добавлении детали описание в карточку

function InitializeDescriptionDetail() {
         var Dataset = dlData.Dataset;
         var IsNewRecord = (Dataset.State == dstInsert);
         pgDescription.IsAccessible = !IsNewRecord;
         pgDescription.IsVisible = !IsNewRecord;           
         if (IsNewRecord) {
                   return;
         }
         DescriptionDataset = 
                   wndDescriptionDetail.Window.ComponentsByName('dlData').Dataset;
         DescriptionDataset.SelectQuery.Items(0).FromTable = 
                   Dataset.SelectQuery.Items(0).FromTable;                   
         RefreshDetailData(Dataset, 'ID', DescriptionDataset, 'ID');
}

Что сделал я:
В wnd_AccountEdit:

  • добавил Page pgPrice
  • добавил форму frmPrice
  • добавил контейнер cntPrice
  • Контейнеру cntPrice прописал аттрибут Window wnd_AccountPricesGridArea

К скрипту scr_AccountEdit

  • добавил используемый скрипт scr_WorkspaceUtils
  • Добавил в функцию
    wnd_AccountEditOnPrepare(Window) строку if (Connector.CurrentUser.Name == 'supervisor') { InitializePriceDetail();}
  • Добавил функцию
    function Main() {
            var Window = Services.GetNewItemByUSI('wnd_AccountEdit');
            Window.IsDesigning = false;     
            Window.Prepare();
            Window.Show();  
    }
  • Добавил функцию
    function InitializePriceDetail() {
    	var WindowContainer = cntPrice;
    	var ParentItemFieldName = 'AccountID';
    	var ChildFilterName = 'AccountID'; 
    	var DatasetUSI; 
    	var EditWindowUSI; 
    	RefreshCommonDetail(BaseWorkspace, WindowContainer, ParentItemFieldName, ChildFilterName);
    }

Результат: при запуске по F9 появляется сообщение:
Ошибка: 'BaseWorkspace' - определение отсутствует.

Если задать var BaseWorkspace; то ошибки не будет, но и работать тоже не будет.
Подскажите пожалуйста, как передать Workspace детали?

Вопрос решен:

var BaseWorkspace  = {GridDataset: dlData.Dataset};
Показать все комментарии