Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема вот как такое отлаживать? (число прочтений - 3968 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
вот как такое отлаживать?
28. Декабря 2007 :: 14:24
Печать  
Код
Выбрать все
Функция СформироватьДанныеИтогов(данные) Экспорт
	Перем шаблонИтогов, форматироватьИтог;

	данныеОбщихИтогов = СоздатьОбъект("ТаблицаЗначений");
	данныеОбщихИтогов.КоличествоКолонок(Сам().КоличествоКолонокОтчета());
	данныеОбщихИтогов.НоваяСтрока();

	Вопрос("Перед циклом");

	Для инд = 1 По Сам().КоличествоКолонокСОбщимИтогом() Цикл
		колонка = Сам().ПолучитьКолонкуСОбщимИтогом(инд, шаблонИтогов, форматироватьИтог);
		Вопрос("получили колонку "+инд);
		Если (ПустаяСтрока(Сам().ПолучитьФорматКолонкиОтчета(колонка)) = 0) и (форматироватьИтог = 1) Тогда
			Вопрос("если");
			данныеОбщихИтогов.УстановитьЗначение(1, колонка, Формат(Шаблон(шаблонИтогов), Сам().ПолучитьФорматКолонкиОтчета(колонка)));
		Иначе
			Вопрос("иначе");
			данныеОбщихИтогов.УстановитьЗначение(1, колонка, Шаблон(шаблонИтогов));
		КонецЕсли;
		Вопрос("конеццикла");
	КонецЦикла;

	Вопрос("закончили");

	Возврат данныеОбщихИтогов;
КонецФункции //СформироватьДанныеОбщихИтогов()
 



ломается на строке после Вопрос("иначе").
Сначала начал думать, что поломали таблицу значений. Ибо дальше копать вроде бы некуда.
Потом пригляделся, попросил показать мне шаблонИтогов.

А там кода на 4 строчки. ААААААААА!!!!!
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #1 - 28. Декабря 2007 :: 14:29
Печать  
fez писал(а) 28. Декабря 2007 :: 14:24:
А там кода на 4 строчки. ААААААААА!!!!!


Как-то так:

Код
Выбрать все
Формат(данные.Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка)), "Ч15.2, ")+РазделительСтрок+
)=0, 1,
	данные.Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка)) /
	ПолучитьТаблицуДанных(0).Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка))) * 100, "Ч7.2, ")
 



А? Круто?
  
Наверх
www  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #2 - 29. Декабря 2007 :: 03:24
Печать  
Улыбка Ещё один "Сам()" забыл, в начале последней строки :
Код
Выбрать все
....
Сам().ПолучитьТаблицуДанных(0).Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка))) * 100, "Ч7.2, ") 



А не проще было сделать так? :
Код
Выбрать все
ПолучитьТаблицуДанных(0).ВыбратьСтроку("ТаблицаНоль",,)
данные.ВыбратьСтроку("Данные",,) 


Понятно, что итоги и нужную колонку тут самому смотреть / считать придется, но для отладки именно конкретные данные нужны были а не общая ситуация в двух таблицах?

ЗЫ: Эта отладка ведь в отладчике? На каждую ???.ВыбратьСтроку(...) нужно будет из Отладчика в Предприятие самому Alt-Tab-нуться.
  
Наверх
ICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #3 - 29. Декабря 2007 :: 09:54
Печать  
dnp писал(а) 29. Декабря 2007 :: 03:24:
Улыбка Ещё один "Сам()" забыл, в начале последней строки :
Код
Выбрать все
....
Сам().ПолучитьТаблицуДанных(0).Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка))) * 100, "Ч7.2, ") 



1. Это не я забыл.
2. В шаблоне работает и без Сам(): http://www.1cpp.ru/forum/YaBB.pl?num=1198853991
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #4 - 29. Декабря 2007 :: 09:54
Печать  
dnp писал(а) 29. Декабря 2007 :: 03:24:
ЗЫ: Эта отладка ведь в отладчике? На каждую ???.ВыбратьСтроку(...) нужно будет из Отладчика в Предприятие самому Alt-Tab-нуться.

Не, это отладочная печать.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #5 - 10. Января 2008 :: 14:32
Печать  
Да, Федор, с использованием Шаблона явно нужно завязывать Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #6 - 10. Января 2008 :: 15:18
Печать  
artbear писал(а) 10. Января 2008 :: 14:32:
Да, Федор, с использованием Шаблона явно нужно завязывать Улыбка

