Добрый день.
Сегодняшний вопрос касается такой задачи: в системе есть новый раздел Объекты, и необходимо создать новую деталь в разделе Контрагенты, где отражать связанные с Контрагентом Объекты.
На сейчас получилось добавить саму деталь в раздел (в wnd_AccountsWorkspace). Я прописала обновление детали в scr_AccountsWorkspace. Для этого фукнция RefreshDetails() изменена, добавлены строки
RefreshObjectDetail();
} else
и созданы 2 новых функции
1)
var DetailWindow = wndObjectDetail.Window;
AccountsWorkspace.ObjectWindow = DetailWindow;
SetAttribute(DetailWindow, 'ParentItemFieldName', 'object_clientID');
DetailWindow.Prepare();
AccountsWorkspace.ObjectDataset =
DetailWindow.ComponentsByName('dlData').Dataset;
}
2)
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');
}
Теперь при открытии детали возникает ошибка в функции:
if (!Assigned(Object)) {
var ErrorMgs = FormatStr(ObjectNotAssignedError, ObjectName);
throw ErrorMgs;
}
}
и появляется сообщение "OLE 80020101".
После этого деталь все же открывается, но пустая.
Если добавить в детали новый Объект, то он создается нормально, и после сохранения отражаются все Объекты, которые хранятся в системе, не зависимо от того, относятся ли они к данному контргагенту или нет.
Что еще я не учла при создании детали?
Какие изменения внести, чтобы деталь открывалась правильно?
Нравится
Виктория, вероятно, Вы не создали параметр и фильтр сравнения под названием 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, который создавался во время создания раздела!
Теперь все работает правильно.