Форум » [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

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

Andrey: Собрался делать новую форму и не знаю как поступить. Есть выборка по базе. Мне нужно на лист А4 печатать 1 запись из выборки. Причем если поле (допустим KVIEW) == 1, то это 1-шаблон, если == 2, то 2-шаблон ... и так до 4-шаблонов. Как такую штуку сделать ?

Sergey Spirin: Andrey пишет: Собрался делать новую форму и не знаю как поступить. Есть выборка по базе. Мне нужно на лист А4 печатать 1 запись из выборки. Причем если поле (допустим KVIEW) == 1, то это 1-шаблон, если == 2, то 2-шаблон ... и так до 4-шаблонов. Как такую штуку сделать ? Если шаблоны сильно разные, то мне кажется оптимальней будет так: FrPrn:SetWorkArea("MY_AREA", Select(), , {FR_RB_CURRENT, FR_RE_CURRENT , 0}) FrPrn:Clear() DO WHILE .NOT. Eof() IF KVIEW == 1 FrPrn:LoadFromFile(1.fr3) ENDIF IF KVIEW == 2 FrPrn:LoadFromFile(2.fr3) ENDIF ..................... FrPrn:PrepareReport(FR_NOTCLEARLASTREPORT) SKIP ENDDO FrPrn:ShowPreparedReport()

Andrey: Как реализовать следующию печать в терминалке хХарбора: Есть файл логотипа фирмы (logo.bmp) Нужно его считать и вставить в начало отчета (сразу нельзя, т.к. форма будет в разных фирмах).


Sergey Spirin: Andrey пишет: Есть файл логотипа фирмы (logo.bmp) Нужно его считать и вставить в начало отчета (сразу нельзя, т.к. форма будет в разных фирмах). Это очень просто, например, задайте обработчик OnBeforePrint oбъекту Picture: procedure Picture1OnBeforePrint(Sender: TfrxComponent); begin Picture1.Picture.LoadFromFile(GetHbVar('MyLogo')); end; Чтобы сделать обработчик, выберите объект, в инспекторе объектов выберите вкладку "События" и напротив нужного события в пустой ячейке двойной щелчок мышы.

Andrey: Видел FastReport по Дельфи. Там в верхней строке было размещены кнопки Экспорта в Word и Excel. И кнопка "выхода" была значком с "Дверью". Т.е. я так понимаю что этот параметр настраивается. Я хочу также сделать в хХарборе ! Как это реализуется ? Вдобавок ко всему все эти формы можно затолкать в ЕХЕ-ник. В некоторых случаях это очень удобно. Как можно сделать такое-же в хХарборе ?

Sergey Spirin: Здравствуйте, Андрей. Насчет дополнительных кнопок. Реализуется это только в Дельфи. В Харбуре вы можете только манипулировать количеством видимых кнопок. Насчет отчетов в EXE, это можно. Добавьте ваши отчеты к EXE как ресурс RCDATA. Для загрузки отчета :LoadFromResource()

Andrey: Sergey Spirin пишет: В Харбуре вы можете только манипулировать количеством видимых кнопок. А как ? Можно небольшой пример ? Sergey Spirin пишет: Добавьте ваши отчеты к EXE как ресурс RCDATA. Для загрузки отчета :LoadFromResource() Для примера: есть 2 отчета otchet1. и otchet2. Как будет выглядеть my.rc ? Как будет выглядеть вызов этих отчетов в моей программе ?

Sergey Spirin: По кнопкам, смотрите доку: FrPrn:PreviewOptions:SetButtons(FR_PB_PRINT + FR_PB_LOAD...) Ресурсы, rc: OTCHET1 RCDATA "otchet1.fr3" Вызов: FrPrn:LoadFromResource("OTCHET1")

Andrey: Спасибо большое !

Andrey: Не показывает иконку в FastReporte, а заголовок окна показывает ! Хотя в начале стоит показ иконки, может что неправильно ? //----------- Now load and init FastReport -------------------------------------- FrPrn := frReportManager():new() //---------- Set the same icon for FastReport windows---------- FrPrn:SetIcon( 1 ) //---------- Set the same title for FastReport taskBar-window FrPrn:SetTitle( _cTitle )

Sergey Spirin: Andrey пишет: //---------- Set the same icon for FastReport windows---------- FrPrn:SetIcon( 1 ) А есть ли у Вас в exe ресурс иконки, определенный числовым идентификатором 1? Иконка читается из ресурсов. И если такого ресурса нет, то и нет Кстати, удобнее даже определить в rc символьно, и тогда FrPrn:SetIcon( "MYICON" ) Минимальный код, который спрашивали в письме: FrPrn := frReportManager():new() FrPrn:SetWorkArea() -- если нужно, может не использоваться FrPrn:LoadFromFile() -- FromBlob(), FromResource(), Clear() - на выбор FrPrn:DesignReport()

Andrey: Sergey Spirin пишет: А есть ли у Вас в exe ресурс иконки, определенный числовым идентификатором 1? Конечно же нет ! Я так с Аляски взял и тупо переписал. Спасибо за подсказку. Sergey Spirin пишет: FrPrn := frReportManager():new() FrPrn:SetWorkArea() -- если нужно, может не использоваться FrPrn:LoadFromFile() -- FromBlob(), FromResource(), Clear() - на выбор FrPrn:DesignReport() А где взять описание этих функций, чтоб я каждый раз не приставал к вам ? Кинте пожалуйста ссылку.

Andrey: И еще по ходу один вопрос ! Если я использую только русский язык, то можно ли мне файл ресурсов-языка затолкать в мой RC файл ? Как будет выглядеть эта строка в RC файле, и как вызывать язык ввода FastReporta у меня в программе ? Спасибо заранее.

Sergey Spirin: Andrey пишет: А где взять описание этих функций, чтоб я каждый раз не приставал к вам ? Кинте пожалуйста ссылку. Текущая дока - http://www.paritetsoft.ru/downloads/UserManual_for_Xbase.zip Но она на английском. На русском есть старая для Аляски, но для основных методов она подойдет полностью: http://www.hotsoft.ru/ALASKA/FastReport.pdf Andrey пишет: И еще по ходу один вопрос ! Если я использую только русский язык, то можно ли мне файл ресурсов-языка затолкать в мой RC файл ? Как будет выглядеть эта строка в RC файле, и как вызывать язык ввода FastReporta у меня в программе ? Для этого ничего делать не надо, Ваша персональная копия уже русская. Если у Вас только русские приложения, никаких файлов загружать не надо.

Andrey: Есть ли FastReport для Linux ?

Sergey Spirin: Andrey пишет: Есть ли FastReport для Linux ? FastReport (не FRH) есть. Но похоже доживает свои последние дни, также как и Kylix (Delphi для Linux) на котором написан. Разработка клиентских приложений под Linux экономически нецелесоообразна (не я сказал).

Andrey: Sergey Spirin пишет: (не FRH) А много ли надо времени, чтобы его переделать под Linux ? Это так - чисто теоретически !!!

Sergey Spirin: Andrey пишет: А много ли надо времени, чтобы его переделать под Linux ? Это так - чисто теоретически !!! Не знаю. Я не в курсе организации динамических библиотек в Linux.

alkresin: Ну, вообще говоря, проблема здесь не в "организации динамических библиотек в Linux" ( это вообще не проблема ), а в подборе подходящего модуля ( библиотеки ) для печати и в переписывании всего вывода на печать под этот модуль, а лучше - создании промежуточного слоя, который мог работать и с этим модулем, и под Windows и обеспечил бы независимость от платформы основного кода. Это, действительно, может оказаться непростой задачей.

Sergey Spirin: alkresin пишет: Ну, вообще говоря, проблема здесь не в "организации динамических библиотек в Linux" ( это вообще не проблема ), а в подборе подходящего модуля ( библиотеки ) для печати и в переписывании всего вывода на печать под этот модуль, а лучше - создании промежуточного слоя, который мог работать и с этим модулем, и под Windows и обеспечил бы независимость от платформы основного кода. Это, действительно, может оказаться непростой задачей. Да вроде речь идет в контексте того, что уже "подобрали". Речь о FastReport CLX. И это продукт обеспечивающий весь жизненный цикл отчетов в Linux, от разработки до печати и экспорта. Поэтому никакой речи о "выборах и переписываниях" не ведется, достаточно давно все уже выбрано и переписано на высоком профессиональном уровне, в первую очередь Borland-ом (Kylix), во вторую FastReport Inc (CLX-версия). Поэтому, речь здесь только о возможности использования всего этого из Harbour-приложения под Linux. В Windows это реализовалось в виде компиляции FastReport как динамической библиотеки (как первый шаг к цели). И я не говорил проблема это или не проблема в Linux, я сказал, что я не в курсе, насколько это может быть проблематично. Но как я уже говорил, Borland остановил Kylix, заявив об отсутствии коммерческих переспектив, FastReport CLX "заморожен". Поэтому текущий разговор достаточно абстрактен.

Andrey: Sergey Spirin пишет: Поэтому текущий разговор достаточно абстрактен. А что есть для FastReport на текущий момент. Можно ли получить (сделать) печать под FastReport на текущий момент времени ??? Печать форм для Windows из FastReport просто "обалденная" т.е. очень развита и не нужно более ничего изобретать - бери и пользуйся....... Возможна ли такая печать для Linux из FastReport ? Я понял что нет, тат как не реализован вызов FastReport из под xHarbour ? Вопрос пока чисто теоретически, сколько по времени нужно затратить для переноса FastReport для xHarbour ?

Sergey Spirin: Andrey пишет: Вопрос пока чисто теоретически, сколько по времени нужно затратить для переноса FastReport для xHarbour ? Ну, если уж Вам так интересно, то, на вскидку 3-4 месяца... То есть, где-нибудь, учитывая все расходы, тысяч 20 упавших долларов.

Andrey: Столкнулся с некоторыми неудобствами. У меня используется OEM кодировка, а при печати используется WIN-кодировка. не хочу везже в своих формах писать такую конструкцию [CallHbFunc('HB_OEMTOANSI',[GetHbVar('myFirma')])] хочется иметь простые конструкции типа: [My_Firma], [My_Adres], [My_Telefon], [My_Viborka] и т.д. Вопрос: как в программе заранее определить эти переменные, а потом чтоб эти переменные были видны в ДИЗАЙНЕРЕ ? По доке смотрел, сделал наподобее, а не работает. Где я ошибся ? PUBLIC myFirma, MyAdres, MyTelefon, MyViborka MyFirma := HB_OEMTOANSI('ООО "Рога и Копыта"') MyAdres := HB_OEMTOANSI('г.Москва, Набережная 13') MyTelefon := HB_OEMTOANSI('тел.: (495) 123-45-67') MyViborka := HB_OEMTOANSI('Дата договора: = 12.01.08 .....') ............. ............. FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , MyFirma ) FrPrn:AddVariable( "My Lovely Vars", "My_Adres" , MyAdres ) FrPrn:AddVariable( "My Lovely Vars", "My_Telefon", MyTelefon ) FrPrn:DesignReport() При просмотре выдает ошибку: Memo3: Ошибка в выражении: "myFirma": Неопределенный индентификатор "myFirma"

Sergey Spirin: Andrey пишет: PUBLIC myFirma, MyAdres, MyTelefon, MyViborka MyFirma := HB_OEMTOANSI('ООО "Рога и Копыта"') MyAdres := HB_OEMTOANSI('г.Москва, Набережная 13') MyTelefon := HB_OEMTOANSI('тел.: (495) 123-45-67') MyViborka := HB_OEMTOANSI('Дата договора: = 12.01.08 .....') ............. ............. FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , MyFirma ) FrPrn:AddVariable( "My Lovely Vars", "My_Adres" , MyAdres ) FrPrn:AddVariable( "My Lovely Vars", "My_Telefon", MyTelefon ) FrPrn:DesignReport() При просмотре выдает ошибку: Memo3: Ошибка в выражении: "myFirma": Неопределенный индентификатор "myFirma" Наверняка результат самой популярной "непонятки" в Фасте . Если значение перменной (отчетной, не скриптовой) строковое, то оно считается интепретируемым выражением и вычисляется. Просто строка должна быть в одинарныйх кавычках. Поэтому, либо : FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , "'" + MyFirma + "'" ) Либо: FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , "CallHbFunc('HB_OEMTOANSI', [GetHbVar('myFirma')])" )

Andrey: Sergey Spirin пишет: FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , "'" + MyFirma + "'" ) Либо: FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , "CallHbFunc('HB_OEMTOANSI', [GetHbVar('myFirma')])" ) НЕ РАБОТАЕТ !!! И в списке переменных (в Дизайнере) не появляется группа "My Lovely Vars" !!! Что делать ???

Andrey: НЕ РАБОТАЕТ !!! И в списке переменных (в Дизайнере) не появляется группа "My Lovely Vars" !!! Что делать ???

Sergey Spirin: Andrey пишет: НЕ РАБОТАЕТ !!! И в списке переменных (в Дизайнере) не появляется группа "My Lovely Vars" !!! Что делать ??? Если Вы пишите : FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , "'" + MyFirma + "'" ) FrPrn:LoadFromFile(...) То и не появятся Вернее сотрутся загруженным отчетом у которого свои переменные. Поэтому: FrPrn:LoadFromFile(...) FrPrn:AddVariable( "My Lovely Vars", "My_Firma" , "'" + MyFirma + "'" )

Andrey: Блин, а я смотрел на загрузку ваших функций и ставил раньше них. И эту функцию было видно в Дизайнере. FrPrn:AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", "My Lovely Functions!", "It's a XBase Str() function!" ) Спасибо, заработало. Только еще один вопрос: У меня в базе поле времени числовое (N 4,0) - т.е. типа: 1208, 1310 и т.д. Если в дизайнере указываешь формат вывода Дата/время hh:mm, то показывает 00:00 Как правильно сделать ?

Sergey Spirin: Andrey пишет: Блин, а я смотрел на загрузку ваших функций и ставил раньше них. И эту функцию было видно в Дизайнере. FrPrn:AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", "My Lovely Functions!", "It's a XBase Str() function!" ) Спасибо, заработало. Только еще один вопрос: У меня в базе поле времени числовое (N 4,0) - т.е. типа: 1208, 1310 и т.д. Если в дизайнере указываешь формат вывода Дата/время hh:mm, то показывает 00:00 Как правильно сделать ? Функции к отчетам не привязаны, поэтому их можно добавлять, где хочется. Правильно показывает 00:00 У "нас-дельфистов" тип TDateTime - это float. В целой части хранится дата, в дробной - время. Целое число всегда имеет время 00:00. Поставьте формат - числовой, строка формата - ##:##

Andrey: Спасибо заработало !!!

