Имя: Пароль:
1C
1С v8
Таблица формы и ЗначениеВРеквизитФормы
0 geminisf
 
26.07.21
11:31
Доброго всем дня. Столкнулся с проблемой. Есть код в модуле формы


&НаСервере
Процедура ДобавитьБазыВИсключенияНаСервере(ВыделенныеСтроки)

    ОбъектОбработки = РеквизитФормыВЗначение("Объект");
    ОбъектОбработки.ДобавитьБазыВИсключения(ВыделенныеСтроки);
    ЗначениеВРеквизитФормы(ОбъектОбработки, "Объект");

КонецПроцедуры


&НаКлиенте
Процедура ДобавитьБазыВИсключения(Команда)
    
    ВыделенныеСтроки = Элементы.ТабБазы.ВыделенныеСтроки;
    ДобавитьБазыВИсключенияНаСервере(ВыделенныеСтроки);
    ЭтаФорма.ОбновитьОтображениеДанных();

КонецПроцедуры


Процедура в модуле объекта


Процедура ДобавитьБазыВИсключения(ВыделенныеСтроки) Экспорт    
    Для Каждого Стр из ВыделенныеСтроки Цикл        
            СтрБазыИсключения = ТабБазыИсключения.Добавить();
            СтрБазыИсключения.База = ТабБазы[Стр].База;                            
    КонецЦикла;    
    
КонецПроцедуры


Первый раз всё отрабатывает нормально. Если же попытаться добавить в исключения еще один элемент, то вываливается "Индекс находится за пределами массива". Такое ощущение, что каждый раз таблица формы "Элементы.ТабБазы" задваивается, т.к. индексы строк увеличиваются каждый раз на количество элементов в "ТабБазы".
1 ДенисЧ
 
26.07.21
11:32
Это нормально и описано в документации (как минимум в книжке по УФ)
2 lodger
 
26.07.21
11:47
потому что писать надо так, чтобы
РеквизитФормыВЗначение и ЗначениеВРеквизитФормы использовались только в исключительных ситуациях. а просто, чтобы переложить из таб в таб - напиши в модуле формы.
это
а) ресурсоёмкая операция
б) имеет нюансы, которые надо учитывать. собственно, например (0) это и есть нюанс. это не таскание объекта, это пересоздание там, а тут это перезаполнение.
3 geminisf
 
26.07.21
12:20
(1) Спасибо. Уже нашел.
4 geminisf
 
26.07.21
12:21
(2) "а просто, чтобы переложить из таб в таб - напиши в модуле формы."
Так и сделал. Спасибо