Страница 1 из 3

Clarion & External Reports System

Добавлено: 21 Январь 2016, 21:11
Developer
Привет всем!

Интересует решение вопросов взаимодействия с внешними системами отчётов:

1)Что есть на выбор кроме известных FastReport и Crystal Report для работы с Clarion?
2)Как подключить взаимодействие между приложением Clarion (runtime) и внешней системой отчётов на целевом компьютере пользователя?
3)Какая субъективно система отчётов имеет большие преимущества?
4)Необходимы реальные примеры взаимодействия Clarion с внешними системами отчётов
5)Есть ли доступные готовые исходники и шаблоны?

Clarion & External Reports System

Добавлено: 21 Январь 2016, 21:19
Developer
Игорь Столяров предоставил ссылку на версию FastReport Studio ActiveX

скачать здесь: http://fast-report.com/pbc_download/fr_studio_trial.msi

Но вот как подключить COM объект FastReport Studio ActiveX для Clarion и как с ним работать пока ничего не получилось.

Может кто реально работал с COM объектом FastReport Studio ActiveX с Clarion?

Пожалуйста, помогите реальными решениями и примерами.

Clarion & External Reports System

Добавлено: 21 Январь 2016, 21:36
Игорь Столяров
Developer писал(а): Что есть на выбор кроме известных FastReport и Crystal Report для работы с Clarion
List&Label (на FTP быть загружен может), TX Text Control (на FTP быть загружен может), FominReport (на FTP быть загружен не может)

Clarion & External Reports System

Добавлено: 22 Январь 2016, 1:21
Developer
Есть хороший пример по работе с OLE OCX

Код: Выделить всё


PROGRAM
    INCLUDE('KEYCODES.CLW')
    MAP
        INCLUDE('OCX.CLW')                    !from LibSrc
        
SelectOleServer FUNCTION(OleQ PickQ),STRING
    END
    INCLUDE('ERRORS.CLW')             !Include errorcode constants
SaveLinks   FILE,DRIVER('TopSpeed'),PRE(SAV),CREATE
Object        BLOB
Record        RECORD
LinkWidth       BYTE                  ! 32 = 32-bit
LinkType        STRING(1)             !F = File, B = BLOB
LinkFile        STRING(64)            !OLE Compound Storage file name and object
              END
           END
BitWidth   BYTE(32)                   !32-bit OLE objects

i          LONG                       !Loop counters
j          LONG
ResultQ    QUEUE                      !Queue to hold return from OLEDIRECTORY
Name         CSTRING(64)
CLSID        CSTRING(64)
ProgID       CSTRING(64)
           END
