Imprimi Página | Fechar janela

Treport

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=43153
Data da Impressão: sexta-feira, 5 de junho de 2020 at 02:47


Topico: Treport

Postado por: WANDERSONW
Assunto: Treport
Data Postagem: terça-feira, 24 de março de 2020 at 13:42

Boa Tarde,

Acabei de fazer um relatório usando o Treport porem, ele só mostra o campo quantidade os demais ele não mostra os dados e a query esta correta.


User function CCFATR40()
    private oReport
    private oSectCab
    private oSectDet
    private oBreak
    private cNomeRel     := FunName()
    private cPerg          := cNomeRel
    private cTitulo          := "VSPTMKR0"
    private cDescrRel     := "ANALISE DE GARANTIA"

// Criacao do objeto TReport
    oReport := TReport():new(cNomeRel, cTitulo, cPerg, { || procRel2() }, cDescrRel)

// Define o Layout como Paisagem
    oReport:setLandscape()
// Define o Titulo do Relatorio
    oReport:setTitle(cTitulo)
// Dialogo do TReport
    oReport:printDialog()
// Totalizador de colunas
    oReport:SetTotalInLine(.F.)

Return

/**
* Funcao          :     procRel
* Data               :
* Descricao     :     Processamento da Impressao do Relatorio
*/

Static Function procRel2()

    local nRegs          := 0
    local cAlias     := ""
    local uCodigo     := ""

// Leitura dos Parametros
    Pergunte(cPerg, .F.)     // Executa a chamada do filtro somente no buttom Parametros

// Seleciona os Registros para Impressao
    cAlias := qryRegs()

// Secao ( Cabecalho )
    oSectCab := TRSection():new(oReport, cTitulo)

//oBreak := TRBreak():new(oSectCab, {|| (cAlias)->JANEIRO})
// Secao dos dados
    oSectDet := TRSection():new(oSectCab, cTitulo)
    oSectDet:SetTotalInLine(.F.)

    TRCell():new(oSectDet, "FL"                , cAlias, "COD_FILIAL"       ,, 10,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "DATA CLI"        , cAlias, "DTA_ENTCLIENTE"     ,, 10)
    TRCell():new(oSectDet, "NF.CLIENTE"    , cAlias, "NTF_CLIENTE"      ,,30 ,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "SER"            , cAlias, "NRO_SERIE"         ,, 10,,,"RIGHT",,"RIGHT")
    TRCell():new(oSectDet, "NF.GARANT"        , cAlias, "NFS_GARANTIA"     ,,30 ,,,"LEFT",,"LEFT")
    TRCell():new(oSectDet, "NRO GAR"       , cAlias, "NRO_GARANTIA"     ,,40 ,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "PROTOC"            , cAlias, "NRO_PROTOCOLO"    ,,30 ,,,"LEFT",,"LEFT")
    TRCell():new(oSectDet, "COD FOR"        , cAlias, "COD_FORNECEDOR"   ,,20,,,"RIGHT",,"RIGHT")
    TRCell():new(oSectDet, "COD.PROD"        , cAlias, "COD_PRODUTO"      ,,20 ,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "PRODUTO"        , cAlias, "COD_PRODUTO"      ,,20 ,,,"RIGHT",,"RIGHT")
    TRCell():new(oSectDet, "QUANTIDADE"        , cAlias, "QUANTIDADE"       ,"@E 999,999.99",20,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "COD.CLI"        , cAlias, "COD_CLIENTE"      ,,20 ,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "CLIENTE"        , cAlias, "NOM_CLIENTE"      ,,10 ,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "NF.SAIDA"        , cAlias, "NOTAFISCAL_CLIENTE_SAIDA",,10,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "DTA.SAIDA"        , cAlias, "DTA_SAIDA_CLIENTE",,10 ,,,"CENTER",,"CENTER")
    TRCell():new(oSectDet, "ULT.ENTRADA"   , cAlias, "ULTIMA_ENTRADA"   ,,10 ,,,"CENTER",,"CENTER")

    oReport:SetTotalInLine(.F.)
    DbSelectArea(cAlias)
    Count to nRegs
    oReport:setMeter(nRegs)


    (cAlias)->(dbGoTop())
    oSectCab:init()
    While !(cAlias)->(eof())

        // Impressao dos dados
        oSectCab:printLine()

        // Inicia Secao
        oSectDet:init()

        // Impressao dos Albuns
        While !(cAlias)->(eof())

            oReport:incMeter()

            If oReport:Cancel()
               exit
            EndIf

            oSectDet:printLine()
          
            (cAlias)->(dbSkip())
        EndDo
        //EndDo
        oSectDet:finish()

    EndDo

    oSectCab:finish()

    (cAlias)->(dbCloseArea())