Sergey Spirin: Здравствуйте, Я рассылал приглашение в английскую конфу всем русскоязычным пользователям, однако никто "не присоединился" к этой конфе. Тем не менее, в этой конфе начинает накапливаться полезная информация, поэтому все-таки рекомендую это сделать всем интересующимся FastReport. Напомню адрес: [url=http://groups.google.com/group/fastreport_for_x_harbour/topics ]http://groups.google.com/group/fastreport_for_x_harbour/topics [/url]

Andrey: Хочу сделать вызов печати универсальной для своих задач. Т.е. Вызываю функцию печати и туда передаю имя_формы. А как сделать передачу назначения доп.переменных, функций и SetFieldAliases ? Вот мой пример: ////////////////////////////////////////////////////////////////////// #include "FastRepH.ch" FUNCTION MyFR4() LOCAL cFileForm, cPath, nShowDesignReport PUBLIC myFirma, MyAdres, MyTelefon, MyViborka, MyNumba, myPathRes M->myPathRes := CurDrive() + ":\" + CurDir() + '\' M->MyFirma := HB_OEMTOANSI('ООО "Рога и Копыта"') M->MyAdres := HB_OEMTOANSI('г.Москва, Набережная 13') M->MyTelefon := HB_OEMTOANSI('тел.: (495) 123-45-67') M->MyViborka := HB_OEMTOANSI('Дата договора: = 12.01.08 .....') M->MyNumba := 123 cFileForm := "bookabon.fr3" cPath := CurDrive() + ":\" + CurDir() + '\' USE bookabon ALIAS BookAbon NEW nShowDesignReport := 1 // 1-ShowReport, 2-DesignReport MyFastReport4( cPath + cFileForm , nShowDesignReport, ; (передать переменные), (передать функции), (передать SetFieldAliases) ) CLOSE BookAbon RETURN NIL //////////////////////////////////////////////////////////////// FUNCTION MyFastReport4(cFileForm, nShowDesignReport) LOCAL cTitle := HB_OEMTOANSI( "Печать формы - " ) PRIVATE FrPrn //----------- Now load and init FastReport -------------------------------------- FrPrn := frReportManager():new() //---------- Set the same icon for FastReport windows---------- FrPrn:SetIcon( "FASTREP_ICO" ) //---------- Set the same title for FastReport taskBar-window FrPrn:SetTitle( cTitle + cFileForm ) //----------- Set to disable main window when FastReport executes---------------------- // FrPrn:SetVisualActions(FR_ACT_DISABLE); //----------- Определяет набор кнопок, которые будут доступны в Окне-Просмотра -------- FrPrn:PreviewOptions:SetButtons(FR_PB_PRINT + FR_PB_LOAD + FR_PB_SAVE + ; FR_PB_EXPORT + FR_PB_ZOOM + FR_PB_FIND + FR_PB_OUTLINE + FR_PB_PAGESETUP + ; FR_PB_TOOLS + FR_PB_EDIT + FR_PB_NAVIGATOR ) //----------- Load Lang resource for FastReport ---------------------- //FrPrn:LoadLangRes( M->myPathRes + "Russian.xml" ) //----------- Alias base and SELECT work area for FastReport ---------------------- FrPrn:SetWorkArea( ALIAS(), SELECT(), .T. ) // .T. для OEM-кодировки БД //FrPrn:SetFieldAliases( "BookAbon", "CUSTNO=Cust No;Company;ADDR1=Address;Phone;Fax;Contact" ) //----------- Load file form FastReport ---------------------- FrPrn:LoadFromFile( cFileForm ) //-------- add XBase++ vars to FastReport --------------------- FrPrn:AddVariable( "My Lovely Vars", "MyPathRes", "'"+myPathRes+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyFirma" , "'"+MyFirma+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyAdres" , "'"+MyAdres+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyTelefon", "'"+MyTelefon+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyNumba" , MyNumba ) //FrPrn:SetEventHandler( "Report", "OnUserFunction", { | FName, FParams | CallUserFunction( FName, FParams ) } ) FrPrn:AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", ; "My Lovely Functions!", "It's a XBase Str() function!" ) IF nShowDesignReport == 1 FrPrn:ShowReport() ELSE FrPrn:DesignReport() ENDIF FrPrn:ClearDataSets() //-------- Unload FastReport ------------------------------------------------------------- FrPrn:DestroyFR() RETURN NIL ////////////////////////////////////////////////////////////////

Sergey Spirin: Andrey пишет: Хочу сделать вызов печати универсальной для своих задач. Т.е. Вызываю функцию печати и туда передаю имя_формы. А как сделать передачу назначения доп.переменных, функций и SetFieldAliases ? Собственно, в демо DoFrAction() - это и есть такая универсальная функция. Можно делать как там. Но если Вы хотите почти полной универсальности и минимум Harbour-кода, то посоветую следующее: Не пользуйтесь SetWorkArea(), а пользуйтесь объектами HarbourWorkArea. Возможностей даже больше, при этом нет вызовов SetWorkArea(), SetFieldAliases() которые должны быть до LoadFromXXX. Задавайте переменные в дизайнере, давая им значения типа - GetHbVar('SomeVar') Функции, естественно, добавляйте при инициализации Фаста. Таким образом, Вам останется только вызывать Load.., Show.., Design..

Andrey: Можно ли прикрутить кнопку для вызова "Дизайнера" на панели "Просмотра" печати ? А то не хочется делать доп. вызов "Дизайнера" из своей программы.

Sergey Spirin: Andrey пишет: Можно ли прикрутить кнопку для вызова "Дизайнера" на панели "Просмотра" печати ? А то не хочется делать доп. вызов "Дизайнера" из своей программы. Там уже есть вызов дизайнера, но в специальном режиме правки уже сформированного отчета, а свою кнопку добавить сейчас нельзя.

Andrey: В Дизайнере есть меню "Отчет", в нем меню "Настройки" и там во вкладке "Описание" есть элемент "Имя" - оно отображается в заголовке окна при "Просмотре" отчета. (классно !) А элемент "Картинка", когда туда вставляешь, нигде не отображается. Для чего она нужна ? Как заставить показываться при "Просмотре" ?

Sergey Spirin: Andrey пишет: Для чего она нужна ? Сие тайна, покрытая мраком Andrey пишет: Как заставить показываться при "Просмотре" ? А где показывать ее? В самом отчете показать конечно можно, типа: procedure Picture1OnBeforePrint(Sender: TfrxComponent); begin Picture1.Picture.Assign(Report.ReportOptions.Picture); end; Но не очень понятно, зачем. А.. в FastReport Server может использоваться при "изготовлении" HTML-странички со списком отчетов, получиться красиво, каждый отчет представлен картинкой.

Andrey: Sergey Spirin пишет: А где показывать ее? Нужно показывать где иконка окна "просмотра", т.е. заместо нее.

Andrey: Решил сделать печать еще универсальней.... Обойтись вызовом спец.функцией типа MyPrintFR4("zaivka.ini") ! А в этом ини-файле делаю все остальное. Пример файла: zaivka.ini [Настройка] Имя_формы = "СПИСОК ЗАЯВОК НА РЕМОНТ" Файл_формы = "zaivka.fr3" Дизайнер = .F. [Заполнить_переменные] * имя_переменной , значение_переменной , комментарий Поле1 = { "MySample" ,'M->cFiltPrn' , "выборка" } Поле2 = { "MyDatePRN" ,'DTOC(DATE())' , "дата печати" } Поле3 = { "MyFirma" ,'M->SDog_Firma' , "фирма" } Поле4 = { "MyOtdel" ,'M->SDog_Otv+"/"+M->SDog_Tel+"/"' , "Нач.отдела" } [Заполнить_таблицу] * имя_поля , значение_поля (функции+поля_БД) , комментарий Поле1 = { "NN" ,'TRANSFORM(FIELD->NNZa,"@R 999999/99")+CHR(10)+DTOC(FIELD->DATEZa)+", "+CHR(10)+TRANSFORM(FIELD->TIMEZA,"@R 99:99")+CHR(10)+ALLTRIM(FIELD->mNigtZa)+CHR(10)+ALLTRIM(SUBSTR(FIELD->mKodZa,1,10))' , "номер заявки" } Поле2 = { "POLE1" ,'MAR_ADRES(6)+","+CHR(10)+ALLTRIM(FIELD->FIO)+", "+New_TelFIO()+", "+Za_Teleph(0,0,1,1)+CHR(10)+"ОТВ.: "+ALLTRIM(FIELD->cDogov)+CHR(10)+ALLTRIM(FiliDSP->FiliDSP)' , "заказчик,адрес,тел." } Поле3 = { "POLE2" ,'MAR_NEIS3()+CHR(10)+ALLTRIM(FIELD->mRem)' , "неисправность" } Поле4 = { "POLE3" ,'ALLTRIM(srokza->srokza)+", "+CHR(10)+ALLTRIM(FIELD->SrokZa)+"/, "+CHR(10)+DTOC(FIELD->DatePere)+CHR(10)+ALLTRIM(MASTER->MASTER)' , "сроки,мастер" } Поле5 = { "POLE4" ,'ALLTRIM(Domof9->Domof)+", "+ALLTRIM(Truba9->Truba)+", "+ALLTRIM(Zamok9->Zamok)+", "+ALLTRIM(Dovod9->Dovod)+", "+ALLTRIM(Dver9->Dver)+", "+ALLTRIM(Process9->Process)' , "уст.оборудование" } Поле6 = { "OPLAT" ,'IIF(FIELD->SumPlata>0,STR(FIELD->SumPlata,8,2)+" руб.","-")' , "оплата" } [] А на самой форме FastReport проставляю переменные и поля БД. Как заполнить переменные и передать в FastReport - понятно. А как быть с полями БД ? Они же составные ?

Sergey Spirin: Andrey пишет: Решил сделать печать еще универсальней.... Обойтись вызовом спец.функцией типа MyPrintFR4("zaivka.ini") ! А в этом ини-файле делаю все остальное. Похоже Вы явно ищите себе лишнюю (и бесполезную) работу Никакого смысла в этих ini-файлах нет. Все это можно и нужно делать в самих отчетах. Переменные добавляйте в дизайнере, например: "фирма" значение GetHbVar('SDog_Firma') и т.д. Общие переменные добавляйте во все отчеты в той же MyPrintFR4(). Используйте TfrxAlaskaWorkArea объекты и в отчете поля и "составляйте". Чтобы часто не писать 'CallHbFunc()' добавьте в FR часто используемые функции типа ALLTRIM, TRANSFORM и т. д. Кстати можно обсудить набор наиболее используемых функций и я добавлю их в FRH, чтобы не добавлять кодом.

Andrey: Sergey Spirin пишет: Никакого смысла в этих ini-файлах нет. Не согласен с вами. Как видно из примера там целая куча полей и своих функций.... И когда нужно быстро подправить, текстовый ини-файл просто удобней, 5 сек. и отчет печатает по другому. Sergey Spirin пишет: Кстати можно обсудить набор наиболее используемых функций и я добавлю их в FRH, чтобы не добавлять кодом. Нужны все текстовые функции преобразования: ALLTRIM(), CHR(), LTRIM(), RTRIM(), PADC(), REPLACE(), TRANSFORM(), MEMOLINE(), MEMOTRAN() ..... Лучше я пришлю NG по группам функций... Sergey Spirin пишет: Используйте TfrxAlaskaWorkArea объекты и в отчете поля и "составляйте". Не совсем понял ? Как это делать ?

Sergey Spirin: Andrey пишет: И когда нужно быстро подправить, текстовый ини-файл просто удобней, 5 сек. и отчет печатает по другому. Напомню, что формат fr3 - это xml, то есть тоже текстовый. Вы же хотите все задублировать, чтобы побольше попутаться Andrey пишет: Нужны все текстовые функции преобразования: Все необходимые функции Вы можете добавлять самостоятельно. По умолчанию же, думаю, можно добавить не более десятка наиболее часто используемых. С этим десятком нужно определиться. Andrey пишет: Используйте TfrxAlaskaWorkArea объекты и в отчете поля и "составляйте". Не совсем понял ? Как это делать ? На страниеце Data бросаете объект TfrxAlaskaWorkArea и в нем все прописываете, от MasterDetail до FieldAliases. Поля же составляете в мемах отчета.

Andrey: Sergey Spirin пишет: По умолчанию же, думаю, можно добавить не более десятка наиболее часто используемых. С этим десятком нужно определиться. Определяемся: ALLTRIM() PADC() PADL() PADR() TRANSFORM() MEMOTRAN() MEMOLINE() DTOC() STR() VAL() IIF() CHR(10) - возврат каретки, т.е. след. строка

Andrey: А можно каким нибудь образом добавить составной БЛОК функций и его передать в Фаст ? блок типа: bBlok := 'MAR_ADRES(6)+","+CHR(10)+ALLTRIM(FIELD->FIO)+", "+New_TelFIO()+", "+Za_Teleph(0,0,1,1)+CHR(10)+"ОТВ.: "+ALLTRIM(FIELD->cDogov)+CHR(10)+ALLTRIM(FiliDSP->FiliDSP)'

Sergey Spirin: Andrey пишет: bBlok := 'MAR_ADRES(6)+","+CHR(10)+ALLTRIM(FIELD->FIO)+", "+New_TelFIO()+", "+Za_Teleph(0,0,1,1)+CHR(10)+"ОТВ.: "+ALLTRIM(FIELD->cDogov)+CHR(10)+ALLTRIM(FiliDSP->FiliDSP)' То что я вижу это строка, можно ли добавить строку в отчет? Можно, например в переменную отчета. Мне непонятно, зачем она в таком виде там нужна. Кстати, в FRH есть EvalMacro(). Поэтому, в мемо отчета пишите, например: [EvalMacro('MAR_ADRES(6) + ALLTRIM(FIELD->FIO) + New_TelFIO()')]

Sergey Spirin: Sergey Spirin пишет: Кстати, в FRH есть EvalMacro(). Поэтому, в мемо отчета пишите, например: [EvalMacro('MAR_ADRES(6) + ALLTRIM(FIELD->FIO) + New_TelFIO()')] [EvalMacro(GetHbVar('bBlok'))] Но, скажите, хачем хранить содержимое bBlok не в отчете, а где-то еще?

Andrey: Sergey Spirin пишет: Но, скажите, хачем хранить содержимое bBlok не в отчете, а где-то еще? Дело в том что у меня есть уже куча отчетов под Word и Excel'ем, а там уже есть готовые ини-файлы. Я просто физически не смогу их переделать. Из-за этого хочу таким образом поступить. А новые отчеты конечно буду делать как положенно. Sergey Spirin пишет: Кстати, в FRH есть EvalMacro(). Поэтому, в мемо отчета пишите, например: [EvalMacro('MAR_ADRES(6) + ALLTRIM(FIELD->FIO) + New_TelFIO()')] А можно передать в отчет переменную bBlok, а вызвать потом [EvalMacro(bBlok)] ?

Sergey Spirin: Andrey пишет: Дело в том что у меня есть уже куча отчетов под Word и Excel'ем, а там уже есть готовые ини-файлы Ну, с этого и начинали бы, что это до_фастовское наследие Andrey пишет: А можно передать в отчет переменную bBlok, а вызвать потом [EvalMacro(bBlok)] ? Это же просто строка, конечно, можно и как отчетную перемнную (AddVariable) или прочитать из Harbour-переменной GetHbVar().

PSP: Sergey Spirin пишет: Возможным русскоязычных покупателей лучше контактировать со мной напрямую по email. Цена для оплаты в рублях банковским переводом по выставленному счету- 9999 рублей. Сергей! Есть желание купить FRH. Действительна ли цена в 9999р.? Какое мыло у Вас, spirin...paritet...?

Sergey Spirin: PSP пишет: Сергей! Есть желание купить FRH. Действительна ли цена в 9999р.? Да, действительна. PSP пишет: Какое мыло у Вас, spirin...paritet...? Да. Точнее всегда можно глянуть: http://www.paritetsoft.ru/frh.htm Так что пишите.

PSP: Sergey Spirin пишет: Так что пишите. Check e-mail, please...

Sergey Spirin: PSP пишет: Check e-mail, please... Checked and answered

Sergey Spirin: Здравствуйте, Как показыват практика, первое, что хочет напечатать FRH-user (особенно буржуйский) это Invoice. И в последнее время, много просьб сделать примеры разнообразных инвойсов. Нет ли у кого-нибудь данных (желательно на английском), которые можно использовать для такого мини-демо? Или, может быть, есть наработки красивых счетов и т.п.? Спирин Сергей.

gfilatov: Sergey Spirin пишет: Нет ли у кого-нибудь данных (желательно на английском), которые можно использовать для такого мини-демо? Посмотрите в качестве образца пример Bill of landing из поставки PAGESCRIPT 32 demo по адресу: http://www.abeelabs.com/downloads/ps32demo/ps32demo.zip

Pasha: Сергей, можно ли как-то достучаться из Харбор-программы к свойству TfmReport.Modified ? И поддерживается ли оно в frh вообще ? Или как можно определить другим способом, изменился ли отчет после работы oFrh:DesignReport() ?

Sergey Spirin: Pasha пишет: Сергей, можно ли как-то достучаться из Харбор-программы к свойству TfmReport.Modified ? И поддерживается ли оно в frh вообще ? Или как можно определить другим способом, изменился ли отчет после работы oFrh:DesignReport() ? Report.Modified - это publiс свойство, а не published, поэтому через GetProperty его не прочитать. Вообще, по коду это свойство используется дизайнером для определения, нужно ли вызывать диалог сохранения или нет. А вот это событие перехватить можно. Смотрите событие OnSaveReport. То есть, если отчет был изменен, или пользователь нажал сохранить как, то это это событие произойдет. Нюанс в том, что в обработчике Вы должны сохранить отчет уже самостоятельно, вызвав один из методов SaveToXXX. На FRH-странице есть пример работы с блобами где все это используется.

Pasha: Спасибо, буду перехватывать OnSaveReport Я решил хранить отчеты в Blob-полях, вот мне и надо, чтобы отработать SaveToBlob

TimTim: Сергей, помогите разобраться с Demo примером. Интересует отчёт "More complex" in FR only (функция DoMoreComplex). Интересует каким образом задается сбор содержания по полю Customers."Company"? Понятно, что это связано с вкладкой "Contents", но в своём отчёте такую вкладку создать не смог.

Sergey Spirin: TimTim пишет: Сергей, помогите разобраться с Demo примером. Интересует отчёт "More complex" in FR only (функция DoMoreComplex). Интересует каким образом задается сбор содержания по полю Customers."Company"? Понятно, что это связано с вкладкой "Contents", но в своём отчёте такую вкладку создать не смог. Вкладка называется страницей (Page). Чтобы добавить, просто в меню "Файл"-"Новая страница". Отчет может содержать сколько угодно много таких логических страниц. Далее, обратите внимание, что отчет двухпроходный. Сначала производится "расстановка" Anchor-ов в: procedure Band4OnBeforePrint(Sender: TfrxComponent); begin Engine.AddAnchor(<Customers."Company">); end; Anchor-ы именованные, то есть каждый получает имя по названию компании. И потом с помощью: [Engine.GetAnchorPage(<Customers."Company">)] "вытаскиваются" номера страниц на которых эти Anchor-ы расположились.

TimTim: Вроде сделал как в примере, но видно что-то не так. Ошибка "Нет дата-бэнда для группы GroupHeader1" И вопрос. Наверное не играет роли где стоит вкладка "Content" - (я тоже так её обозвал) до или после Page1 - страниц отчёта? У меня после. Пояснение. В отличие от примера у меня названия, которые должны собираться в содержании, находятся в другой БД, которая связана с основной по RELATION. В отчёте без содержания все OK.

Sergey Spirin: TimTim пишет: Вроде сделал как в примере, но видно что-то не так. Ошибка "Нет дата-бэнда для группы GroupHeader1" Ну, нет так добавьте В примере - это MasterData с нулевой высотой. Конечно, группа может образовывается только на данных. Группа здесь вообще используется только на случай, если названия могут дублироваться, то есть удаляет дубликаты. TimTim пишет: И вопрос. Наверное не играет роли где стоит вкладка "Content" - (я тоже так её обозвал) до или после Page1 - страниц отчёта? У меня после. Если стоит после, то печататься будет после. Вам так надо? Если нет, то перетащите мышкой в начало. Если да, то в этом случае отчет может быть и однопроходным. TimTim пишет: Пояснение. В отличие от примера у меня названия, которые должны собираться в содержании, находятся в другой БД, которая связана с основной по RELATION. В отчёте без содержания все OK. Да нет проблем. Если в отчете все нормально, то значит про SetResyncPair() не забыли?

TimTim: Спасибо! Теперь и содержание собирает, но указывает неверные номера страниц. Sergey Spirin пишет: В примере - это MasterData с нулевой высотой А что такое нулевая высота? Кстати, в демо отчете небольшая неувязочка. Для компании "Diver's Grotto" неверно указана страница и вообще про неё нет данных, хотя в БД она вроде есть.

Sergey Spirin: TimTim пишет: Спасибо! Теперь и содержание собирает, но указывает неверные номера страниц. Значит кто-то неверно их проставляет Информации давайте больше. TimTim пишет: А что такое нулевая высота? Height = 0, в примере MasterData1. TimTim пишет: Кстати, в демо отчете небольшая неувязочка. Для компании "Diver's Grotto" неверно указана страница и вообще про неё нет данных, хотя в БД она вроде есть. Да, действительно. Просто у компании "Diver's Grotto" нет ни одного заказа. Можете добавить: procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent); begin GroupHeader1.Visible := Engine.GetAnchorPage(<Customers."Company">) > 1; end; И будет все хорошо. "Diver's Grotto" не будет в оглавлении. Она появится когда у нее появятся заказы.

