что-то делаю не так, не могу понять что

в окне редактирования (на базе baseDBEdit) добавляю windowcontainer и в нем гриди передаю атрибут

function InitializeOfferingWindow() {
        var Dataset = dlData.Dataset;
        var OfferingsWindow = wndOfferingsInContract.Window;
        SetAttribute(OfferingsWindow, 'AnnexID', Dataset('ID'));
        SetAttribute(OfferingsWindow, 'ContractID', Dataset('ContractID'));
        OfferingsWindow.Prepare();
}

function wnd_AnnexEditOnPrepare(Window) {
        wnd_BaseDBEditOnPrepare(Window);
        InitializeOfferingWindow();
}

получаю атрибут и передаю дальше

function wnd_OfferingInContractGridAreaOnPrepare(Window) {
        SetAttribute(Window, 'EditWindowUSI', 'wnd_OfferingInContractEdit');
        var AnnexID = Window.Attributes('AnnexID');
        var ContractID = Window.Attributes('ContractID');
        if (AnnexID != null) {
                var Dataset = dlData.Dataset;
                ApplyDatasetFilter(Dataset, 'AnnexID', AnnexID, true);
                SetAttribute(Dataset, 'AnnexID', AnnexID);
                SetAttribute(Dataset, 'ContractID', ContractID);
        }       RefreshDataset(Dataset);
}

ну и перед записью, хочу добавить в датасет

function SelfOnDatasetBeforePost(Dataset) {
        var AnnexID = Self.Attributes('AnnexID');
        if (AnnexID != null) {
                Dataset('AnnexID') = AnnexID;
                Dataset('ContractID') = Self.Attributes('ContractID');
        }
}

но он там null
хотя если смотреть в afteropen то он там есть

Нравится

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

"Змитрук Т.Ю." написал: SetAttribute(Dataset, 'ContractID1', ContractID);

Так у Вас же название атрибута который вы датасету передаете уже называются

ContractID1

прошу, прощения не правильно скопировал
исправил

Здравствуйте!
А что в функции SelfOnDatasetBeforePost возвращает Self?

"Андрей Каспаревич" написал:

Здравствуйте!

А что в функции SelfOnDatasetBeforePost возвращает Self?

С уважением,

Каспаревич Андрей

Эксперт 3-й линии поддержки


а что именно надо?
к примеру
USI "Contracts\Details\Offerings\ds_OfferingInContract" String

В общем попробуйте вместо

var AnnexID = Self.Attributes('ContractID');

написать

var AnnexID = Dataset.Attributes('ContractID');

пробовал и так
результат тот же
в afterOpen
beforeopen есть ID
в beforepost - null

Непонятно к чему такой изобретательный путь.
Все что я понял, это то что у есть:
1) wnd_AnnexEdit - карточка, в ней получаем параметры AnnexID и ContractID
2) в ней грид wnd_OfferingInContractGridArea
3) (неизвестно)
4) И вдруг сразу записываете в датасет ds_OfferingInContract

Вот можно магию в пункте 3 описать?
Как вы записываете в датасет ds_OfferingInContract (в скобках последующий вопрос):
1) Реально сразу, как только грид подготовлен, так сразу пишем? (не вижу смыла добавлять параметры датасету, можно работать в этом окне, зачем параметры датасету?)
2) Через какую-то кнопку, которая обращается к датасету и пишет (как-то скриптово)? (не сильно от первого отлтчается "(не вижу смыла добавлять параметры датасету, можно работать в этом окне, зачем параметры датасету?)")
3) Через карточку wnd_OfferingInContractEdit? (А почему вы передаете параметры сразу датасету, а не карточке редактирования, а потом с ней не работаете?)

"Змитрук Т.Ю." написал:перед записью, хочу добавить в датасет

кстати, это датасет чего? карточки или грида? это как бы разные экземпляры...

"Сазанов Александр Владимирович" написал:

Непонятно к чему такой изобретательный путь.

Все что я понял, это то что у есть:

1) wnd_AnnexEdit - карточка, в ней получаем параметры AnnexID и ContractID

2) в ней грид wnd_OfferingInContractGridArea

3) (неизвестно)

4) И вдруг сразу записываете в датасет ds_OfferingInContract

Вот можно магию в пункте 3 описать?

Как вы записываете в датасет ds_OfferingInContract (в скобках последующий вопрос):

1) Реально сразу, как только грид подготовлен, так сразу пишем? (не вижу смыла добавлять параметры датасету, можно работать в этом окне, зачем параметры датасету?)

2) Через какую-то кнопку, которая обращается к датасету и пишет (как-то скриптово)? (не сильно от первого отлтчается "(не вижу смыла добавлять параметры датасету, можно работать в этом окне, зачем параметры датасету?)")

3) Через карточку wnd_OfferingInContractEdit? (А почему вы передаете параметры сразу датасету, а не карточке редактирования, а потом с ней не работаете?)


в пункте 3 пункт 3
через карточку wnd_OfferingInContractEdit выбираю продукт


кстати, это датасет чего? карточки или грида? это как бы разные экземпляры...

грида

Ну тогда передавайте параметры в карточку wnd_OfferingInContractEdit (а не вдатасет), точнее в ней на OnPrepare берите параметры из родительского окна (т.е. грида), а в датасет вставляйте значения, что-то типа так:

var ParentWindow = Self.Attributes('NotifyObject').ParentWindow; //Получаем наш грид
if (ParentWindow.Attributes('AnnexID')!=null) {
   dlData.Dataset('AnnexID') = ParentWindow.Attributes('AnnexID');
   dlData.Dataset('ContractID') = ParentWindow.Attributes('ContractID');
}

надо больше информации, т.к. не понятно, что на самом деле вы делаете

"Сазанов Александр Владимирович" написал:

Ну тогда передавайте параметры в карточку wnd_OfferingInContractEdit (а не вдатасет), точнее в ней на OnPrepare берите параметры из родительского окна (т.е. грида), а в датасет вставляйте значения, что-то типа так:

var ParentWindow = Self.Attributes('NotifyObject').ParentWindow; //Получаем наш грид

if (ParentWindow.Attributes('AnnexID')!=null) {

   dlData.Dataset('AnnexID') = ParentWindow.Attributes('AnnexID');

   dlData.Dataset('ContractID') = ParentWindow.Attributes('ContractID');

}


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

"Андросов Дмитрий" написал:

надо больше информации, т.к. не понятно, что на самом деле вы делаете


что конкретно надо?

выложите сервисы, например
или хотя бы куски кода побольше (желательно все события грида, карточек и датасетов)
у вас либо что-то не туда пишется, либо не оттуда читается, либо перезаписывается

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