MainWin WINDOW('OLE Demo'),AT(,,313,158),STATUS(-1,-1),TIMER(1),SYSTEM,GRAY,MAX,RESIZE
       MENUBAR
         MENU('&File')
           ITEM('e&xit'),USE(?exit)
         END
         MENU('&Objects')
           ITEM('Create Object'),USE(?CreateObject)
           ITEM('Paste Object'),USE(?PasteObject),DISABLE
           ITEM('PasteLink Object'),USE(?PasteLinkObject),DISABLE
           ITEM('Save Object to BLOB'),USE(?SaveObjectBlob),DISABLE
           ITEM('Save Object to OLE File'),USE(?SaveObjectFile),DISABLE
           ITEM('Retrieve Saved Object'),USE(?GetObject),DISABLE
         END
         MENU('&Activate')
           ITEM('&Any OLE Object'),USE(?ActiveOLE),DISABLE
         END
       END
       OLE,AT(0,1,313,157),USE(?AnyOLEObject),FULL,COMPATIBILITY(01H),AUTOSIZE
         MENUBAR
           MENU('&Clarion App')
             ITEM('&Deactivate Object'),USE(?DeactOLE)
           END
         END
       END
     END
  CODE
  OPEN(SaveLinks)
  IF ERRORCODE()                            !Check for error on Open
    IF ERRORCODE() = NoFileErr              ! if the file doesn't exist
      CREATE(SaveLinks)                     ! then create it
      IF ERRORCODE() THEN HALT(,ERROR()).
        OPEN(SaveLinks)                     ! then open it for use
        IF ERRORCODE() THEN HALT(,ERROR()).
    ELSE
      HALT(,ERROR())
    END
  END
  OPEN(MainWin)
  MainWin{PROP:StatusText,1} = 'Loading saved object'
  DISPLAY
  IF RECORDS(SaveLinks)                       !Check for existing saved record
    SET(SaveLinks)                            ! and get it
    NEXT(SaveLinks)
    IF BitWidth = SAV:LinkWidth               !Check object's bit width
      POST(EVENT:Accepted,?GetObject)         ! and display it if same as 
      DO MenuEnable                           ! the current compile
    ELSE
      CLEAR(SAV:Record)                       !Otherwise, lose the object
      SAV:Object{PROP:Size} = 0
      PUT(SaveLinks)
    END
  ELSE
    ADD(SaveLinks)                            ! or add blank record
  END
  IF ERRORCODE() THEN HALT(,ERROR()).
  MainWin{PROP:StatusText,1} = ''
  SETCURSOR
  ACCEPT
    CASE EVENT()
    OF EVENT:CloseWindow
      ?AnyOLEObject{PROP:Deactivate}
    OF EVENT:Timer
      IF CLIPBOARD()
        IF ?AnyOLEObject{PROP:CanPaste}         !Can Paste object from the clipboard?
          IF ?PasteObject{PROP:Disable} THEN ENABLE(?PasteObject).
        ELSIF NOT ?PasteObject{PROP:Disable}
          DISABLE(?PasteObject)
        END
        IF ?AnyOLEObject{PROP:CanPasteLink}     !Can PasteLink object from clipboard?
          IF ?PasteLinkObject{PROP:Disable} THEN ENABLE(?PasteLinkObject).
        ELSIF NOT ?PasteLinkObject{PROP:Disable}
          DISABLE(?PasteLinkObject)
        END
      END
    OF EVENT:Accepted
      CASE FIELD()
      OF ?Exit
        POST(EVENT:CloseWindow)
      OF ?CreateObject
        FREE(ResultQ)
        OLEDIRECTORY(ResultQ,0)                                !Get a list of installed OLE Servers
        ?AnyOLEObject{PROP:Create} = SelectOleServer(ResultQ)  !Let the user pick one
        ?AnyOLEObject{PROP:DoVerb} = 0                         !Activate OLE Server in its default mode
        DO MenuEnable
      OF ?PasteObject
        ?AnyOLEObject{PROP:Paste}                    !Paste the object
        SETCLIPBOARD('Paste Completed')              !Assign non-object text to clipboard
        DO MenuEnable
      OF ?PasteLinkObject                                
        ?AnyOLEObject{PROP:PasteLink}                 !PasteLink the object
        SETCLIPBOARD('PasteLink Completed')           !Assign non-object text to clipboard
        DO MenuEnable
      OF ?SaveObjectBlob                              !Save object to BLOB
        SAV:Object{PROP:Size} = 0                     !Clear any current object
        SAV:Object{PROP:Handle} = ?AnyOLEObject{PROP:Blob}
        SAV:LinkType = 'B'
        SAV:LinkWidth = BitWidth
        PUT(SaveLinks)
        IF ERRORCODE() THEN STOP(ERROR()).
      OF ?SaveObjectFile                              !Save to OLE Compound Storage file
        ?AnyOLEObject{PROP:SaveAs} = 'TEST1.OLE\!Object'
        SAV:LinkFile = 'TEST1.OLE\!Object'
        SAV:LinkType = 'F'
        SAV:LinkWidth = BitWidth
        PUT(SaveLinks)
        IF ERRORCODE() THEN STOP(ERROR()).
      OF ?GetObject
        IF SAV:LinkType = 'F'                         !Saved to OLE Compound Storage file?
          ?AnyOLEObject{PROP:Open} = SAV:LinkFile
        ELSIF SAV:LinkType = 'B'                      !Saved to BLOB?
          ?AnyOLEObject{PROP:Blob} = SAV:Object{PROP:Handle}
        END
        DISPLAY
      OF ?ActiveOLE
        ?AnyOLEObject{PROP:DoVerb} = 0                !Activate OLE Server in its default mode
      OF ?DeactOLE
        ?AnyOLEObject{PROP:Deactivate}                !Return to the Clarion application
      END
    END
  END

MenuEnable              ROUTINE                        !Enable menu items
  ENABLE(?ActiveOLE)
  ENABLE(?SaveObjectBlob,?GetObject)

SelectOleServer    FUNCTION(OleQ PickQ)
window                  WINDOW('Choose OLE Server'),AT(,,493,222),CENTER,GRAY,SYSTEM
                            LIST,AT(11,8,480,159),USE(?List),HVSCROLL,FROM(PickQ),FORMAT('146L~Name~' & |
                                '@s64@135L~CLSID~@s64@20L~ProgID~@s64@'),ALRT(MouseLeft2)
                            BUTTON('Select'),AT(10,180),USE(?Select)
                        END
  CODE
  OPEN(window)
  SELECT(?List,1)
  ACCEPT
    IF EVENT() = EVENT:AlertKey THEN POST(EVENT:Accepted,?Select).
    CASE ACCEPTED()
    OF ?Select
      GET(PickQ,CHOICE(?List))
      IF ERRORCODE() THEN STOP(ERROR()).
      POST(EVENT:CloseWindow)
    END
  END
  RETURN(PickQ.ProgID)