TimTim: Sergey Spirin пишет: Информации давайте больше. Примерно так. В основной БД есть поле KOD, по которому она отсортированаи по этому же полю по RELATION соединена с БД с полями KOD и NAIMEN-наименования. Вот эти наименования я и пытаюсь собрать в оглавление. Номера страниц в оглавлении такие: на первой стр-це все номера 1, а на второй 2, хотя отчёт собирается правильно. Наименование, затем список, наименование, список и т.д. Все на разных страницах. Sergey Spirin пишет: Можете добавить: Добавил. Никакой реакции

Sergey Spirin: TimTim пишет: Sergey Spirin пишет: цитата: Информации давайте больше. Примерно так. В основной БД есть поле KOD, по которому она отсортированаи по этому же полю по RELATION соединена с БД с полями KOD и NAIMEN-наименования. Вот эти наименования я и пытаюсь собрать в оглавление. Номера страниц в оглавлении такие: на первой стр-це все номера 1, а на второй 2, хотя отчёт собирается правильно. Наименование, затем список, наименование, список и т.д. Все на разных страницах. Sergey Spirin пишет: цитата: Можете добавить: Добавил. Никакой реакции Похоже, что вы неясно себе представляете, что такое "обработчик события". Для того чтобы создать обработчик, делайте например так: Выделите мышкой, например ваш MasterData в основном отчете. Перейдите в инспектор объектов. Выберите вкладку Events (события). Напротив OnBeforePrint щелкните двойным щелчком в пустом Edit-е. Будет создан шаблон, типа: procedure Band4OnBeforePrint(Sender: TfrxComponent); begin end; В него уже и вписываете: Engine.AddAnchor(<Customers."Company">); // таблица/поле из демо Имеющий обработчик объект помечается красным треугольничком. Если процедуру уже скопировали целиком, то нужно там же в инспекторе ее выбрать как обработчик события. Аналогично с GroupHeader. Понятно?

TimTim: Sergey Spirin пишет: Похоже, что вы неясно себе представляете, что такое "обработчик события". Не буду лукавить, это действительно так. Поэтому заранее спасибо за терпение. В отчёте всё подправил. Всё OK! Ура! И в демо примере тоже. Спасибо!

TimTim: Придетальном рассмотрении отчёта все таки есть небольшие "но" Во-первых, почему-то страница последней группы в содержании отображается как 0. В чём тут может быть дело? Во-вторых, у меня для каждой группы есть название и шапка (заголовки колонок) для таблицы. Когда начинается группа, то печатается название и шапка и затем строки группы. Если группа длинная, то может перейти на следующую страницу. Но, к сожалению, мне не удалось сделать так, чтобы шапка печаталась на продолжении группы на новой странице. Например, когда использую свойство KeepTogether для бэнда GroupeHeader, то всё равно для больших групп шапка так и не печатается. Что тут можно сделать?

Sergey Spirin: Во-первых, почему-то страница последней группы в содержании отображается как 0. В чём тут может быть дело? Не знаю, пришлите мне отчет, лучше с данными и кодом инициализации отчета. Во-вторых, у меня для каждой группы есть название и шапка (заголовки колонок) для таблицы. Когда начинается группа, то печатается название и шапка и затем строки группы. Если группа длинная, то может перейти на следующую страницу. Но, к сожалению, мне не удалось сделать так, чтобы шапка печаталась на продолжении группы на новой странице. Например, когда использую свойство KeepTogether для бэнда GroupeHeader, то всё равно для больших групп шапка так и не печатается. Что тут можно сделать? Ну, если есть нетривиальное желание скрестить GroupHeader с PageHeader, то это надо обработать скриптом-напильником Присылайте отчет, я посмотрю.

TimTim: Выслал на ваш email!

Andrey: Подскажите пожалуйста, а могу ли я через FastReport печатать свои текстовые файлы OEM или WIN кодировки ? Как можно сделать универсальный шаблон на все файлы ?

Sergey Spirin: Andrey пишет: Подскажите пожалуйста, а могу ли я через FastReport печатать свои текстовые файлы OEM или WIN кодировки ? Почему нет? Andrey пишет: Как можно сделать универсальный шаблон на все файлы ? Кладете ReportTittle, на него мемо во всю ширину, оба чтоб были растягиваемыми. Вот, собственно, и все. Грузите теперь файлы в мемо.

Sergey Spirin: TimTim пишет: Выслал на ваш email! Взаимно

viktorlvv: Сергей обнаружил в FastReport for [x]Harbour ошибку Accsess violation. Порядок действий таков: загружаю таблицу(не важно через Harbour или Dataset) кидаю MacterData Band и на него пару полей предворительный просмотр и export Text(matrix printer) указываю 1 страничку,OEm и печать после экспорта,ввожу имя файла,выбираю тип принтера Epson и жму Ok Превый раз все проходит хорошо.Но если это все проделать еще раз из окна просмотра появится ошибка. И вдогонку еще один вопрос: Dataset свойство есть у отчета,страницы и у бандов если везде установить выдает ошибку типо нельзя так Так зачем столько дублирующих свойств и где правильно его установить

Sergey Spirin: viktorlvv пишет: Сергей обнаружил в FastReport for [x]Harbour ошибку Accsess violation. Порядок действий таков: загружаю таблицу(не важно через Harbour или Dataset) кидаю MacterData Band и на него пару полей предворительный просмотр и export Text(matrix printer) указываю 1 страничку,OEm и печать после экспорта,ввожу имя файла,выбираю тип принтера Epson и жму Ok Превый раз все проходит хорошо.Но если это все проделать еще раз из окна просмотра появится ошибка. Ok. Попытаюсь повторить, если ошибка, то исправим viktorlvv пишет: Dataset свойство есть у отчета,страницы и у бандов если везде установить выдает ошибку типо нельзя так Так зачем столько дублирующих свойств и где правильно его установить В 99,9% случаев устанавливайте для бэндов. Для страницы и отчета - это для каких-то спецефичных отчетов, на вскидку уже не вспомню для каких.

viktorlvv: еще хотел бы уточнить насчет установки свойств экспорта i=FrPrn:SetProperty("DotMatrixExport", "EscModel", 2) i=FrPrn:SetProperty("DotMatrixExport", "OEMConvert", .t.) вызываю до ShowReport по возвращаемому значению видно что сработали но когда делаю экспорт остаются старые значения

Sergey Spirin: viktorlvv пишет: Сергей обнаружил в FastReport for [x]Harbour ошибку Accsess violation. Порядок действий таков: загружаю таблицу(не важно через Harbour или Dataset)........... Да. Повторяется. Ok, напишу в саппорт. viktorlvv пишет: еще хотел бы уточнить насчет установки свойств экспорта i=FrPrn:SetProperty("DotMatrixExport", "EscModel", 2) i=FrPrn:SetProperty("DotMatrixExport", "OEMConvert", .t.) вызываю до ShowReport по возвращаемому значению видно что сработали но когда делаю экспорт остаются старые значения Этот экспорт делает TXTExport, поэтому: FrPrn:SetProperty("TXTExport", "OEMCodepage", .t.) Вообще, свойства у него такие: published property ScaleWidth: Extended read expScaleX write expScaleX; property ScaleHeight: Extended read expScaleY write expScaleY; property Borders: Boolean read expBorders write expBorders; property Pseudogrpahic: Boolean read expBordersGraph write expBordersGraph; property PageBreaks: Boolean read expPageBreaks write expPageBreaks; property OEMCodepage: Boolean read expOEM write expOEM; property EmptyLines: Boolean read expEmptyLines write expEmptyLines; property LeadSpaces: Boolean read expLeadSpaces write expLeadSpaces; property PrintAfter: Boolean read expPrintAfter write expPrintAfter; property PrinterDialog: Boolean read expPrinterDialog write expPrinterDialog; property UseSavedProps: Boolean read expUseSavedProps write expUseSavedProps; property InitString: String read PrinterInitString write PrinterInitString; property CustomFrameSet: String read expCustomFrameSet write expCustomFrameSet; end;

viktorlvv: спасибо за помощь - это все работает Остается вопрос как настроить второй диалог выбора матричного принтера и его настройка FrPrn:SetProperty("TXTExport", "EscModel", 2) это свойство не работает Что означает переключатели внизу под выбранным принтером.Как будет печатать если я установлю птичку Bold(или сниму) Как поисходит маштабирование по оси Y(по оси х понятно - за счет обрезания стоки,добавление пробелов) при увеличении ( 120 ) выдает ошибку Accsess violation при уменьшении - пустую страницу

Sergey Spirin: viktorlvv пишет: спасибо за помощь - это все работает Остается вопрос как настроить второй диалог выбора матричного принтера и его настройка FrPrn:SetProperty("TXTExport", "EscModel", 2) это свойство не работает Во всех исходниках Fast-а, свойство "EscModel" имеет только DotMatrixExport. viktorlvv пишет: Что означает переключатели внизу под выбранным принтером.Как будет печатать если я установлю птичку Bold(или сниму) Как поисходит маштабирование по оси Y(по оси х понятно - за счет обрезания стоки,добавление пробелов) при увеличении ( 120 ) выдает ошибку Accsess violation при уменьшении - пустую страницу С матричной проблематикой я Вам ничем не помогу. Однако, мне кажется, что вы пошли неверным путем. Если Вам нужны матричные отчеты, то и создавайте матричные отчеты. Это Меню Файл-> Новый->Пустой матричный отчет. В этом отчете все для для матрицы у вас будет. С просто же экспортом вы "далеко не уедете". Экспорт вам ничего не гарантирует, это просто экспорт с понятными потерями и накладками при преобразованиях графики в текст. При Accsess violation можете сразу писать в саппорт FastReport. Такие ошибки правяться быстро.

viktorlvv: саппорт FastReport это куда ? В англоязызную поддержху? Попробуй им изложить суть проблемы на моем ломаном англиском А Вы разве не в ходите в группу поддержки? Сам продукт не плох.javascript:pst3(' ','','','','') Есть маленькие недоработки. В данном случае просто иногда надо вывести нормальный отчет бысто на матричный принтер понятно что с потерями но ВЫВЕСТИ!И причем хочется управлять этим процессом программо А я так не не понял как.TXTExport работает наполовину DotMatrixExport вобже не работает Сергей посодействуйте и зделайте так чтоб продукт работак так как заложили проэктировщики

viktorlvv: и еще не понятен для чего нужен диалог согранения файла если мне надо вывести отчет на печать?

Sergey Spirin: viktorlvv пишет: саппорт FastReport это куда ? В англоязызную поддержху? Попробуй им изложить суть проблемы на моем ломаном англиском А Вы разве не в ходите в группу поддержки? Ах, да, саппорт работает только для купивших. Насчет же ломанного английского откуда такие представления? Ответ тоже не на чистейшем получите У всей поддержки родной язык - русский. Fast Reports Inc, абсолютно российская компания из Ростова-на-Дону, все в ней работающие - русские Даже в эбауте стоит в первую очередь копирайт Саши Цыганенко, исторического автора FR, одного из лучших Дельфистов страны. Иностранцы (Горд, Херберт и Коул (те кого я знаю)) работают только на поддержке в англоязычных конфах. Я - OEM-партнер FastReport, моя зона ответственности Alaska и Harbour, что там в матрице, конечно, я и не знаю. viktorlvv пишет: Сам продукт не плох.javascript:pst3(' ','','','','') Есть маленькие недоработки. В данном случае просто иногда надо вывести нормальный отчет бысто на матричный принтер понятно что с потерями но ВЫВЕСТИ!И причем хочется управлять этим процессом программо А я так не не понял как.TXTExport работает наполовину DotMatrixExport вобже не работает Сергей посодействуйте и зделайте так чтоб продукт работак так как заложили проэктировщики За продукт - спасибо DotMatrixExport - это печать именно матричного отчета. Почему печать такого отчета назвали экспортом не знаю, но догадываюсь :) Ok, на досуге продебажу этот экспорт и посмотрю, что там к чему. viktorlvv пишет: и еще не понятен для чего нужен диалог согранения файла если мне надо вывести отчет на печать? Потому что это экспорт в файл в первую очередь, потом уже кому-то пришло в голову печатать это на матрицу.

viktorlvv: Я и не сомневался что у вас профи работают :) Вот и хочу чтоб исправили эту маленькую недоработку с экспортом Причем думаю что для Делфи и С этих проблем нет есть только для Харбор потому что недавно сделали

Sergey Spirin: viktorlvv пишет: Вот и хочу чтоб исправили эту маленькую недоработку с экспортом Причем думаю что для Делфи и С этих проблем нет есть только для Харбор потому что недавно сделали Нет, это невозможно, код FastReport VCL у меня компилируется без единого исправления. Мой код - это код взаимодействия с Харбором. Так что баг существует везде, просто этот экспорт редко реально используется. Ok. Про Accsess violation я в саппорт кинул. Как выставить тип принтера программно для этого диалога посмотрю.

viktorlvv: Спасибо Сергей.Отпишись пожалуста когда профиксят

Sergey Spirin: C 6-го по 25-е августа буду в отпуске. В это время продажи и обновления персональных копий FRH производиться не будут. Но, надеюсь, что просматривать конфы буду регулярно. -- Спирин Сергей.

Andrey: Sergey Spirin пишет: цитата: Кстати можно обсудить набор наиболее используемых функций и я добавлю их в FRH, чтобы не добавлять кодом. Sergey Spirin пишет: цитата: По умолчанию же, думаю, можно добавить не более десятка наиболее часто используемых. С этим десятком нужно определиться. Определяемся: ALLTRIM() PADC() PADL() PADR() TRANSFORM() MEMOTRAN() MEMOLINE() DTOC() STR() VAL() IIF() CHR() Когда будет это сделано ??? Начал переделывать отчеты и затык.... слишком уж часто пользуюсь стандартными функциями !!! Я думаю, что и другие тоже пользуются этим....

Andrey: И еще один вопрос: Как сделать отчет только из одной текущей записи в БД ? Где и как указать что печатать только одну запись ? Приятного отдыха ....

Sergey Spirin: Здравствуйте, Андрей, Andrey пишет: Определяемся: ALLTRIM() PADC() PADL() PADR() TRANSFORM() MEMOTRAN() MEMOLINE() DTOC() STR() VAL() IIF() CHR() Дело в том, что добавить все эти функции большого труда не составляет, поэтому многие пользователи уже это себе добавили. Получается ситуация, что если я это добавлю прямо в поставку, я просто много задублирую. Поэтому я не стал этого делать. В принципе, можно будет сделать просто дополнительный пример..... Andrey пишет: И еще один вопрос: Как сделать отчет только из одной текущей записи в БД ? Где и как указать что печатать только одну запись ? Смотрите четвертый параметр в SetWorkArea, либо RangeXXX-свойства в frxHarbourWorkArea.

