Имя: Пароль:
1C
1С v8
Перебор таблицы значений
,
0 webDoktor
 
23.10.11
16:08
Это снова я. Знаю, что от меня вас уже тошнит, но все же, прошу помощи.

Как перебрать все ячейки в определенных колонках таблицы значения?
1 Aleksey
 
23.10.11
16:10
а в чем проблема?
2 Aleksey
 
23.10.11
16:12
для й=1 по тз.Количество() цикл
ЗначениеЯчейки=ТЗ[й-1][номерТвоейЯчейки]
КонецЦикла
3 Живой Ископаемый
 
23.10.11
16:13
То есть например только во второй и пятой колонке?
и сделать двумя циклами?
4 webDoktor
 
23.10.11
16:14
(1) Есть предприятие. У предприятия ведется журнал прогулов. То есть, там отмечается, что сегодня не было Петрова, Иванова, Сидорова... Так вот, необходимо составить отчет по месяцам.

С горем по палам, я нашел поля, в которых необходимо просматривать значение на "не было". Теперь, мне нужно в каждой из этих колонок, посчитать количество этих самых "не было". Как это сделать?

(2), (3) Мне требуется поиск не в определенных ячейках, а ВО ВСЕХ ячейках определенной колонки.
5 Aleksey
 
23.10.11
16:16
(4) И чем тебе (2) не нравится?
6 Aleksey
 
23.10.11
16:16
или тебе нужно поиск во всех ячейках определенной строки (!)?
7 webDoktor
 
23.10.11
16:21
(6) Мне нужен обход всех строк в определенной колонке.

(2) А как узнать "номерТвоейЯчейки"?
8 Aleksey
 
23.10.11
16:23
номерТвоейЯчейки = номер "определенной колонке"
9 Aleksey
 
23.10.11
16:24
Тебе номер колонки в которой смотреть надо известен? Или что значит "к в определенной колонке. "
10 webDoktor
 
23.10.11
16:25
(9)


       Для Каждого ТекСтрока Из ТаблицаЗначений Цикл // в цикле перебираем все строки таблицы значений
           Для Каждого ТекКолонка Из КолонкиТЗ Цикл // перебираем все столбцы текущей строки табличцы значений
               
               ИмяКолонки = ТекКолонка.Имя;
           
           КонецЦикла;
       КонецЦикла;

Мне известно имя колонки. А как узнать номер колонки?
11 Aleksey
 
23.10.11
16:27
(10) Зачем? Обращайся по имени

А вообще можно использовать НайтиСтроки()


Для извращенцев можно запрос к ТЗ написать
12 Живой Ископаемый
 
23.10.11
16:28
2(10) а зачем ты перебираешь колонки, если ты точно знаешь в каких тебе нужно искать?
13 Aleksey
 
23.10.11
16:28
(10) Как то (10) с задачей не вяжется. Тебе нужно искать обределенной значение во всей ТЗ?
14 webDoktor
 
23.10.11
16:31
(12), (13) У меня есть ТЗ. В этой ТЗ мне нужно найти:

1. Колонки, которые соотв. месяцу
2. Проверить все эти колонки и сложить значения "не был"

Делаю так:


       Для Каждого ТекСтрока Из ТаблицаЗначений Цикл // в цикле перебираем все строки таблицы значений
           Для Каждого ТекКолонка Из КолонкиТЗ Цикл // перебираем все столбца текущей строки табличцы значений
               ТекЯчейка = ТекСтрока[ТекКолонка.Имя]; // выбираем данные из текущей ячейки
               Если Прав(ТекЯчейка, 2) = "01" Тогда
               
для й = 1 по ТаблицаЗначений.Количество() цикл
   ЗначениеЯчейки = ТаблицаЗначений[й-1][ТекКолонка.Имя];
   Сообщить(ЗначениеЯчейки);
КонецЦикла
                   
               КонецЕсли;                
           КонецЦикла;
       КонецЦикла;

И представляете?! РАБОТАЕТ! Теперь только надо как-то сделать так, чтобы не 12 условий делать, а все в одном цикле.
15 Aleksey
 
23.10.11
16:31
Отбор = Новый Структура();
Отбор.Вставить(ИмяТвоейКолонкиВКоторойБудемИскать,ЗначениеКотороеНужноНайти);

Строки = ТвояТЗ.НайтиСтроки(Отбор);
16 Живой Ископаемый
 
23.10.11
16:34
2(14) божечки... зачем жеж ты перебираешь колонки в цикле, если ты и так знаешь что их 12? в надежде на то что когда-нибудь количество месяцев может быть другим?

и блин, что это за ересь:

для й = 1 по ТаблицаЗначений.Количество() цикл
   ЗначениеЯчейки = ТаблицаЗначений[й-1][ТекКолонка.Имя];
   Сообщить(ЗначениеЯчейки);
КонецЦикла

?
17 Aleksey
 
23.10.11
16:35
Для Каждого ТекКолонка Из КолонкиТЗ Цикл // перебираем все столбца текущей строки табличцы значений
 ТекЯчейка = ТекСтрока[ТекКолонка.Имя]; // выбираем данные из текущей ячейки
 
 Отбор = Новый Структура();
 Отбор.Вставить(ТекЯчейка ,"не был");

 Строки = ТаблицаЗначений.НайтиСтроки(Отбор);

 Сообщить("В ячейки "+ТекЯчейка+" не было "+Строки.Количество()+" раз");
КонецЦикла
18 Aleksey
 
23.10.11
16:37
А вообще, не проще ли тупо свернуть??

стрСуммирования="";
Для Каждого ТекКолонка Из КолонкиТЗ Цикл // перебираем все столбца текущей строки табличцы значений
 ТекЯчейка = ТекСтрока[ТекКолонка.Имя]; // выбираем данные из текущей ячейки
 стрСуммирования=стрСуммирования+", "+ТекЯчейка;  
КонецЦикла

ТаблицаЗначений.Свернуть(,сред(стрСуммирования,3));
19 webDoktor
 
23.10.11
16:52
СПАСИБО вам большое! Разобрался!
20 ILM
 
гуру
23.10.11
18:42
(0) Милый человек, сейчас Вы считаете ячейки где "не было", завтра "был", потом будете считать "больничный", "командировка", "отпуск", "донор" и т.д.
Может стоит запросы выучить?
Тем более в 8-ке концепция - всегда применять запросы. Лучше вытянуть 250 строк с суммой итого, чем в ТЗ тянуть данные 250*365 строк, а по ним потом считать уже итого?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший