+3 votos
194 visitas

Tive problema ao emitir um relatório pelo WES, pois em um momento na macro do relatório era feita a seguinte verificação:
 

If Q1.EOF Then
     Exit Sub
End If



O relatório era emitido mas sem nenhum dado. Coloquei uma condição "If VisibleMode" e consegui emitir normalmente. Alguém sabe se esse problema é aplicável para todos os relatórios?

por (16 pontos) | 194 visitas

3 Respostas

+1 voto
Melhor resposta
Diogo no cadastro do seu relatório, na aba Página qual o valor que está configurado no campo Exportador PDF?

Nesse campo configure EDocEngine e faça o teste novamente.
por (355 pontos)
selecionada por
Marcio, deu certo a sua solução. Grato pela ajuda!
+1 voto
É preciso de mais informações :)

Não faz muito sentido o que comentou. Se conseguir coloca a macro toda aqui.
por (355 pontos)
Option Explicit
Dim Q1 As BPesquisa

Dim FiltroContrato               As Long
Dim FiltroFamilia                As Long
Dim FiltroCompetenciaIn          As Date
Dim FiltroCompetenciaFin          As Date

Dim vCredito As Double
Dim vDebito As Double

Dim NumeroPagina                    As Long
Dim ImprimirRodape                    As Boolean

Public Sub REPORT_AfterPrintBand(ByVal Band As Object, ByVal BandPrinted As Boolean)

    Select Case Band.Name
        Case "MPRINCIPAL"
            Q1.Next
            While Q1.FieldByName("VALOR").AsFloat = 0
               Q1.Next
            Wend
        Case "MRODAPE"
            vCredito = 0
            vDebito = 0
    End Select

End Sub
Public Sub REPORT_BeforePrint(PrintReport As Boolean)
    NumeroPagina = 0

    If VisibleMode Then
      If Q1.EOF Then
         Exit Sub
      End If
    End If

    Q1.First

    While Q1.FieldByName("VALOR").AsFloat = 0
       Q1.Next
    Wend
    vCredito = 0
    vDebito = 0

End Sub

Public Sub REPORT_CreateData()
    Set Q1 = NewQuery

    Q1.Add("SELECT SC.CONTRATO CONTRATO,")
    Q1.Add("       SC.CONTRATANTE CONTRATANTE,")
    Q1.Add("       SF.FAMILIA FAMILIA,")
    Q1.Add("       SB.NOME BENEFICIARIO,")
    Q1.Add("       MO.COMPETENCIA COMPETENCIA,")
    Q1.Add("       MO.TABTIPO TIPO,")
    Q1.Add("       MO.VALORANTERIORACERTO VALORANT,")
    Q1.Add("       MO.VALORMODULOACERTO VALORACERTO,")
    Q1.Add("       SUM (MO.VALOR) VALOR")
    Q1.Add("  FROM SFN_FATURA_LANC_MOD MO,")
    Q1.Add("       SAM_CONTRATO SC,")
    Q1.Add("       SAM_FAMILIA SF,")
    Q1.Add("       SAM_BENEFICIARIO SB")
    Q1.Add(" WHERE MO.BENEFICIARIO = SB.HANDLE")
    Q1.Add("   AND SB.FAMILIA = SF.HANDLE")
    Q1.Add("   AND SF.CONTRATO = SC.HANDLE")
    Q1.Add("   AND SC.HANDLE =:Contrato ")
    Q1.Add("   AND MO.COMPETENCIA BETWEEN :COMPETINI AND :COMPETFIN ")

    If FiltroFamilia <> 0 Then
       Q1.Add("   AND SF.handle =:FAMILIA")
    End If

    Q1.Add(" GROUP BY SC.CONTRATO,")
    Q1.Add("       SC.CONTRATANTE,")
    Q1.Add("       SF.FAMILIA,")
    Q1.Add("       SB.NOME,")
    Q1.Add("       MO.COMPETENCIA, ")
    Q1.Add("       MO.TABTIPO,")
    Q1.Add("       MO.VALORANTERIORACERTO,")
    Q1.Add("       MO.VALORMODULOACERTO")
    Q1.Add(" ORDER BY SC.CONTRATO")

    If FiltroFamilia <> 0 Then
       Q1.ParamByName("FAMILIA").AsInteger = FiltroFamilia
    End If

    Q1.ParamByName("Contrato").AsInteger = FiltroContrato
    Q1.ParamByName("COMPETINI").AsDateTime = FiltroCompetenciaIn
    Q1.ParamByName("COMPETFIN").AsDateTime = FiltroCompetenciaFin

    Q1.Active = True

    Dim qteste As BPesquisa
    Set qteste = NewQuery
    qteste.Add("UPDATE ABREV SET TEXTO = :TEXTO ")
    qteste.Add("WHERE HANDLE = 12               ")
    qteste.ParamByName("TEXTO").AsString = Q1.Text + "  -  " + "Família: " + CStr(FiltroFamilia) + " - Contrato: " + CStr(FiltroContrato) + " - Data Inicial: " + CStr(FiltroCompetenciaIn) + " - Data Fim: " + CStr(FiltroCompetenciaFin)
    qteste.ExecSQL
    Set qteste = Nothing


