Имя: Пароль:
1C
1С v8
Вопрос по табличному полю
0 asder117
 
23.11.13
09:10
Всех приветствую!
Пытаюсь сделать отчет по движению ТМЦ под свою задачу. На форме имеется табличное поле которое формируется:
Номерстроки=1;
    Номерстроки1=1;
    складОст=Справочники.Склады.НайтиПоКоду("000000001");
    ВыбГруппа=Справочники.Номенклатура.НайтиПоКоду("00000000036");
    
    ТабличноеПоле1.Очистить();
    //ТабличноеПоле1.Колонки.Добавить("Номенклатура");
    //ТабличноеПоле1.Колонки.Добавить("ЕдИзм");
    //ТабличноеПоле1.Колонки.Добавить("Количество");
    //ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
    
Запрос5 = Новый Запрос;
Запрос5.Текст = "
|ВЫБРАТЬ
|        ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество,
|        ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
|        ТоварыНаСкладахОстатки.Номенклатура.БазоваяЕдиницаИзмерения КАК ЕдИзм
|    ИЗ
|        РегистрНакопления.ТоварыНаСкладах.Остатки(
|                &ДатаОтч,
|                Склад = &ВыбСклад
|                И Номенклатура В ИЕРАРХИИ (&ВыбГруппа)) КАК ТоварыНаСкладахОстатки
|    ГДЕ
|        ТоварыНаСкладахОстатки.КоличествоОстаток > 0";
Запрос5.УстановитьПараметр("ВыбГруппа",    ВыбГруппа);     //Номенклатура
Запрос5.УстановитьПараметр("ВыбСклад",    складОст);     //Склад
Запрос5.УстановитьПараметр("ДатаОтч",    ДатаОст);     //Дата
РезультатЗапроса5 = Запрос5.Выполнить().Выбрать();
пока РезультатЗапроса5.Следующий() цикл;
ТабличноеПоле1.Колонки.Добавить("Колонка"+Номерстроки,,РезультатЗапроса5.Номенклатура.Наименование);
Номерстроки=Номерстроки+1;
КонецЦикла;

ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
Строкатаблицы1=ТабличноеПоле1.Добавить();
РезультатЗапроса5.Сбросить();
пока РезультатЗапроса5.Следующий() цикл
Строкатаблицы1["Колонка"+Номерстроки1]=РезультатЗапроса5.Количество;

если Номерстроки1=Номерстроки тогда
прервать;
иначе
Номерстроки1=Номерстроки1+1;
КонецЕсли;
КонецЦикла;

для Счетчик =1 по 14 цикл
Строкатаблицы1=ТабличноеПоле1.Добавить();
КонецЦикла;

для Номерстроки2 =1 по Номерстроки-1 цикл
Строкатаблицы1["Колонка"+Номерстроки2]=ТабличноеПоле1.Итог("Колонка"+Номерстроки2);
КонецЦикла;
В строках выгружается номенклатура. Первая строка таблицы - остаток на начало, предпоследняя сумма по строкам. последняя остаток на конец.
Когда есть табличная часть на форме я без проблем это делаю, а когла перевертыш, то никак не получается отследить изменение ячеек(только строки). И второй вопрос: как можно обратиться к строкам по номеру или индексу чтобы их посчитать: в столбце строка1+строка2-строка3=сумма. Заранее благодарю.
1 Rie
 
23.11.13
09:21
(0) Привыкни к мысли, что ТабличноеПоле служит лишь для отображения данных.
Данные его хранятся в ТаблицеЗначений или в чём-то ещё богоугодном. С _данными_ (таблицей значений) и работай. В ТаблицуЗначений добавляй строки. И т.д.
2 asder117
 
23.11.13
09:31
(1) хорошо. понял. а там как по ячейкам перебрать
3 Rie
 
23.11.13
09:42
(2) ТаблЗнач = Запрос5.Выполнить.Выгрузить();
// перебор по строкам
Для каждой СтрокаТЗ из ТаблЗнач Цикл
    // здесь можно обращаться к СтрокаТЗ.Номенклатура и т.п.
КонецЦикла;

Если нужно обратиться к i-й строке - так и пишешь:
ТаблЗнач[i]
4 Rie
 
23.11.13
09:43
+(3) При желании добавляешь в ТаблЗнач нужные колонки, вычисляешь их значения и т.д.
А потом - отображаешь ТаблЗнач в ТабличноеПоле1.
5 asder117
 
23.11.13
13:18
(4) Хорошо спасибо. Но ведь у меня в модуле количество колонок неизвестное, оно равно количеству номенклатуры. т.е. получить данные 5 строки из 5 колонки можно ТаблЗнач[i]."Колонка"+номер колонки?
6 Фокусник
 
23.11.13
13:58
(5) ТаблЗнач[i][j], и нужно не забыть, что индексы с 0 начинаются
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.