Форум » [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: 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, чтобы не добавлять кодом.



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