[RESOLVIDO]Gerar PDF do relatório

Boa tarde colegas, vou deixar aqui a necessidade que estou tentado suprir, ainda estou pesquisando e qualquer coisa documento aqui, mas agradeço muito se alguém diver sugestões.

Vamos lá, o que eu preciso é criar um botão na consulta que gere o PDF da consulta atual e salve ele fisicamente em uma pasta, depois vou jogar ele pro banco, mas isso não me parece ser um problema, minha duvida é como exportar o relatório atual para PDF, no mesmo padrão que o sistema faz.

Tentei usando a função JS nm_gp_move(); que é a que o ScriptCase manda por padrão quando clica no botão imprimir, mas por falta de documentação dos parametros tive alguma dificuldade.

Outra tentativa que eu fiz foi com uma função que a NetMake me passou quando tentei entrar em contato para pedir a documentação dessa função JS, me passaram a função PHP sc_pdf_export(); que parecia feita perfeitamente para minha necessidade, mas ao rodar ele da erro de ‘Call to undefined function sc_pdf_export()’. Pesquisei mas achei pouquissimas coisas sobre essa função nativa, se alguém conhecer ou já tiver usado, seria de grande valia.

Enfim, estou pesquisando e testando outros modos, além de experimentar com os parametros da nm_gp_move(); para verse consigo adaptar pro meu uso. Se alguém tiver alguma ideia ou dica, fico agradecido, só preciso exportar o relatorio atual em formato PDF, o resto eu dou um jeito.

Não entendo porque salvar uma posição de um relatório no banco de dados.

Precisa salvar no tempo?

1 Curtida

Exato, alguns relatorios tem uma certa importancia e precisam ser assinados digitalmente e ficar salvos no banco. A rotina de assinatura já está funcionando, mas hoje o cliente tem que salvar em PDF, anexar no sistema e ai sim pode mandar pra assinatura, se eu conseguir salvar ele no sistema com o clique de um botão, facilita para eles.

Salve no tempo os dados.

Os registros da seleção da grid.

E a qualquer momento pode gerar a grid l/pdf em cima desses dados salvos no tempo.

Problema que se eu salvar o select e os dados e criar o PDF manualmente, ele vai ficar diferente do padrão do SC, além disso eu teria q fazer ‘customizado’ para cada um dos relatórios, até pensei nessa possibilidade, mas pra ser sincero é meu plano Z hehehe, só se não tiver como eu fazer algo meio padrão que pegue o relatorio atual. Pois seria beeem demorado.

Tenha uma tabela só para registar os dados no tempo.

Pegue o SQL corrente da grid, execute com sc_lookup, e salve o resultado no banco de dados, duplique a aplicação grid e altere para rodar em
cima da nova tabela.

Esse eh um procedimento que usamos em sistemas bancários.

A, entendi, tu sugere eu ter uma tabela pra salvar o estado atual dos relatórios, infelizmente não é possivel pelo processo aqui, é um questão de padronização legal do ministério da agricultura com os documentos. Tem que gerar o documento, mandar ele em PDF pra assinatura digital, e salvar ele assinado no banco, se salvarmos só os registros e montarmos o PDF toda vez ele não vai bater a validade do hash da assinatura, por isso que guardamos os arquivos, mesmo sendo pouco pratico em questão de espaço, é só pq a legislação exige que seja assim.

Infelizmente o processo em si de gerar o documento e salvar ele no banco não pode ser evitado, o modo que vou fazer isso que não importa muito. De resto, fico meio engessado.

Entendido.

Passei por caso parecido, geramos os dados no tempo em xml e assinamos ele com certificado digital.

E montamos PDF em cima do xml.

O xml é guardado na base de dados.

Caso contrário, terá que montar um relatório em report PDF parecido com a grid, para executar processo de assinatura digital e salvar no banco.

Ou somente excitando exportação da grid, fazendo download e em seguida upload para assinatura e sal em banco.

1 Curtida

Pois é, acho que vou ter que partir pra isso mesmo, vou tentar mais alguns teste pra ver se consigo gerar o arquivo no temp do SC e buscar ele de lá, mas talvez eu tenha que gerar manualmente mesmo. Agradeço pelas ideias e qualquer coisa eu documento aqui.

1 Curtida

Havia uma macro antigamente que foi removida, não puderam me passar documentação da função para que eu possa fazer algo parecido, vou tentar fazer alguma gambiarra, se nao der, vou ter q fazer relatorio na mão mesmo

Adicionando informação: As macros não são necessariamente funções. Elas são escritas como funções nos eventos pra facilitar seu uso, mas o parser dos eventos muitas vezes identifica uma macro e produz códigos em partes diferentes da app para atingir o efeito esperado. Não sei se é o caso dessa macro em particular, mas esse é o motivo de não ser possível apenas “dar o código” da função. Às vezes, o uso da macro gera código em outra área da aplicação que é inacessível ao usuário.

1 Curtida

Opa, sim, sei disso, mas existe uma função que gera o relatório, não pedi a documentação da macro, pedi da função, encontrei ela no código e tudo mais, só queria a documentação pra entender como ela funciona e poder usar ela corretamente, era uma função JS que é usada ao clicar em exportar para PDF. Mas não puderam me passar por diretriz internas ou qualqeur coisa nesse sentido.

1 Curtida

Entendi. Existe sim uma indicação de não dar informações sobre código interno do gerador. E eu suspeito que não exista uma documentação sobre o uso da função em si, se realmente for uma função interna. Se possível, me envia um e-mail em henrique@scriptcase.net com o nome da função interna que eu verifico se posso passar alguma informação adicional sobre os parâmetros. Não prometo nada, porque não sei ainda exatamente qual parte do gerador cria essa função, mas não custa tentar.

2 Curtidas

Perfeito, agradeço, logo te mando ali

1 Curtida

Consegui resolver com a função que disse no inicio do post, fiz alguns testes cegos e deu tudo certo, executo ela em um botão e ai, usando ajax, chamo um código php que pega o ultimo arquivo PDF da pasta temp e salva ele no banco, depois disso é só eu seguir com o procedimento que eu já usava de assinatura.

Gostaria de agradecer o @HenriqueB pela disponibilidade de tirar algumas duvidas e até se ofereceu pra um call fora de hora, não chegou a ser necessaria, mas mesmo assim agradeço muito.

Post finalmente finalizado e resolvido.

2 Curtidas