Return


Static Function qryRegs()

    local cQuery      := ""
    local cAlias      := GetNextAlias()
    local cEol          := Chr(10)+Chr(13)

    cVSPCONS := " SELECT " + CRLF
    cVSPCONS += "      SUD.UD_FILORI   AS COD_FILIAL " + CRLF
    cVSPCONS += "      ,SUD.UD_ENTCLI AS DTA_ENTCLIENTE " + CRLF
    cVSPCONS += "      ,SUD.UD_NFCLI   AS NTF_CLIENTE " + CRLF
    cVSPCONS += "      ,SUD.UD_SERCLI AS NRO_SERIE " + CRLF
    cVSPCONS += "      ,SUD.UD_NFGAR   AS NFS_GARANTIA      " + CRLF
    cVSPCONS += "      ,SUD.UD_NUMGAR AS NRO_GARANTIA " + CRLF
    cVSPCONS += "      ,SUD.UD_CODIGO AS NRO_PROTOCOLO " + CRLF
    cVSPCONS += "      ,SUD.UD_FORN    AS COD_FORNECEDOR " + CRLF
    cVSPCONS += "      ,SUD.UD_PRODUTO AS COD_PRODUTO " + CRLF
    cVSPCONS += "      ,SB1.B1_DESC    AS NOM_PRODUTO " + CRLF
    cVSPCONS += "      ,SUD.UD_QTDE    AS QUANTIDADE " + CRLF
    cVSPCONS += "      ,SUC.UC_CLIENTE AS COD_CLIENTE " + CRLF
    cVSPCONS += "      ,SA1.A1_NOME    AS NOM_CLIENTE " + CRLF
    cVSPCONS += "      ,SD2.D2_CLIENTE AS COD_CLIENTE_SAIDA " + CRLF
    cVSPCONS += "      ,SD2.D2_LOJA    AS LOJ_CLIENTE_SAIDA " + CRLF
    cVSPCONS += "      ,SD2.D2_DOC     AS NOTAFISCAL_CLIENTE_SAIDA " + CRLF
    cVSPCONS += "      ,SD2.D2_EMISSAO AS DTA_SAIDA_CLIENTE " + CRLF
    cVSPCONS += "      ,(SELECT TOP 1 MAX(D1_EMISSAO) " + CRLF
    cVSPCONS += "        FROM SD1010 WHERE D_E_L_E_T_=‘‘ " + CRLF
    cVSPCONS += "        AND D1_FORNECE=SUD.UD_FORN " + CRLF
    cVSPCONS += "        AND D1_FILIAL=SUD.UD_FILORI " + CRLF
    cVSPCONS += "        AND D1_COD=SUD.UD_PRODUTO) AS ULTIMA_ENTRADA " + CRLF
    cVSPCONS += " FROM " + CRLF
    cVSPCONS += "      SUD010 SUD     WITH (NOLOCK) " + CRLF
    cVSPCONS += " LEFT OUTER JOIN " + CRLF
    cVSPCONS += "      SUC010 SUC WITH (NOLOCK) ON " + CRLF
    cVSPCONS += "      SUC.D_E_L_E_T_    = ‘‘ " + CRLF
    cVSPCONS += "      AND SUC.UC_CODIGO = SUD.UD_CODIGO " + CRLF
    cVSPCONS += "      AND SUC.UC_FILORI = SUD.UD_FILORI      " + CRLF
    cVSPCONS += "      AND SUC.UC_DATA   = SUD.UD_DATA       " + CRLF
    cVSPCONS += " LEFT OUTER JOIN " + CRLF
    cVSPCONS += "      SD2010 SD2 WITH (NOLOCK) ON " + CRLF
    cVSPCONS += "      SD2.D_E_L_E_T_     = ‘‘ " + CRLF
    cVSPCONS += "      AND SD2.D2_COD     = SUD.UD_PRODUTO " + CRLF
    cVSPCONS += "      AND SD2.D2_FILIAL = SUD.UD_FILORI " + CRLF
    cVSPCONS += "      AND SD2.D2_CLIENTE = SUC.UC_CLIENTE " + CRLF
    cVSPCONS += "      AND SD2.D2_LOJA    = SUC.UC_LOJA " + CRLF
    cVSPCONS += "      AND SD2.D2_DOC     = SUD.UD_NFGAR " + CRLF
    cVSPCONS += " LEFT OUTER JOIN " + CRLF
    cVSPCONS += "      SA1010 SA1 WITH (NOLOCK) ON " + CRLF
    cVSPCONS += "      SA1.D_E_L_E_T_=‘‘ " + CRLF
    cVSPCONS += "      AND SA1.A1_COD = SUC.UC_CLIENTE " + CRLF
    cVSPCONS += "      AND SA1.A1_LOJA = SUC.UC_LOJA " + CRLF
    cVSPCONS += " LEFT OUTER JOIN       " + CRLF
    cVSPCONS += "      SB1010 SB1 WITH (NOLOCK) ON " + CRLF
    cVSPCONS += "      SB1.D_E_L_E_T_=‘‘ " + CRLF
    cVSPCONS += "      AND SB1.B1_COD = SUD.UD_PRODUTO " + CRLF
    cVSPCONS += "      AND SB1.B1_FILIAL = SUD.UD_FILORI " + CRLF
    cVSPCONS += " WHERE " + CRLF
    cVSPCONS += "      1=1 " + CRLF
    cVSPCONS += "      AND SUD.D_E_L_E_T_ =‘‘ " + CRLF

    If AllTrim( MV_PAR01 ) != ""
        cVSPCONS += " AND SUD.UD_FILORI IN " + FormatIn( AllTrim( MV_PAR01 ), "/" ) + " "
    EndIf

    cVSPCONS += "   AND SUC.UC_DATA    BETWEEN ‘"+Dtos(mv_par02)+"‘ AND ‘"+Dtos(mv_par03)+"‘"
    cVSPCONS += "   AND SUC.UC_CODIGO BETWEEN ‘"+MV_PAR05 +"‘ AND ‘" + MV_PAR06 + "‘"

    TCQUERY cVSPCONS NEW ALIAS &cAlias

