Скрипты
Разработка

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

Добрый день!
Понимаю, что тема избитая, но всё же не могу пока нормально добавить в карточку контрагента вкладку, в которой будут отображаться договора, прикрепленные к данному контрагенту.
Что сделал:
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
[javascript]
RefreshCommonDetail(BaseWorkspace, wndContractsDetail,
'CustomerID', 'CustomerID', 'ds_Contract');
[/javascript]

Вот пример скрипта при добавлении детали описание в карточку
[javascript]
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');
}
[/javascript]

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

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

К скрипту scr_AccountEdit

  • добавил используемый скрипт scr_WorkspaceUtils
  • Добавил в функцию [javascript]
    wnd_AccountEditOnPrepare(Window) строку if (Connector.CurrentUser.Name == 'supervisor') { InitializePriceDetail();}
    [/javascript]
  • Добавил функцию

    [javascript]
    function Main() {
    var Window = Services.GetNewItemByUSI('wnd_AccountEdit');
    Window.IsDesigning = false;
    Window.Prepare();
    Window.Show();
    }
    [/javascript]

  • Добавил функцию
    [javascript]
    function InitializePriceDetail() {
    var WindowContainer = cntPrice;
    var ParentItemFieldName = 'AccountID';
    var ChildFilterName = 'AccountID';
    var DatasetUSI;
    var EditWindowUSI;
    RefreshCommonDetail(BaseWorkspace, WindowContainer, ParentItemFieldName, ChildFilterName);
    }
    [/javascript]

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

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

Вопрос решен:
[javascript]
var BaseWorkspace = {GridDataset: dlData.Dataset};
[/javascript]

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