Business - Automação Comercial

Tratamento de Retornos na DarumaFramework.dll

Veja como é simples obter o retorno das funções enviadas para o ECF.

por Daruma Developer



Quando prestamos um concurso ou uma prova de certificação, todos gostariam de ter o resultado na hora, certo?

Da mesma maneira acontece quando estamos programando!

Desenvolvemos o código, mas antes de rodar e fazer todos os testes necessários, não teremos a resposta se a solução é funcional ou não.

É o que acontece quando chamamos uma função; a mesma pode ser executada com sucesso ou não.


Por quê? Porque não adianta trabalhar sem saber o resultado na hora da execução ou ter todo aquele trabalho de rodar o sistema em modo debug.


Os mais de 230 métodos disponibilizados na DarumaFramework.dll possuem retornos, que indicam se a execução do método ocorreu com sucesso ou não, se tem algum aviso com relação à execução e ainda no caso de uma execução mal sucedida nos indica o motivo da Não-Execução(Erro).

Como, por exemplo:
Erro Ex. RZ do movimento anterior pendente.
Confira mais na tabela de erros:
http://bit.ly/stw9Re

Aviso: Ex. Papel acabando
Confira mais na tabela de avisos:
http://bit.ly/uWSqW0

Configurando o DarumaFramework.xml:

O DarumaFramework.XML possui uma chave exclusiva para facilitar no tratamento de retornos.
Sim, a chave<RetornarAvisoErro>1</RetornarAvisoErro>, caso o valor desta chave seja “0”, os retornos de método serão limitados a“0” (Método Não Executado)e”1” (MétodoExecutado), sendo sempre necessário analisar os códigos de erro e aviso.

Quando o valor da chave for configurado para “1” retornará o inteiro “-12” no Retorno do Método caso o método executado tenha algum aviso ou erro.

http://www.daruma.com.br/ddemkt_imagem/img_dde_011_02.jpg


Assim podemos reduzir o tratamento de erros e avisos, tratando erro e aviso apenas se o Retorno do Método for < 1, caso sim mostre o retorno conforme a tabela de retornos. Caso o retorno do método venha =1, é sinal que o método foi executado com sucesso, não precisando chamar as funções para verificação de erros e avisos.

Funções:

Primeiramente antes de trabalhar com um retorno necessitamos chamar uma função, logo em seguida para receber os códigos de erro e aviso referentes ao último comando executado, devemos utilizar o método:
rStatusUltimoCmdInt_ECF_Daruma

Este método possui 2 variáveis inteiras indicadas por referência para receber o número de erro e de aviso.

Agora você deve estar pensando:
-Poxa, agora vem aquele monte de IF, CASE etc...

Como, por exemplo:

If (Int_NumAviso <> 0) Then

Select Case Int_NumAviso

Case "1"
Str_Msg_NumAviso = "[1] - Papel Acabando"
Case "2"
Str_Msg_NumAviso = "[2] - Tampa aberta"
Case "3"
Str_Msg_NumAviso = "[4] - Bateria fraca"
Case "4"
Str_Msg_NumAviso = "[40] - Compactando"
Case Else ' Se o NumAviso desconhecido
Str_Msg_NumAviso = "[" + Str_Msg_NumAviso + "] - Aviso Desconhecido!"
End Select
Else
'Se Aviso = 0 (ok)
Str_Msg_NumAviso = "[0] - Sem Aviso"
End If

Chega destas rotinas! Com a DarumaFramework.dll nosso problema esta resolvido com apenas 2 funções para interpretar os retornos.
Para analisar os códigos recebidos pela função rStatusUltimoCmdInt_ECF_Daruma, não precisamos mais realizar vários testes de comparação de valores, podemos utilizar os comandos:eInterpretarErro_ECF_DarumaeeInterpretarAviso_ECF_Daruma.
Ambos os métodos possuem 2 parâmetros cada, um inteiro que usamos para indicar o código que foi recebido e uma variável String para receber a descrição do erro.
Esta String, já contém o numero e descrição do código, prontinha para ser exibida para o usuário, não precisando ser montado uma imensa estrutura de condições (IF/Cases) como demonstrado mais acima.

Conhecendo esta facilidade na prática:


VB6

Private Sub LeituraX_Click()

Dim int_erro, int_aviso As Integer
Dim str_erro, str_aviso As String
str_erro = Space(100)
str_aviso = Space(100)

iRetorno = iLeituraX_ECF_Daruma
If (iRetorno < 1) Then

iRetorno = rStatusUltimoCmdInt_ECF_Daruma(int_erro, int_aviso)

iRetorno = eInterpretarAviso_ECF_Daruma(int_aviso, str_aviso)
iRetorno = eInterpretarErro_ECF_Daruma(int_erro, str_erro)
MsgBox (CStr(str_erro) + CStr(str_aviso))

Else
MsgBox ("Método executado com Sucesso")

End If

End Sub

C

void retornosExtendidos(int iRetornoMetodo)
{
int iErro;
int iAviso;
char cInterpreta[201];memset(cInterpreta, 0, sizeof((string) cInterpreta));
if(iRetornoMetodo < 1)
{
rStatusUltimoCmdInt_ECF_Daruma(&iErro,&iAviso);
eInterpretarErro_ECF_Daruma(iErro,cInterpreta);
printf("Erro ECF: %s\n", cInterpreta);
eInterpretarAviso_ECF_Daruma(iAviso,cInterpreta);
printf("Aviso ECF: %s\n\n\n", cInterpreta);
printf("-------------------------------------------------------------------------------\n");
}
else
{
printf("Comando Executado com Sucesso!!!, Sem Erros e Sem Avisos\n\n");
printf("-------------------------------------------------------------------------------\n");
}
}

