menu
Fórum Adianti
menu Menu
PHP Jasper Estou utilizando o PHPJasper junto com o Adianti. Configurei e consigo fazer a geração do relatório, porém quando tento exibir uma mensagem e abrir uma janela com o meu PDF recebo a mensagem de erro: Uncaught Error: Class "TMessage" not found in Parece que ao processar o relatório as referências às classes do Adianti são perdidas. Alguém passou pelo mesmo problema?...
JP
PHP Jasper  
Estou utilizando o PHPJasper junto com o Adianti. Configurei e consigo fazer a geração do relatório, porém quando tento exibir uma mensagem e abrir uma janela com o meu PDF recebo a mensagem de erro:

Uncaught Error: Class "TMessage" not found in


Parece que ao processar o relatório as referências às classes do Adianti são perdidas.
Alguém passou pelo mesmo problema?


Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (3)


DA

Olá Jefferson

Você está usando a versão que utiliza o Java ou a versão só com o PHP?

Eu utilizo a versão só com PHP, a rotina de execução pelo Adianti, faço dessa forma:

  1. <?php
  2. class RelatorioReceber extends TPage
  3. {
  4.     private $form;
  5.   //  use Adianti\base\AdiantiStandardListTrait;
  6.     use Adianti\Base\AdiantiStandardListTrait// Standard form methods
  7.     
  8.     public function __construct()
  9.     {
  10.         parent::__construct();
  11.         
  12.         $this->setDatabase('advday');              // defines the database
  13.         $this->setActiveRecord('ViewExtrato');     // defines the active record
  14.         
  15.      
  16.         $this->form = new BootstrapFormBuilder('form_RelatorioReceber');
  17.         $this->form->setFormTitle('Relatório de Contas a Receber');
  18.         $this->form->setProperty('style''margin:0;border:0');
  19.         $this->form->setFieldSizes('100%');
  20.                
  21.         $inicio   = new TDate('inicio');
  22.         $final    = new TDate('final');
  23.         $tipodata = new TCombo('tipodata');
  24.         $situacao  = new TCombo('situacao');
  25.         $filtercli = new TCriteria;
  26.         $filtercli->add(new TFilter('tipo_cadastro''=''0'));
  27.        
  28.         $cliente_id = new TDBCombo('cliente_id','advday','Pessoas','id','nome','nome',$filtercli);
  29.         $cliente_id->setSize('55%');     
  30.        
  31.         $inicio->setMask('dd/mm/yyyy');
  32.         $inicio->setDatabaseMask('yyyy-mm-dd');
  33.         $inicio->setSize('100%');
  34.       
  35.         $final->setMask('dd/mm/yyyy');
  36.         $final->setDatabaseMask('yyyy-mm-dd');
  37.         $final->setSize('100%');
  38.         $tipodata->addItems(['0'=>'Emissão','1'=>'Vencimento','2'=>'Pagamento']);
  39.         $tipodata->setValue('0');     
  40.         $situacao->addItems(['0'=>'Aberto','1'=>'Liquidado','2'=>'Ambos']);  
  41.         $situacao->setValue('0');
  42.        
  43.  // add fields
  44.         $this->form->addFields( [ new TLabel('Cliente') ], [ $cliente_id ] );
  45.         $this->form->addFields( [ new TLabel('Tipo Data')],[$tipodata]);
  46.         $this->form->addFields( [ new TLabel('Data Inicial ') ], [ $inicio ]);
  47.         $this->form->addFields( [ new TLabel('Data Final') ],  [$final] );
  48.         $this->form->addFields( [ new TLabel('Situacao')],[$situacao]); 
  49.         
  50.      //   keep the form filled during navigation with session data
  51.         $this->form->setDataTSession::getValue(__CLASS__.'_filter_data') );    
  52.         $this->form->addAction('Imprimir', new TAction([$this'onImprime'],['register_state' => 'false''static'=>'1']), 'fa:print red');
  53.       
  54.                          
  55.         $vbox = new TVBox;
  56.         $vbox->style 'width: 100%';
  57.         
  58.         //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  59.         $vbox->add($this->form);
  60.         parent::add($vbox);
  61.     }
  62.     public function onImprime($param NULL)
  63.     {
  64.         $data $this->form->getData();
  65.         $data_filter =  TSession::getValue(__CLASS__ '_data_filter');
  66.         TSession::setValue(__CLASS__ '_data_filter'$data);
  67.         TTransaction::open('advday');    
  68.         $emissao 'Emitido em: '.date('d/m/Y H:i:s');
  69.         $tipodata   $param['tipodata'];
  70.         $cliente   = (int) $param['cliente_id'];
  71.         
  72.         $inicio  TDate::convertToMask($param['inicio'], 'dd/mm/yyyy','yyyy/mm/dd' );
  73.         $final   TDate::convertToMask($param['final'], 'dd/mm/yyyy','yyyy/mm/dd' );
  74.         $situa   $param['situacao'];
  75.        
  76.         $parametros = array(
  77.           "DATE_REPORT"   => $emissao,
  78.           "CONTAFIN"      => $cliente,
  79.           "TIPODATA"      => $tipodata ,
  80.           "INICIO"        => $inicio,
  81.           "FINAL"         => $final,
  82.           "SITUACAO"      => $situa
  83.          );
  84.     
  85.          $report_name =  getcwd().'/app/reports/report_contasreceber.jrxml';  
  86.     
  87.         
  88.          TTransaction::setLogger(new TLoggerHTML('log.html'));
  89.     
  90.          $jasper = new TJasper($report_name$parametros);
  91.      
  92.        $jasper->outpage();
  93.     }
  94.        
  95.     public function show()
  96.     {
  97.         parent::show();  
  98.     }
  99. }
  100. ?>

