1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Listagem de Itens em Colunas

Discussão em 'Progress 4GL' iniciado por alexandrezakarias, Agosto 24, 2015.

  1. alexandrezakarias

    alexandrezakarias Membro Participativo

    Bom Dia, tenho uma rotina aqui, que verifica na tabela Item, quais os intervalos de itens que estão vagos, mas a listagem é gerada com quase 1000 páginas, portanto, gostaria de saber como faria para quando preenchesse um número x de linhas, houvesse uma quebra de coluna e fossem criando colunas adicionais à direita.

    Segue print de como sai o relatório (imagem 1.jpg), e como gostaria que saísse (imagem 2.jpg), e segue também o código do programa:

    Código:
        
        DEF WORKFILE temp
            FIELD it-codigo AS c FORMAT "X(5)".
       
        DEF VAR idx AS i INIT 0.
       
        FOR EACH ITEM NO-LOCK USE-INDEX codigo WHERE
            ITEM.it-codigo >= tt-param.c-cod-ini AND
            ITEM.it-codigo <= tt-param.c-cod-fim:
            FIND FIRST temp WHERE
                temp.it-codigo = SUBSTRING(ITEM.it-codigo,1,5) NO-ERROR.
            IF NOT AVAIL temp THEN DO:
                CREATE temp.
                ASSIGN temp.it-codigo = SUBSTRING(ITEM.it-codigo,1,5).
            END.
        END.
       
        assign idx = integer(tt-param.c-cod-ini).
          
        PUT "Próximos Códigos Livres : " AT 01 SKIP.
       
        REPEAT WHILE idx < integer(tt-param.c-cod-fim):
            ASSIGN idx = idx + 1.
            FIND FIRST temp WHERE
                 temp.it-codigo = string(idx) NO-ERROR.
            IF NOT AVAIL temp THEN
                PUT idx SKIP.
        END. 
    Obrigado!

    Arquivos Anexados:

    • 1.jpg
      1.jpg
      Tamanho:
      81.1 KB
      Visitas:
      14
    • 2.jpg
      2.jpg
      Tamanho:
      86 KB
      Visitas:
      14
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Cria uma temp-table dinâmica e preenche previamente os valores e depois manda para o arquivo já no formato desejado, ou seja, para cada linha já vai imprimindo todas as colunas
  3. alexandrezakarias

    alexandrezakarias Membro Participativo

    Obrigado Rafael! vou tentar!
    Abrass!
  4. alexandrezakarias

    alexandrezakarias Membro Participativo

    Amigos, tentei o seguinte, jogando em excel, mas ele repetiu em 10 colunas os mesmo valores (conforme anexo), desculpem a minha ignorância mas o que estaria errado?

    Código:
        DEF VAR idx   AS i INIT 0.
        DEF VAR i-linha AS i INIT 0.
        DEF VAR i-coluna AS i INIT 0.
       
        DEF VAR chexcelapplication AS COM-HANDLE.
        DEF VAR chworkbook         AS COM-HANDLE.
        DEF VAR chworksheet        AS COM-HANDLE.
        ASSIGN i-linha = 1.
        IF tt-param.c-excel = TRUE THEN DO:
            CREATE "excel.application" chexcelapplication.
            ASSIGN chworkbook  = chexcelapplication:workbooks:ADD()
                   chworksheet = chexcelapplicAtion:sheets:ITEM(1)
                   chworksheet:NAME = "Itens Vagos" /* nome da pasta */
                   chworksheet:range("A1:j1"):mergecells = TRUE
                   chworksheet:range("A1:j1"):horizontalalignment = 3
                   chworksheet:range("a1:j1"):FONT:bold = TRUE
                   chworksheet:COLUMNS("a"):columnwidth = 8
                   chworksheet:COLUMNS("b"):columnwidth = 8
                   chworksheet:COLUMNS("c"):columnwidth = 8
                   chworksheet:COLUMNS("d"):columnwidth = 8
                   chworksheet:COLUMNS("e"):columnwidth = 8
                   chworksheet:COLUMNS("f"):columnwidth = 8
                   chworksheet:COLUMNS("g"):columnwidth = 8
                   chworksheet:COLUMNS("h"):columnwidth = 8
                   chworksheet:COLUMNS("i"):columnwidth = 8
                   chworksheet:COLUMNS("j"):columnwidth = 8
                   chworksheet:range("A1"):VALUE = 'NHEN021 - LISTAGEM DE ITENS VAGOS DE ' +
                                                STRING(tt-param.c-cod-ini) + ' A ' + STRING(tt-param.c-cod-fim)
                   i-linha = i-linha + 2
                   i-coluna = 0.
    
                   FOR EACH ITEM NO-LOCK USE-INDEX codigo WHERE
                       ITEM.it-codigo >= tt-param.c-cod-ini AND
                       ITEM.it-codigo <= tt-param.c-cod-fim:
                       FIND FIRST temp WHERE
                           temp.it-codigo = SUBSTRING(ITEM.it-codigo,1,5) NO-ERROR.
                       IF NOT AVAIL temp THEN DO:
                           CREATE temp.
                           ASSIGN temp.it-codigo = SUBSTRING(ITEM.it-codigo,1,5).
                       END.
                   END.
                   
                   assign idx = integer(tt-param.c-cod-ini).
                  
                   ASSIGN chworksheet:range("a" + STRING(i-linha)):VALUE = "Próximos Códigos Livres"
                          i-linha = i-linha + 2.
                  
                   REPEAT WHILE idx < integer(tt-param.c-cod-fim):
                       ASSIGN idx = idx + 1.
                           FIND FIRST temp WHERE
                            temp.it-codigo = string(idx) NO-ERROR.
                           IF NOT AVAIL temp THEN DO:
                           REPEAT WHILE i-coluna < 10:
                              ASSIGN i-coluna = i-coluna + 1.
                              if i-coluna  =  1  then
                                 ASSIGN chworksheet:range("a" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  2  then
                                 ASSIGN chworksheet:range("b" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  3  then
                                 ASSIGN chworksheet:range("c" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  4  then
                                 ASSIGN chworksheet:range("d" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  5  then
                                 ASSIGN chworksheet:range("e" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  6  then
                                 ASSIGN chworksheet:range("f" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  7  then
                                 ASSIGN chworksheet:range("g" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  8  then
                                 ASSIGN chworksheet:range("h" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  9  then
                                 ASSIGN chworksheet:range("i" + STRING(i-linha)):VALUE = idx.
                              if i-coluna  =  10  then
                                 ASSIGN chworksheet:range("j" + STRING(i-linha)):VALUE = idx
                                        i-linha = i-linha + 1.
                           END.
                       END.
                       ASSIGN i-coluna = 0.
                   END.
    

    Arquivos Anexados:

    • s.jpg
      s.jpg
      Tamanho:
      97.2 KB
      Visitas:
      4
  5. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Você está atribuindo o mesma variável idx em todas as células
  6. rlfritz

    rlfritz Membro Ativo

    Boa tarde... veja se isto te ajuda:
    Código:
    DEFINE VARIABLE i-aux AS INTEGER     NO-UNDO.
    DEFINE VARIABLE i-col AS INTEGER     NO-UNDO.
    ASSIGN i-col = 0.
    
    OUTPUT TO c:\temp\itens-em-colunas.csv .
    
    DO  i-aux = 10000 TO 99999:
       
        IF NOT CAN-FIND( ITEM WHERE ITEM.it-codigo = STRING(i-aux)) THEN DO:
    
            PUT UNFORMATTED i-aux ";".
            ASSIGN i-col = i-col + 1.
    
            IF i-col >= 10 THEN DO:
                PUT UNFORMATTED SKIP.
                ASSIGN i-col = 0.
            END.
    
        END.
    
    
    END.
    
    OUTPUT CLOSE.
    

Compartilhe esta Página