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

Выполнить действие по выделенным строкам

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

Подскажите в таком вопросе.
Есть функция,

function OneRecord(MyDataset ) {
...//Выполняем вычисления
...//Вставляем записи в Detail
}

которая в зависимости от вычислений делает обновления и добавляет новые записи в разные Детали.
Вызываем её на строке грида
function aOneRecordOnExecute(ActionMenuItem, Sender) {
        var MyDataset = dlData.Dataset;
        OneRecord(MyDataset );     
}

Все работает на данной выделенной строке.
А каким образом можно выделив более одной строки в гриде, заставить эту функцию отработать все выделенные строки? Пока она это делать не может.

Нравится

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

Выделить больше одной строки можно с помощью клавиш 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]
var SelectedIDs = grdData.SelectedIDs.CommaText.split(',');

var Dataset = dlData.Dataset;
for(var i=0;i

Возможно не сбрасывается старый фильтр, попробуйте:

[javascript]
Dataset.Close();
EnableDatasetFilters(Dataset, false);
ApplyDatasetFilter(Dataset, 'ID', SelectedIDs[i], true);
[/javascript]

И кстати, лучше создайте новый экземляр датасета, а не тот, который сейчас привязан к гриду.

Никакие манипуляции с фильтрами не помогли.
Помогло, когда вместо [javascript]
var Dataset = dlData.Dataset;
[/javascript]
стал использовать
[javascript]
var Dataset = Services.GetNewItemByUSI('ds_OfferingMovement')
[/javascript]

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