Clarion & External Reports System

Обсуждение извечных проблем кларионовских (и не только) отчетов

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение Developer »

Привет всем!

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

1)Что есть на выбор кроме известных FastReport и Crystal Report для работы с Clarion?
2)Как подключить взаимодействие между приложением Clarion (runtime) и внешней системой отчётов на целевом компьютере пользователя?
3)Какая субъективно система отчётов имеет большие преимущества?
4)Необходимы реальные примеры взаимодействия Clarion с внешними системами отчётов
5)Есть ли доступные готовые исходники и шаблоны?
С Уважением, Developer
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение Developer »

Игорь Столяров предоставил ссылку на версию FastReport Studio ActiveX

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

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

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

Пожалуйста, помогите реальными решениями и примерами.
С Уважением, Developer
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion & External Reports System

Сообщение Игорь Столяров »

Developer писал(а): Что есть на выбор кроме известных FastReport и Crystal Report для работы с Clarion
List&Label (на FTP быть загружен может), TX Text Control (на FTP быть загружен может), FominReport (на FTP быть загружен не может)
За теми кто отстал - не возвращаться. (С) Кодекс
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение 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 :?:
С Уважением, Developer
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Clarion & External Reports System

Сообщение morkovin »

Что и где модифицировать для работы с ActiveX DLL
http://forum.clarionlife.net/phpbb/viewtopic.php?t=2949
WBR, morkovin
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение Developer »

Morkovin спасибо за отклик, но у FastReport нет OCX а только DLL

Приведённый мной пример отображает все возможные внедряемые объекты OLE - FastReport в списке OLE нет :(
С Уважением, Developer
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Clarion & External Reports System

Сообщение Yufil »

Немного отошёл от этой тематики в последнее время..
Недавно успешно собрал шаблоны-классы для List & Label 21 для Clarion 10 (http://www.combit.net)
Выглядит очень симпатично.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion & External Reports System

Сообщение Игорь Столяров »

Developer писал(а): но у FastReport нет OCX а только DLL
Это тогда Вам вот сюда надо: http://www.ingasoftplus.com/ProductDeta ... oductID=24
В принципе, можно интерфейс и ручками расписать, но муторно это ... :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Clarion & External Reports System

Сообщение morkovin »

Недавно успешно собрал шаблоны-классы для List & Label 21...Выглядит очень симпатично
А где же шаблоны? :roll: В них есть поддержка Master-Detail?
WBR, morkovin
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Clarion & External Reports System

Сообщение gopstop2007 »

Вы бы указали какие выходные документы хотите получать, по мне для стандартных задач достаточно FRB http://www.fomintools.com/frb.htm - просто и быстро.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение Developer »

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


Но самому надо вникать - однако для меня пока сложновато :(
С Уважением, Developer
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение Developer »

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

Да и опыт необходимо приобрести по работе с COM (OLE, ActiveX) - поэтому интересуюсь этой темой :wink:
С Уважением, Developer
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Clarion & External Reports System

Сообщение Yufil »

А где же шаблоны? :roll: В них есть поддержка Master-Detail?
В List & Label поддержка групп выполнена в самом отчёте. Дело программы-передать данные отчёту, а как выводить (заголовки, поля данных, строки детали, итоговые записи и многое другое) определяется внутри отчёта. Там каждый элемент (и каждое свойство элемента) может определяться выражением, а видимость - логическим условием. Немного нестандартно, по сравнению с Кларионом, но быстро привыкаешь.
А потом начинаешь получать кайф, подсаживаешься на List&Label - и всё, конец тебе...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7330
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Clarion & External Reports System

Сообщение Игорь Столяров »

Developer писал(а): Так существующие шаблоны на платной основе - может есть старые бесплатные предыдущие версии?
Да, вроде был FRB бесплатный какой-то релиз старой версии ...
Точнее сказать не могу, посмотри на сайте и вокруг него. Или поспрашивай у фанатов этого движения.
За теми кто отстал - не возвращаться. (С) Кодекс
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Clarion & External Reports System

Сообщение Developer »

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

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

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