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.
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:
O que foi Retornado na Aplicação
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,
|