none
OFF-TOPIC: Palavra de Status na DarumaFramework.dll RRS feed

  • Discussão Geral

  • Olá pessoal,
    Nas dll obsoletas tínhamos uma função que nos retornava algumas Flags Fiscais sobre o ECF, como por exemplo:

    .Cupom Fiscal aberto                                                    1
    .Fechamento de formas de pgto iniciado                  2
    .Horário de verão selecionado                                    4
    .Já houve redução Z no dia                                           8
    .Permite Cancelar o Cupom Fiscal                      32
    .Memória Fiscal sem espaço                               128


    Onde a função nos retornava a somatória dos valores referentes as informações de Flags Fiscais.


    No exemplo da imagem acima foi aberto um Cupom Fiscal e em seguida chamado o método para capturar a Flag Fiscal, que retornou 33, onde 33 é a somatória de:
    Cupom Fiscal aberto + Permite Cancelar o Cupom Fiscal
                  1                                              32                                       =                       33

    Só que agora não precisa mais fazer todos aqueles if/cases!
    Na DarumaFramework.dll tudo isto muda! Agora, você pode contar com a obtenção de muita mais informação, pelas funções da Palavra de Status de uma maneira bem mais fácil.
     
    Funções:
     
    .rStatusImpressora_ECF_Daruma
    .
    rStatusImpressoraBinario_ECF_Daruma
    .rConsultaStatusImpressoraInt_ECF_Daruma
    .rConsultaStatusImpressoraStr_ECF_Daruma


    rStatusImpressora_ECF_Daruma:

    Este método nos permite saber o status do ECF realizando a leitura de 14 bytes, onde são a somatória das informações relacionadas ao ECF.
    A função possui uma tabela subdivida em S(x) aonde x é cada byte da informação retornada sobre o ECF. Não se assuste, você deve pensar como saber 4 informação distintas com apenas um valor, mais é bem tranquilo...

    S4
    b3
    0 = Ainda não emitiu RZ hoje (Dia Aberto)             8

         1 = Já emitiu RZ não pendente hoje

    b2 0 = Não há RZ pendente                                            4

         1 = RZ do dia anterior pendente

    b1 0 = Near End não detectado                                      2

         1 = Near End detectado

     

    b0 0 = Bobina de papel presente                                ←   1

         1 = Bobina de papel ausente


    Por exemplo acima é demonstrado o S4, onde se refere a quarta posição da palavra de Status.
    O S4 é composto por 4 informações e caso a informação retorne 1, o valor indicado pela seta azul entrará na soma da Palavra de Status. Quando houver mais de um valor, os valores serão somados, e caso ultrapassarem 1 digito entrarão na Palavra de Status como hexadecimal.

    Se a função nos retornasse:
     A4C40C00000000

    Isto indica que RZ do dia anterior pendente!
    Pois a informação foi verdadeira, então 4 bytes constaram na Palavra de Status!

    Agora se fosse o caso da palavra retornar:
    A40A0C00000000
    A palavra retornou em hexadecimal, pois só pode ter 14 bytes na Palavra de Status quando iria ultrapassar se fosse inserido o numero 10.

    Veja que 10 é a soma de 2+8...            J
    Isto quer dizer que duas informações foram diferentes de zero...

    .Near End detectado
    .Já emitiu RZ não pendente hoje


    Confira a tabela para visualizar todas as informações de retornos:
    http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2011/Help/DarumaFrameworkHelpOnline/DarumaFramework/Impressora_Fiscal/Tabelas_Auxiliares/Tabela_de_Status.htm

    Fácil né? Mais segura ai, pois desenvolvemos bem mais funções para facilitar este trabalho, continue lendo...  


    rStatusImpressoraBinario_ECF_Daruma:

    Este método nos permite saber o status atual do ECF, como: Modo Fiscal, Se a tampa está aberta, e até mesmo se há bobina ou não...

    Mas não para por ai, está função retorna o status binário de 18 informações muito uteis em relação ao ECF.

    Seu parâmetro é:
    Variável:                Tam:       Descrição:

    pszStatus                 18          Variável por referência que ira receber 18 dígitos.
    Cada digito binário representa uma informação de status do ECF.

    Consulte já a Tabela:


    http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2011/Help/DarumaFrameworkHelpOnline/DarumaFramework/Impressora_Fiscal/Retornos_e_Status/rStatusImpressoraBinario_ECF_Daruma.htm

    A função nos devolve:
    Ex:
    Status Binário da Impressora: 000000001100000000

    Vejamos na prática:
    C#
    public static extern int rStatusImpressoraBinario_ECF_Daruma([MarshalAs(UnmanagedType.VBByRefStr)] ref string Status);

            [DllImport("DarumaFrameWork.dll")]


    private
    void button1_Click(object sender, EventArgs e)

            {

                string Str_StatusBin = new string(' ', 20);

                DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rStatusImpressoraBinario_ECF_Daruma(ref Str_StatusBin);

                DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.DarumaFramework_Mostrar_Retorno(DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno);

     

                TB_Retorno.Text = "Status Binário da Impressora: " + Str_StatusBin.ToString();

            }

     

     

    Delphi:

    function rStatusImpressoraBinario_ECF_Daruma(pszStatus:String):Integer; StdCall; External
    'DarumaFramework.dll';

      

    SetLength (iRetorno,18);

    Int_Retorno := Int_Retorno := rStatusImpressoraBinario_ECF_Daruma(Str_Valor);

     

    VB6:
    Public Declare Function rStatusImpressoraBinario_ECF_Daruma Lib "DarumaFramework.dll" (ByVal pszStatus As String, ByVal) As Integer

    Private Sub botao_Click()

    Dim Int_Status As Integer

     

            Int_Status = Space(18)

     iRetorno = rStatusImpressoraBinario_ECF_Daruma(Int_Status)

            MsgBox(CStr(Int_Status))


    End Sub

    Comunicação Direta:


    Comando:
        Palavra de Status

    Sintaxe:       [GS] [ACK]

    Parâmetros: Nenhum

    Resposta:   S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 [DDMMAA] [CR]

    Nota:           Em modo Resposta Estendida, a palavra de status é acrescida de 6                dígitos,    correspondentes a Data do Movimento

    Viu só! Mais fácil que isto impossível...
    J


    Agora nossa segunda função: rConsultaStatusImpressoraInt_ECF_Daruma
    Esta função nos retorna 1 ou 0 indicando se o índice informado esta habilitado ou não, segue a mesma tabela da função rStatusImpressoraBinario_ECF_Daruma que vimos a pouco mais.

    Porem você programa o índice do Status especifico que deseja obter a informação.

    Seus parâmetros são:
    Variável:                Tam:       Descrição:

    iIndice                       2             Índice da Informação desejada            
    iRetorno                    --             Variável Inteira por referência que ira receber o status 1 ou 0.

    Por exemplo, se passarmos Índice: 05 a função nos devolverá 0 – que é: “Ainda não emitiu RZ hoje (com dia fiscal aberto)” ou 1 – que é: “Já emitiu RZ não pendente hoje”.

    Vejamos na prática:
    C#
    [DllImport("DarumaFrameWork.dll")]

            public static extern int rConsultaStatusImpressoraInt_ECF_Daruma(int iIndice, ref int IStatus);


     private void BT_botao_Click(object sender, EventArgs e)

            {

                int Int_Valor = 0;

                string Str_Indice = Microsoft.VisualBasic.Interaction.InputBox("Informe o Índice desejado:", "Daruma Framework", "1", posX, posY);

     

                DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rConsultaStatusImpressoraInt_ECF_Daruma(Convert.ToInt32(Str_Indice), ref Int_Valor);

                MessageBox.Show("Status = " + Int_Valor.ToString());

            }

    Temos também a opção de passar o Índice e Obtermos a informação em texto do status da impressora referente ao índice informado.

     Com nossa ultima função de hoje que é: rConsultaStatusImpressoraStr_ECF_Daruma.

     

    Seus parâmetros são:
    Variável:                Tam:       Descrição:

    iIndice                       2             Índice da Informação desejada            
    szStatus                    --             Variável String por referência que retorna o Status do Índice informado.

    Vejamos na prática:

    C#
    [DllImport("DarumaFrameWork.dll")]

            public static extern int rConsultaStatusImpressoraStr_ECF_Daruma(int iIndice, [MarshalAs(UnmanagedType.VBByRefStr)] ref string StrStatus);

            [DllImport("DarumaFrameWork.dll")]

    private void métodoRConsultaStatusImpressoraStrECFDarumaToolStripMenuItem_Click(object sender, EventArgs e)

            {

                string Str_Valor = new string(' ', 60);

                string Str_Indice = Microsoft.VisualBasic.Interaction.InputBox("Informe o Índice desejado:", "Daruma Framework", "1");

               

                DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rConsultaStatusImpressoraStr_ECF_Daruma(Convert.ToInt32(Str_Indice), ref Str_Valor);

               

                MessageBox.Show("Status = " + Str_Valor);

            }
     


    Delphi:
    function  rConsultaStatusImpressoraStr_ECF_Daruma(iIndice:Integer; szStatus:String): Integer; StdCall; External 'DarumaFramework.dll';

      

    SetLength (Str_Informacao,150);

    Int_Retorno := rConsultaStatusImpressoraStr_ECF_Daruma(1, Str_Informacao);

     

    VB6:
    Public Declare Function rConsultaStatusImpressoraStr_ECF_Daruma Lib "DarumaFramework.dll" (pszIndice As String, ByVal pszRetorno As String) As Integer

    Private Sub BT_Botao_Click()

     Dim Str_Indice, Str_Retorno  As String

           

            Str_Indice = TB_Indice.Text

                 

            Str_Indice = Space(2)

            iRetorno = rConsultaStatusImpressoraStr_ECF_Daruma(Str_Indice, Str_Retorno)

            MsgBox (Str_Retorno)

    End Sub

     

     

    Comunicação Direta:


    Comando:
        Palavra de Status

    Sintaxe:    [GS] [ACK]

    Parâmetros: Nenhum

    Resposta:   S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 [DDMMAA] [CR]

    Nota:       Em modo Resposta Estendida, a palavra de status é acrescida de 6                dígitos, correspondentes a Data do Movimento.

     

    Ai vai mais uma dica para facilitar seu desenvolvimento!

    Um abraço e até a próxima!

     



    terça-feira, 13 de dezembro de 2011 19:23