Andrey: Sergey Spirin пишет: поэтому многие пользователи уже это себе добавили. И кто-же добавил ? Очень в этом сомневаюсь. Лучше иметь в единной (от вас) поставке ... Кто против добавления ??? Давайте сообщайте здесь.....

Sergey Spirin: Andrey пишет: И кто-же добавил ? Очень в этом сомневаюсь. Лучше иметь в единной (от вас) поставке ... Кто против добавления ??? Давайте сообщайте здесь..... Андрей, русскоязычных пользователей всего 6 (4 изначальных + 2-ое купивших). Ясно же, что я говорю про испанцев с португальцами (основная масса). Многие добавляют, почему нет? Да чего там сложного? Вы же уже сами свои функции добавляли же. Дел то. Если что-то не получается - спрашивайте.

Andrey: Подскажите пожалуйста, как сделать свою функцию по добавлению след. переменных и функций: Не буду же я всегда писать один и тот же код во многих местах.... //-------- add XBase++ vars to FastReport --------------------- FrPrn:AddVariable( "My Lovely Vars", "MyPathRes", "'"+myPathRes+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyFirma" , "'"+MyFirma+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyAdres" , "'"+MyAdres+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyTelefon", "'"+MyTelefon+"'" ) FrPrn:AddVariable( "My Lovely Vars", "MyNumba" , MyNumba ) FrPrn:AddVariable( "My Lovely Vars", "MyLogoFirma", "'"+MyLogoFirma+"'" ) ..... и еще куча переменных FrPrn:SetEventHandler( "Report", "OnUserFunction", { | FName, FParams | CallUserFunction( FName, FParams ) } ) FrPrn:AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", ; "My Lovely Functions!", "It's a XBase Str() function!" ) FrPrn:AddFunction( "function Say_Sel_Dim(nKod: Variant; cAlias: String ; cPole: String; lAnsi: Boolean ): String", ; "My Lovely Functions!", "Samle: Say_Sel_Dim(<BASE.chr(34)+POLE+chr(34)>,'City','City',.T.)" ) Будет ли работать этот код ? Function MyFastReport() Private FrPrn //----------- Now load and init FastReport -------------------------------------- FrPrn:= frReportManager():new() FrPrn:SetIcon( "FASTREP_ICO" ) FrPrn:SetTitle( cTitle + cFileForm ) ....... FrPrn := MyAddVar_AddFun() ...... далее текст программы RETURN NIL /////////////////////////////// FUNCTION MyAddVar_AddFun() LOCAL aPrn := {} aPrn:AddVariable( "My Lovely Vars", "MyPathRes", "'"+myPathRes+"'" ) aPrn:AddVariable( "My Lovely Vars", "MyFirma" , "'"+MyFirma+"'" ) aPrn:AddVariable( "My Lovely Vars", "MyAdres" , "'"+MyAdres+"'" ) .......... ..... и еще куча переменных aPrn:SetEventHandler( "Report", "OnUserFunction", { | FName, FParams | CallUserFunction( FName, FParams ) } ) aPrn:AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", ; "My Lovely Functions!", "It's a XBase Str() function!" ) RETURN aPrn

Sergey Spirin: Andrey пишет: Будет ли работать этот код ? Function MyFastReport() Private FrPrn //----------- Now load and init FastReport -------------------------------------- FrPrn:= frReportManager():new() FrPrn:SetIcon( "FASTREP_ICO" ) FrPrn:SetTitle( cTitle + cFileForm ) ....... FrPrn := MyAddVar_AddFun() ...... далее текст программы RETURN NIL /////////////////////////////// FUNCTION MyAddVar_AddFun() LOCAL aPrn := {} aPrn:AddVariable( "My Lovely Vars", "MyPathRes", "'"+myPathRes+"'" ) aPrn:AddVariable( "My Lovely Vars", "MyFirma" , "'"+MyFirma+"'" ) aPrn:AddVariable( "My Lovely Vars", "MyAdres" , "'"+MyAdres+"'" ) .......... ..... и еще куча переменных aPrn:SetEventHandler( "Report", "OnUserFunction", { | FName, FParams | CallUserFunction( FName, FParams ) } ) aPrn:AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", ; "My Lovely Functions!", "It's a XBase Str() function!" ) RETURN aPrn Круто Сами то не попробовали? Конечно, такое работать не будет, делайте так: ... FrPrn:= frReportManager():new() InitFR(FrPrn) ... FUNCTION InitFr(oFrMng) oFrMng:SetIcon( "FASTREP_ICO" ) oFrMng:AddVariable( "My Lovely Vars", "MyPathRes", "'"+myPathRes+"'" ) ......................... RETURN nil

Andrey: Спасибо !!! Но здесь есть одно но ! Объявление переменных должны идти после загрузки формы ! Это вы писали..... InitFr(@FrPrn) // @ - ссылка на объект для изменения его внутри вызываемой функции //----------- Load file form FastReport ---------------------- FrPrn:LoadFromFile( cFileForm ) InitFrVars(@FrPrn) ??? ---------------------- Сделал ! Работает .... Только одну вещь подметил, что Public переменные "затолкнутые" в форму FastReport сохраняются там навсегда. И в принципе их потом можно не "заталкивать" !!!

Andrey: Можно ли выборку по базе "возложить" на FastReport ? Типа мне нужно по открытой базе (30 000 записей) по уже готовой выборке (по индексному файлу) распечатать в FastReport'e эту выборку, но с еще доп.условием типа: FIELD->SummDolg < -10 ! Какой код получиться ???

Sergey Spirin: Andrey пишет: Спасибо !!! Но здесь есть одно но ! Объявление переменных должны идти после загрузки формы ! Это вы писали..... InitFr(@FrPrn) // @ - ссылка на объект для изменения его внутри вызываемой функции //----------- Load file form FastReport ---------------------- FrPrn:LoadFromFile( cFileForm ) InitFrVars(@FrPrn) ??? ---------------------- Сделал ! Работает .... Можно и со второй InitFrVars(), а можно FUNCTION InitFr(oFrMng, сFileName) и т.д. Это уж как вам удобно. Кстати @ - не нужен. Объект - это уже указатель, писать указатель на указатель (ссылку на ссылку) это на микроны затормозить. Хотя, может в Харбуре и есть специфика, я сужу по Pascal/С. Andrey пишет: Только одну вещь подметил, что Public переменные "затолкнутые" в форму FastReport сохраняются там навсегда. И в принципе их потом можно не "заталкивать" !!! Нет, плохо подметили. В отчете сохраняются переменные и их значения на момент дизайна. Без AddVariable() будете видеть все время их. Andrey пишет: Можно ли выборку по базе "возложить" на FastReport ? Типа мне нужно по открытой базе (30 000 записей) по уже готовой выборке (по индексному файлу) распечатать в FastReport'e эту выборку, но с еще доп.условием типа: FIELD->SummDolg < -10 ! Какой код получиться ??? Можно: procedure MasterData1OnBeforePrint(Sender: TfrxComponent); begin MasterData1.Visible := <Customers."CUSTNO"> = 1354; end;

Andrey: Sergey Spirin пишет: MasterData1.Visible := <Customers."CUSTNO"> = 1354; А с моим условием можете написать ? Я не силен в паскале.... 1) Вопрос: Мне нужно из Харбора в паскаль перевести такое выражение: ( ( FIELD->KTarif == 1 .OR. FIELD->KTarif == 4) .AND. FIELD->DOLG_2008 < -150 ) .OR. ( FIELD->KTarif == 2 .AND. FIELD->DOLG_2008 < -30 ) 2) Вопрос: Я бы это условие затолкал бы в Public переменную и передавал бы в "Фаст". А как тогда будет выглядеть это УСЛОВИЕ в Фасте ? Третий день бодаюсь с Фастом, не могу заставить печатать.... Уже сделал отдельный пример, вышлю вам на ящик наверно...

Sergey Spirin: Andrey пишет: А с моим условием можете написать ? Я не силен в паскале.... procedure MasterData1OnBeforePrint(Sender: TfrxComponent); begin MasterData1.Visible := <MyTable."SummDolg"> < -10; end; Andrey пишет: 1) Вопрос: Мне нужно из Харбора в паскаль перевести такое выражение: ( ( FIELD->KTarif == 1 .OR. FIELD->KTarif == 4) .AND. FIELD->DOLG_2008 < -150 ) .OR. ( FIELD->KTarif == 2 .AND. FIELD->DOLG_2008 < -30 ) ((( <MyTable."KTarif"> = 1) or (<MyTable."KTarif"> = 4)) and (<MyTable."DOLG_2008"> < -150)) or ((<MyTable."KTarif"> = 2) and (<MyTable."DOLG_2008"> < -30)) and, or, xor, not являются также побитовыми операторами, поэтому например: (1 or 2 = 3) - это нормальное выражение, поэтому, при "перемешке" с =, <,> и т.д.нужны скобки Andrey пишет: 2) Вопрос: Я бы это условие затолкал бы в Public переменную и передавал бы в "Фаст". А как тогда будет выглядеть это УСЛОВИЕ в Фасте ? MasterData1.Visible := EvalMacro(GetHbVar('MyVar'));

Andrey: Sergey Spirin пишет: procedure MasterData1OnBeforePrint(Sender: TfrxComponent); begin MasterData1.Visible := <Customers."CUSTNO"> = 1354; end; Нифига не работает !!! В печати "чистые" страницы если не попадает под условие <ABONENT."DOLG_2008"> < -100

Andrey: Sergey Spirin пишет: цитата: Я бы это условие затолкал бы в Public переменную и передавал бы в "Фаст". А как тогда будет выглядеть это УСЛОВИЕ в Фасте ? MasterData1.Visible := EvalMacro(GetHbVar('MyVar')); А переменную MyVar мне как "готовить" по Паскалю или Харбору ?

Sergey Spirin: Andrey пишет: Нифига не работает !!! В печати "чистые" страницы если не попадает под условие <ABONENT."DOLG_2008"> < -100 Ищите ошибку. Andrey пишет: А переменную MyVar мне как "готовить" по Паскалю или Харбору ? GetHbVar - берет содержимое Харбор переменный EvalMacro - выполняет Харбор-макрос И как думаете? Ладно, присылайте, утром посмотрю.

Andrey: Залез на сайт FastReport и обалдел.... Сколько типов графиков в компоненте Chart там есть.... А у нас только один "Standart" ... А когда у нас ОНИ БУДУТ ???

Sergey Spirin: Andrey пишет: Залез на сайт FastReport и обалдел.... Сколько типов графиков в компоненте Chart там есть.... А у нас только один "Standart" ... А когда у нас ОНИ БУДУТ ??? Хоть завтра, удовольствие стоит 700$. Я не шучу Все Чарты реализуются библиотекой TeeChart. TeeChart Standard - это часть Delphi. TeeChart Professional - за дополнительные деньги. Я с ними (TeeChart - испанская компания), кстати, уже вел переговоры, объясняя надобность. Скидку на клиента они давали, но все равно получалось, что FRH/FRAX с TeeChart Professional должен был бы стоить более, чем в 2 раза дороже.

Andrey: Это к Fast'y еще 700 баксов ??? Блин.... Жмоты они .... баксов 200 бы может и отдал, а 700 - ну уж нет.... Никому из моих заказчиков графики ЗА ТАКИЕ ДЕНЬГИ !!! - они (заказчики) просто удавятся.

Sergey Spirin: Andrey пишет: Это к Fast'y еще 700 баксов ??? Почему к Фасту, это к Delphi, если хочется хорошие чарты, в том числе и в Фасте. Кстати, сейчас глянул, немного подешевело 579$: http://www.teechart.com/ordering/order_tchpro8vcl_n.shtml Andrey пишет: Блин.... Жмоты они .... баксов 200 бы может и отдал, а 700 - ну уж нет.... Никому из моих заказчиков графики ЗА ТАКИЕ ДЕНЬГИ !!! - они (заказчики) просто удавятся. Кто жмоты? Испанцы или заказчики? Вообще-то, испанцы продают за ту цену за которую у них покупают, не более. А заказчикам, если это не нужно за эти деньги, то и не нужно... Кстати, для вас это была бы цена за всех заказчиков, так как это developer-лицензия. За профессиональную Chart-библиотеку это не сказать, что сильно дорого. Просто "нужно" и "хочется" - вещи разные.

Andrey: Sergey Spirin пишет: Кстати, для вас это была бы цена за всех заказчиков, так как это developer-лицензия. Да я понимаю, что для меня это было бы дешевле.... Только на графиках я бы сделал от силы 2-им заказчикам ... Другим это не в надобность... А сколько будет стоить "Графика" и "Фаст" для чужого заказчика ? Может я кого-нибудь подряду под это дело ..... Sergey Spirin пишет: Просто "нужно" и "хочется" - вещи разные. Согласен на все 100 !

Петр: Andrey пишет: Подскажите пожалуйста, как сделать свою функцию по добавлению след. переменных и функций: Не буду же я всегда писать один и тот же код во многих местах.... Поделюсь своим опытом в виде примера #include "hbclass.ch" #include "common.ch" #xtranslate STROUT <arg> => QOut( Hb_AnsiToOem( <arg> ) ) PROCEDURE main LOCAL cMethodName, cbErr LOCAL oMyReport := MyReport():New() STROUT "oMyReport есть экземпляр класса " + oMyReport:ClassName() STROUT oMyReport:ClassName() + " унаследован от frReportManager - " + ; iif( __objDerivedFrom( oMyReport, "frReportManager" ), "да !", "нет") // Если объект oMyReport не имеет метод MyInit - добавим его IF AScan( __objGetMethodList( oMyReport ), "MYINIT" ) == 0 __objAddMethod( oMyReport, "MYINIT", @MyInitFunc() ) ENDIF // При желании можно огласить весь список методов :) FOR EACH cMethodName IN __objGetMethodList( oMyReport ) // ? cMethodName NEXT oMyReport:MyInit() // Удалим метод MyInit STROUT " Удалим метод MyInit и попробуем вызвать его еще раз" IF AScan( __objGetMethodList( oMyReport ), "MYINIT" ) != 0 __objDelMethod( oMyReport, "MyInit" ) ENDIF cbErr := ErrorBlock({|oErr|break(oErr)}) BEGIN SEQUENCE //попытаемся выполнить oMyReport:MyInit() RECOVER STROUT "ERROR: метод MyInit не определен" END errorBlock( cbErr ) RETURN STATIC FUNCTION MyInitFunc() LOCAL self := QSelf() STROUT " выполняется FUNCTION MyInitFunc() AS METHOD MyInit" ::Do() ::SetEventHandler( "Report", "OnUserFunction", { | FName, FParams | CallUserFunction( FName, FParams ) } ) ::AddFunction( "function XBaseStr(nValue: Double, nLength: Variant = EmptyVar, nDecimals: Variant = EmptyVar): Variant", ; "My Lovely Functions!", "It's a XBase Str() function!" ) RETURN Self FUNCTION CallUserFunction( FName, FParams ) // stub HB_SYMBOL_UNUSED( FName ) HB_SYMBOL_UNUSED( FParams ) RETURN NIL /* CLASS MyReport */ CLASS MyReport FROM frReportManager METHOD Init( cOptionalPath ) CONSTRUCTOR METHOD Do() DESTRUCTOR Destroy() ENDCLASS METHOD Init( cOptionalPath ) CLASS MyReport MEMVAR myPathRes, MyAdress, MyFirma PUBLIC myPathRes := "C:\", MyAdress := "my word", MyFirma := "my firma" super:Init( cOptionalPath ) STROUT "> выполняется METHOD Init CLASS MyReport" ::LoadFromFile( "1.fr" ) ::AddVariable( "My Lovely Vars", "MyAdress" , "'"+M->MyAdress+"'" ) ::AddVariable( "My Lovely Vars", "MyPathRes", "'"+M->myPathRes+"'" ) ::AddVariable( "My Lovely Vars", "MyFirma" , "'"+M->MyFirma+"'" ) RETURN Self METHOD Do() CLASS MyReport STROUT " выполняется METHOD Do CLASS MyReport" RETURN Self PROCEDURE Destroy CLASS MyReport STROUT "> выполняется PROCEDURE Destroy CLASS MyReport" RETURN

Петр: Небольшое разьяснение Вы здесь не видете вызов UnloadFr(), потому что в исходниках frReportManager я определил этот метод как деструктор DESTRUCTOR UnloadFr() .. PROCEDURE UnloadFr CLASS frReportManager .. RETURN и еще обьявил Init как METHOD Init( cOptionalPath ) CONSTRUCTOR Никаких других изменений не делаю. Все остальное добавляю или созданием нового класса с родителем frReportManager или динамически создавая нужные свойства (методы) экземпляру класса (обьекту). В данном примере использованы сразу два этих метода.

