- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Relatórios
- Desenvolvimento TReport
Perguntas Desenvolvimento TReport
- simoes
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 51
- Obrigados Recebidos: 0
7 anos 9 meses atrás #31798
por simoes
Desenvolvimento TReport foi criado por simoes
Boa tarde,
Galera, estou com duas dificuldades no relatório a seguir segue fonte.
Primeira dificuldade é que quando eu tento acrescentar uma coluna nova no relatório da a seguinte mensagem na execução: Variavel D3_COD não existe
estou fazendo o seguinte na ultima linha do TRCELL eu coloco outra coluna exemplo
Meu outro problema é que queria colocar uma coluna trazendo o peso total produzido pegando o valor do campo B3_PESO * D3_QUANT até ai blz mas não estou sabendo colocar isso na função TRCell estou meio perdido nessa parte..
Alguém pode me ajudar?
Grato desde já.
Galera, estou com duas dificuldades no relatório a seguir segue fonte.
/*
Autor : Súlivan Simões Silva
Registro: / /
Funcao : Produzid
Funcionalidade: Relatório traz tudo que foi produzido dentro de um determinado periodo.
*/
//Bibliotecas
#Include "Protheus.ch"
#Include "TopConn.ch"
//Constantes
#Define STR_PULA Chr(13)+Chr(10)
User Function Produzid()
Local aArea := GetArea()
Local oReport
Local lEmail := .F.
Local cPara := ""
Private cPerg := ""
//Definições da pergunta
cPerg := "@PRODUCED "
/*--------------------------*
| Da data? = MV_PAR01 |
| Ate data? = MV_PAR02 |
| Do produto? = MV_PAR03 |
| Ate produto? = MV_PAR04 |
*--------------------------*/
//Se a pergunta não existir, zera a variável
DbSelectArea("SX1")
SX1->(DbSetOrder(1)) //X1_GRUPO + X1_ORDEM
If ! SX1->(DbSeek(cPerg))
cPerg := Nil
EndIf
//Cria as definições do relatório
oReport := fReportDef()
//Será enviado por e-Mail?
If lEmail
oReport:nRemoteType := NO_REMOTE
oReport:cEmail := cPara
oReport:nDevice := 3 //1-Arquivo,2-Impressora,3-email,4-Planilha e 5-Html
oReport:SetPreview(.F.)
oReport:Print(.F., "", .T.)
//Senão, mostra a tela
Else
oReport:PrintDialog()
EndIf
RestArea(aArea)
Return
/*-------------------------------------------------------------------------------*
| Func: fReportDef |
| Desc: Função que monta a definição do relatório |
*-------------------------------------------------------------------------------*/
Static Function fReportDef()
Local oReport
Local oSectDad := Nil
Local oBreak := Nil
Local oFunTot1 := Nil
Local oFunTot2 := Nil
Local cDescri := POSICIONE("SB1",1,XFILIAL("SB1")+D3_COD,"B1_DESC")
//Criação do componente de impressão
oReport := TReport():New( "Produzid",; //Nome do Relatório
"Produzido Por Periodo",; //Título
cPerg,; //Pergunte ... Se eu defino a pergunta aqui, será impresso uma página com os parâmetros, conforme privilégio 101
{|oReport| fRepPrint(oReport)},;//Bloco de código que será executado na confirmação da impressão
) //Descrição
oReport:SetTotalInLine(.F.)
oReport:lParamPage := .F.
oReport:oPage:SetPaperSize(9) //Folha A4
oReport:SetPortrait()
//Criando a seção de dados
oSectDad := TRSection():New( oReport,; //Objeto TReport que a seção pertence
"Totais",; //Descrição da seção
{"QRY_AUX"}) //Tabelas utilizadas, a primeira será considerada como principal da seção
oSectDad:SetTotalInLine(.F.) //Define se os totalizadores serão impressos em linha ou coluna. .F.=Coluna; .T.=Linha
//Colunas do relatório
TRCell():New(oSectDad, "D3_COD", "QRY_AUX", "Produto", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_UM", "QRY_AUX", "1 Unidade", /*cPicture*/, 2, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_QUANT", "QRY_AUX", "Quantdiade", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_SEGUM", "QRY_AUX", "2 Unidade", /*cPicture*/, 2, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_QTSEGUM", "QRY_AUX", "Quantidade", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
//Definindo a quebra
oBreak := TRBreak():New(oSectDad,{|| QRY_AUX->(D3_COD) },{|| "Total Por Produto" })
oSectDad:SetHeaderBreak(.T.)
//Totalizadores
oFunTot1 := TRFunction():New(oSectDad:Cell("D3_QUANT"),,"SUM",oBreak,,/*cPicture*/)
oFunTot1:SetEndReport(.F.)
oFunTot2 := TRFunction():New(oSectDad:Cell("D3_QTSEGUM"),,"SUM",oBreak,,/*cPicture*/)
oFunTot2:SetEndReport(.F.)
Return oReport
/*-------------------------------------------------------------------------------*
| Func: fRepPrint |
| Desc: Função que imprime o relatório |
*-------------------------------------------------------------------------------*/
Static Function fRepPrint(oReport)
Local aArea := GetArea()
Local cQryAux := ""
Local oSectDad := Nil
Local nAtual := 0
Local nTotal := 0
//Pegando as seções do relatório
oSectDad := oReport:Section(1)
//Montando consulta de dados
cQryAux := ""
cQryAux += "SELECT " + STR_PULA
cQryAux += " * " + STR_PULA
cQryAux += "FROM" + STR_PULA
cQryAux += " SD3010 SD3 " + STR_PULA
cQryAux += "WHERE" + STR_PULA
cQryAux += " SD3.D_E_L_E_T_ = '' " + STR_PULA
cQryAux += " AND SD3.D3_FILIAL = '0101'" + STR_PULA
cQryAux += " AND SD3.D3_TM = '001' AND SD3.D3_OP != '' AND SD3.D3_CF = 'PR0'" + STR_PULA
cQryAux += " AND SD3.D3_EMISSAO >= '"+ DTOS(MV_PAR01) + "' " + "AND SD3.D3_EMISSAO <= '"+ DTOS(MV_PAR02) +"' " + STR_PULA
cQryAux += " AND SD3.D3_COD >= '" +MV_PAR03+ "' AND SD3.D3_COD <= '"+MV_PAR04+ "'" + STR_PULA
cQryAux += "ORDER BY" + STR_PULA
cQryAux += " SD3.D3_COD" + STR_PULA
cQryAux := ChangeQuery(cQryAux)
//Executando consulta e setando o total da régua
TCQuery cQryAux New Alias "QRY_AUX"
Count to nTotal
oReport:SetMeter(nTotal)
TCSetField("QRY_AUX", "D3_EMISSAO", "D")
TCSetField("QRY_AUX", "D3_DTLANC", "D")
TCSetField("QRY_AUX", "D3_DTVALID", "D")
//Enquanto houver dados
oSectDad:Init()
QRY_AUX->(DbGoTop())
While ! QRY_AUX->(Eof())
//Incrementando a régua
nAtual++
oReport:SetMsgPrint("Imprimindo registro "+cValToChar(nAtual)+" de "+cValToChar(nTotal)+"...")
oReport:IncMeter()
//Imprimindo a linha atual
oSectDad:PrintLine()
QRY_AUX->(DbSkip())
EndDo
oSectDad:Finish()
QRY_AUX->(DbCloseArea())
RestArea(aArea)
Return
Primeira dificuldade é que quando eu tento acrescentar uma coluna nova no relatório da a seguinte mensagem na execução: Variavel D3_COD não existe
estou fazendo o seguinte na ultima linha do TRCELL eu coloco outra coluna exemplo
TRCell():New(oSectDad, "D3_OP", "QRY_AUX", "OP", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
Meu outro problema é que queria colocar uma coluna trazendo o peso total produzido pegando o valor do campo B3_PESO * D3_QUANT até ai blz mas não estou sabendo colocar isso na função TRCell estou meio perdido nessa parte..
Alguém pode me ajudar?
Grato desde já.
Por favor Acessar ou Registrar para participar da conversa.
- admin
- Desconectado
- Administrador
Menos
Mais
- Postagens: 297
- Obrigados Recebidos: 21
7 anos 9 meses atrás #31802
por admin
Respondido por admin no tópico Desenvolvimento TReport
Vê se funfa ai.
/*
Autor : Súlivan Simões Silva
Registro: / /
Funcao : Produzid
Funcionalidade: Relatório traz tudo que foi produzido dentro de um determinado periodo.
*/
//Bibliotecas
#Include "Protheus.ch"
#Include "TopConn.ch"
//Constantes
#Define STR_PULA Chr(13)+Chr(10)
User Function Produzid()
Local aArea := GetArea()
Local oReport
Local lEmail := .F.
Local cPara := ""
Private cPerg := ""
//Definições da pergunta
cPerg := "@PRODUCED "
/*--------------------------*
| Da data? = MV_PAR01 |
| Ate data? = MV_PAR02 |
| Do produto? = MV_PAR03 |
| Ate produto? = MV_PAR04 |
*--------------------------*/
//Se a pergunta não existir, zera a variável
DbSelectArea("SX1")
SX1->(DbSetOrder(1)) //X1_GRUPO + X1_ORDEM
If ! SX1->(DbSeek(cPerg))
cPerg := Nil
EndIf
//Cria as definições do relatório
oReport := fReportDef()
//Será enviado por e-Mail?
If lEmail
oReport:nRemoteType := NO_REMOTE
oReport:cEmail := cPara
oReport:nDevice := 3 //1-Arquivo,2-Impressora,3-email,4-Planilha e 5-Html
oReport:SetPreview(.F.)
oReport:Print(.F., "", .T.)
//Senão, mostra a tela
Else
oReport:PrintDialog()
EndIf
RestArea(aArea)
Return
/*-------------------------------------------------------------------------------*
| Func: fReportDef |
| Desc: Função que monta a definição do relatório |
*-------------------------------------------------------------------------------*/
Static Function fReportDef()
Local oReport
Local oSectDad := Nil
Local oBreak := Nil
Local oFunTot1 := Nil
Local oFunTot2 := Nil
Local cDescri := POSICIONE("SB1",1,XFILIAL("SB1")+D3_COD,"B1_DESC")
//Criação do componente de impressão
oReport := TReport():New( "Produzid",; //Nome do Relatório
"Produzido Por Periodo",; //Título
cPerg,; //Pergunte ... Se eu defino a pergunta aqui, será impresso uma página com os parâmetros, conforme privilégio 101
{|oReport| fRepPrint(oReport)},;//Bloco de código que será executado na confirmação da impressão
) //Descrição
oReport:SetTotalInLine(.F.)
oReport:lParamPage := .F.
oReport:oPage:SetPaperSize(9) //Folha A4
oReport:SetPortrait()
//Criando a seção de dados
oSectDad := TRSection():New( oReport,; //Objeto TReport que a seção pertence
"Totais",; //Descrição da seção
{"QRY_AUX"}) //Tabelas utilizadas, a primeira será considerada como principal da seção
oSectDad:SetTotalInLine(.F.) //Define se os totalizadores serão impressos em linha ou coluna. .F.=Coluna; .T.=Linha
//Colunas do relatório
TRCell():New(oSectDad, "D3_COD", "QRY_AUX", "Produto", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_UM", "QRY_AUX", "1 Unidade", /*cPicture*/, 2, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_QUANT", "QRY_AUX", "Quantdiade", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_SEGUM", "QRY_AUX", "2 Unidade", /*cPicture*/, 2, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "D3_QTSEGUM", "QRY_AUX", "Quantidade", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
TRCell():New(oSectDad, "PESO", "QRY_AUX", "Peso Total", /*cPicture*/, 6, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
//Definindo a quebra
oBreak := TRBreak():New(oSectDad,{|| QRY_AUX->D3_COD },{|| "Total Por Produto" })
oSectDad:SetHeaderBreak(.T.)
//Totalizadores
oFunTot1 := TRFunction():New(oSectDad:Cell("D3_QUANT"),,"SUM",oBreak,,/*cPicture*/)
oFunTot1:SetEndReport(.F.)
oFunTot2 := TRFunction():New(oSectDad:Cell("D3_QTSEGUM"),,"SUM",oBreak,,/*cPicture*/)
oFunTot2:SetEndReport(.F.)
oFunTot3 := TRFunction():New(oSectDad:Cell("PESO"),,"SUM",oBreak,,/*cPicture*/)
oFunTot3:SetEndReport(.F.)
Return oReport
/*-------------------------------------------------------------------------------*
| Func: fRepPrint |
| Desc: Função que imprime o relatório |
*-------------------------------------------------------------------------------*/
Static Function fRepPrint(oReport)
Local aArea := GetArea()
Local cQryAux := ""
Local oSectDad := Nil
Local nAtual := 0
Local nTotal := 0
//Pegando as seções do relatório
oSectDad := oReport:Section(1)
//Montando consulta de dados
cQryAux := ""
cQryAux += "SELECT D3_COD, D3_UM, D3_QUANT, D3_SEGUM, D3_QTSEGUM, D3_EMISSAO, D3_DTLANC, D3_DTVALID, (D3_QUANT * B1_PESO) PESO " + STR_PULA
cQryAux += "FROM" + STR_PULA
cQryAux += " SD3010 SD3, SB1010 SB1 " + STR_PULA
cQryAux += "WHERE" + STR_PULA
cQryAux += " SD3.D_E_L_E_T_ = '' " + STR_PULA
cQryAux += " AND SB1.D_E_L_E_T_ = '' " + STR_PULA
cQryAux += " AND SB1.B1_COD = SD3.D3_COD " + STR_PULA
cQryAux += " AND SB1.B1_FILIAL = '0101'" + STR_PULA
cQryAux += " AND SD3.D3_FILIAL = '0101'" + STR_PULA
cQryAux += " AND SD3.D3_TM = '001' AND SD3.D3_OP != '' AND SD3.D3_CF = 'PR0'" + STR_PULA
cQryAux += " AND SD3.D3_EMISSAO >= '"+ DTOS(MV_PAR01) + "' " + "AND SD3.D3_EMISSAO <= '"+ DTOS(MV_PAR02) +"' " + STR_PULA
cQryAux += " AND SD3.D3_COD >= '" +MV_PAR03+ "' AND SD3.D3_COD <= '"+MV_PAR04+ "'" + STR_PULA
cQryAux += "ORDER BY" + STR_PULA
cQryAux += " SD3.D3_COD" + STR_PULA
cQryAux := ChangeQuery(cQryAux)
//Executando consulta e setando o total da régua
TCQuery cQryAux New Alias "QRY_AUX"
Count to nTotal
oReport:SetMeter(nTotal)
TCSetField("QRY_AUX", "D3_EMISSAO", "D")
TCSetField("QRY_AUX", "D3_DTLANC", "D")
TCSetField("QRY_AUX", "D3_DTVALID", "D")
//Enquanto houver dados
oSectDad:Init()
QRY_AUX->(DbGoTop())
While ! QRY_AUX->(Eof())
//Incrementando a régua
nAtual++
oReport:SetMsgPrint("Imprimindo registro "+cValToChar(nAtual)+" de "+cValToChar(nTotal)+"...")
oReport:IncMeter()
//Imprimindo a linha atual
oSectDad:PrintLine()
QRY_AUX->(DbSkip())
EndDo
oSectDad:Finish()
QRY_AUX->(DbCloseArea())
RestArea(aArea)
Return
Por favor Acessar ou Registrar para participar da conversa.
- simoes
- Autor do Tópico
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 51
- Obrigados Recebidos: 0
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Relatórios
- Desenvolvimento TReport
Tempo para a criação da página:0.103 segundos