Даблин, я вообще никогда Шаблон не использую. Это все сотруднички... супермегаархитекторов из себя строят...
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #7 - 10. Января 2008 :: 15:59
Печать  
fez писал(а) 10. Января 2008 :: 15:18:
Даблин

Это слово нужно запомнить Улыбка
Смех
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #8 - 18. Февраля 2008 :: 17:59
Печать  
Я продолжу крик души, можно?

Суперархитекторство как оно есть.

Тот шаблон, который написан в (1) - изначально записывается примерно так:
Код
Выбрать все
ГенераторОтчета.НовоеПолеОтчетаСумма("ДоляЧистогоДохода", "Доля,%", "Ч7.2, ", 9,,, "[?(<ОБЩИЙ_ИТОГ.ПолучитьЧистыйДоход> <= 0, 1, <ИТОГ.ПолучитьЧистыйДоход> / <ОБЩИЙ_ИТОГ.ПолучитьЧистыйДоход>) * 100]", расшТЗ._ТИП_СВЕРТКИ_СРЕДНЕЕ,, "[?(<ОБЩИЙ_ИТОГ.ПолучитьЧистыйДоход> <= 0, 1, <ТЕКУЩАЯ_СТРОКА.ПолучитьЧистыйДоход> / <ОБЩИЙ_ИТОГ.ПолучитьЧистыйДоход>) * 100]"); 



И только потом, где-то внутри, строка типа "[?(<ОБЩИЙ_ИТОГ.ПолучитьЧистыйДоход> <= 0, 1, <ИТОГ.ПолучитьЧистыйДоход> / <ОБЩИЙ_ИТОГ.ПолучитьЧистыйДоход>) * 100]" преобразуется в нормальный шаблон специальным методом. Ниже код метода:

Код
Выбрать все
Функция ОбработатьШаблонИтога(шаблонОбщегоИтога)
	результат = СтрЗаменить(шаблонОбщегоИтога, "<ИТОГ>", "данные.Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка))");
	результат = СтрЗаменить(результат, "<ОБЩИЙ_ИТОГ>", "ПолучитьТаблицуДанных(0).Итог(Сам().ПолучитьНомерКолонкиОтчета(колонка))");
	//@TODO избавиться от дублирования
	поз = Найти(результат, "<ИТОГ.");
	Пока поз > 0 Цикл
		подстр = Сред(результат, поз);
		окончание = Найти(подстр, ">");
		Если окончание = 0 Тогда
			Сам()._ВыброситьИскл("Неправильный шаблон итогов: " + шаблонОбщегоИтога);
		КонецЕсли;
		имяКолонки = Сред(подстр, 7, окончание - 7);
		результат = СтрЗаменить(результат, "<ИТОГ." + имяКолонки + ">", "данные.Итог(""" + имяКолонки + """)");
		поз = Найти(результат, "<ИТОГ.");
	КонецЦикла;
	поз = Найти(результат, "<ОБЩИЙ_ИТОГ.");
	Пока поз > 0 Цикл
		подстр = Сред(результат, поз);
		окончание = Найти(подстр, ">");
		Если окончание = 0 Тогда
			Сам()._ВыброситьИскл("Неправильный шаблон итогов: " + шаблонОбщегоИтога);
		КонецЕсли;
		имяКолонки = Сред(подстр, 13, окончание - 13);
		результат = СтрЗаменить(результат, "<ОБЩИЙ_ИТОГ." + имяКолонки + ">", "ПолучитьТаблицуДанных(0).Итог(""" + имяКолонки + """)");
		поз = Найти(результат, "<ОБЩИЙ_ИТОГ.");
	КонецЦикла;
	Возврат результат;
КонецФункции	// ОбработатьШаблонИтога
 



Юниттестов на этот код никаких нет, ага.
  
Наверх
www  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: вот как такое отлаживать?
Ответ #9 - 18. Февраля 2008 :: 18:05
Печать  
Не, я конечно понимаю благое намерение автора кода сделать универсальное решение. Чтобы можно было формировать и форматировать итоги в отчете как душа захочет.
Но вот вышло строго по поговорке. Прямая дорожка получилась. Именно туда.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать