Formato Livre - Como permitir que o usuário selecione os campos a aparecer? BUG?

A opção de colunas não fica visível e no filtro também quando se adiciona um campo campo do tipo “Campos da consulta” ele não funciona, qual seria a alternativa?

Fiz um módulo de etiquetas para imprimir no formato HTML mesmo e a batalha esta sendo grande pois o usuário quer poder escolher quais campos imprimir na etiqueta… (se alguém tiver um link explicando a melhor forma de fazer as benditas etiquetas também agradeço pq é um saco de fazer no SC)

uso a versão 7.01

Gustavo, vc selecionou o formato livre em Layout/Visualização?
Posta aqui como está seu HTML

Sim estou usando um layout html que fiz no formato de etiquetas. Meu problema não é em como utilizar o layout em formato livre e sim como fazer as coisas que falei usando o formato livre

Gustavo o que você entende como bug?

Parte de seu html do formato livre deverá ser montado dinamicamente no evento onload e conforme a seleção do usuário você moverá ou não valores para esses campos.

Ola Haroldo obrigado pela interação.

Coloquei como dúvida se não seria um BUG ele não dar a opção das colunas que simplesmente some e o fato de na opção de filtro da consulta ter o campo que seria exatamente para usarmos para isso não funciona que é o campo do tipo “Campos da Consulta”. Eles não deveriam funcionar para ajudar nossa vida nesse processo?

Conforme seleção do usuário AONDE? você explicou a teoria a questão é como fazer o usuário selecionar os campos que ele quer que apareçam ou não no meu formato livre.
Voce

A definição de bug não eh essa. Não exibe um erro aparente.

Formato livre te da a liberdade de desenhar o layout em HTML, e a exibição ou não dos campos devem ser condicionadas manualmente

Bem se o fato de duas funcionalidades que servem para isso não funcionarem na opção de formato livre não ser um BUG é uma questão de ponto de vista que não vem ao caso. Coloquei como dúvida justamente para que alguém que saiba dizer se é ou não possa avaliar.

Eu sei o que é o formato livre e estou usando ele muito bem, porém não consigo fazer isso que falei que é dar a opção para o usuário selecionar as colunas/campos que ele quer que apareçam … se é um HTML o layout do formato livre não posso colocar código php lá para verificar (IF…) se ele pediu pra aparecer algo ou não…

e por fim as opções existentes no SC para fazer isso não funcionam então qual a opção que me resta? essa é a grande questão… como você faria? ou como pode ser feito isso?

Se alguém me der uma luz de qual caminho eu poderia seguir ajudaria pois até então não faço idéia de como fazer… estou tentando colocar em filtros um campo para que o usuário selecione em um duplo select e esses valores sejam passados para a consulta mas nem isso estou conseguindo porque não estou conseguindo recuperar o valor por la.

Exemplo: Criei no filtro da consulta um duplo select com o nome campos dentro dele coloquei manualmente o nome de dois campos.

Já tentei colocar No evento da consulta OnRecord, onScriptInit, OnApplicationInit para ele pelo menos imprimir esses valores e não consigo recuperar… dou um var_dump({campos}) e não volta nada

Se isso funcionasse eu poderia fazer um IF nesse valor e limpar os campos que não quero que apareçam pelo menos… a priori foi a única alternativa que pensei mas não consegui realizar ainda…

Seria bom se você postasse aqui como está o seu html. Pode ser algo incorreto nele.

Olá Thyago obrigado pelo apoio, mas acho que você não entendeu… o HTML não tem problemas pois ele exibe todos os campos corretamente a questão é simplesmente como fazer essa funcionalidade de dar ao usuário a opção de selecionar os campos que ele quer que apareça.

mas já que vc insiste segue o html do formato livre

Org�o: {orgao}
Servi�o de Sa�de: {servico_de_saude}
{paciente}

SUS: {cartao_SUS} - CPF: {cpf}
{endereco} - {numero} - {bairro} - {complemento}
{ponto_de_referencia} - CEP: {cep} - {municipio} - {estado}
Item edital Lente: {item_edital_lente}
Item edital Armação: {item_edital_armacao}
Tipo de Arma��o: {armacao}

Por exemplo como fazer para o usuário escolher se quer que apareça ou não o campo {paciente} desse html entendeu?

Etiquetas é recomendável fazer em PDF que você tem o controle exato em mm de onde vai imprimir a etiqueta ou exportar um csv; e o cliente usar um outro programa para finalizar a impressão, exemplo o Word.

Obrigado pelo apoio Jailton, eu percebi isso, mas estou insistindo em fazer em formato livre pela facilidade do usuário gerar o html e imprimir, não ficou 100% o posicionamento mas funcionou. A grande questão agora é essa funcionalidade de seleção dos campos que já estou achando que não vai ser possível fazer

Não é BUG. Não há falha ou erro aparente.

Seu código php de condicionamento aos campos devem ser no evento onRecord.

Eu faria e faço com ReportPDF

Mova o valor do campo para uma variável global no evento onValidate do Filtro e capture o valor dessa variável no evento onRecord.

Eu já condicionei campos em grids de formato livre, é possível, apesar de acreditar ser mais viável fazer co ReportPDF.