Что и где модифицировать для работы с ActiveX DLL :?:

Clarion & External Reports System

Добавлено: 22 Январь 2016, 3:56
morkovin
Что и где модифицировать для работы с ActiveX DLL
http://forum.clarionlife.net/phpbb/viewtopic.php?t=2949

Clarion & External Reports System

Добавлено: 22 Январь 2016, 11:48
Developer
Morkovin спасибо за отклик, но у FastReport нет OCX а только DLL

Приведённый мной пример отображает все возможные внедряемые объекты OLE - FastReport в списке OLE нет :(

Clarion & External Reports System

Добавлено: 22 Январь 2016, 11:50
Yufil
Немного отошёл от этой тематики в последнее время..
Недавно успешно собрал шаблоны-классы для List & Label 21 для Clarion 10 (http://www.combit.net)
Выглядит очень симпатично.

Clarion & External Reports System

Добавлено: 22 Январь 2016, 11:53
Игорь Столяров
Developer писал(а): но у FastReport нет OCX а только DLL
Это тогда Вам вот сюда надо: http://www.ingasoftplus.com/ProductDeta ... oductID=24
В принципе, можно интерфейс и ручками расписать, но муторно это ... :(

Clarion & External Reports System

Добавлено: 22 Январь 2016, 12:03
morkovin
Недавно успешно собрал шаблоны-классы для List & Label 21...Выглядит очень симпатично
А где же шаблоны? :roll: В них есть поддержка Master-Detail?

Clarion & External Reports System

Добавлено: 22 Январь 2016, 12:18
gopstop2007
Вы бы указали какие выходные документы хотите получать, по мне для стандартных задач достаточно FRB http://www.fomintools.com/frb.htm - просто и быстро.

Clarion & External Reports System

Добавлено: 22 Январь 2016, 13:18
Developer
Это тогда Вам вот сюда надо: http://www.ingasoftplus.com/ProductDeta ... oductID=24
В принципе, можно интерфейс и ручками расписать, но муторно это ...
Да, Михаил (Дед Пахом) в этом деле хороший специалист :D Надеюсь на его помощь :D


Но самому надо вникать - однако для меня пока сложновато :(

Clarion & External Reports System

Добавлено: 22 Январь 2016, 13:27
Developer
gopstop2007 Спасибо за отклик!
Вы бы указали какие выходные документы хотите получать, по мне для стандартных задач достаточно FRB http://www.fomintools.com/frb.htm - просто и быстро.
Так существующие шаблоны на платной основе - может есть старые бесплатные предыдущие версии?

Да и опыт необходимо приобрести по работе с COM (OLE, ActiveX) - поэтому интересуюсь этой темой :wink:

Clarion & External Reports System

Добавлено: 22 Январь 2016, 13:41
Yufil
А где же шаблоны? :roll: В них есть поддержка Master-Detail?
В List & Label поддержка групп выполнена в самом отчёте. Дело программы-передать данные отчёту, а как выводить (заголовки, поля данных, строки детали, итоговые записи и многое другое) определяется внутри отчёта. Там каждый элемент (и каждое свойство элемента) может определяться выражением, а видимость - логическим условием. Немного нестандартно, по сравнению с Кларионом, но быстро привыкаешь.
А потом начинаешь получать кайф, подсаживаешься на List&Label - и всё, конец тебе...

Clarion & External Reports System

Добавлено: 22 Январь 2016, 13:41
Игорь Столяров
Developer писал(а): Так существующие шаблоны на платной основе - может есть старые бесплатные предыдущие версии?
Да, вроде был FRB бесплатный какой-то релиз старой версии ...
Точнее сказать не могу, посмотри на сайте и вокруг него. Или поспрашивай у фанатов этого движения.

Clarion & External Reports System

Добавлено: 22 Январь 2016, 13:47
Developer
В List & Label поддержка групп выполнена в самом отчёте. Дело программы-передать данные отчёту, а как выводить (заголовки, поля данных, строки детали, итоговые записи и многое другое) определяется внутри отчёта. Там каждый элемент (и каждое свойство элемента) может определяться выражением, а видимость - логическим условием. Немного нестандартно, по сравнению с Кларионом, но быстро привыкаешь.
А потом начинаешь получать кайф, подсаживаешься на List&Label - и всё, конец тебе...
Юрий - спасибо за отклик!

Может есть какие конкретные примеры и шаблоны для List & Label ?

С чего начинать для их использования - опыта с External Reports пока совсем нет :(