Duvida Como passar para uma include o conteudo de um campo?

Discussão em 'Progress 4GL' iniciado por MARCELO GIOVANETI, Abril 30, 2015.

  1. MARCELO GIOVANETI

    MARCELO GIOVANETI Sem Pontuação

    Colegas:
    Bom Dia!
    Tenho uma dificuldade.
    Preciso passar o conteúdo de um campo para dentro de uma include mas não estou obtendo êxito.

    Tentei usar:
    def var campo as char init "emitente.cod-emit".
    def var campo2 as char.
    find first emitente.
    {esp/teste.i2 campo}
    disp campo2.
    include teste.i2
    assign campo2 = string({1}).
    Neste exemplo no display retorna emitente.cod-emit ao invés do código do emitente
    dai tentei:
    def var campo as char init "emitente.cod-emit".
    def var campo2 as char.
    find first emitente.
    {esp/teste.i2 &campo = campo}
    disp campo2.
    include teste.i2
    assign campo2 = string({&campo}).
    Neste exemplo também no display retorna emitente.cod-emit ao invés do código do emitente
    Necessito que retorne o conteúdo de cod-emitente que é o conteúdo da variável "campo" não posso passar na include direto o campo emitente.cod-emitente pois o campo a ser mostrado é variável.
    Muito Obrigado
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    mas o que vc está fazendo é o que chamamos de macro-substituição, não passa valor, só o campo mesmo, inclusive, do jeito que vc está fazendo, nunca poderá compilar o programa, só funciona executando o .p

    Ao inves de usar include, porque não faz um RUN passando parametros ?
    Ou explica o que vc precisa fazer pro pessoal sugerir uma melhor opção.
  3. MARCELO GIOVANETI

    MARCELO GIOVANETI Sem Pontuação

    Richard.

    Obrigado pela atenção
    O que realmente preciso é o seguinte:
    Existe uma tabela de layout onde tenho um campo que possui como conteúdo o nome de campos de outras tabelas
    exemplo:
    registro = 1
    campo[1] = "emitente.cod-emitente"
    campo[2] = "emitente.nome-emit"
    campo[3] = "emitente.cgc"

    registro = 2
    campo[1] = emitente.cgc
    campo[2] = emitente.nome-emit
    campo[3]= emitente.cod-emitente

    No caso preciso fazer um "FOR EACH" na tabela layout e para cada registro lido gerar um arquivo de todos os emitentes no layout cadastrado para cada registro.

    Ou seja tenho de dar PUT em um campo variável para gerar o arquivo o resultado ficaria assim para o registro = 1 geraria o arquivo 1 com o conteúdo

    cod emitente nome emit CGC
    23456 Jose Silva 01987123/0001-22
    45678 Paulo Tarso 22123456/0002-00

    No arquivo 2 referente ao registro 2

    CGC Nome Emit Cod Emitente
    01987123/0001-22 Jose Silva 23456
    22123456/0002-00 Paulo Tarso 45678
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    query dinamica,
    Código:
                       registro.nomeCampo  = campo:name
                       registro.labelCampo = campo:label
                       registro.indice     = contador
                       registro.tipoCampo  = campo:data-type
                       registro.decimal    = 0
                       registro.data       = ?
                       registro.inteiro    = 0
                       registro.caracter   = ''
                       registro.logico     = ?.
                case campo:data-type:
                    when 'integer'   then assign registro.inteiro   = (if contador = 0 then campo:buffer-value else campo:buffer-value(contador)).
                    when 'date'      then assign registro.data      = (if contador = 0 then campo:buffer-value else campo:buffer-value(contador)).
                    when 'character' then assign registro.caracter  = (if contador = 0 then campo:buffer-value else campo:buffer-value(contador)).
                    when 'logical'   then assign registro.logico    = (if contador = 0 then campo:buffer-value else campo:buffer-value(contador)).
                    when 'decimal'   then assign registro.decimal   = (if contador = 0 then campo:buffer-value else campo:buffer-value(contador)).
    
    na query-prepare vc pode colocar filtros
  5. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Opa, mandei o codigo errado .....
    Código:
            define variable bufferTabela as handle           no-undo.
            define variable queryTabela  as handle           no-undo.
    
            define variable nomeTabela   as character        no-undo.
    
            define variable contador    as integer no-undo.
            define variable contadorExt as integer no-undo.
            define variable campo       as handle  no-undo.
    
    
            assign nomeTabela = 'emitente'.
    
    
            create buffer bufferTabela for table nomeTabela no-error.
            if error-status:error then message 'tabela não encontrada' view-as alert-box info buttons ok.
    
            create query queryTabela.
            queryTabela:set-buffers(bufferTabela).
            queryTabela:query-prepare('for each ' + nomeTabela).
            queryTabela:query-open().
            if not queryTabela:get-last() then message 'Erro leitura' view-as alert-box info buttons ok.
    
            assign contador = 1.
            assign campo = bufferTabela:buffer-field(contador) no-error.
            do while valid-handle(campo):
                disp campo:name
                     campo:label
                     campo:data-type
                     campo:extent
                     campo:buffer-value(contador).
                assign contador = contador + 1.
                assign campo = bufferTabela:buffer-field(contador) no-error.
            end.
    

Compartilhe esta Página