Имя: Пароль:
1C
1C 7.7
v7: Свертка ТаблицыЗначений непонятка
,
0 zenon46
 
30.11.17
16:57
Доброго дня!
Столкнулся с такой проблемой, делается отчет, колонками которого являются месяца, заранее не известно сколько будет месяцев, они высчитываются в зависимости от того какой период на форме выбрал пользователь, и вот тут самая трудность, в одной ветке алгоритма таблицу нужно свернуть, по именованной колонке, скажем это "контрагент", и просуммировав остальные, но как это сделать ведь идентификаторы колонок не объявлялись.
Собственно колонки создаются вот так :

        НачДаты = НачДата;
        Пока 1 = 1 Цикл
            ТабЗнач1.НоваяКолонка(,"Число",,,,,,);
            НачДаты = ДобавитьМесяц(НачДаты,1);
            Если НачДаты > КонДата Тогда
                Прервать;
            КонецЕсли;
        КонецЦикла;


Естественно выполнив ТабЗнач1.Свернуть("Контрагент",);
на выходе получаем таблицу из одной колонки.
1 Провинциальный 1сник
 
30.11.17
16:58
"но как это сделать ведь идентификаторы колонок не объявлялись"
Объяви.
2 Провинциальный 1сник
 
30.11.17
17:00
+(1) А можно номера колонок указать через запятую. Как строку с номерами колонок создать, объяснять надо?
3 GrVas
 
30.11.17
17:00
ТабЗнач1.Свернуть("Контрагент", тут нужно указать числовое поле)
4 Lazy Stranger
 
30.11.17
17:07
НачДаты = НачДата;
СтрокаСвертки="";
к=0;
Пока 1 = 1 Цикл
к=к+1;
ИмяКолонки="К"+к;
СтрокаСвертки=СтрокаСвертки+?(ПустаяСтрока(СтрокаСвертки)=0,",","")+СтрокаСвертки;
        ТабЗнач1.НоваяКолонка(ИмяКолонки,"Число",,,,,,);
         НачДаты = ДобавитьМесяц(НачДаты,1);
          Если НачДаты > КонДата Тогда
              Прервать;
          КонецЕсли;
КонецЦикла;
ТабЗнач1.Свернуть("Контрагент",СтрокаСвертки)
5 Lazy Stranger
 
30.11.17
17:08
СтрокаСвертки=СтрокаСвертки+?(ПустаяСтрока(СтрокаСвертки)=0,",","")+ИмяКолонки
6 Ёпрст
 
30.11.17
17:12
(0) идентификаторы там есть: _1,_2 ..._n
7 Ёпрст
 
30.11.17
17:13
просто цикл +ПолучитьПараметрыКолонки(счетчикЦикла) вернёт имя колонки, складывай их, получай колонку для группировки сумм
8 uno-group
 
30.11.17
17:23
А зачем создавать колонки если их потом сворачиваешь?
Добавь сразу две колонки "Контрагент" и "Сумма"
Если нужно потом добавляй новые но не забывай дублировать ивнрмацию в Сумма. потом свернеш "Контрагент","Сумма"
и ненадо лишних циклов
9 Провинциальный 1сник
 
30.11.17
18:10
(8) Лучше Контрагент,Период,Сумма. А еще лучше использовать индексированную таблицу. Ну а переменное количество колонок - зло изначальное.
10 zenon46
 
30.11.17
18:18
Всем спасибо, за подсказку. Все сделал.
11 vova1122
 
30.11.17
18:23
(9) в чем зло? Кроме как с печатью єтого отчета невижу зла.
12 zenon46
 
30.11.17
18:27
(8) стркутура таблицы
           Месяц
Контрагент Сумма
13 zenon46
 
30.11.17
18:28
А месяцев может быть сколько угодно
14 Сияющий Асинхраль
 
30.11.17
21:26
А я обычно стараюсь имена дать осмысленные даже при автоматической генерации колонок, например, в данном случае можно было включать в имя колонки начало периода (то бишь месяца) в виде:

"Период_" + СтрЗаменить(Формат(НачДаты,"ДДДММГГГГ"),".","_");
15 Провинциальный 1сник
 
01.12.17
10:16
(11) Двумерные таблицы жутко прожорливы к памяти.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.