Петр: FastRepH.prg линкую к FastRepH.lib с помощью батника (см.ниже) и просто подключаю FastRepH.lib к проекту @echo off setlocal set HB_COMPILER=harbour rem set HB_INSTALL=e:\hb\harbour-bcc551 set HB_INSTALL=e:\hb\harbour-bcc582 set HB_BIN_INSTALL=%HB_INSTALL%\bin set HB_INC_INSTALL=%HB_INSTALL%\include set HB_LIB_INSTALL=%HB_INSTALL%\lib rem set PATH=F:\borland\bcc55\bin set PATH="C:\Program Files\BORLAND\BDS\4.0\bin" set HARBOURFLAGS=-n1 -q0 -w -es2 -gc0 -i%HB_INC_INSTALL% set C_USR=-c -d -O2 -OS -tW -tWM -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% if exist FastRepH.lib del FastRepH.lib if exist %HB_LIB_INSTALL%\FastRepH.lib del %HB_LIB_INSTALL%\FastRepH.lib %HB_BIN_INSTALL%\%HB_COMPILER% FastRepH.prg %HARBOURFLAGS% bcc32 %C_USR% FastRepH.c && tlib FastRepH.lib +FastRepH.obj if exist FastRepH.c del FastRepH.c if exist FastRepH.obj del FastRepH.obj if exist FastRepH.lib copy FastRepH.lib %HB_LIB_INSTALL%\FastRepH.lib endlocal

Петр: Скрипт для любителей WATCOMC @echo off setlocal set HB_COMPILER=harbour set HB_INSTALL=e:\hb\harbour-watcom17a set HB_BIN_INSTALL=%HB_INSTALL%\bin set HB_INC_INSTALL=%HB_INSTALL%\include set HB_LIB_INSTALL=%HB_INSTALL%\lib set WATCOM=f:\watcom set EDPATH=%WATCOM%\EDDAT set INCLUDE=%WATCOM%\H;%WATCOM%\H\NT;%HB_INC_INSTALL% set PATH=%WATCOM%\BINNT;%WATCOM%\BINW set HARBOURFLAGS=-n1 -q0 -w -es2 -gc0 -i%HB_INC_INSTALL% set C_USR= -j -w=3 -d2 -5s -5r -fp5 -oxehtz -zq -zt0 -zw -mf -bw rem -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% if exist FastRepH.lib del FastRepH.lib if exist %HB_LIB_INSTALL%\FastRepH.lib del %HB_LIB_INSTALL%\FastRepH.lib %HB_BIN_INSTALL%\%HB_COMPILER% FastRepH.prg %HARBOURFLAGS% wpp386 %C_USR% FastRepH.c -fo=FastRepH.obj && wlib -b FastRepH.lib +FastRepH.obj if exist FastRepH.c del FastRepH.c if exist FastRepH.obj del FastRepH.obj if exist FastRepH.lib copy FastRepH.lib %HB_LIB_INSTALL%\FastRepH.lib endlocal

Петр: Andrey пишет: А сколько будет стоить "Графика" и "Фаст" для чужого заказчика ? Может я кого-нибудь подряду под это дело ..... Если вам действительно нужна графика за приемлемую цену, то рекомендую обратить внимание на rmchart Цена - потраченое время на изучение и адаптацию - вполне демократическая P.S. В MiniGUI пример тоже имеется.

saulius: Петр, а можно собрать Harbour с watcom17a ?

Петр: Можно. Я к примеру собираю вот так @echo off setlocal set HB_ARCHITECTURE=w32 set HB_COMPILER=owatcom set WATCOM=f:\watcom set EDPATH=%WATCOM%\EDDAT set INCLUDE=%WATCOM%\H;%WATCOM%\H\NT set PATH=%WATCOM%\BINNT;%WATCOM%\BINW set HB_PKG_NAME=harbour-watcom17a rem set C_USR=-DHB_GUI -DHB_NO_TRACE -DHB_FM_STATISTICS_OFF -DHB_FM_WIN32_ALLOC -DHB_HASH_MSG_ITEMS set C_USR= set PRG_USR=-l set HB_BUILD_ST= rem set HB_BUILD_DLL=yes set HB_BUILD_VERBOSE=yes set HB_CROSS_BIN_DIR= set HB_BIN_COMPILE= set HB_PPGEN_PATH= set HB= set HBPP= call ext.bat if exist %HB_PKG_NAME% rd /q /s %HB_PKG_NAME% md %HB_PKG_NAME% set HB_INSTALL_PREFIX=E:\hb\%HB_PKG_NAME% set HB_BIN_INSTALL=%HB_INSTALL_PREFIX%\bin\ set HB_LIB_INSTALL=%HB_INSTALL_PREFIX%\lib\ set HB_INC_INSTALL=%HB_INSTALL_PREFIX%\include\ md %HB_BIN_INSTALL% md %HB_LIB_INSTALL% md %HB_INC_INSTALL% // перейти в папку с исходниками cd e:\harbour make clean > nul make install %1 %2 %3 -r SHELL=%COMSPEC% 2> make_gnu_owatcom_err.log > make_gnu_owatcom_std.log endlocal ext.bat set HB_INC_ALLEGRO= set HB_INC_APOLLO= set HB_INC_CURL=E:\curl\include set HB_INC_FIREBIRD= set HB_INC_FREEIMAGE=E:\freeImage\Dist set HB_INC_GD= set HB_INC_LIBHARU=E:\haru\include set HB_INC_MYSQL= set HB_INC_PGSQL= set HB_INC_ADS=

Петр: Для сборки нужна утилита make GNU. Я использую mingw32-make.exe из состава MigW 3.4.5 Просто переименовал ее в make.exe и поместил в %WATCOM%\BINNT

saulius: Спасибо, Петр ! Буду пробовать сочетание: (open source)Harbour - (open source)Watcom

Andrey: Как заменить формат вывода для FastReport ??? Поле базы текстовое, в хХарборе пользуюсь TRANSFORM(FIELD->TELFIO,'@R (999) 999-99-99') Я уже сделал для ФАСТе функцию TRANSFORM, просто как обойтись без нее....

Sergey Spirin: Andrey пишет: просто как обойтись без нее.... [FormatMaskText( '(000) 000-00-00;0', <Table."Field">)]

Andrey: Был на выставке Softtools, подходил на стенд FastReport, спрашивал насчет графиков (Типы графиков в компоненте Chart). Сказали следующее: скачать новую DLL если есть лицензия и ПРОСТО ПОЛЬЗОВАТЬСЯ, так как они уже включены в поставку..... А у нас тогда почему нет ???

Sergey Spirin: Andrey пишет: Был на выставке Softtools, подходил на стенд FastReport, спрашивал насчет графиков (Типы графиков в компоненте Chart). Сказали следующее: скачать новую DLL если есть лицензия и ПРОСТО ПОЛЬЗОВАТЬСЯ, так как они уже включены в поставку..... А у нас тогда почему нет ??? Так у вас есть лицензия на TeeChart Pro? И какую такую новую dll надо скачать? И что включено в какую поставку?

Andrey: У них там на стенде была версия 4.5.43 (Дали диск с демо версией FastReport Studio) Так там куча типов графиков: Standart, Extended, Stats, Financial, Other Может я и сразу не сделаю все графики, но хочется иметь их тоже на будущее Ну я взял эту Fastreport3.dll от Studio и подключил к себе в проект.... Не ЗАРАБОТАЛО !!! Конечно догадывался, что не пойдет так просто... , так на всякий случай... Резуме, так как получить эти графики к себе в FastReport ?

Sergey Spirin: Andrey пишет: У них там на стенде была версия 4.5.43 (Дали диск с демо версией FastReport Studio) Так там куча типов графиков: Standart, Extended, Stats, Financial, Other Может я и сразу не сделаю все графики, но хочется иметь их тоже на будущее Да уж, "смешались в кучу кони, люди"... Andrey пишет: Резуме, так как получить эти графики к себе в FastReport ? Еще раз - на сегодняшний день, единственный способ это иметь developer-лицензию TeeChart Pro. FRH и FR Studio - это разные продукты, хотя и имееют общую базу FR VCL. Почему стало возможно компилировать студию с TeeChart Pro объясняется только способом лицензирования. Разработчик под студию не имеет права включать дизайнер в состав приложения, удовольствие это стоит 2170 руб. за одно рабочее место со специльной процедурой активации. В эту сумму входит и лицензионное отчисление за TeeChart за юзерское одно рабочее место. Надеюсь, что разница очевидна.

Andrey: Sergey Spirin пишет: Надеюсь, что разница очевидна. Понял ! С ценой согласен, с условиями тоже !!! "включать дизайнер в состав приложения" НЕ БУДУ !!! Как получить сие нововведение ?

Sergey Spirin: Andrey пишет: Как получить сие нововведение ? Какое? Студию? Взять и купить.

Andrey: Sergey Spirin пишет: Какое? Студию? Взять и купить. Так она под хХарбором не будет работать !!! Я же спрашиваю, сделаете ли вы адаптацию или "продвинутую версию" типа студии для хХарбора ???

Sergey Spirin: Andrey пишет: Я же спрашиваю, сделаете ли вы адаптацию или "продвинутую версию" типа студии для хХарбора ??? Еще раз для непонятливых.... В настоящее время никаких изменений не планируется. Единственная возможность иметь Tee Chart Pro в составе FRH - это иметь лицензию в составе FRH, точка.

TimTim: Отчет работал нормально. После ввода в БД нескольких новых записей стала появляться такая ошибка «Были обнаружены следующие ошибки: Could not convert variant of type (Null) info type(OleStr) Неизвестная переменная или поле БД: 1220» Воостанавливаю файл БД из архива - все нормально. Понятно, что ошибка во вновь введенных строках, но как ее искать?

Sergey Spirin: TimTim пишет: Отчет работал нормально. После ввода в БД нескольких новых записей стала появляться такая ошибка «Были обнаружены следующие ошибки: Could not convert variant of type (Null) info type(OleStr) Неизвестная переменная или поле БД: 1220» Воостанавливаю файл БД из архива - все нормально. Понятно, что ошибка во вновь введенных строках, но как ее искать? Похоже, в новых записях появилось что-то вроде: [1220] Если в этой мемке никаких выражений присутствовать не может, то просто поставьте AllowExpressions=False. Если же выражения нужны, но могут присутствовать и символы "[","]", то измените разделители выражений - ExpressionDelimeters.

Sergey Spirin: Здравствуйте, Начиная с 4.7 реализован "часто спрашиваемый" немодальный режим предпросмотра. Для этого добавлены следующие методы: :AddReport() - Добавляет новый отчет и делает его активным, возвращает номер этого отчета . :SelectReport(nReport) - Делает отчет с номером nReport активным. :RemoveReport(nReport) - Удаляет существующий отчет. :ClearReports() - Удаляет все отчеты, кроме отчета 0 . :PreviewOptions:SetModal(lModal) - Определяет будет ли предпросмотр отчета модальным или нет. :PreviewOptions:SetRemoveReportOnClose(lRemove) - Определяет, удалять ли отчет после закрытия предпросмотра или нет Отчет с номером 0 существует всегда. Пример использования: FrPrn:AddReport() FrPrn:LoadFromFile("1.fr3") FrPrn:PreviewOptions:SetMaximized(.f.) FrPrn:PreviewOptions:SetBounds(120, 120, 800, 600) FrPrn:PreviewOptions:SetModal(.f.) FrPrn:ShowReport() --- Спирин Сергей.

Andrey: Как при экспорте документа исправить имя файла по умолчанию (оно берется из имени формы) ? Например: форма называется zaivka1a.fr3 при экспорте в WORD по умолчанию предлагается zaivka1a.doc (и там можно писать свое имя файла) Я хочу чтоб по умолчанию писалось по русски: "Заявка-форма1-12.10.2008.doc"

Sergey Spirin: Andrey пишет: Как при экспорте документа исправить имя файла по умолчанию (оно берется из имени формы) ? FrPrn:SetProperty("RTFExport", "FileName", "ggg.rtf")

Andrey: Спасибо !

Andrey: И еще один вопрос: При построении отчетов с вычислениями, в окне "ПредПросмотра" появляется белый лист, и только спустя 1 мин. результат. (Если база большая и нагрузка на сервер тоже большая, то может и 2-3 мин. считать) Можно ли повесить сообщение большими буквами на белом листе типа: "Подождите немного, идет счет ...." ?

Sergey Spirin: Andrey пишет: Можно ли повесить сообщение большими буквами на белом листе типа: "Подождите немного, идет счет ...." ? Нет. Можно так: ShowMyStatusMessage() FrPrn:PrepareReport() CloseMyStatusMessage() FrPrn:ShowPreparedReport()

Andrey: Извиняюсь, это опять я .... Опять столкнулся с проблемой: Как делать многостраничные отчеты ? Раньше за печать у меня отвечал EXCEL, т.е. он сам нумеровал многостраничную таблицу, я с этим не заморачивался. Отчет типа такого: Я в "Фасте" сделал один отчет состоящий из 4 страниц, туда раскидал месяца. Но при выводе не совпадает нумерация... Т.е. на 1 странице в конце отчета помещается (допустим) 20 строк, а на 4 странице остаток только 10 строк.... Как правильно строить такие отчеты ? Где копать ?

Sergey Spirin: Andrey пишет: Раньше за печать у меня отвечал EXCEL, т.е. он сам нумеровал многостраничную таблицу, я с этим не заморачивался. Отчет типа такого: Я в "Фасте" сделал один отчет состоящий из 4 страниц, туда раскидал месяца. Но при выводе не совпадает нумерация... Т.е. на 1 странице в конце отчета помещается (допустим) 20 строк, а на 4 странице остаток только 10 строк.... Ничего не понял. Можно ли объяснить языком человеческим, что нужно нумеровать?

Andrey: Можно... Сделан отчет состоящий из 4 страниц. После печати отчета нужно склеивать листы друг с другом 1+2+3+4. На каждой странице ставлю порядковый номер строки. Так вот: при печати этот порядковый номер на страницах не совпадает... Выложил готовую последнюю страницу отчета которая идет 1-ой на склейку: http://s48.radikal.ru/i120/0811/9a/4fa9cf312191.jpg Выложил готовую последнюю страницу отчета которая идет 2-ой на склейку: http://s51.radikal.ru/i132/0811/b4/27a059963c54.jpg Выложил готовую последнюю страницу отчета которая идет 3-ей на склейку: http://i065.radikal.ru/0811/ef/79deecb4f307.jpg Выложил готовую последнюю страницу отчета которая идет 4-ой на склейку: http://s47.radikal.ru/i118/0811/ef/9e59374af0e0.jpg Вот я и спрашиваю как строить такие отчеты ?

Sergey Spirin: Andrey пишет: Сделан отчет состоящий из 4 страниц. После печати отчета нужно склеивать листы друг с другом 1+2+3+4. На Что выводится в колонке нумерации и как, вообще, строится отчет?

Andrey: Предыдущий вопрос пока отложен на время .... Сейчас интересен другой. Можно ли просматривать чужие DOC и XLS через FastReport. Сделал пример, а там показывается только 1-я страница документа.... Есть ли решение Ссылка на пример: http://files.mail.ru/DBNUPV

Sergey Spirin: Andrey пишет: Сделал пример, а там показывается только 1-я страница документа.... Честно говоря, не знаю. Никогда не работал с фастовским Ole-объектом. Можете уточнить в FR-поддержке (панель управления - создать новый тикет).

Andrey: Доброго времени суток всем.... Столкнулся со следующей проблемой: 1) имеется база с полями SUM01, SUM02, SUM03 .... SUM12 2) имеется менюшка с выбором числа (месяца) 1,2,3....12 3) имеется отчет в котором нужно печатать выбранное поле, а в отчете поля печатаются так [BASE."SUM01"] Вопрос: как мне написать правильно выражение в отчете ? Пробовал через Public переменные типа M->cPolePrn а в отчете [DOGOVOR.[GetHbVar('cPolePrn')]] - не прокатывает. или [([GetHbVar('cPolePrn')],MasterData1)] - тоже не прокатывает. Как в Дельфи можно использовать макроподстановку ? И еще самое нужное: как по такому полю получить ИТОГ ?

Sergey Spirin: Andrey пишет: Доброго времени суток всем.... Столкнулся со следующей проблемой: 1) имеется база с полями SUM01, SUM02, SUM03 .... SUM12 2) имеется менюшка с выбором числа (месяца) 1,2,3....12 3) имеется отчет в котором нужно печатать выбранное поле, а в отчете поля печатаются так [BASE."SUM01"] Вопрос: как мне написать правильно выражение в отчете ? Пробовал через Public переменные типа M->cPolePrn а в отчете [DOGOVOR.[GetHbVar('cPolePrn')]] - не прокатывает. или [([GetHbVar('cPolePrn')],MasterData1)] - тоже не прокатывает. procedure ReportHOnStartReport(Sender: TfrxComponent); begin Memo8.DataField := GetHbVar('cPolePrn'); end; [SUM(Memo8.Value, Band4)] Andrey пишет: Как в Дельфи можно использовать макроподстановку ? ??? В самом Delphi? Естественно, никак. Это все-таки 100% компилятор, а не скриптовый язык. Если же говорить о FastReport и его Object Pascal Script, то Любое выражение Object Pascal Script: Calc() Харбурный макрос: EvalMacro()

