Имя: Пароль:
1C
1С v8
Как программно заполнить табличную часть
0 oleg_prg
 
03.09.12
13:00
Добрый день. Подскажите пожалуйста как заполнить табличную часть
1С8.2 обычное прил
На форме создал табличную часть ТЧ, прописал код, все работает как надо
НС = ТЧ.Добавить();
       Для Б = 1 по 20 Цикл
           НС.Установить(Б-1, ОкноExcel.Worksheets(1).Range(Символ(Б+64)+СокрЛП(А)).Value);
           Состояние("Загрузка строки "+СокрЛП(А));
       КонецЦикла;

Затем эту табличную часть сделал как реквизит формы, после этого выдается ошибка, в месте НС.Установить - метод установить не обнаружен.
Вопрос как можно заполнить новую строку НС по индексу, а то писать все поля (НС.Поле1 = ххх, НС.Поле2 = ххх,...)как-то совсем нехочется
1 oleg_prg
 
03.09.12
13:02
НС[Б] = ОкноExcel.Worksheets(1).Range(Символ(Б+64)+СокрЛП(А)).Value, тоже неверно, выдает что обращение по индексу невозможно
2 Ненавижу 1С
 
гуру
03.09.12
13:04
Б это вроде идентификатором колонки должен быть
3 Reset
 
03.09.12
13:06
У строки табличной части нелья обращаться к полям по индексу, в отличие от строки таблицы значений
4 oleg_prg
 
03.09.12
13:07
(2) Ненавижу 1С Да, спасибо огромное, точно!!! Дальше разбирусь!
5 oleg_prg
 
03.09.12
13:07
Да, туплю, всем спасибо!
6 Reset
 
03.09.12
13:09
Если желание выпендрится, получи имена колонок ТЧ из метаданных в массив и используй для адресации их; или используй строку промежуточной таблицы значений с именами как у ТЧ, а потом ее перезгуржай в строку ТЧ через заполнитьЗеаченияСвв
7 oleg_prg
 
03.09.12
13:12
Я сделал так

НС = ТЧ.Добавить();
       Для Б = 1 по 20 Цикл
           НС[ЭлементыФормы.ТЧ.Колонки[Б].Имя] = ОкноExcel.Worksheets(1).Range(Символ(Б+64)+СокрЛП(А)).Value;
           Состояние("Загрузка строки "+СокрЛП(А));
       КонецЦикла;
8 zladenuw
 
03.09.12
13:14
можно загрузить твой ексель в таблицу и загрузить в тч.
примерно так

Процедура Загрузить() Экспорт
       ExcelФайл = ПолучитьCOMОбъект(мВыбФайл);
       Состояние("Обработка файла Microsoft Excel...");
       // Читаем данные первого листа книги
       Попытка
           ExcelЛист = ExcelФайл.Sheets(1);        
       Исключение
           Предупреждение("Файл открыт, закройте его!!!",,"ОШИБКА");
           Возврат;
       КонецПопытки;
       //
       RowCount     = 6500;
       ВсегоКолонок = 3;
       НомерПервойКолонки = 1;
       //
       СоздатьТЧДанных();
       //Обратаем всю область данных
           Область = ExcelЛист.Range(ExcelЛист.Cells(1,НомерПервойКолонки), ExcelЛист.Cells(RowCount,ВсегоКолонок));
           Данные = Область.Value.Выгрузить();        
       //Создание пустых строк по RowCount    
       Для Счетчик = 1 По RowCount Цикл
           НоваяСтрока = ТЧДанных.Добавить();
       КонецЦикла;
       
       //Заполнение Тч данными
       Для Счетчик = 0 По ВсегоКолонок-1 Цикл
           ТЧДанных.ЗагрузитьКолонку(Данные[Счетчик], "Колонка"+Счетчик);
       КонецЦикла;
       Создать();
       ExcelФайл.Close();
КонецПроцедуры

//------------------------------
Процедура СоздатьТЧДанных()
   
   // Создание описателя типов для таблицы значений
   //КЧ = Новый КвалификаторыЧисла(15,2);
   КС = Новый КвалификаторыСтроки(50);
   Массив = Новый Массив;
   Массив.Добавить(Тип("Строка"));
   ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
   //Массив.Очистить();
//Массив.Добавить(Тип("Число"));
   //ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
   
   // Очистить предыдущие значения
   ТЧДанных.Очистить();
   ТЧДанных.Колонки.Очистить();
   
   // Создать колонки табличного документа
   ТЧДанных.Колонки.Добавить("Колонка0",ОписаниеТиповС,"Х");
   ТЧДанных.Колонки.Добавить("Колонка1",ОписаниеТиповС,"ХХ");    
   ТЧДанных.Колонки.Добавить("Колонка2",ОписаниеТиповС,"ХХX");
   //ТЧДанных.Колонки.Добавить("Колонка3",ОписаниеТиповС,"ХXXX");
   //ТЧДанных.Колонки.Добавить("Колонка4",ОписаниеТиповС,"Норматив");
   //ТЧДанных.Колонки.Добавить("Колонка5",ОписаниеТиповС,"Х");
   //ТЧДанных.Колонки.Добавить("Колонка6",ОписаниеТиповС,"Кво");
       
КонецПроцедуры
9 Reset
 
03.09.12
13:28
(8) Вместо СоздатьТЧДанных() можно ТЧ.ВыгрузитьКолонки(..
Вместо цикла //Заполнение Тч данными
можно ТЧ.Загрузить(