Добрый день.

Сегодняшний вопрос касается такой задачи: в системе есть новый раздел Объекты, и необходимо создать новую деталь в разделе Контрагенты, где отражать связанные с Контрагентом Объекты.

На сейчас получилось добавить саму деталь в раздел (в wnd_AccountsWorkspace). Я прописала обновление детали в scr_AccountsWorkspace. Для этого фукнция RefreshDetails() изменена, добавлены строки

        if (pcDetails.ActivePage.Name == pgObjectDetail.Name) {
                RefreshObjectDetail();
        } else

и созданы 2 новых функции

1)

function InitializeObjectDetail() {
        var DetailWindow = wndObjectDetail.Window;
        AccountsWorkspace.ObjectWindow = DetailWindow;
        SetAttribute(DetailWindow, 'ParentItemFieldName', 'object_clientID');
        DetailWindow.Prepare();        
        AccountsWorkspace.ObjectDataset =
                DetailWindow.ComponentsByName('dlData').Dataset;
}

2)

function RefreshObjectDetail() {
   if (AccountsWorkspace.InitializeObjectFlag != true) {
                InitializeObjectDetail();                          
                AccountsWorkspace.InitializeObjectFlag = true;
        }
        var AccountID = BaseWorkspace.GridDataset.ValAsGUID('ID');
        if (AccountID == AccountsWorkspace.ObjectOldAccountID) {
                return;
        } else {
                AccountsWorkspace.ObjectOldAccountID = AccountID;  
        }
        SetAttribute(AccountsWorkspace.ObjectWindow, 'ParentItemID',
                AccountID);
        RefreshDetailData(BaseWorkspace.GridDataset, 'ID',
          AccountsWorkspace.ObjectDataset, 'object_clientID');
}      

Теперь при открытии детали возникает ошибка в функции:

function CheckAssigned(Object, ObjectName) {
        if (!Assigned(Object)) {
                var ErrorMgs = FormatStr(ObjectNotAssignedError, ObjectName);
                throw ErrorMgs;
        }
}

и появляется сообщение "OLE 80020101".
После этого деталь все же открывается, но пустая.
Если добавить в детали новый Объект, то он создается нормально, и после сохранения отражаются все Объекты, которые хранятся в системе, не зависимо от того, относятся ли они к данному контргагенту или нет.
Что еще я не учла при создании детали?
Какие изменения внести, чтобы деталь открывалась правильно?

Нравится

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

Виктория, вероятно, Вы не создали параметр и фильтр сравнения под названием object_clientID в запросе выбора данных детали.

У меня есть ds_ObjectInAccount на основе sq_ObjectInAccount (поля Object и ObjectID). В этом запросе создан параметр AccountID, который сравнивается с полем object_clientID таблицы Object.
Надо переименовать этот параметр в object_clientID ?

Попробовала переименовать, но результат от этого никак не изменился. Ошибка получается на той же самой итерации.

Проверьте чтобы и параметр, и фильтр в sq_ObjectInAccount назывались object_clientID, поскольку Вы вызываете фильтр под таким названием:

RefreshDetailData(BaseWorkspace.GridDataset, 'ID', 
          AccountsWorkspace.ObjectDataset, 'object_clientID');

Да, я так и изменяла. Но это не помогает.
Может, надо где-то еще прописать обращение к указанному датасету ds_ObjectInAccount и запросу ?

Ой, как оказалось - я не там создавала этот самый параметр!!!
Надо было не создавать отдельный ds_ObjectInAccount и sq_ObjectInAccount, а написать этот параметр в существующем sq_Object, который создавался во время создания раздела!
Теперь все работает правильно.

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