Имя: Пароль:
1C
 
Проблемы с "НайтиСтроки"
0 daringer
 
15.04.15
10:38
Добрый день! Возникла проблема с методом "НайтиСтроки" в Таблице значений (ДанныеФормыКоллекция).



К примеру в таблице данных 5 строк, я вызываю процедуру рекурсивно
с разными отборами, в цикле присваиваю значения в определенные колонки таблицы,и на некоторой итерации отладчик показывает значение Стр.КакойТоРеквизит = "Какое то значение", но в самой таблице данных это значение остается пустым. Почему Стр имеет значение, а в таблице это значение пустой, ведь "НайтиСтроки" возвращает ссылки на строки таблицы?

НайденныеСтроки = ТаблицаДанных.НайтиСтроки(Отбор);
Для каждого Стр из НайденныеСтроки цикл

   Стр.КакойТоРеквизит = "Какое то значение";
    
КонецЦикла;
1 Альбатрос
 
15.04.15
10:42
Вообще-то, НайтиСТроки возвращает массив с ссылками на строки таблицы
2 asady
 
15.04.15
10:42
(0) косяк у тебя в коде.
3 Альбатрос
 
15.04.15
10:42
выложи весь код
4 daringer
 
15.04.15
10:43
И к чему это сказано? Понятное дело что массив
5 Альбатрос
 
15.04.15
10:44
(4) Да я хз, понятное это дело тебе или нет
6 Альбатрос
 
15.04.15
10:44
код выкладывай
7 Drac0
 
15.04.15
10:47
(0) Чудеса... Но чудес не бывает. Код давай.
8 daringer
 
