Ситуация:
в одном окне по двойному клику я получаю ID выделенных записей и передаю их в открываемое окно окно:
Attributes.Add('DistrSaleIDs', IDs);
ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
потом в событии afterpost этого нового окна я в записи с ID из переданного IDs записываю изменения.
но если в это время я в основном гриде выделю другую запись то изменения пропишутся в выделенную запись, а не в ту что я передавал.
что я делаю не так?
Нравится
Добрый день!
По одному описанию сложно представить картину целиком. Предоставьте, пожалуйста, измененные сервисы для проверки.
берем любую деталь к примеру Контакты в разделе Организации :
меняем/добавляем:
function grdDataOnDblClick(Control) { test1(); //ShowContactsWorkspace(); } function test1 () { var IDs = GetFocusedRecordsIDs(Self.ParentContainer.ParentWindow.ComponentsByName('wndGridData').Window); var EditWindowUSI = 'wnd_test'; var Attributes = GetNewDictionary(); Attributes.Add('DSIDs', IDs); Attributes.Add('Test', 'Test'); ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues); }
создаем окно в данном случае wnd_test и в его скрипте:
function wnd_testOnPrepare(Window) { Edit.Value = Self.Attributes('DSIDs').Count; } function btnOKOnClick(Control) { MessageBox(Self.Attributes('DSIDs').Count) ; }
теперь выделяю несколько организаций и кликаю два раза по любому контакту на детали
что у меня получается, открывается окно и в поле Edit стоит количество выделенных записей, теперь выделяю на гриде любую другую запись и нажимаю OK, высветится окно с количеством теперь выделенных записей.
Здравствуйте.
Уточните, пожалуйста, какую Вы используете версию?
Добрый день!
На 139х не удалось воспроизвести ситуацию (ничего не происходит). Предоставьте, пожалуйста, сервисы.
Здравствуйте.
Ищвиняюсь за задержку, модифицируйте скрипт, добавив общую для всего скрипта переменную PickedItems, которая будет заполнятся на OnPrepare.
//----------------------------------------------------------------------------- // wnd_testScript //----------------------------------------------------------------------------- var PickedItems; function wnd_testOnPrepare(Window) { Edit.Value = Self.Attributes('DSIDs').Count; PickedItems = Self.Attributes('DSIDs').Count; } function btnOKOnClick(Control) { MessageBox(PickedItems.toString()); }
так, проблему не решает
var PickedItems; function wnd_testOnPrepare(Window) { Edit.Value = Self.Attributes('DSIDs').Count; PickedItems = Self.Attributes('DSIDs'); } function btnOKOnClick(Control) { MessageBox(PickedItems.Count); }
Здравствуйте.
А вариант с модальным показом окна Вам не подходит?
"Олейник Дмитрий" написал:Здравствуйте.
А вариант с модальным показом окна Вам не подходит?
С уважением,
Олейник Дмитрий
Эксперт 3-й линии поддержки
как временное решение, подойдет
как это правильно сделать?
Здравствуйте!
Нужно присвоить атрибут ShowModal окну как true:
Attributes.Add('ShowModal', 'true'); ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
Здравствуйте.
Проверьте в функции ShowEditWindowEx два момента, какое значение переменной ShowModal, и заходит ли в if (!!ShowAfterPrepare) {
if (ShowModal) {
return EditWindow.ShowModal();
function ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues, UseCache, ShowAfterPrepare, GridWindow) { var ShowModal = Assigned(Attributes) && Boolean(Attributes('ShowModal')); ... if (!ShowAfterPrepare) { EditWindow.Show(); } System.BeginProcessing(); try { System.ProcessMessages(); EditWindow.Prepare(); } finally { System.EndProcessing(); } if (!!ShowAfterPrepare) { if (ShowModal) { return EditWindow.ShowModal(); } else { EditWindow.Show(); } } return EditWindow; }
"Олейник Дмитрий" написал:Здравствуйте!
Нужно присвоить атрибут ShowModal окну как true:
Attributes.Add('ShowModal', 'true');
ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
Вероятно, Дмитрий имел ввиду след. код:
Attributes.Add('ShowModal', true);
Так должно получиться
"Олейник Дмитрий" написал:Здравствуйте.
Проверьте в функции ShowEditWindowEx два момента, какое значение переменной ShowModal, и заходит ли в if (!!ShowAfterPrepare)
ShowModal = true
в if (!!ShowAfterPrepare) { - не заходит
ShowAfterPrepare - undefined
Т.е. в !ShowAfterPrepare заходит, а в !!ShowAfterPrepare - нет?
Тогда поменяйте условия местами.
if (!!ShowAfterPrepare) { EditWindow.Show(); } System.BeginProcessing(); try { System.ProcessMessages(); EditWindow.Prepare(); } finally { System.EndProcessing(); } if (!ShowAfterPrepare) { if (ShowModal) { return EditWindow.ShowModal(); } else { EditWindow.Show(); } } return EditWindow;
если поменять местами, то открывается окно,
но при этом не заполняются поля данными
и не становятся активными
Здравствуйте!
Вот так 100% заработает :)
function grdDataOnDblClick(Control) { //ShowContactsWorkspace(); test1(); } function test1() { var IDs = GetFocusedRecordsIDs(Self.ParentContainer.ParentWindow.ComponentsByName('wndGridData').Window); var EditWindowUSI = 'wnd_test1'; var Attributes = GetNewDictionary(); var DefaultValues = GetNewDictionary(); Attributes.Add('DSIDs', IDs); Attributes.Add('Test', 'Test'); Attributes('ShowModal') = true; ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues, 1, true); }
При этом, функция ShowEditWindowEx имеет стандартный "коробочный" вид:
function ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues, UseCache, ShowAfterPrepare, GridWindow) { debugger; var ShowModal = Assigned(Attributes) && Boolean(Attributes('ShowModal')); if ((!Services.AlwaysGetLastItemVersion) && (IsUndefined(UseCache) || UseCache)) { if (Assigned(Attributes)) { var RecordID = Attributes('RecordID'); if (IsUndefined(RecordID) || RecordID == GUID_NULL) { RecordID = EmptyStr; } } else { var RecordID = EmptyStr; } var EditWindow = WinCache_Get(EditWindowUSI, RecordID); if (!Assigned(EditWindow)) { return; } } else { var EditWindow = Services.GetNewItemByUSI(EditWindowUSI); } SetAttributesByDictionary(EditWindow, Attributes); SetAttribute(EditWindow, 'DefaultValues', DefaultValues); if (!ShowAfterPrepare) { EditWindow.Show(); } System.BeginProcessing(); try { System.ProcessMessages(); EditWindow.Prepare(); } finally { System.EndProcessing(); } if (!!ShowAfterPrepare) { if (ShowModal) { return EditWindow.ShowModal(); } else { EditWindow.Show(); } } return EditWindow; }
"Олейник Дмитрий" написал:Здравствуйте!
Вот так 100% заработает :)
да, спасибо, заработало
а с изначальным вопросом, ничего не решилось?
Здравствуйте.
Нет, там к сожалению "ядровые" методы, доступа с конфигурации (TS Admin) у нас нет.