Andrey: Не понятно ! Наверно нужно уточнить задачу. Привожу картинку отчета. Сделал как вы рекомендовали: procedure ReportHOnStartReport(Sender: TfrxComponent); begin Memo37.DataField := GetHbVar('cPolePrn'); Memo38.DataField := GetHbVar('cPolePrix'); end; 1 - (А) Memo37 ---> Что там вводить нужно [DOGOVOR."????"] ? 2 - (А) Memo38 ---> Аналогично ? 3 - (А) Memo39 ---> равно Поле (1) минус Поле (2) 4 - Итог [SUM(Memo37.Value,ReportSummary1)] - возвращает 0, на Band4 -ругается ! 5 - Тоже нужен итог Memo38 6 - просто разница между 4 и 5 ! Заранее спасибо.

Sergey Spirin: Andrey пишет: 1 - (А) Memo37 ---> Что там вводить нужно [DOGOVOR."????"] ? 2 - (А) Memo38 ---> Аналогично ? Нужно ввести волшебное слово, например "пожалуйста" Шучу, чтобы там не было написано, при DatsSet = DOGOVOR, любое изменение DataField правильно изменит содержимое. Потренеруйтесь в дизайнере. Меняйте свойство DataField и смотрите как меняется текст в мемо. Andrey пишет: 3 - (А) Memo39 ---> равно Поле (1) минус Поле (2) Не поверите, но это будет : [Memo37.Value - Memo38.Value] Andrey пишет: 4 - Итог [SUM(Memo37.Value,ReportSummary1)] - возвращает 0, на Band4 -ругается ! Придется произвести легкое интеллектуальное усилие. Так, "на Band4 -ругается", почему бы это? A! Наверное потому, что никакого Band4 в моем отчете нет! Он просто есть в каком-то другом отчете, из которого копировался пример. Так, а "[SUM(Memo37.Value,ReportSummary1)]" - возвращает 0"... Выделим в дизайнере фунуцию SUM и прочитаем внизу: "Возвращает сумму выражения Expr для бэнда Band". Так, Expr у нас правильный, именно Memo37.Value нам и нужно суммировать, а вот когда нужно производить очередное прибавление значения? Похоже за это отвечает второй параметр - Band. То есть, при каждой печати этого бэнда будет к сумме добавляться текущее значение. А! А у нас же Memo37 лежит на MasterData1 и именно для него нам нужно считать сумму, значит: [SUM(Memo37.Value, MasterData1)] -- Надеюсь, с 5 и 6 вы справитесь самостоятельно, направление: "мышление по аналогии"

Andrey: Sergey Spirin пишет: при DatsSet = DOGOVOR, любое изменение DataField правильно изменит содержимое. Блин, я замучился искать эту штуку. Бился, бился, думал все... работать не будет ! А оказывается я на глобальный DatsSet - Report поставил.... А потом все заработало !!! Спасибо большое.....

Andrey: Всех с наступившим Новым Годом !!! Подскажите, как можно организовать отчет следующего типа: [ABONENT."ADRES''] УВАЖАЕМЫЙ АБОНЕНТ ! [MyFirmaBook] сообщает, что Ваша задолженность по оплате за техническое обслуживание дома составляет: [ABONENT."DOLG_PRN"] руб. на [ABONENT."DATENACH"] г. В случае неуплаты ДО [GetHbVar('cOplataDo')] г. вы будете ..... И т.д. ........... Текст хотелось бы иметь как "Объект Rich Text". Это получилось. Но при "просмотре отчета" нужна КНОПКА для редактирования текста пользователем или запрос на редактирование текста... Это я не знаю как сделать.....

Sergey Spirin: Andrey пишет: Текст хотелось бы иметь как "Объект Rich Text". Это получилось. Но при "просмотре отчета" нужна КНОПКА для редактирования текста пользователем или запрос на редактирование текста... Это я не знаю как сделать..... В предпросмотре уже есть такая кнопка, называется - "Редактировать страницу". Загружается дизайнер в режиме редактирования уже сформированного отчета. В чем проблема?

Andrey: Всем привет ! Столкнулся с такой неприятной вещью ! При ЭКСПОРТЕ (предварительный просмотр) в другой формат (допустим WORD), при последующем выборе "Открыть после экспорта" выскакивает окно "Сохранить как". И вот путь этот для сохранения выскакивает ПЕРИОДИЧЕСКИ в папку, где лежат все формы !!! Блин, как убрать этот путь, чтоб юзера не писали мне в ПАПКУ с формами ?

Sergey Spirin: Andrey пишет: Блин, как убрать этот путь, чтоб юзера не писали мне в ПАПКУ с формами ? Заглянуть в мануал и увидеть, что у всех экспортов есть проперть DefaultPath.

Andrey: Sergey Spirin пишет: Заглянуть в мануал и увидеть, что у всех экспортов есть проперть DefaultPath. Спасибо, забыл что есть документация....

Andrey: Возвращаюсь опять к этому вопросу ! Andrey пишет: цитата: Подскажите пожалуйста, а могу ли я через FastReport печатать свои текстовые файлы OEM или WIN кодировки ? Sergey Spirin пишет: Кладете ReportTittle, на него мемо во всю ширину, оба чтоб были растягиваемыми. Вот, собственно, и все. Грузите теперь файлы в мемо. Создал ReportTittle1, на него положил картинку, название фирмы, название отчета. Далее положил MEMO1 c выводом [GetHbVar('cFileMemo')] Создал PageFooter1, для печати нумерации страниц. Результат: ПОКАЗЫВАЕТ ТОЛЬКО ОДНУ СТРАНИЦУ ! Подскажите пожалуйста, где нужно сделать (свойства объектов) чтоб "оба были растягиваемыми" ?

Sergey Spirin: Andrey пишет: Подскажите пожалуйста, где нужно сделать (свойства объектов) чтоб "оба были растягиваемыми" ? Заветное слово в свойствах - Stretch. По правой кнопке мышы - "Растягиваемый".

Andrey: Сделал.... Программа уходит в АУТ ... где-то 1000 страниц и более ... даже не смог дождаться, на файле размером в 30 Кб. Т.е. я считываю файл в переменную и вывожу на форме [GetHbVar('cFileMemo')] На объекте PageHeader1 делаю свойства Stretch: True ..... И еще такой БАГ, если в тексте встречаются [ ], то выдает ОШИБКУ и отчет не показывается...

Sergey Spirin: Andrey пишет: Программа уходит в АУТ ... где-то 1000 страниц и более ... даже не смог дождаться, на файле размером в 30 Кб. О, господи. Ну хоть чуть-чуть подумать то, а? Я что-то говорил про PageHeader? Было бы забавно, если б смог дождаться PageHeader печатается на каждой странице. Грузим в него сожержимое, которое больше страницы. Инициализруется новая страница с PageHeader, в который грузим сожержимое, которое больше страницы и т. д. Есть шансы дождаться? Andrey пишет: И еще такой БАГ, если в тексте встречаются [ ], то выдает ОШИБКУ и отчет не показывается... Баги, Андрей, они явно в другом месте А в Фасте есть разделители выражений, по умолчанию [,]. Их можно переопределить, свойство - ExpressionDelimeters. В случае с файлом обработку выражений можно вообще отключить, что уберет ненужный парсинг, свойство AllowExpressions. А текст грузить: procedure Memo2OnBeforePrint(Sender: TfrxComponent); begin Memo2.Text := GetHbVar('cFileMemo'); end;

Andrey: Sergey Spirin пишет: Баги, Андрей, они явно в другом месте Ну конечно, баги всегда у пользователя, включая пользователей моих программ..... Что увидел, то и написал

Andrey: Sergey Spirin пишет: А текст грузить: procedure Memo2OnBeforePrint(Sender: TfrxComponent); begin Memo2.Text := GetHbVar('cFileMemo'); end; Почему то не сработал ! Естественно ставил Memo1 - как объект у меня назван. После длительных изысканий ..... нашел более простое решение ! А БАГ с [,] почему-то перестал существовать. Непонятно ! Большое СПАСИБО за помощь ! Пока кого-нибудь не спросишь, ответа - не найдешь, самое главное процесс ....

Andrey: Для загрузки картинки использую след. код: procedure Picture1OnBeforePrint(Sender: TfrxComponent); begin Picture1.Picture.LoadFromFile(GetHbVar('MyLogoFirma')); end; А как сделать загрузку Текстового файла ? Сделал примерно так: procedure Memo1OnBeforePrint(Sender: TfrxComponent); begin Memo1.Text.LoadFromFile(GetHbVar('MyFileTxt')); end; Ругается на синтаксис ! Где можно синтаксис посмотреть ?

Sergey Spirin: Memo1.Memo.LoadFromFile(.... Набрав имя объекта и напечатав точку, например Memo1., нажмите Ctrl+Пробел, вам будет предложен полный список всех вариантов, что может быть напечатано далее Да и, собственно, вкладка Classes, она не для красоты только существует, а еще для того, чтобы посмотреть списки свойств и методов.

Andrey: Andrey пишет: Блин, как убрать этот путь (по умолчанию), чтоб юзера не писали мне в ПАПКУ с формами ? Sergey Spirin пишет: Заглянуть в мануал и увидеть, что у всех экспортов есть проперть DefaultPath. Что-то не совсем понятно ! На каждый экспорт нужно писать свой обработчик ? Например: FrPrn := frReportManager():new() //---------- Init FastReport -------------- InitFr4(FrPrn,cFileForm) //----------- Load file form FastReport ----------- FrPrn:LoadFromFile( cFileForm ) //---------- Init FastReport Vars and Function ---- InitFr4VarsFunc(FrPrn,cFileForm) FrPrn:PrintOptions:SetShowDialog( .f. ) FrPrn:SetProperty( "PDFExport", "DefaultPath", cMyPathTemp ) FrPrn:SetProperty( "DOCExport", "DefaultPath", cMyPathTemp ) FrPrn:SetProperty( "RTFExport", "DefaultPath", cMyPathTemp ) .......... FrPrn:SetProperty( "PDFExport", "FileName", cMyNameFile ) FrPrn:SetProperty( "DOCExport", "FileName", cMyNameFile ) FrPrn:SetProperty( "RTFExport", "FileName", cMyNameFile ) ........... // А потом можно вызывать дизайнер или предпросмотр ? IF nShowDesignReport == 1 FrPrn:ShowReport() ELSE FrPrn:DesignReport() ENDIF //-------- Unload FastReport ---- FrPrn:DestroyFR() А можно без перечисления всех этих ОБЪЕКТОВ ? Нет ли какой-нибудь Глобального метода ?

Sergey Spirin: Andrey пишет: А можно без перечисления всех этих ОБЪЕКТОВ ? Нет ли какой-нибудь Глобального метода ? Нет. Кладите такую инициализацию в Init-ы.

Andrey: Понятно ! С этим разобрались ... А как сделать чтоб при экспорте не появлялось окошко с запросом сохранения и сделать запуск программы "Открыть после экспорта" ? Т.е. если используем WORD то сразу запускался WORD после экспорта ....

Sergey Spirin: Andrey пишет: А как сделать чтоб при экспорте не появлялось окошко с запросом сохранения и сделать запуск программы "Открыть после экспорта" ? Открыть любую дему, выбрать "Export Report", тыркать мышью и думать.

Andrey: НЕТ, нужно чтоб это окно не появлялось, которое на картинке. Самостоятельный Экспорт мне не нужен. Устраиваевает тот который есть в Предпромотре. В предпросмотре я уже задаю папку для экспорта, имя файла, нужно только чтоб "поднялось" приложение в которое экспортрую.

Sergey Spirin: Думать все-таки придется. Поэтому: Sergey Spirin пишет: Открыть любую дему, выбрать "Export Report", тыркать мышью и думать. Хорошо, даю "наводку" - Думать нужно не о смысле жизни, вообще, а о всяких галочках на диалоге и об "их дальнейшей судьбе".

Andrey: Sergey Spirin пишет: Хорошо, даю "наводку" "Наводка" - помогла ! Добавляю: FrPrn:SetProperty( "PDFExport" , "ShowDialog", .F. ) FrPrn:SetProperty( "PDFExport" , "OpenAfterExport", .T. ) FrPrn:ShowReport() Работает ! FrPrn:SetProperty( "HTMLExport", "ShowDialog", .F. ) FrPrn:SetProperty( "HTMLExport", "OpenAfterExport", .T. ) FrPrn:ShowReport() Не работает - ругается на путь ! Хотя если сделать через меню, то все запускается ! FrPrn:SetProperty( "RTFExport" , "ShowDialog", .F. ) FrPrn:SetProperty( "RTFExport" , "OpenAfterExport", .T. ) FrPrn:ShowReport() Работает ! FrPrn:SetProperty( "XLSExport" , "ShowDialog", .F. ) FrPrn:SetProperty( "XLSExport" , "OpenAfterExport", .T. ) FrPrn:ShowReport() Не работает !!! Файл создает, а Ексель не запускается. FrPrn:SetProperty( "XMLExport" , "ShowDialog", .F. ) FrPrn:SetProperty( "XMLExport" , "OpenAfterExport", .T. ) FrPrn:ShowReport() Не работает !!! Файл создает, а Ексель не запускается. Видать для Екселя нужны другие методы ?

Andrey: С Екселем разобрался ! Нужен другой метод - FrPrn:SetProperty( "XMLExport" , "OpenExcelAfterExport", .T. ) ! И заработал - FrPrn:SetProperty( "HTMLExport", "OpenAfterExport", .T. ) Спасибо !

Andrey: Sergey Spirin пишет: Открыть любую дему, выбрать "Export Report", тыркать мышью и думать. А как передавать в Fast массив ? Что-то не нашел примеров в Демо ! FrPrn:AddVariable( "My Lovely Vars", "My and only my var", 10 ) FrPrn:AddVariable( "My Lovely Vars", "test", 100.25 ) FrPrn:AddVariable( "My Lovely Vars", "test1", "'Test'" ) FrPrn:AddVariable( "My Lovely Vars", "test2", CToD( "01/01/2007" ) ) Да и при использовании в Fast'e получается ошибка !!! Двойные скобки-то нельзя ! [GetHbVar('aPubYear[1]')] ?

Sergey Spirin: Andrey пишет: А как передавать в Fast массив ? var Ar: Variant; procedure ReportHOnStartReport(Sender: TfrxComponent); begin Ar := GetHbVar('ar1'); ShowMessage(Ar[1]); end; Andrey пишет: Да и при использовании в Fast'e получается ошибка !!! Двойные скобки-то нельзя ! [GetHbVar('aPubYear[1]')] ? А подумать? Или хотя бы ошибку прочитать? В общем, домашнее задание - объяснить почему нельзя: [GetHbVar('aPubYear[1]')] И почему теперь можно: [Ar[1] + Ar[2]]

Andrey: Привет ! Столкнулся с проблемой: Загружаю в PUBLIC переменную файл размером 4 Мб. Загрузилась нормально. А на форме пытаюсь получить GetHbVar('cFileMemo') ! Виснит глухо ! Приходится снимать FastReport ! Так какого размера можно передавать в FastReport, чтоб ни вис он ?

Sergey Spirin: Ограничение на строку - 2GB. Поэтому, скорее всего, снова "забубенен" бесконечный отчет, типа 4MB в PageHeader... Нюансы, в принципе, могут быть, конечно. Давайте пример.

Sergey Spirin: На сайте http://www.reportingfor.info/ появился новый раздел "Унифицированные формы FastReport", посвященный стандартным шаблонам унифицированных форм. Посмотреть и скачать шаблоны можно здесь http://www.reportingfor.info/ru/download.php

Andrey: Сделал пример ! Ссылка здесь: http://files.mail.ru/7ZKCRC Выяснил опытным путем что размер файла лучше иметь меньше 200 кбайт, при других значениях просто ТОРМОЗА, а больше 1 Мбайта - просто виснет ! Я думаю лучше наверно сделать показ файла через загрузку его FastReport"ом, но я так и не смог его загрузить напрямую ! Буду признателен за помошь.

Andrey: Sergey Spirin пишет: Давайте пример. Пример дал ....

Andrey: Перевел свою программу под xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406) Весь проект собрался, кроме: Building object module for 'obj2\FastRepH.c' using C compiler 'BCC32' as defined in 'Z:\xHARBOUR\BIN\harbour.cfg'... Exec: BCC32 -c -D__EXPORT__ -IZ:\xHARBOUR\include -d -LZ:\xHARBOUR\lib -oobj2\FastRepH.obj obj2\FastRepH.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland obj2\FastRepH.c: Error E2141 PRG\\FastRepH.prg 177: Declaration syntax error *** 1 errors in Compile *** Done. Что делать ?

Andrey: Нашел решение !!! Спасибо, люди добрые помогли. Всего-то нужно было перейти на новую версию 4.7.130

PSP: Сергею Спирину: После обновления Harbour при компиляции программы имеем множественные Warning W8075 (компилятор BCC 5.5.1) на файле FastRepH.prg Changelog Харбора: 2009-06-20 22:24 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbapi.h * harbour/source/vm/extend.c * renamed existing hb_par*() and hb_stor*() functions which supports variable number of parameters (...) into hb_parv*() and hb_storv*() * added new hb_par*() and hb_stor*() functions which use strict number of parameters. New hb_par*() functions do not make hidden conversion between types, f.e. hb_parl() returns 1 only for logical parameters which contain .T. Можно попросить Вас поправить? Спасибо.

Sergey Spirin: Я вернусь в "мир Xbase" через пару дней, потерпите пожалуйста. И сами варнинги покажите. Ошибок нет? Только варнинги? Кстати, а нет ли "у нас" приличных Дельфистов? Я к тому, что подобные "пропадания" могут у меня, к сожалению, повторяться. Если кто-нибудь, обладающий приличной дельфийской квалификацией заинтересуется, то могу предложить сотрудничество. Имею в виду ведение саппотрта за, естественно, как использование FRH, так и, возможно, проценты с продаж.

PSP: Ошибок нет. Варнинги на картинке.

Sergey Spirin: PSP пишет: Варнинги на картинке. Гм... Даже не знаю, что сказать на такой варнинг Ну я не знаю как сделать приведение типов указателей "НЕ ПОДОЗРИТЕЛЬНЫМ" А зачем вам вообще С-варнинги? Может просто убрать -w из строки для bcc? Ну или просто эту сверхподозрительность зарубить добавив -w-8075? Кстати, а это скриншот чего?

PSP: Sergey Spirin пишет: Гм... Даже не знаю, что сказать на такой варнинг Ну я не знаю как сделать приведение типов указателей "НЕ ПОДОЗРИТЕЛЬНЫМ" Все было нормально, пока в Харбор не изменили вот это (имхо) * renamed existing hb_par*() and hb_stor*() functions which supports variable number of parameters (...) into hb_parv*() and hb_storv*() * added new hb_par*() and hb_stor*() functions which use strict number of parameters. New hb_par*() functions do not make hidden conversion between types, f.e. hb_parl() returns 1 only for logical parameters which contain .T. Может просто заменить все hb_par*() и hb_stor*() на hb_parv*() и hb_storv*(). Я не знаток Си, сорри... Sergey Spirin пишет: А зачем вам вообще С-варнинги? Может просто убрать -w из строки для bcc? Ну или просто эту сверхподозрительность зарубить добавив -w-8075? Если это ни на что не влияет, - можно и убрать. Эту фичу (-w-8075) я знаю. Sergey Spirin пишет: Кстати, а это скриншот чего? Output console xMate. Выход компилятора (в данном случае BCC)

Sergey Spirin: PSP пишет: Все было нормально, пока в Харбор не изменили вот это (имхо) * renamed existing hb_par*() and hb_stor*() functions which supports variable number of parameters (...) into hb_parv*() and hb_storv*() * added new hb_par*() and hb_stor*() functions which use strict number of parameters. New hb_par*() functions do not make hidden conversion between types, f.e. hb_parl() returns 1 only for logical parameters which contain .T. Может просто заменить все hb_par*() и hb_stor*() на hb_parv*() и hb_storv*(). Я не знаток Си, сорри... Ну, вообще говоря, я не использую функций с переменным числом параметров и не использую неявных приведений типов. Поэтому, на вскидку, должно работать. "Погоняйте", посмотрите. Для теста можно переименовать и посмотреть. Но у себя я это делать не буду, это только гимор - ветвить под Harbor/xHarbour.

PSP: Sergey Spirin пишет: Для теста можно переименовать и посмотреть. Ok. Попробую.

Andrey: Возвращаюсь опять к нерешенной проблеме ! Сделал пример ! Ссылка здесь: http://files.mail.ru/5PBFFP Выяснил опытным путем что размер файла лучше иметь меньше 200 кбайт, при других значениях просто ТОРМОЗА, а больше 1 Мбайта - просто виснет ! Я думаю лучше наверно сделать показ файла через загрузку его FastReport"ом, но я так и не смог его загрузить напрямую ! Буду признателен за помошь.

Sergey Spirin: Andrey пишет: Возвращаюсь опять к нерешенной проблеме ! Сделал пример ! На выходных посмотрю

Andrey: Уже вторые выходные проходят.....

Andrey: Уже месяц прошел .....

Sergey Spirin: Andrey пишет: Уже месяц прошел Увы, Андрей, некогда. Ждите.

Andrey: Понял, жду !!!

Sergey Spirin: Вышел FastReport for [x]Harbour (FRH) 4.8. Основная новость - это полностью переписанный PDF-экспорт. Решена проблема рендеринга вертикального и под углом текста, добавлена полная поддержка Unicode, увеличена скорость работы, уменьшены требования к памяти. Также может быть интересна поддержка двоичных данных в UserDataSet и специальная встроенная функция для загрузки картинок просто из Харбор-переменной. Также изменился дизайн страниц про FRH (заходите ), добавлены новые примеры. -- Спирин Сергей. Компания "Паритет Софт". FRH : http://www.paritetsoft.ru/frh.htm FRAX: http://www.paritetsoft.ru/frax.htm

Andrey: Sergey Spirin пишет: специальная встроенная функция для загрузки картинок просто из Харбор-переменной. Что то не нашел примера по этой функции....

Sergey Spirin: Andrey пишет: Что то не нашел примера по этой функции.... Даже интересно, а где искали? В харборе: MyVar := memoread("C:\MyPicture.jpg") В отчете: procedure ReportHOnStartReport(Sender: TfrxComponent); begin LoadImageFromHbVar(Picture1, 'MyVar'); end;

Andrey: Sergey Spirin пишет: В отчете: procedure ReportHOnStartReport(Sender: TfrxComponent); begin LoadImageFromHbVar(Picture1, 'MyVar'); end; Так я этим уже давно пользуюсь вовсю.....

Sergey Spirin: Серьезно? Функция LoadImageFromHbVar() существует в FRH 3 дня

Andrey: Sergey Spirin пишет: Серьезно? Код примерно одинаков, давали вы его сами: В харборе: MyLogoFirma := "путь до картинки" В отчете: procedure Picture1OnBeforePrint(Sender: TfrxComponent); begin Picture1.Picture.LoadFromFile(GetHbVar('MyLogoFirma')); end;

Andrey: И опять будет "беда" по передачи переменной.... Если картинка будет большая 1 или 2 Мб ...... Опять наверно будут тормоза... Так я и не дождался пока решение моей проблемы... Пришлось проверку вставлять, если текстовый файл меньше 500 Кб то показываю в Фасте, если больше, приходиться ВОРД грузить с файлом или БЛОКНОТ с файлом.... А хотелось бы от ВОРДА избавиться вообще....

Sergey Spirin: Andrey пишет: И опять будет "беда" по передачи переменной... Андрей, давайте без фантазий, тем более абсолютно беспочвенных. LoadImageFromHbVar() позволяет грузить картинки уже загруженные приложением в память, а не использовать внешний файл. Этого очень хотели fivewin-щики, которые любят хранить картинки в ресурсах. Суть операции в просто копировании одного куска памяти в другой. Нечему здесь тормозить. ---- Что касается проблемы с большим текстом. Здесь ситуация другая. Дней 5 назад я вспомнил об этой вашей проблеме, и честно говоря, был сильно удивлен, что она действительно существует Я отписал об этой проблеме Дэну (Зубов - сейчас ведущий по ядру 4-ки). Он поставил это в TODO. Дело в том, что в 4-ке WordWrap и разбивка по страницам для мемо происходит при каждой операции. И получается, что чем больше страниц занимает одно мемо, тем большое количество одних и тех же операций выполняется. В предыдущих версиях такого не было... Но, в любом случае, раз есть такой нюанс, то не нужно грузить файл в одно мемо. А нужно использовать для печати больших текстов UserDataSet. Просто, одна строка текста - это будет одна "запись" UserDataSet-а. Если текст уже выровнен по ширине, то вообще проблем нет, если нет, то придется сначала выровнить.

Andrey: Sergey Spirin пишет: Но, в любом случае, раз есть такой нюанс, то не нужно грузить файл в одно мемо. А нужно использовать для печати больших текстов UserDataSet. Просто, одна строка текста - это будет одна "запись" UserDataSet-а. А можно пример который я вам высылал - переделать под этот UserDataSet ? Буду очень признателен

Sergey Spirin: Andrey пишет: А можно пример который я вам высылал - переделать под этот UserDataSet ? Ладно. Пожалуй, сделаю что-нибудь типа SetTxtDataSet(), то есть весь функционал на своей стороне. Деньков 5 подождите. Просто глянул реализацию и подход MemoLine(), там также будет тормозить, так как будет проход по всему файлу при каждом обращении за следующей строкой... Просто не знаю, есть ли в Харборе аналогичные типовые средства, поэтому сделаю все чисто дельфийским кодом.

Sergey Spirin: Андрей. Я пересобрал вашу копию с новым функционалом. В общую сборку пока не выкладываю. Скачайте. Жду тестирования. Добавлен SetTxtDataSet() метод. Использование: FrPrn:SetTxtDataSet("MyText", "C:\MyText.txt") FrPrn:Show/DesignReport() В отчете появляется датасет, который выдает по одной строке текста. У датасета одно поле с именем LineOfText. В отчете добавьте MasterData и мемо на это поле. Оба - растягиваемые (Stretch). Собственно все. Протестируйте. Поддерживаются как обычные текстовые файлы, так unicode-тексты. Жду респонса, чтобы выложить в общую сборку.

Andrey: Спасибо, буду тестировать !

Andrey: Сделал тестовый пример ! Ошибки и что нужно доделать: 1) Сбивается источник данных. Сделал форму все работает, потом выходим из программы, заново заходим, смотрим "Просмотр отчета" и ошибка "Набор данных "MyText" не найден !. Заходим в Дизайнер, меню "Отчет", меню "Данные" и опять ставим "галочку" на "MyText" ... Т.е. при новом входе в программу "галочка" скидывается.... Может что-то я не так делаю... Исходник и пример высылаю.... 2) Если кодировка файла в ДОС (OEM) то показывает в отчете кракозябы. Есть ли переключатель для кодировок OEM, ANSI и др. ? Пример и исходник высылаю. Напоминаю сборка примера: HBMAKE frx-view2file.bc http://files.mail.ru/TK72SO Вообще классно получилось... Файл грузится моментально !!!

