BLACK FRIDAY Está chegando! Seja o primeiro a receber nossas ofertas Cadastre-se aqui

Autor Tópico: [Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?  (Lida 6949 vezes)

FredKeyster

  • Visitante
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #15 Online: Setembro 10, 2013, 03:59:23 pm »
Bem pessoal, realmente estava "redeclarando" o "sc_include_lib("fpddf"); " só que um no onExecute da Blank e o outro na Biblioteca! O Eliezer me explicou sobre a lógica das classes, consegui entender direitinho.


Verdade Haroldo, da sim pra se fazer coisas complexas no ReportPDF, você me mostrou! Mas a complexidade na minha opinião esta no nível de experiência de cada um, humildemente falando meu nível é super baixo, ou seja, o que pode ser complexo pra mim é super fácil pra muitos aqui. Então me preocupo ao menos me esforçar bastante à aprender! Quem me conhece sabe o quanto gosto de estudar e o quanto sou esforçado. Não me adaptei ao ReportPDF, por um ponto de vista pessoal, preferi estudar FPDF puro por questão de adaptação mais rápida.
Estou adorando o FPDF. Embora que, é um trabalho braçal e cansativo.

Quero agradecer a todos vocês, que pra mim são mais que amigos! São companheiros de trabalho, irmãos e professores.

Me lembrei de um professor de ensino médio que sempre escrevia no quadro antes de iniciar a aula.
"É fazendo que se aprende a fazer aquilo que se deve aprender a fazer." 
Aristóteles

Abraço a todos!

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #16 Online: Setembro 11, 2013, 09:37:00 pm »
Bem pessoal, realmente estava "redeclarando" o "sc_include_lib("fpddf"); " só que um no onExecute da Blank e o outro na Biblioteca! O Eliezer me explicou sobre a lógica das classes, consegui entender direitinho.


Verdade Haroldo, da sim pra se fazer coisas complexas no ReportPDF, você me mostrou! Mas a complexidade na minha opinião esta no nível de experiência de cada um, humildemente falando meu nível é super baixo, ou seja, o que pode ser complexo pra mim é super fácil pra muitos aqui. Então me preocupo ao menos me esforçar bastante à aprender! Quem me conhece sabe o quanto gosto de estudar e o quanto sou esforçado. Não me adaptei ao ReportPDF, por um ponto de vista pessoal, preferi estudar FPDF puro por questão de adaptação mais rápida.
Estou adorando o FPDF. Embora que, é um trabalho braçal e cansativo.

Quero agradecer a todos vocês, que pra mim são mais que amigos! São companheiros de trabalho, irmãos e professores.

Me lembrei de um professor de ensino médio que sempre escrevia no quadro antes de iniciar a aula.
"É fazendo que se aprende a fazer aquilo que se deve aprender a fazer." 
Aristóteles

Abraço a todos!

Entendo e concordo com você na questão que gosto é gosto, e cada um realmente é diferente, mas talvez o ReportPDF não foi lhe apresentado da maneira adequada, assim como não foi apresentado para mim. rsrs
Fiz um relatório de movimento de caixa dinâmico utilizando somente o ReportPDF, porém ignorei completamente as configurações de interface em Layout PDF / Interface e utilizei somente a parte Layout PDF / Código onde tive total liberdade de montar da minha maneira e utilizando somente comandos FPDF e variáveis locais definidas em Definição (não esquecendo de usar $this->SC_conv_utf8({meu_campo})), pude fazer bordas, uma linha com fundo na célula e outra linha não, mudar o tamanho da letra em qualquer célula, imprimir outra tabela no rodapé puxando de uma matriz que criei no evento OnScriptInit para relatar a conferência de caixa.

O ReportPDF é muito poderoso, mas tem essas particularidades que temos que aprender na marra, lembrando que a parte Layout PDF / Código os códigos de Cabeçalho e Rodapé não tem acesso a dados e nem as funções do scriptcase, pois estão dentro da classe FPDF, mas nada que a declaração de variáveis globais não resolva, e no término da impressão da última página, dou um unset($GLOBALS['minha_var_global']);.

Para mim, falta é documentação por parte da NetMake.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

jorgepopel

  • Expert
  • *****
  • Mensagens: 764
    • iCentro Tecnologia e Sistemas
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #17 Online: Setembro 11, 2013, 10:24:34 pm »
Endrigo,

Amigo, nessa tua empreitada pelo ReportPdf, tu conseguiu incluir algum gráfico dinamicamente?
Tô brigando com isso, faz tempo.

Tem como enviar um pedaço do código desse relatório de caixa, para ver como vc estruturou os comandos?

Como estou tendo problemas com a geração de pdf com gráficos nas consultas, estou estudando uma forma de gerar os pdf pelo reportpdf incluindo os gráficos. Ou seja, fazer td a mão, usando apenas o filtro do SC.
Para os gráficos estou usando a biblioteca PHPlot, moleza de usar. É simples, mas tem td que precisa.


Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #18 Online: Setembro 11, 2013, 10:38:19 pm »
Endrigo,

Amigo, nessa tua empreitada pelo ReportPdf, tu conseguiu incluir algum gráfico dinamicamente?
Tô brigando com isso, faz tempo.

Tem como enviar um pedaço do código desse relatório de caixa, para ver como vc estruturou os comandos?

Como estou tendo problemas com a geração de pdf com gráficos nas consultas, estou estudando uma forma de gerar os pdf pelo reportpdf incluindo os gráficos. Ou seja, fazer td a mão, usando apenas o filtro do SC.
Para os gráficos estou usando a biblioteca PHPlot, moleza de usar. É simples, mas tem td que precisa.

Jorge, não trabalhei com gráficos ainda, mas vejo que talvez se estourar os limites da dimensão da página que vc definiu na configuração do seu relatório, pode travar mesmo. A imagem tem que ocupar o espaço de uma única folha no máximo, e deixar os espaços do cabeçalho e rodapé.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #19 Online: Setembro 11, 2013, 10:50:22 pm »
Endrigo,

Amigo, nessa tua empreitada pelo ReportPdf, tu conseguiu incluir algum gráfico dinamicamente?
Tô brigando com isso, faz tempo.

Tem como enviar um pedaço do código desse relatório de caixa, para ver como vc estruturou os comandos?

Como estou tendo problemas com a geração de pdf com gráficos nas consultas, estou estudando uma forma de gerar os pdf pelo reportpdf incluindo os gráficos. Ou seja, fazer td a mão, usando apenas o filtro do SC.
Para os gráficos estou usando a biblioteca PHPlot, moleza de usar. É simples, mas tem td que precisa.

Claro meu amigo. Vamos lá:

Configurações:
Código: [Selecionar]
ReportPDF => Retrato; Registro por Linha; A4; Margens 3, 20, 3, 10; Exibe Cabeçalho e Rodapé; Arial; 8
Exclui tudo que tem em Layout PDF / Interface

Layout PDF / Código / Definição:
Código: [Selecionar]
$cab_empresa = $this->SC_conv_utf8('Fantastsoft Sistemas Ltda.');
$cab_endereco_1 = $this->SC_conv_utf8('Rua Costa Senna, 1072');
$cab_endereco_2 = $this->SC_conv_utf8('Padre Eustáquio - BHte - MG');
$cab_cnpj = $this->SC_conv_utf8('CNPJ: 00.843.106/0001-57');

if ( [lan_data_ini] == [lan_data_fin] ) {
$cab_titulo = $this->SC_conv_utf8('Movimento do Dia ' . {lan_data});
} else {
$cab_titulo = $this->SC_conv_utf8('Movimento do Mês ' . {lan_data_mes});
}
$cab_titulo_caixa = $this->SC_conv_utf8({coc_id});

$cab_data_impressao_lbl = $this->SC_conv_utf8('Data Impressão:');
$this->nm_data->SetaData(date("Y/m/d H:i:s"), "YYYY/MM/DD HH:II:SS");
$cab_data_impressao = html_entity_decode($this->nm_data->FormataSaida('d/m/Y H:i'));
$cab_pagina = $this->SC_conv_utf8('Página: ');

$cab_lan_dia = $this->SC_conv_utf8('D');
$cab_lan_lancamento = $this->SC_conv_utf8('LANÇAM.');
$cab_lan_historico = $this->SC_conv_utf8('HISTÓRICO');
$cab_moe_id = $this->SC_conv_utf8('MOEDA');
$cab_credito = $this->SC_conv_utf8('CRÉDITO');
$cab_debito = $this->SC_conv_utf8('DÉBITO');
$cab_lan_saldo = $this->SC_conv_utf8('SALDO');

if ( [lan_data_ini] == [lan_data_fin] ) {
$rod_conf_titulo = $this->SC_conv_utf8('Conferência de Caixa do dia ');
} else {
$rod_conf_titulo = $this->SC_conv_utf8('Conferência de Caixa do mês ');
}

$rod_credito = {rod_credito};
$rod_debito = {rod_debito};
$rod_saldo = {rod_saldo};

Layout PDF / Código / Cabeçalho:
Código: [Selecionar]
$this->SetFillColor(255, 255, 255);
$this->SetDrawColor(0, 0, 0);

$this->Rect(10, 10, 190, 16, "D");


$this->SetFont('Arial', '', 8);
$this->SetTextColor(0, 0, 0);

$this->SetXY(10, 10);
$this->SetFont('Arial', 'B');
$this->Cell(50, 4, $cab_empresa, 0, 0, 'L');
$this->Ln(4);
$this->SetFont('');
$this->Cell(50, 4, $cab_endereco_1, 0, 0, 'L');
$this->Ln(4);
$this->Cell(50, 4, $cab_endereco_2, 0, 0, 'L');
$this->Ln(4);
$this->Cell(50, 4, $cab_cnpj, 0, 0, 'L');

$this->SetXY(10, 10);
$this->SetFont('Arial', 'B', 14);
$this->Cell(180, 8, $cab_titulo, 0, 0, 'C');
$this->Ln(8);
$this->Cell(180, 8, $cab_titulo_caixa, 0, 0, 'C');

$this->SetXY(170, 10);
$this->SetFont('Arial', '', 8);
$this->Cell(30, 4, $cab_data_impressao_lbl, 0, 0, 'R');
$this->Ln(4);
$this->SetFont('Arial', 'B');
$this->SetX(170);
$this->Cell(30, 4, $cab_data_impressao, 0, 0, 'R');
$this->Ln(4);
$this->SetX(170);
$this->Cell(30, 4, $cab_pagina . $this->PageNo() . ' de {nb}', 0, 0, 'R');

$this->SetXY(10, 26);
$this->SetFont('Arial', 'B');
$tam_his = 100;
if ( [lan_data_ini] <> [lan_data_fin] ) {
$this->Cell(5, 4, $cab_lan_dia, 1, 0, 'C', true);
$tam_his = 95;
}
$this->Cell(15, 4, $cab_lan_lancamento, 1, 0, 'L');
$this->Cell($tam_his, 4, $cab_lan_historico, 1, 0, 'L');
$this->Cell(15, 4, $cab_moe_id, 1, 0, 'L');
$this->Cell(20, 4, $cab_credito, 1, 0, 'R');
$this->Cell(20, 4, $cab_debito, 1, 0, 'R');
$this->Cell(20, 4, $cab_lan_saldo, 1, 0, 'R');

Layout PDF / Código / Corpo:
Código: [Selecionar]
if ( ($GLOBALS['linha'] % 2) <> 0 ) {
$this->Pdf->SetFillColor(200, 200, 200);
$this->Pdf->SetDrawColor(0, 0, 0);
} else {
$this->Pdf->SetFillColor(255, 255, 255);
$this->Pdf->SetDrawColor(0, 0, 0);
}

$this->Pdf->SetFont('Arial', '', 8);
$this->Pdf->SetTextColor(0, 0, 0);

$this->Pdf->SetX(10);
$tam_his = 100;
if ( [lan_data_ini] <> [lan_data_fin] ) {
$this->Pdf->Cell(5, 4, {lan_data_dia}, 1, 0, 'L', true);
$tam_his = 95;
}
$this->Pdf->Cell(15, 4, {lan_lancamento}, 1, 0, 'L', true);
$this->Pdf->Cell($tam_his, 4, {lan_historico}, 1, 0, 'L', true);
$this->Pdf->Cell(15, 4, {moe_id}, 1, 0, 'L', true);
$this->Pdf->Cell(20, 4, {credito}, 1, 0, 'R', true);
$this->Pdf->Cell(20, 4, {debito}, 1, 0, 'R', true);
$this->Pdf->Cell(20, 4, {lan_saldo}, 1, 0, 'R', true);

Layout PDF / Código / Rodapé:
Código: [Selecionar]
if ( $GLOBALS['ultimo_reg'] ) {
$this->SetFillColor(255, 255, 255);
$this->SetDrawColor(0, 0, 0);

$this->Cell(130, 4, '', 1, 0, 'C');
$this->Cell(20, 4, $rod_credito, 1, 0, 'R');
$this->Cell(20, 4, $rod_debito, 1, 0, 'R');
$this->Cell(20, 4, $rod_saldo, 1, 0, 'R');

$this->Ln(4);
$this->SetX(170);
$this->Cell(30, 4, 'Impresso por ' . [usr_name], 0, 0, 'R');

$this->SetFillColor(200, 200, 200);
$this->SetFont('Arial', 'B', 10);
$this->SetTextColor(0, 0, 0);
$this->SetX(10);
$this->Cell(100, 5, $rod_conf_titulo . $GLOBALS['conf_caixa_dia'], 1, 0, 'C', true);
$this->Ln(5);

$this->SetFillColor(255, 255, 255);
$this->SetFont('Arial', '', 8);

$conf_caixa = $GLOBALS['conf_caixa'];
foreach( $conf_caixa as $reg => $valor ) {
$this->Cell(80, 4, $reg, 1, 0, 'L');
$this->Cell(20, 4, $valor, 1, 0, 'R');
$this->Ln(4);
}
unset($GLOBALS['conf_caixa']);
unset($GLOBALS['conf_caixa_dia']);
unset($GLOBALS['linha']);
unset($GLOBALS['ultimo_reg']);
unset($GLOBALS['g_rod_credito']);
unset($GLOBALS['g_rod_debito']);
}

Eventos / OnScriptInit:
Código: [Selecionar]
global $conf_caixa_dia;
global $conf_caixa;
global $linha;
global $ultimo_reg;
global $g_rod_credito;
global $g_rod_debito;

/**
 * Inicializa a variável de contagem das linhas para fazer a zebra
 */
$linha = 0;
$ultimo_reg = false;

$g_rod_credito = 0;
$g_rod_debito = 0;

/**
 * Se o movimento é de um único dia
 */
if ( [lan_data_ini] == [lan_data_fin] ) {
// Seta a data do movimento impresso no formato dia/mês/ano
$data = sc_date_conv([lan_data_ini], "aaaa-mm-dd", "dd/mm/aaaa");

// Soma a movimentação da conferência do dia aberto atualmente do caixa
sc_lookup(dataset, "select moe.moe_descricao,
to_char(sum(lan.lan_valor * case when lan.lan_dc = 'C' then 1 else -1 end), '999G999G990D00')
from mov_lancamentos as lan
left join cad_moedas as moe on (moe.moe_id = lan.moe_id)
where (coc_id = [coc_id]) and
(lan_estornado = false) and
(lan_estorno = false) and
(lan_valor is not null)
group by 1
having sum(lan.lan_valor * case when lan.lan_dc = 'C' then 1 else -1 end) > 0
order by 1");

// Preenche a matriz global com a conferência do caixa
$conf_caixa = array();
foreach( {dataset} as $reg ) {
$conf_caixa[$reg[0]] = $reg[1];
}

// Localiza o dia aberto para imprimir no título da conferência
sc_lookup(dataset, "select max(lan_data)
from mov_lancamentos as lan
where (coc_id = [coc_id])");
$conf_caixa_dia = sc_date_conv({dataset[0][0]}, "aaaa-mm-dd", "dd/mm/aaaa");
} else {
// Seta a data do movimento impresso no formato mês/ano
$data = sc_date_conv([lan_data_ini], "aaaa-mm-dd", "mm/aaaa");

// Soma a movimentação da conferência do mês selecionado
sc_lookup(dataset, "select moe.moe_descricao,
to_char(sum(lan.lan_valor * case when lan.lan_dc = 'C' then 1 else -1 end), '999G999G990D00')
from mov_lancamentos as lan
left join cad_moedas as moe on (moe.moe_id = lan.moe_id)
where (coc_id = [coc_id]) and
(lan_estornado = false) and
(lan_estorno = false) and
(lan_valor is not null) and
(lan_data <= '[lan_data_fin]')
group by 1
having sum(lan.lan_valor * case when lan.lan_dc = 'C' then 1 else -1 end) > 0
order by 1");

// Preenche a matriz global com a conferência do caixa
$conf_caixa = array();
foreach( {dataset} as $reg ) {
//$conf_caixa[$reg[0]] = sc_format_num($reg[1], '.', ',', 2, 'S', '1', '');
$conf_caixa[$reg[0]] = $reg[1];
}

// Seta o mês selecionado para ser impresso no título da conferência
$conf_caixa_dia = sc_date_conv([lan_data_ini], "aaaa-mm-dd", "mm/aaaa");
}

Eventos / OnRecord:
Código: [Selecionar]
if ( isset({lan_valor}) ) {
/**
* Joga o valor do campo lan_valor para o campo credito quando lan_dc = "C", e para o campo debito quando lan_dc = "D"
*/
if ( {lan_dc} == "C" ) {
{credito} = {lan_valor};
{debito} = "";

// Calcula o total de crédito
$GLOBALS['g_rod_credito'] += {lan_valor};
} else {
{credito} = "";
{debito} = {lan_valor};

// Calcular o total de débito
$GLOBALS['g_rod_debito'] += {lan_valor};
}
}
// Joga o valor do saldo para a variável do rodapé
{rod_saldo} = {lan_saldo};
{rod_credito} = $GLOBALS['g_rod_credito'];
{rod_debito} = $GLOBALS['g_rod_debito'];

/**
 * Joga a data para os campos de formatação de mes e dia
 */
{lan_data_mes} = {lan_data};
{lan_data_dia} = {lan_data};

/**
 * Acrescenta o contador de Linhas
 */
$GLOBALS['linha']++;

if ( $this->rs_grid->currentrow() == ($this->rs_grid->recordcount() - 1) ) {
$GLOBALS['ultimo_reg'] = true;
}
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

jorgepopel

  • Expert
  • *****
  • Mensagens: 764
    • iCentro Tecnologia e Sistemas
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #20 Online: Setembro 11, 2013, 11:06:40 pm »
Value Endrigo!

Vou adaptar a minha necessidade e depois informo o resultado.

Usando dessa maneira, o programa mesmo faz o controle do salto de página, né?

E como ficaria com quebras??  Dai não precisa mais as consultas. heheheeh

[]s
Jorge

Endrigo

  • Intermediário
  • ***
  • Mensagens: 242
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #21 Online: Setembro 11, 2013, 11:47:21 pm »
Value Endrigo!

Vou adaptar a minha necessidade e depois informo o resultado.

Usando dessa maneira, o programa mesmo faz o controle do salto de página, né?

E como ficaria com quebras??  Dai não precisa mais as consultas. heheheeh

[]s
Jorge

Para as quebras você pode criar uma variável global que no evento OnScriptInit receberá um valor impossível de existir para cada agrupamento, e na impressão de cada registro vc verifica a quebra, e manda imprimir o rodapé do agrupamento anterior, e o cabeçalho do próximo grupo, claro, tudo definido pelos campos que deverão fazer parte da sua estrutura da tabela carregada, e também setado em suas variáveis globais como será impresso esse cabeçalho de cada agrupamento, e respectivamente o rodapé.

É como se estivesse fazendo em modo texto, relatório sequencial, já programou em modo texto, DOS ou Linux, é a mesma coisa.
Endrigo Rodrigues
(31)3464-1020
CentOS 6 64bits + ScriptCase 8.00.0041 + PostgreSQL 9.3

jorgepopel

  • Expert
  • *****
  • Mensagens: 764
    • iCentro Tecnologia e Sistemas
    • Email
Re:[Resolvido] Como incluir as bibliotecas do FPDF.ORG no Scriptcase ?
« Responder #22 Online: Setembro 12, 2013, 12:11:16 am »
Sei como fazer, sim. hehehe
Fazia esses relatórios em Cobol, depois Pascal e C.
é como voltar ao passado.

É um saco, se o reportpdf fosse melhor, dai não teríamos essa conversa. hhehe