Имя: Пароль:
1C
1C 7.7
v7: Итог по столбцам
0 pavilion
 
06.04.15
17:09
Добрый день,
Возникла необходимость, вывести строку Итогов, к каждому присоединенному столбцу.
Пробовал делать элементарно через счетчик, но выходит итог по одному столбцу.

Процедура Сформировать()
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)  
    |Период с НачДата по КонДата;
    //|Без Итогов;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент     = Регистр.ВзаиморасчетыПокупателей.Контрагент,         Регистр.ВзаиморасчетыПоставщиков.Контрагент;
    |Фирма          = Регистр.ВзаиморасчетыПокупателей.Фирма,             Регистр.ВзаиморасчетыПоставщиков.Фирма;
    |ДолгПокуп     = Регистр.ВзаиморасчетыПокупателей.Долг;
    |ДолгПост     = Регистр.ВзаиморасчетыПоставщиков.Долг;
    |Условие (Фирма в ВыбФирма);
    |Условие (Контрагент в ВыбКлиенты);
    |Функция КонДолг = КонОст(ДолгПокуп);
    |Функция КонДолгПост = КонОст(ДолгПост);
    |Группировка Контрагент без групп;
    |Группировка Фирма Все ВошедшиеВзапрос;
    |"
    ;

    Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
        Предупреждение("Запрос по Контрагентам не выполнился!");
        Возврат;
    КонецЕсли;

    Таб = СоздатьОбъект("Таблица");
    н=0;
    Таб.ИсходнаяТаблица("Взаиморасчеты");
    Таб.ВывестиСекцию("Шапка|Список");
    Пока Запрос.Группировка(1)=1 Цикл
    
            Пока Запрос.Группировка(2)=1 Цикл
                Таб.ПрисоединитьСекцию("Шапка|Фирм");
            КонецЦикла;
            Прервать;
    КонецЦикла;
    //
    Запрос.вНачалоВыборки();        
    Пока Запрос.Группировка(1)=1 Цикл
        н=н+1;
        Таб.ВывестиСекцию("Строка|Список");
            Пока Запрос.Группировка(2)=1 Цикл
                Таб.ПрисоединитьСекцию("Строка|Фирм");
            КонецЦикла;
    КонецЦикла;
    
Таб.Опции(1,1,10,,,,,);
Таб.Показать("Взаиморасчеты", "");
КонецПроцедуры
1 Ёпрст
 
06.04.15
17:14
Нам отсюда не видно макета, куда выводишь и каков результат
2 Ёпрст
 
06.04.15
17:14
и при чем тут вообще счётчик.
3 pavilion
 
06.04.15
17:16
Фирма1 фирма2 Фирма3
Клиент1    
Клиент2
Клиент3
Итого:      1       2      3
4 serpentt
 
06.04.15
17:17
Можно Запрос выгрузить в ТЗ, а дальше
ТЗ.ИТОГ("ДолгПокуп") и ТЗ.ИТОГ("ДолгПост")
5 serpentt
 
06.04.15
17:18
или Индексированную таблице делать
6 Builder
 
06.04.15
17:33
Можно такие итоги в массиве считать.
Только обнулить его не забыть перед суммированием.
7 ЛюбопытнаяЯ
 
07.04.15
09:38
(6)- Массив??? в 7? Это как? Может я что-то не знаю
8 Builder
 
07.04.15
09:57
(7) Как то так:

Перем Итоги[1000];

Для К=1 По 1000 Цикл
  Итоги[К]=0;
КОнецЦикла;

Не помню только нумерация с 0 или 1 начинается.
9 Злопчинский
 
07.04.15
10:03
(8)
- почемиу 20 век начинается с 2001г, а не с 2000?
- потому что новый ящик пива начинается с 21-ой бутылки,а на 20-ой заканчивается предыдущий!
10 ЛюбопытнаяЯ
 
07.04.15
10:08
(7) и (8)
На форуме так интересно... Каждый день что-нить новенькое!
Спасибо! Попробую!
11 Ёпрст
 
07.04.15
10:10
Да уж.. что будет, если узнают про вектор и ассоциативный вектор - это ж радости до потолка будет.
12 ЧеловекДуши
 
07.04.15
10:23
(0) Ты не выводишь Итог, что ты хочешь от 1С?
13 ЧеловекДуши
 
07.04.15
10:24
(3) А где у тебя в (0), та часть кода, где должен итог выводиться?
14 Ёпрст
 