Sergey Spirin: Andrey пишет: 1) Сбивается источник данных. Ну, Андрей, это же же уже стало "общим местом" Надо наизусть заучить Все источники данных должны быть определены ДО загрузки отчета, а все переменные ПОСЛЕ. Поэтому, сначала: IF LEN(cFileText) > 0 //----------- Load text file for FastReport ------------------ FrPrn:SetTxtDataSet("MyText", cFileText) ENDIF А потом: FrPrn:LoadFromFile( cFileForm ) Поймите, отчет "грузясь", "разыскивает" все источники, которые в нем определены. Andrey пишет: 2) Если кодировка файла в ДОС (OEM) то показывает в отчете кракозябы. Есть ли переключатель для кодировок OEM, ANSI и др. ? Есть конечно, называется Font.Charset Для OEM поставьте OEM_CHARSET.

Andrey: Sergey Spirin пишет: Поймите, отчет "грузясь", "разыскивает" все источники, которые в нем определены. Спасибо, понял. Sergey Spirin пишет: Есть конечно, называется Font.Charset Не нашел такого... Подскажите пожалуйста, где ?

Sergey Spirin: Andrey пишет: Не нашел такого... Подскажите пожалуйста, где ? Мемо выделяем мышкой, в инспекторе объектов находим слово Font, щелкаем и находим слово Charset. В списке выбираем.

Andrey: Нет там такого..... Или я не то ставлю .... Вызываем Font: Не нахожу слово Charset

Sergey Spirin: Этот, этот Font. Плюсик у слова Font, он для того там, чтоб подсказывать что на него можно нажать и что-то откроется

Andrey: Спасибо ..... Без вас ни фига не разберешься.... Я по документации тоже искал, там нет...

Sergey Spirin: Ну, выкладывать в общую сборку то можно? Протестировали?

Andrey: Протестировал, все работает ! Наверно можно выкладывать, а в качестве примера работы, можете выложить мой пример ! Если что надо, то подправлю....

Andrey: Бродил тут по интернету и нашел для себя: http://www.itshop.ru/Fast-Reports/Fast/Reports/FastReport/2.5/CLX/l3t1i1284 FastReport 2.5 CLX Одинаковые отчеты в MS Windows и в Linux! Вы можете разрабатывать кросс-платформенные отчеты для кросс-платформенных 32-битных приложений, которые будут полнофункциональными как в Windows так и в Linux. FastReport CLX разработан для использования в Delphi 6,7, C++Builder 6 и во всех версиях Kylix (1-3). Помимо MS Windows 95/98/ME/NT/2000/XP, мы тестировали FastReport CLX в следующих версиях Linux: Redhat 7.0-8.0, ASP Linux 7.0-7.3, SuSE 7.0-8.0. Так что, можно будет получить FastReport под Linux для Harboura ?

Sergey Spirin: Andrey пишет: Так что, можно будет получить FastReport под Linux для Harboura ? Обязательно! Андрей, как только рак на горе свистнет, сразу подходите на раздачу! Еще раз для ожидающих рейса FastReport-Linux, и тем более с заездом в Harbour, сообщаю. Рейс вылетел лет 7 назад... Пропал без вести и снят с продаж года 2 назад. Не читайте на ночь советских (давно устаревших) газет Может .Net версия устроит, там новый интерфейс, который только будет в FR5 в 2010 году? Ежели Harbour.Net появиться, обещаю, FR.Net портирую для него

Andrey: Sergey Spirin пишет: сразу подходите на раздачу! Спасибо на добром слове...

Andrey: Привет ! Столкнулся с большой проблемой: Последняя библиотека FastReport "вылетает" при печати на принтер и "грохает" всю задачу !!! Демо-версия программы печатает без проблем.... Имеется комп с ХР SP-3. Последняя версия библиотеки вылетает при печати или при выборе принтера ! Успел поймать ошибку:

Sergey Spirin: Andrey пишет: Столкнулся с большой проблемой Сегодня вечером пересоберу с 4.8.28. Может поправили уже. А вообще, Фаст делает так, стабильными считаются версии с единицей справа - 4.x.1 То что между ними считается не стабильными, рабочими версиями. Когда рабочая снова становится стабильной, средняя цифра увеличивается, а последняя снова 1. Поэтому не стоит гнаться и менять у клиентов Фаст, особенно если ничего в списке изменений для себя важного не видите.

Andrey: Так поменял из-за новой формы, которую вы реализовали......

PSP: Сергею Спирину. Варнинги: Warning W8075 FastRepH.prg 80: Suspicious pointer conversion in function HB_FUN_CALL_PROC_C Warning W8075 FastRepH.prg 86: Suspicious pointer conversion in function HB_FUN_CALL_PROC_IC Warning W8075 FastRepH.prg 92: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CC Warning W8075 FastRepH.prg 92: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CC Warning W8075 FastRepH.prg 98: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CCC Warning W8075 FastRepH.prg 98: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CCC Warning W8075 FastRepH.prg 98: Suspicious pointer conversion in function HB_FUN_CALL_PROC_CCC Warning W8075 FastRepH.prg 124: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_C_I Warning W8075 FastRepH.prg 136: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_IC_I Warning W8075 FastRepH.prg 142: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CC_I Warning W8075 FastRepH.prg 142: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CC_I Warning W8075 FastRepH.prg 148: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CCC_I Warning W8075 FastRepH.prg 148: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CCC_I Warning W8075 FastRepH.prg 148: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CCC_I Warning W8075 FastRepH.prg 154: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CCI_I Warning W8075 FastRepH.prg 154: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CCI_I Warning W8075 FastRepH.prg 166: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CIII_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8075 FastRepH.prg 173: Suspicious pointer conversion in function HB_FUN_CALL_FUNC_CICCCCCCCC_I Warning W8001 FastRepH.prg 186: Superfluous & with function in function GetPAOptions Warning W8001 FastRepH.prg 196: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 197: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 198: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 199: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 201: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 203: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 204: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 205: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 206: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 207: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 208: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 209: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 210: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 211: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 212: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 213: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 214: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 215: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 216: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 217: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 218: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 219: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 220: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 221: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 222: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 223: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 224: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 225: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 226: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 227: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 229: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 230: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 231: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 233: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 235: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 236: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 237: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 238: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 239: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 240: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 241: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 242: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 244: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 245: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 246: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 247: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 248: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 249: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 250: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 258: Superfluous & with function in function HB_FUN_INITENGINE Warning W8001 FastRepH.prg 259: Superfluous & with function in function HB_FUN_INITENGINE FastRepH.prg от 19.11.2009. Варнинги появились после освежения Harbour (nightly-sources). Причем опция -w-8075 имеется. Как к этому относиться?