C(Sharp)
private void métodoILeituraXECFDarumaToolStripMenuItem_Click(object sender, EventArgs e)
{
DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iLeituraX_ECF_Daruma();


int Int_NumErro = 0;
int Int_NumAviso = 0;

if (DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno == 1)
{

System.Windows.Forms.MessageBox.Show("Método executado com Sucesso!");

}

else
{
StringBuilder Str_Msg_NumErro = new StringBuilder(300);
StringBuilder Str_Msg_NumAviso = new StringBuilder(300);

DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rStatusUltimoCmdInt_ECF_Daruma(ref Int_NumErro,
ref Int_NumAviso);
DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.eInterpretarErro_ECF_Daruma(Int_NumErro, Str_Msg_NumErro);
DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.eInterpretarAviso_ECF_Daruma(Int_NumAviso, Str_Msg_NumAviso);

System.Windows.Forms.MessageBox.Show(Convert.ToString((Str_Msg_NumAviso)));
System.Windows.Forms.MessageBox.Show(Convert.ToString((Str_Msg_NumErro)));

}
}
Delphi:

procedure TLeituraXECFDaruma1Click(
Sender: TObject);

begin

Int_Retorno:= iLeituraX_ECF_Daruma();
Int_NumErro:= 0;
Int_NumAviso:= 0;
Str_Msg_NumErro:=StringOFChar(' ',300);
Str_Msg_NumAviso:=StringOFChar(' ',300);
Str_Msg_RetMetodo:=StringOFChar(' ',300);

Int_Retorno:=rStatusUltimoCMDInt_ECF_Daruma(Int_NumErro, Int_NumAviso);

// Mensagem do erro
Int_Retorno:=eInterpretarErro_ECF_Daruma(Int_NumErro, Str_Msg_NumErro);
// Mensagem aviso
Int_Retorno:=eInterpretarAviso_ECF_Daruma(Int_NumAviso, Str_Msg_NumAviso);

Str_Erro:=Str_Msg_NumErro;
Str_Aviso:=Str_Msg_NumAviso;
Str_Msg_Retorno_Metodo:=Str_Msg_RetMetodo;

Application.MessageBox( Pchar('Número Erro = ' + pchar(Str_Erro) + #13 + 'Número Aviso = ' + pchar(Str_Aviso)), 'DarumaFramework Retorno do Método', mb_ok);

end;

E já que estamos falando de retornos dos métodos, você sabia que a maior parte dos métodos nos devolve também umaInformação Estendida?

A Informação Estendida nada mais é, do que uma informação extra para facilitar um posterior trabalho. Estas informações sobre cada método nos permitem obter informações
como, por exemplo:COO, CCF, Sub Total, etc., com relação ao último comando de impressão enviado, sem a necessidade de executar outros métodos, fazer cálculos ou criar rotinas para obter estas informações.
E tudo isto foi desenvolvido na intenção de otimizar a aplicação e proporcionar mais este recurso para um rápido desenvolvimento.

Como é o caso da função iCFTotalizarCupom_ECF_Darumaonde é possível capturar oSubtotal do Cupom Fiscal.
No exemplo citado acima, da funçãoiCFTotalizarCupom_ECF_Daruma,é possível capturar apenas uma Informação Estendida, que é, oSubtotal do Cupom Fiscal.
Para capturar esta informação é necessário chamar a função de Resposta Estendida:
rInfoEstentida_ECF_Daruma

Parâmetros:
1- Índice da Informação Desejada.
2- Variável por referência para receber a resposta estendida

Vejamos na prática:

· Foi aberto o Cupom Fiscal

· Vendido o Item

· Totalizado o Cupom

· Solicitada a Resposta Estendida índice 1(Subtotal)

Código da chamada da função de Totalização e da Informação Estendida

private void Totalizar_Click(object sender, EventArgs e)
{
string Str_ValorDescAcresc, Str_TipoDescAcresc;

Str_ValorDescAcresc = TB_ValorDescAcresc.Text.Trim();
Str_TipoDescAcresc = TB_Tipo_Desc_Acresc.Text.Trim();
StringBuilder Str_Informacao = new StringBuilder(100);

DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iCFTotalizarCupom_ECF_Daruma
(Str_TipoDescAcresc, Str_ValorDescAcresc);
DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.iRetorno = DarumaFramework_DLL.DarumaFramework_Declaracoes_CSharp.rInfoEstentida_ECF_Daruma
(1, Str_Informacao);
MessageBox.Show(Str_Informacao.ToString());


}
}


O que foi Impresso no Cupom Fiscal:

http://www.daruma.com.br/ddemkt_imagem/img_dde_011_04.jpg


O que foi Retornado na Aplicação

http://www.daruma.com.br/ddemkt_imagem/img_dde_011_05.jpg

Viu só como é fácil? Agora é só implementar mais este recurso que a Daruma desenvolveu exclusivamente para você parceiro desenvolvedor!

Um abraço a todos,

Daruma Developer

Daruma Developer