Форум » [x]Harbour » ANN: Вышел релиз FastReport for [x]Harbour (продолжение) » Ответить

ANN: Вышел релиз FastReport for [x]Harbour (продолжение)

Sergey Spirin: Здравствуйте. Рад сообщить, что вышел релиз FastReport for [x]Harbour. Как всегда, информацию можно посмотреть: http://www.paritetsoft.ru/frh.htm Возможным русскоязычных покупателей лучше контактировать со мной напрямую по email. Цена для оплаты в рублях банковским переводом по выставленному счету- 9999 рублей. -- Спирин Сергей. Компания "Паритет Софт". FRH sales: http://www.paritetsoft.ru/frh.htm FRAX sales: http://www.hotsoft.ru/ALASKA/frax_eng.htm

Ответов - 268, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 All

Andrey: Sergey Spirin пишет: Уже даже предчувствую, пытаюсь "разжевать": Спасибо большое за понимание ! Коньяк за мной !

Sergey Spirin: Andrey пишет: Спасибо большое за понимание ! Спасибо, это хорошо. А проверить, как работает и работает ли?

Andrey: Сижу делаю ! Сегодня же сообщу....


Andrey: Sergey Spirin пишет: Спасибо, это хорошо. А проверить, как работает и работает ли? Сделал тестовый пример ! Отправил вам на почту ! Вроде работает без проблем. Пере собрать проект на хХарборе - команда hbmake.exe Frh-Lang.bc

Sergey Spirin: Пересобрал с версией 4.9.98 общую сборку. Включен, обсуждавшийся выше новый метод - :SetFormatSettings(nSetting, xValue).

Andrey: Sergey Spirin пишет: Пересобрал с версией 4.9.98 общую сборку Спасибо большое. Скачал, буду подключать к своей системе !

Dr. Oldwarez: И ещё один вопрос по FastReport, очень важный. Как сделать чтобы сводная таблица разбивалась на несколько подтаблиц по группам. При этом реквизиты группы должны выпечатываться сверху, как в обычном табличном отчёте. Но нужно анализировать цену, которую требуют за задание несколько фирм. Сверху группировка по проектам и родам работ (сантехник, электрик и т.д. и т.п.) И чтобы в строку вылазили не все фирмы, а только те фирмы, которые отвечают за данный род работ. Чтобы было всё как в обычном отчёте, но с повторяющейся парой фирма-цена в одну строку несколько раз. Если удастся сделать то, о чём я прошу, тогда уже покупаем эту библиотеку.

Andrey: Dr. Oldwarez пишет: Если удастся сделать то, о чём я прошу, тогда уже покупаем эту библиотеку. Ну блин, Хотабыча нашли .....

Sergey Spirin: Dr. Oldwarez пишет: Если удастся сделать то, о чём я прошу, тогда уже покупаем эту библиотеку. Так о чем просишь то? Я что-то не понял. Нужен отчет, так давай, пробуй, ваяй Судя, правда по мутному описанию, ничего сложного нет. Только группировки? Ну так, смотри простой пример с группами в демо, да и вперед Пробуй, спрашивай конкретику, если что не понятно. Ну, и естественно, не надейся, что кто-то что-то сделает за тебя

Dr. Oldwarez: Сложность в том, что на элемент DBCrossTab не действуют внешние группировки. Так если кладешь DBCrossTab на полосу MasterData, а сверх того даёшь группировку в полосе GroupHeader, то никакого дополнительного разбиения по группам в перекрёстной таблице не происходит. Можно в самой DBCrossTab делать Subtotals, но при этом условия группировки печатаются сбоку, а число фирм в строке зашкаливает, поскольку на один род работ фирм от силы 5-6, а всего их сотня.

Sergey Spirin: Dr. Oldwarez пишет: Сложность в том, что на элемент DBCrossTab не действуют внешние группировки Я бы делал без КроссТаба. И все-таки, конкретика, сколько каких таблиц участвуют в отчете? Какие между ними отношения? И т. д.

Dr. Oldwarez: Отношения между таблицами - многоуровневая иерархия, и, соответственно, многоуровневая группировка. На самом верхнем уровне - таблица проектов (капремонт, модернизация и т.д.) по тому или иному зданию. Дальше идёт группировка по профилю работ (сантехник, электрик и т.д. и т.п.) Основная таблица - таблица выполненных работ и расходных материалов. Например: сантехник - замена ванной. Ну и к ней подтаблица - различные фирмы и цены, которые они берут за ту или иную работу. Выбираем минимальную. А сложность заключается в том, что несколько пар фирма-цена нужно выпечатать В ОДНОЙ СТРОКЕ PROJEKT PROFIL_RABOT ==================================================================== POS_NUM POS_TEXT1 FIRMA FIRMA FIRMA .................................... POS_TEXT2 PRICE PRICE PRICE ....................................