End Sub
Public Sub REPORT_DestroyData()

    Set Q1  = Nothing

End Sub
Public Sub REPORT_OnMacroValue(ByVal Name As String, ResultValue As Variant)

  Select Case Name

    Case "MCONTRATO"
        ResultValue = Q1.FieldByName("CONTRATO").AsInteger

    Case "MCONTRATANTE"
        ResultValue = Q1.FieldByName("CONTRATANTE").AsString

    Case "MFAMILIA"
        ResultValue = Q1.FieldByName("FAMILIA").AsInteger

    Case "MBENEFICIARIO"
        ResultValue = Q1.FieldByName("BENEFICIARIO").AsString

    Case "MDESCRICAO"
        Select Case Q1.FieldByName("TIPO").AsInteger
           Case 1
               ResultValue = "Cota Patronal"
           Case 2
               ResultValue = "Contribuição"
           Case 3
               ResultValue = "Inscrição"
           Case 4
              ResultValue = "Mensalidade"
           Case 5
             ResultValue = "Bonificação"
           Case 6
               ResultValue = "Utilização"
           Case 7
               ResultValue = "Taxa Adm"
           Case 8
               ResultValue = "Acerto Mensalidade"
           Case 9
                ResultValue = "Utilização Indevida"
           Case 10
               ResultValue = "Auxílio"
        End Select

    Case "MVALORTOTAL"
        ResultValue = Q1.FieldByName("VALOR").AsFloat

    Case "MNATUREZA"
        Select Case Q1.FieldByName("TIPO").AsInteger
           Case 1
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
               ResultValue = "C"
           Case 2
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
               ResultValue = "C"
           Case 3
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
               ResultValue = "C"
           Case 4
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
              ResultValue = "C"
           Case 5
             ResultValue = "D"
           Case 6
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
               ResultValue = "C"
           Case 7
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
               ResultValue = "C"
           Case 8
            If Q1.FieldByName("VALORANT").AsFloat < Q1.FieldByName("VALORACERTO").AsFloat Then
               vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
                 ResultValue = "C"
            Else
               vDebito = vDebito + Q1.FieldByName("VALOR").AsFloat
                 ResultValue = "D"
            End If
           Case 9
             vCredito = vCredito + Q1.FieldByName("VALOR").AsFloat
                ResultValue = "C"
           Case 10
             vDebito = vDebito + Q1.FieldByName("VALOR").AsFloat
               ResultValue = "D"
        End Select

    Case "MCOMPETENCIA"
        ResultValue = Format(Q1.FieldByName("COMPETENCIA").AsString,"mm/yyyy")

    Case "MCREDITO"
        ResultValue = Format(vCredito,"###,###,##0.00")

    Case "MDEBITO"
        ResultValue = Format(vDebito,"###,###,##0.00")

    Case "MTOTAL"
        If (vCredito - vDebito) < 0 Then
           ResultValue = Str(Format(Abs(vCredito - vDebito),"###,###,##0.00"))+"          D"
        Else
           ResultValue = Str(Format(Abs(vCredito - vDebito),"###,###,##0.00"))+"          C"
        End If
  End Select
