Итоги таблицы в отчетной форме
Показывать по
10
20
40
сообщений
- 1
- 2
02.12.2008
10:08
#11
"> Есть отчет, в котором может быть произвольное количество выводимых столбцов (зависит от данных) и, естественно, - произвольное количество строк. Как можно просчитать итоги по каждому столбцу не утяжеляя отчет на написание процедур? Если сравнивать с экселем, то что-то наподобие: Итоговая строка = ячейка1 + ячейка3 + ячека5 и т.д.
1. вообще-то нужно хоть видеть трафорет выходной таблицы
2. знаить начальный отсчет ячейки
3. ну что-то вроде такого накатать! :
//Таб - таблица из вне или уже сформированная!
Функция ЗнЯч(Т, х, у)
ТабОбл = Т.Область(х,у);
Возврат ТабОбл.Текст;
КонецФункции
х=1; у=1;
Пока 1=1 Цикл
Если ПустаяСтрока(ЗнЯч(Таб, х, у))=0 Тогда
//ТекТекст - твои данные
Иначе
Если ПустаяСтрока(ЗнЯч(Таб, х, у + 1))=0 Тогда
у = у + 1;
ИначеЕсли ПустаяСтрока(ЗнЯч(Таб, х + 1, 1))=0 Тогда
х = х + 1;
у = 1;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
"
1. вообще-то нужно хоть видеть трафорет выходной таблицы
2. знаить начальный отсчет ячейки
3. ну что-то вроде такого накатать! :
//Таб - таблица из вне или уже сформированная!
Функция ЗнЯч(Т, х, у)
ТабОбл = Т.Область(х,у);
Возврат ТабОбл.Текст;
КонецФункции
х=1; у=1;
Пока 1=1 Цикл
Если ПустаяСтрока(ЗнЯч(Таб, х, у))=0 Тогда
//ТекТекст - твои данные
Иначе
Если ПустаяСтрока(ЗнЯч(Таб, х, у + 1))=0 Тогда
у = у + 1;
ИначеЕсли ПустаяСтрока(ЗнЯч(Таб, х + 1, 1))=0 Тогда
х = х + 1;
у = 1;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
"
02.12.2008
10:46
#12
> Там есть какая-то функция (я не разу ею не пользовался) перебора ячеек в отчетной таблице.
Где "там"?
Где "там"?
02.12.2008
12:10
#13
Горная масса (габбро) 0-500 108540.08 76.25 1081730-18 - -
1423.500 13870-000 - -
Всего по: Полуфабрикат
Горная масса (известняк) 70246.21 30.54 - 1825750-45 -
2300.000 - 60043-000 -
Всего по: горная масса
Известняк для флюсования 20-40 - - - - 38174-00
- - - 1908-700
Мука известняковая молотая 780.45 410.76 - - -
1.900 - - -
Отсев 0-20 113105.38 20.00 - - 305860-00
5655.269 - - 15293-000
Отсев 0-5 76484.56 20.00 - - 57199-40
3824.228 - - 2859-970
Песок 0-5 192999.15 86.12 - - -
2240.970 - - -
1423.500 13870-000 - -
Всего по: Полуфабрикат
Горная масса (известняк) 70246.21 30.54 - 1825750-45 -
2300.000 - 60043-000 -
Всего по: горная масса
Известняк для флюсования 20-40 - - - - 38174-00
- - - 1908-700
Мука известняковая молотая 780.45 410.76 - - -
1.900 - - -
Отсев 0-20 113105.38 20.00 - - 305860-00
5655.269 - - 15293-000
Отсев 0-5 76484.56 20.00 - - 57199-40
3824.228 - - 2859-970
Песок 0-5 192999.15 86.12 - - -
2240.970 - - -
02.12.2008
13:43
#17
она - ссылка!
То, что выделено зеленым цветом - это промежуточные итоги. Естественно, что в конце таблицы будет ИТОГО общее (по промежуточным итогам).
И еще: на "скрипте" не видно (такая база попалась), но в реальности в каждой ячейке по два значения (в самом деле - это две ячейки). Для примера первый столбец с цифирями. Верхняя цифра - сумма, нижняя - количество. В таком же порядке и нужно присчитать.
То, что выделено зеленым цветом - это промежуточные итоги. Естественно, что в конце таблицы будет ИТОГО общее (по промежуточным итогам).
И еще: на "скрипте" не видно (такая база попалась), но в реальности в каждой ячейке по два значения (в самом деле - это две ячейки). Для примера первый столбец с цифирями. Верхняя цифра - сумма, нижняя - количество. В таком же порядке и нужно присчитать.
02.12.2008
23:10
#20
"> Как можно просчитать итоги по каждому столбцу не утяжеляя отчет на написание процедур
ну что сам так и не смог написать?
Фунцкия ЗнЯч(Т, у, х)
облТаб = Т.Область(у, х);
Возврат ОблТаб.Текст;
КонецФункции
Процедура Подсчитать()
//таб -- уже сформированная
//нач точка будет у = 5, х = 2
//у - строка, х - столбец
х0 = 2; у0 = 5; у = у0 + 1; х = х0;
ТЗ_Сум = СоздатьОбъект("ТаблицаЗначений");
ТЗ_Кол = СоздатьОбъект("ТаблицаЗначений");
Пока ПустаяСтрока(ЗнЯч(Таб, у0, х + 1))=0 Цикл
ТЗ_Сум.НоваяКолонка("Колонка_" + х - х0 + 1, "Число");
ТЗ_Кол.НоваяКолонка("Колонка_" + х - х0 + 1, "Число");
х = х + 1;
КонецЦикла;
Пока (ПустаяСтрока(ЗнЯч(Таб, у, х0))=0) и (ПустаяСтрока(ЗнЯч(Таб, у + 1, х0))=1) Цикл
Если Найти(ЗнЯч(Таб, у, х0),"Всего по:")>0 Тогда
у = у + 1;
Продолжить;
КонецЕсли;
ТЗ_Сум.НоваяСтрока();
ТЗ_Кол.НоваяСтрока();
Для н = 1 по х Цикл
ТекЗн = ЗнЯч(Таб, у, н + х0);
ТЗ_Сум.УстановитьЗначение(у, н, ?(Найти(ТекЗн, "-")>0,0,СтрЗаменить(ТекЗн, ",", ".")));
ТекЗн = ЗнЯч(Таб, у + 1, н + х0);
ТЗ_Кол.УстановитьЗначение(у, н, ?(Найти(ТекЗн, "-")>0,0,СтрЗаменить(ТекЗн, ",", ".")));
КонецЦикла;
КонецЦикла;
//ну и всё... можно смотреть итоги по колонкам!
//пример, у первой посмотрим
Сообщить("Итого сум по первой колонке = " + ТЗ_сум.Итог(1));
Сообщить("Итого кол по первой колонке = " + ТЗ_кол.Итог(1));
КонецПроцедура
можно ещё красивеее сделать...
ну это думаю не надо!"
ну что сам так и не смог написать?
Фунцкия ЗнЯч(Т, у, х)
облТаб = Т.Область(у, х);
Возврат ОблТаб.Текст;
КонецФункции
Процедура Подсчитать()
//таб -- уже сформированная
//нач точка будет у = 5, х = 2
//у - строка, х - столбец
х0 = 2; у0 = 5; у = у0 + 1; х = х0;
ТЗ_Сум = СоздатьОбъект("ТаблицаЗначений");
ТЗ_Кол = СоздатьОбъект("ТаблицаЗначений");
Пока ПустаяСтрока(ЗнЯч(Таб, у0, х + 1))=0 Цикл
ТЗ_Сум.НоваяКолонка("Колонка_" + х - х0 + 1, "Число");
ТЗ_Кол.НоваяКолонка("Колонка_" + х - х0 + 1, "Число");
х = х + 1;
КонецЦикла;
Пока (ПустаяСтрока(ЗнЯч(Таб, у, х0))=0) и (ПустаяСтрока(ЗнЯч(Таб, у + 1, х0))=1) Цикл
Если Найти(ЗнЯч(Таб, у, х0),"Всего по:")>0 Тогда
у = у + 1;
Продолжить;
КонецЕсли;
ТЗ_Сум.НоваяСтрока();
ТЗ_Кол.НоваяСтрока();
Для н = 1 по х Цикл
ТекЗн = ЗнЯч(Таб, у, н + х0);
ТЗ_Сум.УстановитьЗначение(у, н, ?(Найти(ТекЗн, "-")>0,0,СтрЗаменить(ТекЗн, ",", ".")));
ТекЗн = ЗнЯч(Таб, у + 1, н + х0);
ТЗ_Кол.УстановитьЗначение(у, н, ?(Найти(ТекЗн, "-")>0,0,СтрЗаменить(ТекЗн, ",", ".")));
КонецЦикла;
КонецЦикла;
//ну и всё... можно смотреть итоги по колонкам!
//пример, у первой посмотрим
Сообщить("Итого сум по первой колонке = " + ТЗ_сум.Итог(1));
Сообщить("Итого кол по первой колонке = " + ТЗ_кол.Итог(1));
КонецПроцедура
можно ещё красивеее сделать...
ну это думаю не надо!"
- 1
- 2
Читают тему
(гостей: 1)