15.04.15
10:48
&НаСервере
Процедура ВывестиПроверки(СтрОборудование,ТаблицаПроверки,Родитель,ГруппаЛеваяПравая,ГруппаЛевая,ГруппаПравая,Знач Уровень,ИмяВладельца)
    
    МассивРеквизитовДляДобавления = Новый Массив;

    СчетчикПроверок = 0;
    Для Каждого СтрПроверка из ТаблицаПроверки цикл
        СчетчикПроверок = СчетчикПроверок + 1;
        Проверка                     = СтрПроверка.Проверка;
        ЗаголовокПроверки            = Проверка.Наименование;
        ИмяРеквизита                = СтрЗаменить("id"+Новый УникальныйИдентификатор,"-","_");
        
        ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.ЗначенияПроверок");
        
        
        
        
        МассивРеквизитовДляДобавления.Добавить(Новый РеквизитФормы(ИмяРеквизита,ОписаниеТипа,,ЗаголовокПроверки));
        
        НовСтр                                = СоответствиеРеквизитовПроверки.Добавить();
        
        НовСтр.ВидПоляФормы                    = "ПолеВвода";
        
        НовСтр.ИмяРеквизита                    = ИмяРеквизита;
        НовСтр.Заголовок                    = ""+СчетчикПроверок+" - "+ЗаголовокПроверки;
        НовСтр.Проверка                        = Проверка;
        НовСтр.ИмяРеквизитаОборудование        = СтрОборудование.ИмяРеквизита;
        НовСтр.ПроверятьОбязательно            = Проверка.ПроверятьОбязательно;
        НовСтр.ЕстьЗависимыеПроверки        = Проверка.ЕстьЗависимыеПроверки;
        НовСтр.Уровень                        = Уровень;
        НовСтр.ИмяВладельца                    = ИмяВладельца;

        Если НовСтр.ЕстьЗависимыеПроверки тогда
            НовСтр.ЗависимыеПроверки.Загрузить(ПолучитьСписокЗависимыхПроверок(Проверка));
        КонецЕсли;
        
        
        Если ПроверкиЗагруженыИзОбъекта тогда
            НовСтр.РезультатПроверки        = СтрПроверка.РезультатПроверки;
            НовСтр.Файл                     = СтрПроверка.Файл;
        КонецЕсли;
        
        
    КонецЦикла;

    
    
    ИзменитьРеквизиты(МассивРеквизитовДляДобавления);
    
    
    Если ИмяВладельца = Неопределено тогда
        НайдСтроки = СоответствиеРеквизитовПроверки.НайтиСтроки(Новый Структура("ИмяРеквизитаОборудование",СтрОборудование.ИмяРеквизита));
    Иначе
        НайдСтроки = СоответствиеРеквизитовПроверки.НайтиСтроки(Новый Структура("ИмяРеквизитаОборудование,ИмяВладельца",СтрОборудование.ИмяРеквизита,ИмяВладельца));

    КонецЕсли;
    
    
    
    Для каждого СтрРеквизит из НайдСтроки цикл
        СтрРеквизит.ЭтоПодчиненныйЭлемент = СтрРеквизит.Уровень>1;
        
        ГруппаДляРеквизитов = ДобавитьНовуюГруппу("ГруппаДляРеквизитов"+СтрЗаменить("id"+Новый УникальныйИдентификатор,"-","_"),ГруппаЛевая,,,,,,СтрРеквизит.Уровень=1);
        
        СтрРеквизит.ИмяГруппыДляРеквизитов = ГруппаДляРеквизитов.Имя;
        
        ПробелыВЗаголовке ="";
        
        Сч = 0;

        Пока Истина цикл
            
             Сч=Сч+1;
                                                                                            
             Если Сч = СтрРеквизит.Уровень тогда Прервать КонецЕсли;
            
             ПробелыВЗаголовке = ПробелыВЗаголовке + Символы.Таб;

        КонецЦикла;
        
        Если ПробелыВЗаголовке<>"" тогда
            ПробелыВЗаголовке=ПробелыВЗаголовке+"?";
        КонецЕсли;
        
        НовЭлементЗаголовок = ДобавитьНовуюНадпись("ЗаголовокДляЗначенияПроверки"+СтрЗаменить("id"+Новый УникальныйИдентификатор,"-","_"),ГруппаДляРеквизитов,ПробелыВЗаголовке+СтрРеквизит.Заголовок,?(СтрРеквизит.Уровень=1,Новый Шрифт(,,Истина),Неопределено),,40);
        
        НовЭлемент = ДобавитьНовоеПолеВводаФормы(СтрРеквизит.ИмяРеквизита,ГруппаДляРеквизитов,"",СтрРеквизит.ИмяРеквизита,Ложь,,15,,"Нет");

        НовЭлемент.ИсторияВыбораПриВводе = ИсторияВыбораПриВводе.НеИспользовать;
        
        НовЭлемент.КнопкаВыпадающегоСписка = Истина;
        НовЭлемент.РедактированиеТекста    = Ложь;
        НовЭлемент.ОтображениеКнопкиВыбора = ОтображениеКнопкиВыбора.ОтображатьВВыпадающемСписке;
        ЗаполнитьСписокДоступныхЗначенийПроверки(НовЭлемент.СписокВыбора,СтрРеквизит.Проверка,СтрРеквизит.ЗначенияВыбора);
        
        
        ЭтаФорма[СтрРеквизит.ИмяРеквизита] = СтрРеквизит.ЗначениеПроверки;
        
        НовЭлемент.УстановитьДействие("ПриИзменении","ПриИзмененииРезультатаПроверки");
        
        ДобавитьЭлементЗвездочка(СтрРеквизит.ИмяРеквизита,ГруппаДляРеквизитов,СтрРеквизит.ПроверятьОбязательно);
        
    //    НовЭлемент = ДобавитьНовоеПолеВводаФормы("Решение"+СтрРеквизит.ИмяРеквизита,ГруппаДляРеквизитов,"","Решение"+СтрРеквизит.ИмяРеквизита,Ложь,,15);
        
        
        НоваяГруппа = ДобавитьНовуюГруппу("ГруппаДекорации"+СтрРеквизит.ИмяРеквизита,ГруппаПравая);
        
        
        НовЭлемент = ДобавитьНовуюКартинку("Декорация"+СтрРеквизит.ИмяРеквизита,НоваяГруппа,?(СтрРеквизит.ЗначениеКорректно,БиблиотекаКартинок.СобытиеВыполнено,БиблиотекаКартинок.Предупреждение),,,,Истина);
        НовЭлемент.УстановитьДействие("Нажатие","НажатиеНаИндикацию");
        
        НовЭлемент = ДобавитьНовуюНадпись("Файл"+СтрРеквизит.ИмяРеквизита,НоваяГруппа,"Приложить файл",,,,Истина);
        НовЭлемент.УстановитьДействие("Нажатие","ПриложитьФайл");
        
        
        
        НовЭлемент = ДобавитьНовуюКартинку("Справка"+СтрРеквизит.ИмяРеквизита,НоваяГруппа,БиблиотекаКартинок.Справка,,,,Истина);
        НовЭлемент.УстановитьДействие("Нажатие","НажатиеНаСправку");
        
        
        Если СтрРеквизит.ЕстьЗависимыеПроверки тогда
            
            Уровень = Уровень  + 1;
            ВывестиПроверки(СтрОборудование,СтрРеквизит.ЗависимыеПроверки,Родитель,ГруппаЛеваяПравая,ГруппаЛевая,ГруппаПравая,Уровень,СтрРеквизит.ИмяРеквизита);
        КонецЕсли;
        
        
        
    КонецЦикла;
КонецПроцедуры
9 daringer
 
15.04.15
10:55
10 Defender aka LINN
 
15.04.15
11:06
(9) Все просто. В табло у тебя не вторая строка.
11 Альбатрос
 
15.04.15
11:07
(10) +1
12 Альбатрос
 
15.04.15
11:08
(9) Скрин нам ничего не объясняет. Не понятно какие строки нашлись в НайдСтроки
13 daringer
 
15.04.15
11:15
14 daringer
 
15.04.15
11:25
В проблемной строке СоответствиеРеквизитовПроверки.Индекс(СтрРеквизит) возвращает -1
15 daringer
 
15.04.15
11:30
В общем отладчик показывает таблицу, в которой индекс проблемной строки = 1, метод Индекс возвращает -1, чо за х.