Sergey Spirin: Dr. Oldwarez пишет: А сложность заключается в том, что несколько пар фирма-цена нужно выпечатать В ОДНОЙ СТРОКЕ Ну если владеть инструментом, то ничего особенно уж сложного в этом отчете нет. Во-первых, группировок, по крайней мере в фастовском понимании здесь нет. Здесь типичный Master-Detail-SubDetail: PROJEKT - это мастер. PROFIL_RABOT - детэйл. Как установить MasterDetail отношение, надеюсь, труда не составит. И третий уровень, который будет вычисляемым - subdetail. Итак, третий уровень. Насколько я понимаю, пар "фирма-цена" нужно напечатать конечное количество? Например не более 3-х самых дешевых, это так? Просто в одну строку нельзя же напечатать неопределенное количество информации (вернее, это уже другой тип отчета с вертикальными бэндами). Если все так, то определим UserDataSet для третьего уровняЖ [pre]FrPrn:SetUserDataSet("Третий уровень", "POS_NUM;POS_TEXT1;POS_TEXT2;FIRMA1;PRICE1;FIRMA2;PRICE2;FIRMA3;PRICE3",; {|| PrepareData())} ,; {|| PrepareData())},; {|| },; {|| CheckEOF()},; {|cField| GetDSValue(cField)}) [/pre] Идея понятна? Заведем массив из 9 элементов. Пишем функцию PrepareData() в которой этот массив текущей записи будем заполнять. Пишем функцию GetDSValue(), которая просто по имени поля будет отдавать соответствующий элемент массива. И CheckEOF() которая будет решать, пора ли переходить к следующей записи PROFIL_RABOT или есть еще что "поколбасить" на текущей. Надеюсь, что идея понятна, и не столь сложна в реализации

Andrey: Sergey Spirin пишет: Как установить MasterDetail отношение, надеюсь, труда не составит. Пример работы с MasterDetail http://files.mail.ru/C8IUGH Делай там отдельную папку, записывай базы и можно будет конкретно помочь - разбирая отдельный пример !

Dr. Oldwarez: Я так и думал, что всё сведётся к пользовательскому массиву и заполнению его данными на каждой строке. Число элементов на одну строку отчёта формата А4 всё равно жёстко ограничено. Цена имеет формат 10DEC2, плюс зазор в одну строку. А если учесть что длина главной таблицы достигает 5 тыс строк :LOL: то 5 тыс. раз опрашивать постороннюю таблицу - очень замедлит работу. Не проще ли сделать дополнительно поля FIRM1,FIRM2,FIRM3,... и, соотвестственно, PRICE1,PRICE2,PRICE3,.... Иногда ДЕнормализация имеет смысл. Есть ещё такая база данных -4D. Названа так, поскольку помимо классических двухмерных таблиц, поддерживает также вложенную таблицу SUBTABLE. Часто это бывает необходимо. Больше 5 цен всё равно не поместится, поскольку нужно ещё указать реквизиты задания. Печать бисером - не у всех хорошее зрение. ЗЫ. А вот про вертикальные бэнды я бы хотел поподробнее. Интересно, интересно.

Andrey: Sergey Spirin пишет: Пересобрал с версией 4.9.98 общую сборку. Включен, обсуждавшийся выше новый метод - :SetFormatSettings(nSetting, xValue). Собрал со своей системой ! Работает, только одна непонятка, не критичная, но думаю опять пальцем тыкать будут меня ! Переключаюсь на украинский язык, отображается нормально: А в дизайнере, нет такого формата, только (руб.) ! Как исправить ?

Sergey Spirin: Andrey пишет: А в дизайнере, нет такого формата, только (руб.) ! Это вопрос к украинским локализаторам Это просто статичная строка в файле локализации. Смотри файл Ukrainian.frc, Значение ключа "fkNumber4", почему-то они решили оставить рубль Видимо тоскуют по Союзу

Sergey Spirin: Dr. Oldwarez пишет: Я так и думал, что всё сведётся к пользовательскому массиву и заполнению его данными на каждой строке. Число элементов на одну строку отчёта формата А4 всё равно жёстко ограничено. Цена имеет формат 10DEC2, плюс зазор в одну строку. А если учесть что длина главной таблицы достигает 5 тыс строк :LOL: то 5 тыс. раз опрашивать постороннюю таблицу - очень замедлит работу. Дорогой, все в твоих руках, и это главное Как ты сделаешь доступ к этим данных в этой записи, так и будет. Сделаешь так, что будет тормозить, то виноват будешь только ты, а не FR Разговор же про 5 тысяч строк, которые будут тормозить - слышать смешно, хотя, чего только кривые ручки не добивались Dr. Oldwarez пишет: ЗЫ. А вот про вертикальные бэнды я бы хотел поподробнее. Интересно, интересно. Ну смотри, например: http://www.reportingfor.info/ru/news.php?extend.33.4

Dr. Oldwarez: Так, был у шефа, шеф мне объяснил, что пока будет по другому и cross-table выпадает за ненадобностью. Впоследствии будет по-другому - с вертикальной группировкой главной таблицы. Так, что извините за ложную тревогу. А пока что один небольшой вопросик. Можно суммировать по группе, можно суммировать по странице, но при переходе на новую страницу сумма обнуляется. Как сделать, чтобы был перенос, т.е. сумма по всем строкам, печатаемая один раз в конце страницы, а потом, ещё раз - в начале следующей страницы то же значение. Не печатать его только на последней странице группы.

Sergey Spirin: Dr. Oldwarez пишет: Как сделать, чтобы был перенос, т.е. сумма по всем строкам.... Там опция такая есть в диалоге агрегатов "Нарастающим итогом", в выражение подставляет двоечку третьим параметром. Ну и если нужно еще запоминать и на след. странице печатать, то просто запоминать в своей переменной, типа: [pre]var MySum: Variant; procedure Memo14OnAfterPrint(Sender: TfrxComponent); begin MySum := Memo14.Value; end; [/pre]



полная версия страницы