Имя: Пароль:
1C
1С v8
Уф как обновить коллекцию выделенных строк таблицы формы
0 Droning1C
 
03.03.21
17:37
По нажатию на форме обработки, встроенной в расширение, вызывается выполнение следующего кода:



&НаКлиенте
Процедура СформироватьОтчетОстатки(Команда)
    
    Если НЕ Элементы.СоставЗаказа.ТекущаяСтрока = Неопределено Тогда
        
        МассивВыделеннойНоменклатуры = Новый Массив;
        
        Для Каждого Индекс Из Элементы.СоставЗаказа.ВыделенныеСтроки Цикл
            МассивВыделеннойНоменклатуры.Добавить(Объект.СоставЗаказа[Индекс].Номенклатура);
        КонецЦикла;
            
        УсловияОтбора = Новый Структура("Номенклатура", МассивВыделеннойНоменклатуры);
        ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
        ОткрытьФорму("Отчет.ОстаткиИДоступностьТоваров.Форма", ПараметрыФормы);
        
    Иначе
        
        ПараметрыФормы = Новый Структура("СформироватьПриОткрытии",  Ложь);
        ОткрытьФорму("Отчет.ОстаткиИДоступностьТоваров.Форма", ПараметрыФормы);
    
    КонецЕсли;
    
КонецПроцедуры



Если выделить несколько строк в тч, удалить их и вызвать выполнение кода, то коллекция выделенных строк не обновляется, в следствии чего получаю ошибки.

Как обновить коллекцию выделенных строк таблицы формы в данном случае?
1 Droning1C
 
03.03.21
17:40
По нажатию на форме обработки))) Извиняюсь... По нажатию кнопки, конечно же)
2 Droning1C
 
03.03.21
18:58
Я явно упускаю какой-то пустяк, просто из-зи отсутствия опыта работы с УФ. Пробовал по-разному, не получается.
3 Droning1C
 
03.03.21
19:02
Мне нужно по выделенным строкам формировать отбор вызываемого отчета. Если заполнить ТЧ обработки, выделить строки и сформировать отчет, то все ок.
Если после заполнения удалить первые, допустим, 5 строк из 7ми, то при повторном вызове процедуры формирования отчета, индексы выделенных строк в коллекции выделенных строк остаются прежними и вызывается искл ситуация - индекс находится за границами массива.
4 ДенисЧ
 
03.03.21
19:05
И правильно вызываются.
Ибо не поиндексам нужно строки брать, а по идентификаторам.

В книжке по УФ это написано.
5 Droning1C
 
03.03.21
19:18
(4)
        Для Каждого Идентификатор Из Элементы.СоставЗаказа.ВыделенныеСтроки Цикл
             НСтроки = Объект.СоставЗаказа.НайтиПоИдентификатору(Идентификатор).НомерСтроки;    
                МассивВыделеннойНоменклатуры.Добавить(Объект.СоставЗаказа[НСтроки-1].Номенклатура);
        КонецЦикла;



Так? или тоже изврат?
6 Chameleon1980
 
03.03.21
19:39
ну книгу то открыл?
или СП чтоли
7 Droning1C
 
03.03.21
20:15
(6) стр 624-628)))  


Для Каждого Идентификатор Из Элементы.СоставЗаказа.ВыделенныеСтроки Цикл
    СтрокаКоллекции = Объект.СоставЗаказа.НайтиПоИдентификатору(Идентификатор);
    ИндексСтрокиКоллекции = Объект.СоставЗаказа.Индекс(СтрокаКоллекции);
    МассивВыделеннойНоменклатуры.Добавить(Объект.СоставЗаказа[ИндексСтрокиКоллекции].Номенклатура);
КонецЦикла;



теперь то не изврат?)
8 Droning1C
 
03.03.21
20:17
и еще, на что я изначально не обратил внимание -

ВыделенныеСтроки (SelectedRows)
Использование:
Только чтение.
Описание:
Тип: Массив.
Содержит массив ИДЕНТИФИКАТОРОВ выделенных строк. (а не индексов)
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший