Devido à descontinuação da versão 5.10.3, que ocorrerá em 30/09/2025, informamos que este manual não receberá atualizações a partir desta data. Para mais informações sobre a evolução do Gestão Empresarial | ERP, acesse a documentação sobre a PCVV - Política do Ciclo de Vida das Versões.

Informamos que as funcionalidades da Reforma Tributária estão disponíveis apenas a partir da versão 5.10.4 do Gestão Empresarial.
Acesse o Portal de Exigências Legais da Senior para saber como preparar o seu negócio!

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)

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;

Este artigo ajudou você?