07.04.15
10:31
(13) рано еще о об итогах думать, тут трясти надо сильнее
15 varelchik
 
07.04.15
10:43
+(11)И ПоставщикаДанных ТП и вообще про 1С++.
16 pavilion
 
14.04.15
10:38
что-то у меня не получается вывести сумму по столбцам..
может кто-то объяснит как можно реализовать
17 Ёпрст
 
14.04.15
12:01
(16)
на вот, развлекайся
18 Ёпрст
 
14.04.15
12:01
один из самых неоптимальных способов, зато , простой
19 Ёпрст
 
14.04.15
12:03
20 Ёпрст
 
14.04.15
12:03
21 Ёпрст
 
14.04.15
12:04
Ладно, разберешься, как ссылку достать
22 pavilion
 
14.04.15
14:24
спасибо огромное
23 pavilion
 
27.04.15
10:27
Собственно с итогом по столбцам разобрался с горе пополам..

Как бы теперь подсчитать итог по строкам по контрагентам.

Процедура Сформировать()
    Запрос = СоздатьОбъект("Запрос");    
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)  
    |Период с НачДата по КонДата;
    //|Без Итогов;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Контрагент     = Регистр.ВзаиморасчетыПокупателей.Контрагент,         Регистр.ВзаиморасчетыПоставщиков.Контрагент;
    |Фирма          = Регистр.ВзаиморасчетыПокупателей.Фирма,             Регистр.ВзаиморасчетыПоставщиков.Фирма;
    |ДолгПокуп     = Регистр.ВзаиморасчетыПокупателей.Долг;
    |ДолгПост     = Регистр.ВзаиморасчетыПоставщиков.Долг;
    |Условие (Фирма в ВыбФирма);
    |Условие (Контрагент в ВыбКлиенты);
    |Функция КонДолг = КонОст(ДолгПокуп);
    |Функция КонДолгПост = КонОст(ДолгПост);
    |Группировка Контрагент без групп;
    |Группировка Фирма Все ВошедшиеВзапрос;
    |"
    ;

    Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
        Предупреждение("Запрос по Контрагентам не выполнился!");
        Возврат;
    КонецЕсли;

    Таб = СоздатьОбъект("Таблица");
    н=0;
        
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    СЗ=СоздатьОбъект("СписокЗначений");
    Запрос.Выгрузить(ТЗ);
    ТЗ.Свернуть("Фирма","КонДолг,КонДолгПост");
    
    Таб.ИсходнаяТаблица("Взаиморасчеты");
    Таб.ВывестиСекцию("Шапка|Список");
    Пока Запрос.Группировка(1)=1 Цикл
            Пока Запрос.Группировка(2)=1 Цикл
                Таб.ПрисоединитьСекцию("Шапка|Фирм");
            СЗ.ДобавитьЗначение(Запрос.Фирма);
            КонецЦикла;
        Прервать;
    КонецЦикла;
    Запрос.вНачалоВыборки();
    Пока Запрос.Группировка(1)=1 Цикл
        н=н+1;
        Таб.ВывестиСекцию("Строка|Список");
            Пока Запрос.Группировка(2)=1 Цикл
                Таб.ПрисоединитьСекцию("Строка|Фирм");
            КонецЦикла;
    КонецЦикла;
    Таб.ВывестиСекцию("Дно|Список");
    Для в=1 по СЗ.РазмерСписка() Цикл
        ТЗ.ВыбратьСтроки();
        Итог=0;
            Пока ТЗ.ПолучитьСтроку()=1 Цикл
                 Если ТЗ.Фирма = СЗ.ПолучитьЗначение(в) Тогда
                     Итог = ТЗ.КонДолг+ТЗ.КонДолгПост;  
                 КонецЕсли;
            КонецЦикла;
      Таб.ПрисоединитьСекцию("Дно|Фирм");
    КонецЦикла;
Таб.Опции(1,1,10,,,,,);
Таб.Показать("Взаиморасчеты", "");
КонецПроцедуры
24 Ёпрст
 
27.04.15
10:42
(23) Они и так есть, готовые, при обходе первой группировки запроса.
25 Ёпрст
 
27.04.15
10:43
И.. ты пример то смотрел ?
Там итоги и по строкам и по столбцам, если че.
26 pavilion
 
27.04.15
11:57
Всё, спасибо, разобрался)