Olá pessoal,
Hoje venho mostrar 3 novas funções da darumaframework.dll, que devolvem status sobre a impressora.

.
rStatusImpressoraBinario_ECF_Daruma
.rConsultaStatusImpressoraInt_ECF_Daruma
.rConsultaStatusImpressoraStr_ECF_Daruma

Vamos ao 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());
        }




Delphi:


function  rConsultaStatusImpressoraInt_ECF_Daruma(iIndice:Integer; iRetorno:Integer): Integer; StdCall; External 'DarumaFramework.dll';
  
SetLength (iRetorno,2);
Int_Retorno := rConsultaStatusImpressoraInt_ECF_Daruma(iIndice, iRetorno);



VB6:


Public Declare Function rConsultaStatusImpressoraInt_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 = rConsultaStatusImpressoraInt_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.


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!