Pendência de Cancelamento
Contexto
Esse recurso melhora a integridade no processo de cancelamento de notas fiscais de saída pela tela F140CAN. Esse processo é um complemento ao uso dos identificadores de regra VEN-140CANAE01 e VEN-140CANAE02.
Caso ocorra um erro durante o processo, após a nota ser enviada ao sistema de documentos eletrônicos, poderia ocorrer um rollback no sistema, deixando a nota com uma situação incorreta.
Parametrização
Para ativar a rotina, deve-se ativar o identificador de regras VEN-140CANAE01 na empresa desejada. Não é necessário vincular um código de regras.
Caso o processo de cancelamento seja feito por AcaoSID, o identificador VEN-140CANAE02 deverá ser utilizado.
Cancelando a Nota
1. Tela Emissão ou Cancelamento de Notas Fiscais de Saída (F140CAN)
- Nessa tela será exibida uma janela de confirmação com a seguinte mensagem: Confirma cancelamento dos documentos fiscais?". Caso queira prosseguir com o cancelamento, clique em "Sim".
- Ao processar com o identificador ativo, o sistema armazenará em uma lista todas as notas que deverão ser canceladas. Se tudo estiver correto, as notas serão gravadas no banco de dados e canceladas no sistema ERP. Caso ocorra algum erro, o sistema abortará todo o processo.
- Após essa gravação no banco de dados, também é realizado o salvamento das informações referentes às notas na tabela E140ADE.
- Também é possível indicar uma tabela de usuário para salvar o registro em outra tabela utilizando o identificador de regras VEN-140AESAL01. Somente após isso é realizado a emissão do cancelamento.
- Junto com a emissão do cancelamento é feita a atualização do registro na tabela E140ADE. Caso a emissão seja feita com sucesso, os seguintes dados serão atualizados: SitIex com valor "S" e DatExe com a data e hora atual. Caso ocorra um erro na emissão do cancelamento, os seguintes dados serão atualizados: SitIex com valor "E", UsuAlt com o usuário logado, DatAlt com a data e hora atual e MsgErr com a mensagem do erro.
Cancelando a Ação Eletrônica Pendente
Quando ocorrer um erro no cancelamento, será gerado um registro na tabela E140ADE com a situação "E", e a nota fiscal ficará como "Cancelada". No entanto, a situação eletrônica da nota continuará como "3 - Autorizada", pois a emissão do cancelamento não foi concluída.
Para solicitar novamente a emissão do cancelamento dessa nota, pode-se utilizar a função de programador ExecutarAcaoEletronicaPendente(), que será executada por uma regra LSP e enviará ao sistema os dados salvos na tabela E140ADE ou na tabela de usuário informada pelo usuário do sistema no identificador VEN-140AESAL01.
Consideremos um processo automático que executará a regra: ao executar, será feita uma busca na tabela E140ADE ou na tabela de usuário por registros cuja situação seja "E" ou "P" e cuja data de geração tenha uma diferença de um dia em relação à data atual.
As variáveis serão populadas com os valores salvos, para então chamar a função de programador ExecutarAcaoEletronicaPendente(), enviando os dados como parâmetro. Com isso, o sistema executará novamente a emissão do cancelamento para aquela nota.
Segue exemplo de regra LSP utilizando a tabela nativa do sistema (E140ADE):
Definir Funcao CursorVariaveis(); Definir Funcao TratarRetorno(); Definir Numero VenNCodEmp; Definir Numero VenNCodFil; Definir Alfa VenACodSnf; Definir Alfa VenAAbrNfv; Definir Alfa VenATipAde; Definir Alfa VenASimEmi; Definir Alfa VenARotOri; Definir Alfa xResultado; Definir Cursor cE140ADE; Definir Alfa Cursor_E140ADE; Definir Alfa xSQL; Definir Alfa xDiasEntreDatas;
/* Usa a funcao DiasEntreDatas para montar uma condicao SQL que traz uma quantidade de dias da geracao do registro ate a data atual.
@param pDataIni data inicial usada na condicao SQL;
@param pDataFim data final. Opcional;
@param pUsarDataAtual indicativo se deve usar a data atual do sistema na hora de montar a condicao SQL;
@param pResultado variavel de retorno;
*/
DiasEntreDatas("DATGER", "", 1, xDiasEntreDatas);@ Caso for usado tabela de usuario, alterar para o nome da tabela e campos de usuario @ xSQL = "SELECT IDEUNI, CODEMP, CODFIL, CODSNF, ABRNFV, TIPADE, SIMEMI, ROTORI \ FROM E140ADE \ WHERE (SITIEX = 'E') \ OR (SITIEX = 'P' AND " + xDiasEntreDatas + " > 1) ";
Sql_Criar(Cursor_E140ADE); Sql_UsarSQLSenior2(Cursor_E140ADE, 0); Sql_UsarAbrangencia(Cursor_E140ADE, 0); Sql_DefinirComando(Cursor_E140ADE, xSQL); Sql_AbrirCursor(Cursor_E140ADE);
Enquanto (Sql_Eof(Cursor_E140ADE) = 0) Inicio CursorVariaveis(); ExecutarAcaoEletronicaPendente(VenNIdeUni, VenNCodEmp, VenNCodFil, VenACodSnf, VenAAbrNfv, VenATipAde, VenASimEmi, VenARotOri, xResultado); Sql_Proximo(Cursor_E140ADE); Fim;
Sql_FecharCursor(Cursor_E140ADE); Sql_Destruir(Cursor_E140ADE);
Funcao CursorVariaveis(); Inicio Sql_RetornarInteiro(Cursor_E140ADE, "IDEUNI", VenNIdeUni); Sql_RetornarInteiro(Cursor_E140ADE, "CODEMP", VenNCodEmp); Sql_RetornarInteiro(Cursor_E140ADE, "CODFIL", VenNCodFil); Sql_RetornarAlfa(Cursor_E140ADE, "CODSNF", VenACodSnf); Sql_RetornarAlfa(Cursor_E140ADE, "ABRNFV", VenAAbrNfv); Sql_RetornarAlfa(Cursor_E140ADE, "TIPADE", VenATipAde); Sql_RetornarAlfa(Cursor_E140ADE, "SIMEMI", VenASimEmi); Sql_RetornarAlfa(Cursor_E140ADE, "ROTORI", VenARotOri); Fim;
English
Español
English
Español