Onde você está colocando a mensagem?
JP

Damião,
Obrigado pelo retorno!
Estou usando a última versão disponível no repositório do GitHub (não sei dizer exatamente se é com ou sem o Java).
TJasper é uma classe sua? É possível compartilhar a forma como vc está chamando o relatório, apenas para comparar com a minha?
DA

Jefferson,

A classe TJasper é do PHPJasper, da QuilhaSoft,que uso, essa abaixo:

  1. <?php
  2. use JasperPHP\Report;
  3. //use JasperPHP\ado\TTransaction;    Utiliza do Adianti
  4. //use JasperPHP\ado\TLogger;            Utiliza do Adianti
  5. //use JasperPHP\ado\TLoggerHTML;   Utiliza do Adianti
  6. //use \NumberFormatter;
  7. //use PHPexcel as PHPexcel; // experimental
  8. /**
  9.  * classe TJasper
  10.  *
  11.  * @author   Rogerio Muniz de Castro <rogerio@quilhasoft.com.br>
  12.  * @version  2018.10.15
  13.  * @access   restrict
  14.  * 
  15.  * 2015.03.11 -- create
  16.  * 2018.10.15 -- revision and internationalize, add TLogger classes
  17.  * */
  18. class TJasper {
  19.     private $report;
  20.     private $type;
  21.     private $param;
  22.     /**
  23.      * method __construct()
  24.      * 
  25.      * @param $jrxml = a jrxml file name
  26.      * @param $param = a array with params to use into jrxml report
  27.      */
  28.     public function __construct($jrxml, array $param) {
  29.         $GLOBALS['reports'] = array();
  30.         $xmlFile $jrxml;
  31.         $this->type = (array_key_exists('type'$param)) ? $param['type'] : 'pdf';
  32.         //error_reporting(0);
  33.         $this->param $param;
  34.         $this->report = new JasperPHP\Report($xmlFile$param); // $GLOBALS['reports'][$xmlFile];
  35.         switch ($this->type) {
  36.             case 'pdf':
  37.                 JasperPHP\Instructions::prepare($this->report);
  38.                 break;
  39.             case 'xls':
  40.                 JasperPHP\Instructions::setProcessor('\JasperPHP\XlsProcessor');
  41.                 JasperPHP\Instructions::prepare($this->report);
  42.                 break;
  43.             case 'email':
  44.                 JasperPHP\Instructions::prepare($this->report);
  45.              break;    
  46.         }
  47.     }
  48.     public function outpage($type 'pdf') {
  49.         $this->report->generate();
  50.         $this->report->out();
  51.         switch ($this->type) {
  52.             case 'pdf':
  53.                 $pdf JasperPHP\Instructions::get();
  54.                 $repname "report".uniqid().".pdf";
  55.                 $pdf->Output(getcwd()."/app/output/{$repname}""F");
  56.                 
  57.                 $window TWindow::create('',0.8,0.8);
  58.                     
  59.                 $object = new TElement('iframe');
  60.                 $object->src   "app/output/{$repname}";
  61.                 $object->type  'application/pdf';
  62.                 $object->style "width: 100%; height:600px";
  63.                 $window->add($object);
  64.                               
  65.                 $window->show();
  66.                
  67.                 break;
  68.             case 'xls':
  69.                 header('Content-Type: application/vnd.ms-excel');
  70.                 header('Content-Disposition: attachment;filename="01simple.xls"');
  71.                 header('Cache-Control: max-age=0');
  72.                 // If you're serving to IE 9, then the following may be needed
  73.                 header('Cache-Control: max-age=1');
  74.                 // If you're serving to IE over SSL, then the following may be needed
  75.                 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  76.                 header('Last-Modified: ' gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  77.                 header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  78.                 header('Pragma: public'); // HTTP/1.0
  79.                 $objWriter PHPExcel_IOFactory::createWriter(JasperPHP\Instructions::$objOutPut'Excel5');
  80.                 $objWriter->save('php://output');
  81.                 break;
  82.             case 'email':
  83.                     $pdf JasperPHP\Instructions::get();
  84.                     $repname "informe".uniqid().".pdf";
  85.                     $pdf->Output(getcwd()."/app/output/{$repname}""F");
  86.                     TSession::setValue('name_pdf'"/app/output/{$repname}");
  87.                     break;    
  88.         }
  89.     }
  90.     public function setVariable($name$value) {
  91.         $this->report->arrayVariable[$name]['initialValue'] = $value;
  92.     }
  93. }
  94. require('autoloader.php');
  95. require('tcpdf_include.php');
  96. require('tecnickcom/tcpdf/tcpdf.php'); // point to tcpdf class previosly instaled , (probaly in composer instalations)
  97. require('phpoffice/phpexcel/Classes/PHPExcel.php'); // point to tcpdf class previosly instaled , (probaly in composer instalations)
  98. //require('../TCPDF/tcpdf.php'); // point to tcpdf class previosly instaled , (probaly in stand alone instalations)
  99. // on production using composer instalation is not necessaty 
  100. /*$report_name = isset($_GET['report']) ? $_GET['report'] : 'testReport.jrxml';  // sql into testReport.txt report do not select any table.
  101. TTransaction::open('dev');
  102. TTransaction::setLogger(new TLoggerHTML('log.html'));
  103. $jasper = new TJasper($report_name, $_GET);
  104. $jasper->outpage();*/
  105. /*public function post()
  106.  {
  107.      $database = \Config::get('database.connections.mysql');
  108.      $output = public_path() . '/report/' . time() . '_codelution';
  109.      $ext = "pdf";
  110.      \JasperPHP::process(public_path() . '/report/codelution.jasper', $output, array($ext), array(), $database, false, false)->execute();
  111.      header('Content-Description: File Transfer');
  112.      header('Content-Type: application/octet-stream');
  113.      header('Content-Disposition: attachment; filename=' . time() . '_codelution.' . $ext);
  114.      header('Content-Transfer-Encoding: binary');
  115.      header('Expires: 0');
  116.      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  117.      header('Pragma: public');
  118.      header('Content-Length: ' . filesize($output . '.' . $ext));
  119.      flush();
  120.      readfile($output . '.' . $ext);
  121.      unlink($output . '.' . $ext);
  122.      // deletes the temporary file
  123.      return Redirect::to('/reporting');
  124.  }*/
  125. ?>


A chamada do relatório é essa parte:
  1. <?php
  2. $parametros = array(
  3.           "DATE_REPORT"   => $emissao,
  4.           "CONTAFIN"      => $cliente,
  5.           "TIPODATA"      => $tipodata ,
  6.           "INICIO"        => $inicio,
  7.           "FINAL"         => $final,
  8.           "SITUACAO"      => $situa
  9.          );
  10.     
  11.          $report_name =  getcwd().'/app/reports/report_contasreceber.jrxml';  
  12.     
  13.         
  14.          TTransaction::setLogger(new TLoggerHTML('log.html'));
  15.     
  16.          $jasper = new TJasper($report_name$parametros);
  17.      
  18.        $jasper->outpage();
  19. ?>


Se quiser verificar como está funcionando o PHPJasper na aplicação, acessa www.retalhotecnologico.com.br/advday usuario e senha = visitante.