Имя: Пароль:
1C
1С v8
8.1 Вывод промежуточных итогов в ТЗ
0 breezee
 
25.09.15
18:59
Мне нужно для каждого столбца, если у этого реквизита 1 строки этого столбца стоит параметр истина тогда нужно посчитать сумму нижестоящих элементов и вывести в строку с параметроми столбец для котрого посчитана сумма. Написал код на обработчик окончания редактирования строки ТЗ(код ниже). Он выводит сумму общую для всех ячеек ниже строки с параметром в ячейку 1 строки с параметром. Что я сделал не так? Подскажите, пожалуйста.
ш = Колстрок;
    Для ж = 1 по КолКолонок цикл  //со 2 колонки
        Пока ш>=0 цикл  //с последней по первую строки
    Если НЕ ТабличноеПоле1[ш][0].ЗачетнаяЕдиница тогда //суммируется
    СуммЗач = СуммЗач + ТабличноеПоле1[ш][ж];            
    иначе
    ТабличноеПоле1[ш][ж] = СуммЗач; //выводится
    СуммЗач = 0;
    КонецЕсли;
    ш = ш -1;
    КонецЦикла;
    КонецЦикла;
1 Wobland
 
25.09.15
19:02
придумал какую-то хрень вместо отчёта
2 breezee
 
25.09.15
19:11
(1) Это не отчет, это для ТЗ на форме
3 Wobland
 
25.09.15
19:12
придумал какую-то херь. так лучше?
4 Рэйв
 
25.09.15
19:12
Косноязычие 80 лвл:-)
5 breezee
 
25.09.15
19:13
(3) Да) Но почему эта хрень не пашет?
6 Wobland
 
25.09.15
19:17
(4) да? человек хочет выборочно видеть итоги по группировкам, причём в ТП. я со второго раза даже понял ;)
зачем именно выборочно, зачем именно в ТП, как это всё внутре устроено, даже думать не хочу
7 breezee
 
25.09.15
19:22
(6) Вообще не первый раз подобное задание, правда в 1 раз было в печатной форме(комплектующие для котлов, т.е. там идет котел с суммой по нему и ниже комплектующие и суммы по ним), я к тому что много где такое может понадобиться. Сейчас проблема в том что это для динамической тз. Т.е. проблемы вроде и нет, я обхожу сначала для одного столбца, считаю сумму с последней строчки до строчки с параметром и вывожу сумму в строчку с параметром, дальше то же самоедля следущего столбца, я понятия не имею почему это не работает. Может вы поможете?
8 Wobland
 
25.09.15
19:24
(7) возьми СКД и показывай все итоги
9 breezee
 
25.09.15
19:27
(8) Я не могу взять СКД, это, блин, для таблицы значений на форме нужно сделать, я не понимаю где я ошибся
10 Wobland
 
25.09.15
19:29
таблица значений - это такой кусок памяти, есличо. в отсутствии необходимости табдокумента не убедил
11 breezee
 
25.09.15
19:31
(10) Простите, я не понимаю, если мне действительно нужно использовать СКД для динамической таблицы значений на форме - то как мне это вообще сделать? Может просто подскажиет где я ошибся в(0)?
12 Serginio1
 
25.09.15
19:31
13 Wobland
 
25.09.15
19:31
(11) не дошло. ну и ладно
14 breezee
 
25.09.15
19:41
(12) Простите, я не смог понят что оттуда мне поможет.
(13) Можете сказать напрямую, пожалуйста, я не понимаю. Вообще я уже 2 часа бьюсь над этим идиотизмом, я просто не понимаю почему он не работает как надо.
15 Wobland
 
25.09.15
19:47
(14) я зол, голоден и не люблю мисту. тупо лениво что-то объяснять
16 breezee
 
25.09.15
19:49
(15) Ладно, сейчас вечер пятницы, наверное завтра днем пересоздам. А чего злишься - то? Расслабься, время отдыха.
17 Wobland
 
25.09.15
19:57
(16) да упоротые вконец охренели. прошлых достоных людей вообще не видно, хоть и не забанены. а бан-лист в целом доставляет ;)
18 breezee
 
25.09.15
20:00
(17) Все же расслабься, нужно наслаждаться жизнью)
19 Wobland
 
25.09.15
20:02
(18) наслаждаюсь, да. у меня тут "зелёное крыло" на фоне ;) комедийный сериал
20 Serginio1
 
25.09.15
20:04
(14) Там есть функция
глСгруппироватьТзПоПолям(Тз,Поля,СуммируемыеПоля,ПоляСортировкиТзПоГруппе="")

Посмотри на реализацию
21 breezee
 
25.09.15
20:09
(20) Да, я её видел, но там обращение по строке, у меня по строке и столбцу , да вообще я просто не понимаю почему мой код не работает он ДОЛЖЕН работать, я думал что меня ткнут там где у меня не правильно, все равно спасибо
(19) Вообще советую Доктора кто посмотреть для полной релаксации. Хотя кто он нём не знает)
22 Wobland
 
