oziel Posted September 8, 2011 Report Share Posted September 8, 2011 Colegas recebi esse email da Bematech - trata-se da verificação se existe uma Redução Z pendente. Está escrito em Delphi e VB - considero que dar para fazer em FW - para que usa as Imp. Bematech. Meus progr. em FWH estão voltados a área de RH, Psicologia Ocupacional e Controle de Bibliotecas. Mas, espero que as dicas sirvam... ATT Oziel Lopes. //---------------------------------------------------- Caro Partner e Desenvolvedor Bematech, Nesta edição de nosso Flash Tip, estaremos tratando uma das situações de nossos ECFs e de grande importância dentro de qualquer aplicação de PDV, que é a verificação do status da Redução Z (RZ). A verificação desse status é fundamental no momento em que a aplicação de PDV é iniciada, pois é com ela que podemos tratar e informar ao operador se a impressora fiscal está aguardando o fechamento do dia anterior (pendente de RZ), se já está preparada para realizar o movimento de vendas do dia ou se já houve RZ no dia. Para essa verificação, usaremos duas funções da BemaFI32/BemaFI64.dll. São elas: Bematech_FI_DataMovimento Bematech_FI_DataHoraUltimaReducaoMFD Bematech_FI_DataMovimento Com essa função podemos obter o retorno referente à data do movimento atual da impressora fiscal. Declaração em Delphi function Bematech_FI_DataMovimento( Data: String ): Integer; StdCall; External ‘BEMAFI32.DLL’; Uso em Delphi (…) for iConta := 1 to 7 do DataMovimento := DataMovimento + ‘ ‘; iRetorno := Bematech_FI_DataMovimento( DataMovimento ); (…) Declaração em Visual Basic Public Declare Function Bematech_FI_DataMovimento Lib “BEMAFI32.DLL†(ByVal Data As String) As Integer Uso em Visual Basic (…) DataMovimento = Space(7) iRetorno = Bematech_FI_DataMovimento(DataMovimento) (…) Bematech_FI_DataMovimentoUltimaReducaoMFD Com essa função podemos obter o retorno referente à data do movimento da última RZ emitida na impressora fiscal. Declaração em Delphi function Bematech_FI_DataMovimentoUltimaReducaoMFD( cData: String ): Integer; StdCall; External ‘BEMAFI32.DLL’; Uso em Delphi (…) for iConta := 1 to 7 do cDataMovimento := cDataMovimento + ‘ ‘; iRetorno := Bematech_FI_DataMovimentoUltimaReducaoMFD( cDataMovimento ); (…) Declaração em Visual Basic Public Declare Function Bematech_FI_DataMovimentoUltimaReducaoMFD Lib “BEMAFI32.DLL†(ByVal cData As String) As Integer Uso em Visual Basic (…) cDataMovimento = space(7) iRetorno = Bematech_FI_DataMovimentoUltimaReducaoMFD(cDataMovimento) (…) Agora que já conhecemos as duas funções, passamos a descrever como seus retornos devem ser tratados dentro da aplicação de PDV. Em nossa análise, utilizamos a função de retorno da data do movimento da ultima redução Z primeiro (Bematech_FI_DataMovimentoUltimaReducaoMFD) e, em seguida, a função de retorno da data do movimento atual da impressora (Bematech_FI_DataMovimento). Para um melhor entendimento, usaremos as siglas: DT_RZ = Data do movimento da última RZ. DT_MOV = Data do movimento atual. 1º Caso: DT_RZ = 00000 (ddmmaa) e DT_MOV = data atual Neste caso, não houve movimento no dia anterior e a RZ referente já foi emitida. OBS: Quando o retorno da data do movimento corresponde à data atual, isso indica que já houve registro de valor no dia na impressora fiscal. 2º Caso: DT_RZ = data anterior e DT_MOV = data anterior A RZ está pendente na impressora (ECF deve imprimir mensagem “Aguardando Redução Z†ao ser ligado). OBS: Quando o retorno da data do movimento é a data atual, isso garante que no dia anterior houve ao menos um registro de valor na impressora fiscal. 3º Caso: DT_RZ = data atual e DT_MOV = 000000 (ddmmaa) Aqui temos a RZ já executada na impressora fiscal, ou seja, a RZ do dia atual já foi emitida não permitindo abrir o movimento, sendo que o ECF ficará bloqueado até a mudança do dia (00:00h). 4º Caso: DT_RZ = 000000 (ddmmaa) e DT_MOV = 000000 (ddmmaa) Neste caso, para analisar se a impressora fiscal está bloqueada ou se já teve a RZ do dia atual emitida, teremos que utilizar uma terceira função – a Bematech_FI_DataHoraReducao -, além da leitura da data do movimento atual (DT_MOV) e da ultima RZ (DT_RZ). A função Bematech_FI_DataHoraReducao retorna duas strings com a data e com a hora de emissão da ultima RZ. Quando a data da última RZ estiver zerada e a data do movimento também, podemos ter situações distintas, conforme explicamos abaixo: RZ do dia anterior já emitida (DT_RZ) sem o registro de valor na impressora fiscal e dia atual (DT_MOV) ainda não iniciado; Aqui, teremos o retorno da data correta de emissão da RZ, lendo a data de emissão da mesma, pela função Bematech_FI_DataHoraReducao. RZ do dia atual (DT_RZ) já emitida sem registro de valor (DT_MOV). Aqui, se a data retornada for igual a data atual temos o dia fechado, sem movimento de vendas bloqueando a impressora até a 00:00h. Declaração em Delphi function Bematech_FI_DataHoraReducao( Data: String; Hora: String ): Integer; StdCall; External ‘BEMAFI32.DLL’; Uso em Delphi (…) for iConta := 1 to 7 do DataReducao := DataReducao + ‘ ‘; for iConta := 1 to 7 do HoraReducao := HoraReducao + ‘ ‘; iRetorno := Bematech_FI_DataHoraReducao( DataReducao, HoraReducao ); (…) Declaração em Visual Basic Public Declare Function Bematech_FI_DataHoraReducao Lib “BEMAFI32.DLL†(ByVal Data As String, ByVal Hora As String) As Integer Uso em Visual Basic (…) DataReducao = Space(7) HoraReducao = Space(7) iRetorno = Bematech_FI_DataHoraReducao(DataReducao, HoraReducao) (…) Sendo assim, quando ambas as variáveis (DT_RZ e DT_MOV) tiverem o valor zerado, analisando a data e hora da ultima RZ, será possÃvel identificar se podemos iniciar o movimento de valor na impressora fiscal ou se a mesma estará bloqueada pela RZ. Esperamos que essa descrição detalhada das funções e também de como tratar seus retornos auxilie você na implementação desta rotina em sua aplicação de PDV. Caso surjam dúvidas, estamos à disposição para esclarecê-las através de nossos canais de atendimento. Um forte abraço e até o próximo Flash Tip. André L. Schikovski Equipe BSP – Bematech Software Partners 0800 644 7277 Email/MSN: andre.schikovski@bematech.com.br Skype: suporte.andre.luiz OZIEL LOPES FW 22c - Clipper 5.3b - Workshop 4.0 FWH 6.12 Free - xHarbour 0.99.71 Simplex - BCC55 - Pelles C - xDev. Editado por - oziel on 21/09/2011 11:20:52 Quote Link to comment Share on other sites More sharing options...
oziel Posted September 8, 2011 Author Report Share Posted September 8, 2011 Colegas recebi esse email da Bematech - trata-se da verificação se existe uma Redução Z pendente. Está escrito em Delphi e VB - considero que dar para fazer em FW - para que usa as Imp. Bematech. Meus progr. em FWH estão voltados a área de RH, Psicologia Ocupacional e Controle de Bibliotecas. Mas, espero que as dicas sirvam... ATT Oziel Lopes. //---------------------------------------------------- Caro Partner e Desenvolvedor Bematech, Nesta edição de nosso Flash Tip, estaremos tratando uma das situações de nossos ECFs e de grande importância dentro de qualquer aplicação de PDV, que é a verificação do status da Redução Z (RZ). A verificação desse status é fundamental no momento em que a aplicação de PDV é iniciada, pois é com ela que podemos tratar e informar ao operador se a impressora fiscal está aguardando o fechamento do dia anterior (pendente de RZ), se já está preparada para realizar o movimento de vendas do dia ou se já houve RZ no dia. Para essa verificação, usaremos duas funções da BemaFI32/BemaFI64.dll. São elas: Bematech_FI_DataMovimento Bematech_FI_DataHoraUltimaReducaoMFD Bematech_FI_DataMovimento Com essa função podemos obter o retorno referente à data do movimento atual da impressora fiscal. Declaração em Delphi function Bematech_FI_DataMovimento( Data: String ): Integer; StdCall; External ‘BEMAFI32.DLL’; Uso em Delphi (…) for iConta := 1 to 7 do DataMovimento := DataMovimento + ‘ ‘; iRetorno := Bematech_FI_DataMovimento( DataMovimento ); (…) Declaração em Visual Basic Public Declare Function Bematech_FI_DataMovimento Lib “BEMAFI32.DLL†(ByVal Data As String) As Integer Uso em Visual Basic (…) DataMovimento = Space(7) iRetorno = Bematech_FI_DataMovimento(DataMovimento) (…) Bematech_FI_DataMovimentoUltimaReducaoMFD Com essa função podemos obter o retorno referente à data do movimento da última RZ emitida na impressora fiscal. Declaração em Delphi function Bematech_FI_DataMovimentoUltimaReducaoMFD( cData: String ): Integer; StdCall; External ‘BEMAFI32.DLL’; Uso em Delphi (…) for iConta := 1 to 7 do cDataMovimento := cDataMovimento + ‘ ‘; iRetorno := Bematech_FI_DataMovimentoUltimaReducaoMFD( cDataMovimento ); (…) Declaração em Visual Basic Public Declare Function Bematech_FI_DataMovimentoUltimaReducaoMFD Lib “BEMAFI32.DLL†(ByVal cData As String) As Integer Uso em Visual Basic (…) cDataMovimento = space(7) iRetorno = Bematech_FI_DataMovimentoUltimaReducaoMFD(cDataMovimento) (…) Agora que já conhecemos as duas funções, passamos a descrever como seus retornos devem ser tratados dentro da aplicação de PDV. Em nossa análise, utilizamos a função de retorno da data do movimento da ultima redução Z primeiro (Bematech_FI_DataMovimentoUltimaReducaoMFD) e, em seguida, a função de retorno da data do movimento atual da impressora (Bematech_FI_DataMovimento). Para um melhor entendimento, usaremos as siglas: DT_RZ = Data do movimento da última RZ. DT_MOV = Data do movimento atual. 1º Caso: DT_RZ = 00000 (ddmmaa) e DT_MOV = data atual Neste caso, não houve movimento no dia anterior e a RZ referente já foi emitida. OBS: Quando o retorno da data do movimento corresponde à data atual, isso indica que já houve registro de valor no dia na impressora fiscal. 2º Caso: DT_RZ = data anterior e DT_MOV = data anterior A RZ está pendente na impressora (ECF deve imprimir mensagem “Aguardando Redução Z†ao ser ligado). OBS: Quando o retorno da data do movimento é a data atual, isso garante que no dia anterior houve ao menos um registro de valor na impressora fiscal. 3º Caso: DT_RZ = data atual e DT_MOV = 000000 (ddmmaa) Aqui temos a RZ já executada na impressora fiscal, ou seja, a RZ do dia atual já foi emitida não permitindo abrir o movimento, sendo que o ECF ficará bloqueado até a mudança do dia (00:00h). 4º Caso: DT_RZ = 000000 (ddmmaa) e DT_MOV = 000000 (ddmmaa) Neste caso, para analisar se a impressora fiscal está bloqueada ou se já teve a RZ do dia atual emitida, teremos que utilizar uma terceira função – a Bematech_FI_DataHoraReducao -, além da leitura da data do movimento atual (DT_MOV) e da ultima RZ (DT_RZ). A função Bematech_FI_DataHoraReducao retorna duas strings com a data e com a hora de emissão da ultima RZ. Quando a data da última RZ estiver zerada e a data do movimento também, podemos ter situações distintas, conforme explicamos abaixo: RZ do dia anterior já emitida (DT_RZ) sem o registro de valor na impressora fiscal e dia atual (DT_MOV) ainda não iniciado; Aqui, teremos o retorno da data correta de emissão da RZ, lendo a data de emissão da mesma, pela função Bematech_FI_DataHoraReducao. RZ do dia atual (DT_RZ) já emitida sem registro de valor (DT_MOV). Aqui, se a data retornada for igual a data atual temos o dia fechado, sem movimento de vendas bloqueando a impressora até a 00:00h. Declaração em Delphi function Bematech_FI_DataHoraReducao( Data: String; Hora: String ): Integer; StdCall; External ‘BEMAFI32.DLL’; Uso em Delphi (…) for iConta := 1 to 7 do DataReducao := DataReducao + ‘ ‘; for iConta := 1 to 7 do HoraReducao := HoraReducao + ‘ ‘; iRetorno := Bematech_FI_DataHoraReducao( DataReducao, HoraReducao ); (…) Declaração em Visual Basic Public Declare Function Bematech_FI_DataHoraReducao Lib “BEMAFI32.DLL†(ByVal Data As String, ByVal Hora As String) As Integer Uso em Visual Basic (…) DataReducao = Space(7) HoraReducao = Space(7) iRetorno = Bematech_FI_DataHoraReducao(DataReducao, HoraReducao) (…) Sendo assim, quando ambas as variáveis (DT_RZ e DT_MOV) tiverem o valor zerado, analisando a data e hora da ultima RZ, será possÃvel identificar se podemos iniciar o movimento de valor na impressora fiscal ou se a mesma estará bloqueada pela RZ. Esperamos que essa descrição detalhada das funções e também de como tratar seus retornos auxilie você na implementação desta rotina em sua aplicação de PDV. Caso surjam dúvidas, estamos à disposição para esclarecê-las através de nossos canais de atendimento. Um forte abraço e até o próximo Flash Tip. André L. Schikovski Equipe BSP – Bematech Software Partners 0800 644 7277 Email/MSN: andre.schikovski@bematech.com.br Skype: suporte.andre.luiz OZIEL LOPES FW 22c - Clipper 5.3b - Workshop 4.0 FWH 6.12 Free - xHarbour 0.99.71 Simplex - BCC55 - Pelles C - xDev. Editado por - oziel on 21/09/2011 11:20:52 Quote Link to comment Share on other sites More sharing options...
sambomb Posted September 8, 2011 Report Share Posted September 8, 2011 Obrigado pelo exemplo! Acho ridÃculo não terem ainda uma função única para retornar o status do dia fiscal... Algo como StatusDiaFiscal(@cVariavel,@cMensagem) MsgAlert(cMensagem)//-- "Redução Z já emitida" / "Redução Z Pendente" / etc If nVariavel = "0" //-- Dia Fiscal aberto Elseif nVariavel = "1" //-- Z Pendente Elseif nVariavel = "2" //-- Z Já emitida Elseif nVariavel = "3" //-- X Pendente end RCA Sistemas - Itaocara - RJ Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.