Obrigado Haroldo e todos que ajudaram… vou tentar fazer dessa forma e depois dou feedback

Quanto a fazer em reportPDF sei que é a melhor form para posicionar bem os campos e não ter erro na impressão, mas pelo que vi lá também não tem solução para isso… ou seja lá não tem a opção de deixar os usuários selecionar os campos que quer que apareça… acabei de verificar. Mas fiquei curioso em saber como você faz isso lá Haroldo, pode compartilhar? voce fez como eu estou fazendo com um duplo select para selecionar os campos e apaga o display dele no onRecord é isso?

Acho muito ruim a montagem de layout lá no PDF por isso estou evitando usar

Na verdade minha situação é um pouco diferente. Conforme o perfil do usuário é mostrado um ou outro campo, que troco dinamicamente no evento onrecord.

Vou lhe dar outra sugestão:

criar uma tabela etiquetas (col1lin1, col2lin1, col3lin1, col1lin2, col2lin2, col3lin2, col1lin3, col2liln3,col3lin3)
Ou seja cada registro uma etiqueta, para uma tamanho único de etiquetas.

No evento onvalidate do filtro, vc lê sua tabela alimenta essa tabela de etiquetas conforme as condições do filtro, e o sql de sua consulta deve apontar para tabela etiquetas.

Na verdade minha situação é um pouco diferente. Conforme o perfil do usuário é mostrado um ou outro campo, que troco dinamicamente no evento onrecord.

é bem diferente de dar a opção para o usuário informar quais campos quer… mas já é uma forma de fazer a seleção e estou seguindo parecido com isso… vamos ver se vai dar certo.

Vou lhe dar outra sugestão:

criar uma tabela etiquetas (col1lin1, col2lin1, col3lin1, col1lin2, col2lin2, col3lin2, col1lin3, col2liln3,col3lin3)
Ou seja cada registro uma etiqueta, para uma tamanho único de etiquetas.

No evento onvalidate do filtro, vc lê sua tabela alimenta essa tabela de etiquetas conforme as condições do filtro, e o sql de sua consulta deve apontar para tabela etiquetas.

Quanto a sua sugestão acredito que eu não entendi. Me confirma se seria assim:

  1. criar uma tabela no banco de dados chamada etiquetas apenas com os campos para tal - OK
  2. no onvalidate do filtro leio esses dados dessa tabela? Aonde em que campo? Leio e alimento essa tabela???

Isso seria usando aquele duplo select que falei? pra selecionar os campos?

Não entendi mesmo ficou confuso, desculpa pode explicar melhor.

Ao alimentar a tabela de etiquetas você só move os campos que o usuário selecionou.

Já apresentei esse exemplo de etiquetas aqui, desde a versão 4 do SC, converti agora para 8.1.

O dinamismo só depende de lógica do programador.

O exemplo demonstra a alteração dinâmica no layout das etiquetas.

http://scriptcaseajax.com.br/demos/menu_maladireta

Muito legal esse sistema de etiquetas para vários formatos que vc desenvolveu Haroldo bem inteligente e completo, depois vou até estudar um pouco alguns fluxos desse seu processo que ficou bem legal. Inclusive o esquema de vc poder escolher quais registros quer imprimir, talvez ali mesmo vc consegue já colocar aquela função de colunas do grid e só imprimir os registros que quer no PDF.

Porém não faz a questão de dar ao usuário o poder de escolher quais campos ele quer que sejam impressos que é o que eu queria fazer então não me ajuda muito

No meu caso até que vai dar certo fazer daquela forma que vc sugeriu, coloquei em um duplo select no filtro e no OnRecord estou limpando as variaveis que ele selecionou para não exibir… não é muito inteligente mas foi a única forma que funcionou.

Agradeço demais toda a atenção e apoio prestado desde já.
abraços
Sds

É como eu disse: O Dinamismo depende do programador.

Analisei seu layout.

Pergunta? Quando o campo não é selecionado pelo usuário ele fica em branco na sua posição na etiqueta?

Se sim é fácil resolver.

1)Cria um campo virtual do tipo mult checkbox manual no filtro, use o separador “,”, valor para habilitado = 1.
2)Mova o valor desse campo para uma global no evento onvalidate do filtro: [varCampos]={Campos_selecionados};
3.a) Evento onscriptinit: echo [varCampos]; analise a estrutura, o sc coloca um separador nos campos, ##@##, não sei ao certo mas o echo lhe dirá.
3.b)Transforme [varCampos] em um array: [varCampos]=explode(“separador avaliado no echo”,[varcampos]), talve um for each seja necessário, pois pode ser um array mult vetor, onde uma das chaves será o nome do campo.
4) Onrecord: $_arr=[varCampos]; if (!$_arr[“Orgão”]) {Orgao}=""; if (!$_arr[“Serviço de Saúde”]) {ServicoSaude}=""; …

Algo assim.

Legal Haroldo, bom demais contar com alguém como vc que sabe demais aqui no fórum!

Cara na verdade muda pouco do que eu já estou fazendo porém com o duplo select o único problema é deixar já por padrão alguns campos pré-selecionados, vc sabe como faço isso?

Caso não seja possível no duplo select como faço no checkbox? já deixar marcado alguns campos?