Olá pessoal, estou com dúvidas de como fazer “Funções e Bibliotecas” no Scriptcase utilizando as bibliotecas do site www.fpdf.org.
Segue um exemplo simples abaixo:
Cria uma biblioteca com esse código acima, e adicione-a na app, marcando na biblioteca.
Quando for chamar não precisa chamar a FPDF, apenas a PDF_Codabar, pois a mesma extende a FDPF.
De uma olhada na sua app, se não está chamando nenhuma classe que extenda a FPDF, pois se tiver tem que extender ambas, apartir de uma só FPDF.
Criei um blank e faça o teste nessa última para ver se está ok, se der tudo certo, de uma olhada na sua APP as bibliotecas que está usando, talvez ja esteja incluindo uma FPDF.
Eu tenho total certeza que não há outra declaração (chamada) de classe! Sempre que Marco a opção da biblioteca criada da esse erro! Alguém utiliza isso no SC7.1 ?
Endrigo quero distância do ReportPDF! Desenvolvendo no Blank me da mais liberdade, o ReportPDF é muito fechado! Ele é bom pra relatórios simples e criação de filtros rápidos. Mas cada um tem seu gosto! Adoro fazer Relatórios em HTML por o visual se tornar bonito, porém pra se manter em formato PDF o formato livre não é, digamos 100%. Por isso estou aderindo FPDF puro com Blank, e estou fazendo muita coisa bacana com ele.
Tenho toda liberdade no report pdf que tenho na blank com a vantage de usar o filtro da report pdf que no caso da blank teria que criar um controle ou filtro.
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
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.
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é.
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:
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;
}