End Sub
Public Sub REPORT_OnNeedData(ByVal Band As Object, MoreData As Boolean)

  Select Case Band.Name
    Case "MPRINCIPAL"
        MoreData = Not Q1.EOF
  End Select

End Sub
Public Sub REPORT_OnPrepareReport(CanPrint As Boolean)

If Not(VisibleMode) Then
  If REPORT.FieldsForm("COMPETENCIAINICIAL") <> "" Then
    FiltroCompetenciaIn = REPORT.FieldsForm("COMPETENCIAINICIAL")
  Else
    FiltroCompetenciaIn = 0
  End If

  If REPORT.FieldsForm("COMPETENCIAFINAL") <> "" Then
    FiltroCompetenciaFin = REPORT.FieldsForm("COMPETENCIAFINAL")
  Else
    FiltroCompetenciaFin = 0
  End If

  If REPORT.FieldsForm("CONTRATO") <> "" Then
    FiltroContrato = REPORT.FieldsForm("CONTRATO")
  Else
    FiltroContrato = 0
  End If

  If REPORT.FieldsForm("FAMILIA") <> "" Then
    FiltroFamilia = REPORT.FieldsForm("FAMILIA")
  Else
    FiltroFamilia = 0
  End If
Else
  Dim HandleFiltro As Integer

  Dim Interface As Object
  Set Interface = CreateBennerObject("SamFiltro.Filtro")

  HandleFiltro = Interface.Exec(CurrentSystem, CurrentUser,3,"COMPETENCIAINICIAL|COMPETENCIAFINAL|CONTRATO.nl|FAMILIA.nl","Demonstrativo de Movimentação", "S")

  If HandleFiltro <= 0 Then
      CanPrint = False
  Else
    'Busca pelo RFFiltro selecionado
    Dim SQLFiltro As BPesquisa
    Set SQLFiltro = NewQuery

    SQLFiltro.Clear
    SQLFiltro.Add("SELECT CHECKGERAL,COMPETENCIAINICIAL,COMPETENCIAFINAL,CONTRATO,FAMILIA FROM RF_FILTRO WHERE HANDLE="+Str(HandleFiltro))
    SQLFiltro.Active = True

    FiltroCompetenciaIn  = SQLFiltro.FieldByName("COMPETENCIAINICIAL").AsDateTime
    FiltroCompetenciaFin = SQLFiltro.FieldByName("COMPETENCIAFINAL").AsDateTime
    FiltroContrato       = SQLFiltro.FieldByName("CONTRATO").AsInteger
    FiltroFamilia          = SQLFiltro.FieldByName("FAMILIA").AsInteger

    Set SQLFiltro = Nothing

    CanPrint = True

  End If
  ' Para não chamar a rotina de filtro padrão.
  REPORT.Filter = False
End If

End Sub
Public Sub REPORT_OnStartPage()
    NumeroPagina=NumeroPagina+1
End Sub
+1 voto


Diogo, 

Se eu entendi corretamente o que você quis dizer:
Para o que você quer fazer deve-se utilizar o método REPORT_OnNeedData() e atribuir à variável MoreData:

MoreData = not Q1.Eof

por (367 pontos)
Melhores Aug 2025
    200 pontos
    Melhores 2025 Jul 28 - Aug 03
    1. Larson

      156 Pontos

    2. danilo.pereira

      96 Pontos

    3. danilo.pereira

      96 Pontos

    4. danilo.pereira

      96 Pontos

    5. luciano.fronza

      61 Pontos

    6. luciano.fronza

      61 Pontos

    7. luciano.fronza

      61 Pontos

    8. diuari.molinari

      52 Pontos

    9. diuari.molinari

      51 Pontos

    10. diuari.molinari

      51 Pontos

    517 perguntas
    566 respostas
    389 comentários
    704 usuários