Friday, June 19, 2015

1С Управляемые формы ВыборЗначения и получение строк по индексу

Порадовала 1С новой схемой работы. Итог задача есть форма в которой в таблице выбирают значения, после выбранные строки передают дальше на обработку, по привычке пишем код

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


Но не тут то было, после доработки формы с возможностью обработки и обновления данных в таблице значений, при выборе значений появляется ошибка "Индекс находиться за границами массива".
При просмотре конфигуратором натыкаемся на то что после обновления таблицы индексы добавляются заново, хотя этих строк уже в таблице нету. И тут как говориться гугл в помощь и как кому повезет, в общем после поисков находим новый метод "ДанныеСтроки" и получаем работий вариант процедуры. Жесть этого решения состоит в том что этот метод работает только на клиенте, в общем как-то так....

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