Return cAlias







Respostas:

Postado Por: EMERSON.EN
Data Postagem: terça-feira, 24 de março de 2020 at 19:00

Limite os nomes dos campos a 10 caracteres



Postado Por: DON.JUNIOR
Data Postagem: sábado, 28 de março de 2020 at 19:18

Wanderson seu fonte está confuso, possui 2 WHILE, mas só possui 1 SKIP, impressão do cabeçalho dentro do primeiro loop. Arruma também o alias dos campos na query como o Emerson pontuou. Abaixo detalhes!

1 While !(cAlias)->(eof())

        // Impressao dos dados
        oSectCab:printLine()

        // Inicia Secao
        oSectDet:init()

        // Impressao dos Albuns
2       While !(cAlias)->(eof())


AS NOTAFISCAL_CLIENTE_SAIDA - pq não coloca somente DOCTO ou NFSAIDA ?


Abraço
Don Junior



Postado Por: LHC
Data Postagem: terça-feira, 31 de março de 2020 at 16:26

tá um pouco confuso mais o EMERSON.EN e o DON.JUNIOR tem razão além do campo de retorno estar grande esse while eu faria ele dentro da função qryRegs() e ajustaria a função da montagem do layout procRel2().

Tente fazer no padrão:

https://tdn.totvs.com/display/public/PROT/TReport

Um bom exemplo de 2 seçoes que me parece ser o seu caso:

https://www.blogadvpl.com/exemplo-de-relatorio-treport-com-2-secoes/

Atenciosamente,
Luis Henrique




Imprimir Página | Fechar Janela