Здравствуйте!
Подскажите в таком вопросе.
Есть функция,
...//Выполняем вычисления
...//Вставляем записи в Detail
}
которая в зависимости от вычислений делает обновления и добавляет новые записи в разные Детали.
Вызываем её на строке грида
var MyDataset = dlData.Dataset;
OneRecord(MyDataset );
}
Все работает на данной выделенной строке.
А каким образом можно выделив более одной строки в гриде, заставить эту функцию отработать все выделенные строки? Пока она это делать не может.
Нравится
Выделить больше одной строки можно с помощью клавиш Ctrl и Shift
Ctrl - выбирает только те строки, которые вы щелкаете при нажатой клавише (так же Ctrl выполняет функцию "Перейти к", если щелкните на поле типа Lookup. Так что будьте осторожны)
Shift - выделит все строки между текущей выделенной и той, которую вы щелкните.
Функцию попробуйте переписать так:
[javascript]
function aOneRecordOnExecute(ActionMenuItem, Sender) {
var SelectedIDs = grdData.SelectedIDs.CommaText.split(',');
var MyDataset = Services.GetNEwItemByUSI(dlData.Dataset.USI);
for(var i=0;i
Переделал функцию по вышеописанному способу: при отработке дебаггер пишет "grdData - Определение отсутствует". Насколько я понял не может достучаться до грида.
Функция находится в отдельном скрипте scr_OneRecord.
wnd_OneRecord, в котором находится грид лежит рядом. Как достучаться до grdData?
Пробовал так:
[javascript]
var wndOneRecord= Services.GetNewItemByUSI('wnd_OneRecord');
var SelectedIDs = wndOneRecord.grdData.SelectedIDs.CommaText.split(',');
[/javascript]
Но в этом случае выдает ошибку: " 'grdData.SelectedIDs' - есть null или не является объектом".
Не понимаю, в своем варианте вы берете dlData, значит достукиваетесь до элементов окна. Проверьте, может они по другому у вас названы. Если же нет, то должен помочь этот скрипт (если все окна унаследованы от базовых):
[javascript]
function aOneRecordOnExecute(ActionMenuItem, Sender) {
var MainWindow = Connector.Attributes('MainWindow');
var WorkspaceWindow = MainWindow.ComponentsByName('wndWorkspace').Window;
var GridWindow = WorkspaceWindow.ComponentsByName('wndGridData').Window;
var grdData = GridWindow.ComponentsByName('grdData');
//var dlData = GridWindow.ComponentsByName('dlData'); //если нельзя будет достучаться до dlData
var SelectedIDs = grdData.SelectedIDs.CommaText.split(',');
var MyDataset = Services.GetNewItemByUSI(dlData.Dataset.USI);
for(var i=0;i
Возможно не сбрасывается старый фильтр, попробуйте:
[javascript]
Dataset.Close();
EnableDatasetFilters(Dataset, false);
ApplyDatasetFilter(Dataset, 'ID', SelectedIDs[i], true);
[/javascript]
И кстати, лучше создайте новый экземляр датасета, а не тот, который сейчас привязан к гриду.