25.09.15
20:13
(21) насколько понимаю, они сильно разные в каждом сезоне. с какого начать, я так и не выбрал ;)
23 breezee
 
25.09.15
20:18
(22) Рекомендую с 1 сезона 2005, там уже все воременненько) они вообще все годные, но старые так и не осилил
24 breezee
 
25.09.15
20:20
(23) Так все новые что смотрел очень годные, порекомендовал с 1 только потому что он первый
25 Serginio1
 
25.09.15
20:28
Для ж = 1 по КолКолонок цикл  //со 2 колонки
СуммЗач = 0; //!!!!

Если у тебя последняя строка не выводится, то и не обнуляется.
26 breezee
 
25.09.15
20:34
Так она и не должна обнуляется, она вывелась и сразу обнуляется. Пока не вывелась суммируется по колонке Вот примерно как все выглядит у меня (не знаю, понятно вышло ли)

http://i.imgur.com/ebBj3TD.png
27 breezee
 
25.09.15
20:41
(25) Я забыл написать, пролема в том что они все выводятся не в своих колонках, а тольо в первой
28 Serginio1
 
25.09.15
20:43
У тебя при начале подсчета по колонке нужно обнулить значение.

Если у тебя в первой строке не стоит вывод, то на следующую колонку перейдет значение.

Так наверное
ТабличноеПоле1[Ж][Ш] = СуммЗач;
29 Serginio1
 
25.09.15
20:45
Нет прошу прощения.
ТабличноеПоле1[Ш][Ж] = СуммЗач;
Но перед циклом по строкам нужно СуммЗач обнулять
30 Serginio1
 
25.09.15
20:48
Для ж = 1 по КолКолонок цикл  //со 2 колонки

СуммЗач = 0;
Ш=КоличествоСтрок;
31 breezee
 
25.09.15
20:49
(29) Спасибо, но все равно выводит не там где надо, все время выводит в первой, может у меня проблема в коде до этого, вот весь код обработчика(ниже) Сумму выводит только в колонке ВсегоЧасов http://i.imgur.com/wzwy7fL.png

    СуммаСтроки = 0;
    СуммЗач = 0;
    Колстрок = ТабличноеПоле1.Количество()-1;
    КолКолонок = ТабличноеПоле1.Колонки.Количество()-1;
    Для ш = 0 По Колстрок цикл
        для ж = 2 по КолКолонок цикл
            СуммаСтроки = СуммаСтроки + ТабличноеПоле1[ш][ж];
        КонецЦикла;
        Элемент.ТекущаяСтрока.ВсегоЧасов = СуммаСтроки;
        СуммаСтроки = 0;
    КонецЦикла;
    
    Если Элемент.ТекущаяСтрока.ВидРаботы.ЗачетнаяЕдиница тогда
        //добаить строку И ПОФИКСИТЬ 2 РАЗА ДОБАВЛЕНИЕ СДЕЛАТЬ
        Стро = ТабличноеПоле1.Добавить();
        Стро.ВидРаботы = Справочники.ВидыУчебнойРаботы.НайтиПоКоду(1);
    КонецЕсли;        //просчет для не зачетных единиц
    ш = Колстрок;
    Для ж = 1 по КолКолонок цикл  //со 2 колонки
        СуммЗач = 0;
        Пока ш>=0 цикл  //с последней по первую строки
    Если НЕ ТабличноеПоле1[ш][0].ЗачетнаяЕдиница тогда //суммируется
    СуммЗач = СуммЗач + ТабличноеПоле1[ш][ж];            
    иначе
    ТабличноеПоле1[ш][ж] = СуммЗач; //выводится
    СуммЗач = 0;
    КонецЕсли;
    ш = ш -1;
    КонецЦикла;
    КонецЦикла;
32 breezee
 
25.09.15
20:52
Так, стало интересней, закомментив я понял почему выводит только в первой - потому что это сумма по строке изменяется и изменяет знчение в первой. Теперь вопрос почему кроме первой сумма не считатеся
33 breezee
 
25.09.15
20:54
В отладичке цикл по колонкам идет
34 Serginio1
 
25.09.15
20:59
Еще раз
Для ж = 1 по КолКолонок цикл  //со 2 колонки
ш = Колстрок;

Когда у тебя Ш перед циклом то оно превращается в 0 после первого цикла по колонке.
А дальше уже срабатывает условие
   Пока ш>=0 цикл  //с последней по первую строки
а ш уже равно 0
35 breezee
 
25.09.15
21:00
(34) Понял, спасибо большое
36 breezee
 
25.09.15
21:00
(34) ГИГАНТСКОЕ СПАСИБО еще раз)