Andrey: Взял форму из другого проекта, а там куча Public переменных в форме объявленных в другой программе, типа: oFrPrn:AddVariable( "My Lovely Vars", "MyNumba" , MyNumba ) Вопрс: Как удалить эти старые переменные на вкладке Variables ?

Andrey: Бродил по инету, нашел сайт статей по Фасту на Дельфи, может кому и пригодиться: http://www.reportingfor.info/ru/news.php?cat.4 Для переделки : Унифицированные формы (шаблоны) стандарта FastReport 4.7 http://www.reportingfor.info/ru/download.php Форумы: http://www.fastreport.ru/ru/forum/lofiversion/index.php/ http://www.fast-report.com/ru/faq/faq.php?ID=393#3798

PSP: Andrey пишет: Для переделки : Унифицированные формы (шаблоны) стандарта FastReport 4.7 Спасибо, очень кстати.

Andrey: Чем можно просмотреть файл *.fd3 ? По виду html... Его можно создать меню "Отчет", далее меню "Переменные", далее "Сохранить".... Создается файл с расширением fd3. И еще вопрос, можно ли как нибудь получить "список полей" используемых в форме ?

Andrey: Блин, АУ..... уже новость пропустили 28.12.2009 | Выпущен FastReport VCL 4.9 ....

Sergey Spirin: Увы, Андрей, извините, я что-то разболелся в последнее время. Но насчет 4.9, я давно уже перекомпилил с 4.9. Следите за версиями по этой ссылке: http://www.paritetsoft.ru/frh_ver.html Насчет переменных не очень понял, вопрос как программно их удалять?

Andrey: Sergey Spirin пишет: Насчет переменных не очень понял, вопрос как программно их удалять? Нет, уже не надо, разобрался... Я сам грипповал, знаю что такое. Сочувствую. Давайте выздоравливайте....

Andrey: Не знаю как сделать форму ! Имеем форму лист А4. Лист поделен на 2 части. Чтобы наглядней представить: пример печати абонентских книжек. На 1-ой части обложка книжки, на 2-ой части сама квитанция. Квитанций может быть 1,2,3 ... до 12 штук (то есть записей в БД) Имею БД каждый раз, произвольного значения. Подскажите как реализовать печатную форму.

Sergey Spirin: Andrey пишет: Не знаю как сделать форму ! А в чем проблема то? Обложка одна, а квитанций много? Ну так сделайте ReportTittle на пол-листа, это будет обложка, и MasterData на пол-листа, это квитанции. Или что?

Andrey: Sergey Spirin пишет: Ну так сделайте ReportTittle на пол-листа, это будет обложка, и MasterData на пол-листа, это квитанции. На ReportTittle должен присутсвовать, ФИО абонента, АДРЕС абонента, Л/Счет абонента и там еще по мелочи.... А на MasterData тоже самое + сумма оплаты и реквизиты оплаты. Вопрос еще в том как базу строить ? 1) Записывать записи для MasterData (допустим поле KType := 2) ? И добавлять туда записи для ReportTittle (допустим поле KType := 1) ? 2) Или нужно делать 2 базы: одну для Обложки, а вторую для Квитанций ? Пример: нужно распечатать 2 квитанции, за январь и февраль. Имеем: Обложка+январь - это 1-ый лист, февраль+Обложка второго абонента - это 2-ой лист и т.д. Кол-во печати по месяцам задает сам пользователь. от 1 месяца до 12-го.... Вот в этом то и затруднение...

PSP: Andrey пишет: 1) Записывать записи для MasterData (допустим поле KType := 2) ? И добавлять туда записи для ReportTittle (допустим поле KType := 1) ? 2) Или нужно делать 2 базы: одну для Обложки, а вторую для Квитанций ? Я б две сделал.

Sergey Spirin: Andrey пишет: Вопрос еще в том как базу строить ? 1) Записывать записи для MasterData (допустим поле KType := 2) ? И добавлять туда записи для ReportTittle (допустим поле KType := 1) ? 2) Или нужно делать 2 базы: одну для Обложки, а вторую для Квитанций ? Что-то, прям, про какую-то азбуку речь В смысле реляционность Конечно, 2 таблицы. Если обложек много в отчете, то какой нафик ReportTittle. Очевидно, что: обложка - MasterData квитанция - DetailData Не забудьте установить отношение MasterDetail.... Что-то мне подсказывает, что здесь может быть непонимание... Постарайтесь разобраться с Detail, SubDetail, 4,5,6 - уровни.... Для чего это нужно?

Andrey: Пока отложил MasterDetail..... Потребовалось срочно другое... Если в FastReport в DialogPage пользователь меняет данные, как их получить эти измененные данные обратно в Харбор ? Например мемо переменную cPubMemo ? Я во вкладке "Код" пишу: procedure Page1OnBeforePrint(Sender: TfrxComponent); begin MemoRem.Text := GetHbVar('cPubMemo'); end; А как возвращать ?

Sergey Spirin: Andrey пишет: Я во вкладке "Код" пишу: procedure Page1OnBeforePrint(Sender: TfrxComponent); begin MemoRem.Text := GetHbVar('cPubMemo'); end; А как возвращать ? SetHbVar(...)

Andrey: Sergey Spirin пишет: SetHbVar(...) А имя процедуры какая ?

Sergey Spirin: Andrey пишет: А имя процедуры какая ? Событие что ли какое? Это уж выбирайте в какой момент вам что нужно сохранять/возвращать... Если вы про диалоговою форму, то скорее всего это буде OnCloseQuery.

Andrey: Sergey Spirin пишет: Если вы про диалоговою форму, то скорее всего это буде OnCloseQuery. Да, да, диалоговая форма, чтоб когда пользователь изменил что-то, то эти переменные ушли в хХарбор... Т.е. там кнопка будет "Ок" и после нажатия на этой кнопке, сохранить переменные... А подробней можно ?

Sergey Spirin: Andrey пишет: А подробней можно ? Как положить кнопку на форму? А у кнопки есть конечно событие OnClick. Как двойным щелчком сделать болванку знаете?

Andrey: Sergey Spirin пишет: Как положить кнопку на форму? Да про это не нужно... Болванку сделали, а дальше ? Мне нужно имя процедуры, в которой можно вернуть все переменные.... procedure DialogPage ????

Andrey: А где новую версию скачивать ? Давно это не делал, захожу по ссылке: http://www.fast-report.com/cgi-bin/user/user.pl А там новой версии нет.... Где скачивать теперь ?

Sergey Spirin: Andrey пишет: Да про это не нужно... Болванку сделали, а дальше ? Мне нужно имя процедуры, в которой можно вернуть все переменные.... procedure DialogPage ???? ...Под болванкой я имел в виду не кнопку на форме, конечно Ладно, давайте по порядку. Собственно, то что вам надо называется СОБЫТИЕ (event). Вообще говоря, событие это не процедура в общем смысле, а метод объекта (если еще точнее, то поле процедурного типа). События, как и свойства (property) имеют "взаимодействие" с дизайн-тайм. Поэтому не нужно гадать какие события есть у какого объекта. Достаточно выделить этот объект и посмотреть вкладку Events в инспекторе объектов. Там перечислены все события этого объекта. Для того, чтобы создать ОБРАБОТЧИК события, надо встать в инспекторе объектов на пустую ячейку справа от названия события и сделать дабл-клик. Создастся "болванка" (прототип) обработчика, между begin-end можно писать код. Потренируйтесь на кнопке. Выделите ее и создайте обработчик события OnClick. Или для диалога OnCloseQuery.

Sergey Spirin: Andrey пишет: А где новую версию скачивать ? Давно это не делал Склероз, дело такое, будьте осторожней Естественно, скачивать по ссылке, полученной от меня при регистрации.

Andrey: Sergey Spirin пишет: Склероз, дело такое, будьте осторожней Это точно... Ссылку вообще спрятал так что найти невозможно... Нашел... на шифрованном диске... Голова уже точно не работает

Andrey: Как вам программа просмотра файлов *.fr3 на MiniGui ? Я вам на почту высылал...

Sergey Spirin: Andrey пишет: Как вам программа просмотра файлов *.fr3 на MiniGui ? Тихий ужас. А если учесть, что я никогда не оставляю стандартного разрешения в Виндах и меняю размеры шрифтов, то смотрится просто как некий бред... Это если отвлечься от "богатого" функционала.... Основа этого функционала, насколько я понимаю, в кнопке "Об авторах" И даже на таком "широком" поле умудриться сделать баги

Andrey: Sergey Spirin пишет: Тихий ужас Подскажите как сделать лучше...Andrey пишет: я никогда не оставляю стандартного разрешения в Виндах и меняю размеры шрифтов А какой размер шрифта и разрешения ? Это на Дельфи легко менять, а здесь и не знаешь как подступиться.... Это проба моя перехода с терминала на GUI....

Sergey Spirin: Andrey пишет: Подскажите как сделать лучше.. Я не очень понимаю смысл этого. Программа открывает fr3-файл в дизайнере. И что? Andrey пишет: А какой размер шрифта и разрешения ? Да в зависимости от места, обычно ставлю крупный шрифт в системе - 120 dpi, либо офрмление достраиваю, обычно увеличиваю шрифт стандартных элементов. Не люблю когда мелко.... Вм дилетанских программах при этом все "разъезжается"... Andrey пишет: Это на Дельфи легко менять, а здесь и не знаешь как подступиться.... Это проба моя перехода с терминала на GUI.... Ну, у вас же есть некая претензия на универсальность - "FR Viewer" ... Типа должно ставиться везде и работать... Да, в Дельфи есть все необходимое для балансировки интерфейса на любых вариантах (Scaling, Aligning, Anchors и.т.д.)... Боюсь, что в МiniGUI ничего этого нет. Отсюда вывод - МiniGUI (да, собственно, не только) не для универсальных приложений....Andrey пишет: Это проба моя перехода с терминала на GUI.... Ну чтож, пробуйте, учитесь Ну и, FR все-таки поизучайте, если уж его при этом используете.

Andrey: Проблема с версией 4.9 ! Да и с другими тоже.... Не идет печать - ВЫЛЕТАЕТ !!! Поставил на комп новую версию библиотеки. Система Win XP SP3. Вирусов нет, ставил и проверял AVZ + Касперский. С печатью просто беда. Как выбираешь принтер Xerox, так вылет. В файл и Microsoft XPS Document Writer нормально печатает. Переставлял драйвер Xerox (удалил, перегрузил), та же самая картина - ВЫЛЕТ !!! Что ДЕЛАТЬ ?

Sergey Spirin: Andrey пишет: Как выбираешь принтер Xerox, так вылет. В таких случаях обычно помогает установка самой последней версии драйвера, скаченного с сайта производителя.

Andrey: Sergey Spirin пишет: В таких случаях обычно помогает установка самой последней версии драйвера, скаченного с сайта производителя. Не помогает.... И вычищал систему от драйверов принтера, и ставил свежий драйвер принтера... Только с бубном не танцевал вокруг этого компа.... Предыдущая версия по моему 4.5 работала без проблем....

Sergey Spirin: Andrey пишет: Не помогает.... И вычищал систему от драйверов принтера, и ставил свежий драйвер принтера... Ну что еще посоветовать? "Поиграйтесь" с возможными вариантами настроек в драйвере... Как последнее, можете попробовать написать в Xerox и в Fast.

Andrey: Sergey Spirin пишет: Не забудьте установить отношение MasterDetail.... Что-то мне подсказывает, что здесь может быть непонимание... Это просто засада ! Читаем Хелп, вроде просто... Ни фига не понятно ! Сделал отдельный пример - скачивать здесь: http://files.mail.ru/3D9GL9 В отчете, на банде MasterData поставлена птичка StartNewPage [v] True, чтобы Титульный лист всегда печатался с новой страницы. Не могу сделать саму мастер-детальную связь ! Суть в том что у меня есть два набора данных (dbf) : KvitkiMaster и Kvitki. Как по документации я понял что нужно: перед вызовом отчета, внутри моей задачи нужно сделать так, чтобы при перемещении с записи на запись в таблице KvitkiMaster, на данные в таблице Kvitki налагалось ограничение или фильтр с условием KvitkiMaster.NNN = Kvitki.NNN т.е. стоишь в KvitkiMaster на записи с номером NNN 1321, а в наборе данных Kvitki отображаются только 4 строчки с номером NNN=1321. В файле Frx-Dbase.prg сделал: USE KvitkiMaster ALIAS EXP_TITLE NEW // Открыть базу Master aAlias := {} ; aSelect := {} AADD( aAlias , ALIAS() ) ; AADD( aSelect , SELECT() ) // Добавить в массив для иниц. в FastReport USE Kvitki ALIAS EXP_KVITK NEW // Открыть базу Detall AADD( aAlias , ALIAS() ) ; AADD( aSelect , SELECT() ) // Добавить в массив для иниц. в FastReport SELECT EXP_TITLE SET RELATION TO NNN INTO EXP_KVITK Где здесь засада ?

Andrey: Нашел решение ! Спасибо TimTim за подсказку ! Нужно сделать индекс по БД: SELECT EXP_KVITK INDEX ON Field->NNN TO Kvitki И сделать Мастер-Деталь связь в FastReport после настройки рабочих областей (M->FrPrn:SetWorkArea(.....) ) M->FrPrn:SetMasterDetail( "EXP_TITLE", "EXP_KVITK", { || EXP_TITLE->NNN } ) M->FrPrn:SetResyncPair( "EXP_TITLE", "EXP_KVITK" ) Рабочий пример здесь: http://files.mail.ru/KXTFO4 Пользуйтесь и не попадайте на мои ошибки....

Sergey Spirin: Andrey пишет: Нашел решение ! Спасибо TimTim за подсказку ! Нужно сделать индекс по БД: Ну, слава богу. Вообще говоря, если вы используете инструмент, то вы ОБЯЗАНЫ знать ВСЕ методы (процедуры и функции), которые этот инструмент предлагает. Тем более, FastRepH.prg входит в поставку, то есть, весь список у вас перед глазами... Кстати, вызов SetResyncPair() здесь абсолютно не нужен. SetResyncPair() используется тогда, когда FRH НЕ ЗНАЕТ о существование какого-то отношения установленного в Харбур-коде. MasterDetail же устанавливается здесь в самом FRH.

Andrey: Sergey Spirin пишет: вы используете инструмент, то вы ОБЯЗАНЫ знать ВСЕ методы (процедуры и функции), которые этот инструмент предлагает Если есть ПОЛНАЯ документация с примерами.... А Фаст не блещит примерами.... Толковые примеры видел только тут http://www.reportingfor.info/ru/news.php?extend.71 И методика работы FastReport все таки отличается от xBase !

Sergey Spirin: Andrey пишет: Если есть ПОЛНАЯ документация с примерами.... Так, стоп, дорогой. Во-первых, 1. FRH полностью ДОКУМЕНТИРОВАН! Во-вторых: 2. Даже в этом топике я предлагал скачать русскую версию (старую для Xbase) и изучить. Конечно, там все о MasterDetail есть. --------- P.S. I hope you understand something...

Andrey: Sergey Spirin пишет: там все о MasterDetail есть. Ну блин, как всегда, самое интересное пропустил... Пошел учить матчасть....

PSP: Сергею Спирину: Здравствуйте! По-моему, в FRH есть баг. Проблема с элементом TfrxHarbourWorkArea файла отчета (.fr3). В нем есть атрибут WorkArea. Так вот, FRH пытается брать данные из базы с номером WorkArea, не взирая на атрибут Alias. Т.е., если, к примеру, добавить в проект один (или несколько) файлов .dbf, то номера открытых РО смещаются, что приводит к неправильной выборке или к run-time error. Такой же "эффект" происходит, если данные для отчета берутся из временного файла .dbf. Номер РО, в которой он будет открыт, предсказать невозможно. Это довольно срочно... Спасибо. ЗЫ: SetWorkArea() проблему не решает.

Sergey Spirin: Привет, PSP пишет: По-моему, в FRH есть баг. Ну, баг-не-баг, но нюанс есть. Действительно, если установлены оба свойства - WorkArea и Alias, то приоритет отдается WorkArea. Поэтому, если вы хотите работать только по алиасу, то всегда обнуляйте WorkArea, ставьте 0. Нюанс же в том, что при установке одного из этих свойств в инспекторе объектов, устанавлюваются оба по текщему положению. При отдавании приоритета алиасу надо не забыть обнулить WorkArea.

Dima: Запарило ручками делать отчеты , хочется пощупать FastReport. К нему есть дока на русском языке или что то типа быстрого старта ?

petr707: click here или старая документация от Fastrep3(4) click here

Andrey: Давай мыло, вышлю примеры и доку.

Dima: Andrey пишет: Давай мыло Скинул в лс

kia: Dima пишет: Запарило ручками делать отчеты , хочется пощупать FastReport. Реинкарнация FastReport здесь FastReport for Xailer and (x)Harbour Цена 300 евро. Есть совместимость с версией от Сергея Спирина. Демо версия имеет те же ограничения (5 листов и ватермарк)



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