sc_include_library

Bom dia.
senhores? é possível o uso de macros do sc dentro de um arquivo php nesta nova biblioteca?

A questão é a seguinte:

Criei uma biblioteca em php onde extendo a classe TCPDF para usar nos cabeçalhos e rodapés das apps. (usei o exemplo do Haroldo e funciona legal).
Ocorre que em algumas linhas do cabeçalho eu tenho que usar valores que estão em uma tabela.
Na biblioteca uso o sc_lookup, porém não está aparecendo o valor do campo.

Abaixo o código da biblioteca

//===================

<? /*=================INÍCIO===================== **Select para pegar os dados da delegacia **e colocar no cabeçalho e rodapé do relatório **==========================================*/ sc_lookup(depol, "SELECT idDelegacia, Secretaria FROM tbDelegacia "); if ({depol} === false) { echo "Erro de acesso"; } elseif (empty({depol})) { echo "Comando select não retornou dados "; } else { $Secretaria = {depol[0][1]}; } class MYPDF extends TCPDF { //Cabe�alho public function Header() { // Tipo de fonte $this->SetFont('helvetica', 'B', 20); // T�tulo $this->Cell(0, 15, $Secretaria, 0, false, 'C', 0, '', 0, false, 'M', 'M'); } //Rodap� public function Footer() { // Posicionado a 15mm do final da p�gina $this->SetY(-15); // Tipo de fonte $this->SetFont('helvetica', 'I', 8); // N�mero da p�gina $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M'); } } ?>

//**********************************

No Header deveria aparecer o valor da variável $Secretaria, mas o pdf não abre.

Lembrando que chamo esta biblioteca através da macro

sc_include_library(“prj”, “CabecalhoRodape”, “CabRodPadraoDepolWeb.php”, true, true);

em uma aplicação blank.

Agora se eu retiro o sc_lookup e no lugar da variável $Secretaria, coloco um texto qualquer, entre aspas simples, funciona.

Alguém que possa me ajudar?

Obrigado.

Já discutimos isso aqui. Pesquise no fórum as opiniões.

Mas respondendo, não eh possível.

Obrigado Haroldo.

Apesar de pesquisar não encontrei nada.

Alguma alternativa?

vc pode criar uma blank e passa o sql para ela e ela retorna o resultado (pode ser via soap, curl, ajax)…

Ok. Pelo que entendi, posso criar o select dentro da própria blank onde crio o relatório. É isso?

Vou ver agora esta questão do soap.

Vou tentar.

Obrigado.

a blank seria usada apenas para executar o select e retornar o resultado, pis não teria problemas em colocar macros do sc nela.

o SOAP, OU AJAX seria as formas de chamada a blank passando a instrução SQl, executando a blank em background e pegando o resultado.

Obrigado Haroldo.

Deixa eu ver se entendi.

  1. Tenho uma aplicação blank_rel e nela fiz a inclusão da biblioteca através da macro sc_include_library(“prj”, “CabecalhoRodape”, “CabRodPadraoDepolWeb.php”, true, true);

  2. Na biblioteca que foi incluída na blank_rel(CabRodPadraoDepolWeb.php), na célula do cabeçalho, coloco em uma Cell a variável que corresponde ao campo da tabela.

As dúvidas.

  1. O sc_lookup poderá ser na própria blank_rel ou tenho que criar uma blank_pesq, por exemplo?
  2. Caso tenha que criar outra blank apenas para o sc_lookup, como faço a chamada desta blank_pesq, a partir da blank_rel?
  3. Como pego o resultado desta chamada e coloco no cabeçalho?

A Blanck teria somente a macro sc_select.

Ao passar via parametros a instrução sql para a blank o sc_select executa essa instrução e retorna o resultset.

Seria somente para realizar a pesquisa/

Walter,

Vou tentar colocar um exemplo de classe (que deve ser utilizada em bibliotecas(novo) :

  1. Crie um SCRIPT (bibliotecas antigas ** devemos começar a nos acostumar com as novas nomenclaturas)):
<?php 
 
 function  ted_ini ()  
{ 
    sc_lookup(ds, "Select 1");  //preparando a aplicação para ambientar a conexão padrão é pré-criar código para uso do sc_lookup.

    sc_select(ds,  "Select 2", "master");  //preparando a aplicação para ambientar a conexão de nome master e pré-criar código para uso do sc_select.
 
    //sc_exec_sql("Select 3", "master"); 

    // include_once($this->Ini->path_aplicacao . 'ted_core_class.php');   // aqui e usava na vs 7.1
 

     sc_include_library("prj", "'ted_exemplo_class", "'ted_exemplo_class.php", true, true); // Aqui é a classe externa (Biliotecas(Novo))

     $_obj = new Ted_Core($this->Ini->nm_db_master,$this->Db); // aqui estou instanciado a classe e passando as duas conexões (master e padrão) é só um exemplo de como usar duas conexões em bancos de dados diferentes
     return $_obj; 
} 
 ?> 

Walter, agora vamos a classe externa (no seu caso a TCPDF:

Criar uma nova biblioteca: no meu caso o nome é: ted_core_class

<?php
class Ted_Core
{
	public $db_client = ""; 
	public $db_master = "";
	public $db_rs = "";
	public $db_sql_rs = "";
	public $db_error= "";
	public $db_last_result= "";
	function __construct($_conn_master="",$_conn_client="") 
	{
      	$this->db_master=$_conn_master;
		$this->db_client=$_conn_client;
	}
	
	public function lookup($_sql,$_conn="client") 
	{
		$hd=$_conn=="client"?$this->db_client:$this->db_master;
		
		if ($rx = $hd->Execute($_sql))
		{	
			$this-> db_handle = $hd ;
			$_return = $rx->fields; 
			$rx->Close();
		}  
		elseif (isset($GLOBALS["NM_ERRO_IBASE"]) && $GLOBALS["NM_ERRO_IBASE"] != 1)   
		{  
           $_return = false; 
           $this->db_error = $hd->ErrorMsg(); 
		}
		return $_return;
		
	}
	
	public function select($_sql,$_conn="client") 
	{
		$hd=$_conn=="client"?$this->db_client:$this->db_master;
		
		if ($this->db_rs = $hd->Execute($_sql))
		{  $this->db_last_result = $hd ; }  
		elseif (isset($GLOBALS["NM_ERRO_IBASE"]) && $GLOBALS["NM_ERRO_IBASE"] != 1)   
		{  
           $this->db_rs =  $this-> db_handle = false; 
           $this->db_error = $hd->ErrorMsg(); 
		}
		return $this->db_rs;
	}

    public function exec_sql($_sql,$_conn="client") 
	{
		$hd=$_conn=="client"?$this->db_client:$this->db_master;
		
		if ($this->db_sql_rs  = $hd->Execute($_sql))
		{  $this->db_last_result = $hd ; }  
		elseif (isset($GLOBALS["NM_ERRO_IBASE"]) && $GLOBALS["NM_ERRO_IBASE"] != 1)   
		{  
           $this->db_sql_rs  = false; 
           $this->db_error = $hd->ErrorMsg(); 
		}
		return $this->db_sql_rs;
	}
	
	public function loop_recursivo($array,$nivel=0,$histKey="") 
	{
		$out = '';
		//$bar = $separador;
		$nivel++;
  		$out .= '<ul>';
  		foreach($array as $key => $value) 
		{
			if(is_array($value)) 
			{
	  			$marcador = ($histKey) ? $histKey.'&rarr;' : '';
	  			$out .= '<li>' . $marcador .'<b>'. $key.'</b>' .$this->loop_recursivo($value,$nivel,$marcador.$key).'</li>';
			}else{
	  			$out .= '<li>' . $key .': ' .$value . '</li>';
			}
  		}
  		$out .= '</ul>';
		return $out;
	}
	
	public function exemplo_ler_cliente () //aqui faço as leituras...
	{
		echo "<br> Usando lookup:";
		$ds=$this->lookup("Select cl_razao, apelido from clientes");
		echo "<br>Conexão Cliente:".$ds[0]." ".$ds[1]; 
		
	
		$ds=$this->lookup("Select cl_razao, apelido from clientes","master");
		echo "<br>Conexão Master:".$ds[0]." ".$ds[1]; 

		echo "<br> Usando exec_sql:";
        $rs=$this->exec_sql("Update clientes set cl_email='123@dom.com' where cl_email=''","master");
        if ( $rs  === false) echo "Erro ao acessar  banco de dados ". $this->db_error; 
		echo "<br>registros processados".$this->db_last_result->Affected_Rows() ;
		
		echo "<br> Usando select:<br>";
		$rs=$this->select("Select cl_razao, apelido, cl_email from clientes where cl_email='123@dom.com'","master");
		
		while (!$rs->EOF) 
			{    
                  echo "<br> ".$rs->fields["apelido"]." email:".$rs->fields["cl_email"];
                  $rs->MoveNext(); 
			} 
		echo "<br>registros processados".$this->db_last_result->Affected_Rows() ;
		$rs->Close();
		
		
		
	}
	
	

Walter, agora usando na aplicaçào:

  1. habilitar o Script (Biliotecas antigas) em Programação/Biblitecas (risos, aqui a NM deveria trocar para Scripts a nomenclatura…

[ul][li]ted_core_lib[/li][/ul]

  1. Na sua aplicação:

$obj = ted_ini(); //instanciando a classe e preparando as conexões e códigos internos
//$obj = new Ted_Core($this->Ini->nm_db_master,$this->Db);
$obj->exemplo_ler_cliente(); // <<-- Executando uma função da classe que faz a leitura numa tabela.

Ë um macete, mas uso e funciona. existe outro jeito que é com ajax.

Valeu Haroldo. Vou estudar esta noite e tentar implementar. Logo logo dou um resultado.

Obrigado.

Haroldo, bom dia.
Tentei mas ainda não consegui.
Abaixo coloquei as observações.
Se poder agradeço que dê uma olhada para continuar me orientando. (sei que somos todos atarefados, então sem problemas com tempo).

===Arquivo criado na Bibliotecas antigas
ted_core_lib.php (Script)

<?php function ted_ini () { sc_lookup(ds, "Select 1"); //preparando a aplicação para ambientar a conexão padrão é pré-criar código para uso do sc_lookup. sc_include_library("prj", "CabecalhoRodape", "CabRodPadraoDepolWeb.php", true, true);//aqui a chamada para a biblioteca nova $_obj = new Ted_Core($this->Ini->nm_db_master,$this->Db); // aqui estou instanciado a classe e passando as duas conexões (master e padrão) é só um exemplo de como usar duas conexões em bancos de dados diferentes. return $_obj; } ?>

==================
===Arquivo criado na Nova Biblioteca

ted_core_class.php (Nova Biblioteca)

<?php class Ted_Core { public $db_conn = ""; public $db_rs = ""; public $db_sql_rs = ""; public $db_error= ""; public $db_last_result= ""; function __construct($_conn="") { $this->db_conn=$_conn; } public function lookup($_sql,$_conn="conn_16dh") //Nome da conexão atual { $hd=$_conn; if ($rx = $hd->Execute($_sql)) { $this-> db_handle = $hd ; $_return = $rx->fields; $rx->Close(); } elseif (isset($GLOBALS["NM_ERRO_IBASE"]) && $GLOBALS["NM_ERRO_IBASE"] != 1) { $_return = false; $this->db_error = $hd->ErrorMsg(); } return $_return; } public function exec_sql($_sql,$_conn="conn_16dh") { $hd=$_conn=="conn_16dh"; if ($this->db_sql_rs = $hd->Execute($_sql)) { $this->db_last_result = $hd ; } elseif (isset($GLOBALS["NM_ERRO_IBASE"]) && $GLOBALS["NM_ERRO_IBASE"] != 1) { $this->db_sql_rs = false; $this->db_error = $hd->ErrorMsg(); } return $this->db_sql_rs; } public function loop_recursivo($array,$nivel=0,$histKey="") { $out = ''; //$bar = $separador; $nivel++; $out .= '
    '; foreach($array as $key => $value) { if(is_array($value)) { $marcador = ($histKey) ? $histKey.'→' : ''; $out .= '
  • ' . $marcador .''. $key.'' .$this->loop_recursivo($value,$nivel,$marcador.$key).'
  • '; }else{ $out .= '
  • ' . $key .': ' .$value . '
  • '; } } $out .= '
'; return $out; } public function exemplo_ler_cliente () //aqui faço as leituras... { echo "
Usando lookup:"; $ds=$this->lookup("Select idDelegacia, Secretaria from tbDelegacia"); echo "
Conexão Cliente:".$ds[0]." ".$ds[1]; while (!$rs->EOF) { echo "
".$rs->fields["idDelegacia"]." email:".$rs->fields["Secretaria"]; $rs->MoveNext(); } echo "
registros processados".$this->db_last_result->Affected_Rows() ; $rs->Close(); } ?>

=========================
===Arquivo criado na Nova Biblioteca e que foi incluída no Script

CadRodPadraoDepolWeb.php (Nova Biblioteca)

<?php class MYPDF extends TCPDF { //Cabe�alho public function Header() { /*==================================================== **Caminho para a logomarca da PCPE usada no cabe�alho **==================================================*/ //$LogoPCPE = K_PATH_IMAGES.'/depolweb/_lib/file/img/FotoDiversas/bandeira.jpg'; //$this->Image($LogoPCPE, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false); // Tipo de fonte $this->SetFont('helvetica', 'B', 20); // T�tulo $this->Cell(0, 15, "$Secretaria", 0, false, 'C', 0, '', 0, false, 'M', 'M');//$Secretaria = variável que deve receber o valor do campo } //Rodap� public function Footer() { // Posicionado a 15mm do final da p�gina $this->SetY(-15); // Tipo de fonte $this->SetFont('helvetica', 'I', 8); // N�mero da p�gina $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M'); } } ?> * aqui não sei o porque mas toda vez que salvo este arquivo esta tag aparece. Não sei se é um problema.

===================================
===App Blank

blank.php

sc_include_lib(“tcpdf”);

$obj = ted_ini(); //instanciando a classe e preparando as conexões e códigos internos
$obj->exemplo_ler_cliente(); // <<-- Executando uma função da classe que faz a leitura numa tabela.

// create new PDF document
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, ‘UTF-8’, false);

// set document information
$pdf->SetCreator(‘PDF_CREATOR’);
$pdf->SetAuthor(‘Walter Florêncio’);
$pdf->SetTitle(‘TCPDF Example 003’);
$pdf->SetSubject(‘TCPDF Tutorial’);
$pdf->SetKeywords(‘TCPDF, PDF, example, test, guide’);

// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, ‘’, PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, ‘’, PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(FILE).’/lang/eng.php’)) {
require_once(dirname(FILE).’/lang/eng.php’);
$pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set font
$pdf->SetFont(‘times’, ‘BI’, 12);

// add a page
$pdf->AddPage();

// set some text to print
// Instanciation of inherited class
for($i=1;$i<=40;$i++)
$pdf->Cell(0,10,‘Imprimindo Linha e Página’.$i,0,1);
// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output(‘example_003.pdf’, ‘I’);

//============================================================+
// END OF FILE
//============================================================+

==============
Notas:

Minha intenção é que o cabeçalho e o rodapé tenham os campos oriundos da tabela tbDelegacia.
A tbDelegacia tem apenas um registro com os dados da delegacia, mas como a conexão é dinâmica, dependendo do usuário muda a delegacia.
E aí me surgiu outra dúvida. Na função Lookup a conexão está = conn_16dh, mas quando eu estiver em outra conexão?

Agradeço a ajuda.

//////////////////////////////////////////////
////////////// INICIO DO BLANK ///////////////
//////////////////////////////////////////////

sc_include_lib(“tcpdf”);

sc_include_library(“prj”, “CabecalhoRodape”, “CabRodPadraoDepolWeb.php”, true, true);

$pdf = new MYPDF();//AQUI INTANCIA A CLASSE MYPDF DO CABEÇALHO E RODAPE

$pdf->SetHeaderMargin(10);
$pdf->SetFooterMargin(10);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

/=================INÍCIO=====================
**Select para pegar os dados da delegacia
**e colocar no cabeçalho e rodapé do relatório
**==========================================
/
sc_lookup(depol, "SELECT
idDelegacia,
Secretaria
FROM
tbDelegacia
");
if ({depol} === false)
{
echo “Erro de acesso”;
}
elseif (empty({depol}))
{
echo "Comando select não retornou dados ";
}
else
{
$Secretaria = {depol[0][1]};
}

$pdf->setSecretaria(utf8_encode($Secretaria));//PASSANDO O NOME DA SECRETARIA PARA DENTRO DA SUA CLASSE

//////////////////////////////////////////////
///////////////// FIM DO BLANK ///////////////
//////////////////////////////////////////////

//////////////////////////////////////////////
//SUA BIBLIOTECA QUE SERÁ IMPORTADA
//////////////////////////////////////////////

[code]<?php
class MYPDF extends TCPDF
{
//VARIAVEL PARA RECEBER O NOME DA SECRETARIA
private $Secretaria;
//FUNCAO PARA RECEBER O NOME DA SECRETARIA
public function setSecretaria($nome){
$this->Secretaria = $nome;
}

//Cabeçalho
public function Header()
{
    // Tipo de fonte
    $this->SetFont('helvetica', 'B', 20);


  // Titulo            //pegando o nome da secretaria  
    $this->Cell(0, 15, $this->Secretaria, 0, false, 'C', 0, '', 0, false, 'M', 'M');

}

//Rodapé
public function Footer()
{


    // Posicionado a 15mm do final da p�gina
    $this->SetY(-15);
    // Tipo de fonte
    $this->SetFont('helvetica', 'I', 8);
    // Número da página
    $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
}

}
?>[/code]

1 Curtida