Abaixo voce pode analisar o meu módulo de manipulação SAT, em Fivewin, para ter idéias e subsídios:
Código: Selecionar todos
/////////////////////////////////////////////////////////////////////////////
//
// PDVSAT - Compativeis com SAT 4.00
//
// Autor: Jose Carlos da Rocha
// Data: 14/11/2012
// Email: contato@5volution.com.br
// MSN: fivolution@hotmail.com
// Linguagem: xBase
// Prefixo: SAT_
// Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour( Para uso com Clipper eliminar Prefixo )
// Versao SAT: 4.00
// Codigo de barras
// D:\develop\TRABALHO\PRG\HarbourBoleto\source\boleto
/////////////////////////////////////////////////////////////////////////////
#include "Fivewin.ch"
#include "edx.ch"
#include "dll.ch"
function SATTeste()
LOCAL oNetInterface
PUBLIC hACBrDLL, numeroSessao := nRandNum := Random( 999999 )
cPath := cFilePath( GetModuleFileName( GetInstance() ) )
? "SAT.dll carregada",hACBrDLL := LoadLibrary( cPath+"SAT.DLL" )
? "ConsultarSAT",ConsultarSAT( Random( 999999 ) )[3]
? "AtivarSAT",AtivarSAT( Random( 999999 ), 1, "123456", "11111111111111", 35 )[3]
//? "ConsultarNumeroSessao",ConsultarNumeroSessao( Random( 999999 ), "123456", "" )[3]
cCFeTeste := MemoRead( cPath+"CFeTeste.xml" )
//? "TesteFimAFim",TesteFimAFim( Random( 999999 ), "123456", cCFeTeste )[4]
? "EnviarDadosVenda",EnviarDadosVenda( Random( 999999 ), "123456", cCFeTeste )[4]
cCFeCanc := "<CFeCanc>" + ;
" <infCFe>" + ;
" <emit>" + ;
" <CNPJ>01234567891234</CNPJ>" + ;
" <IE>6546546546546655</IE>" + ;
" <IM>654654654654</IM>" + ;
" </emit>" + ;
" <dest>" + ;
" <CNPJ>01234567891234</CNPJ>" + ;
" <CPF>01234567891</CPF>" + ;
" </dest>" + ;
" <total>" + ;
" <vCFe>59.05<vCFe>" + ;
" </total>" + ;
" </infCFe>" + ;
"</CFeCanc>"
if MsgYesNo( "Cancelar ultima venda?", "Cancelamento" ) = "S"
? CancelarUltimaVenda( Random( 999999 ), "123456", "CFe35121111111111111111590000000070000011047808", cCFeCanc )
endif
return nil
/////////////////////////////////////////////////////////////////////////////
Function CFeAtivar()
PUBLIC hACBrDLL
hACBrDLL := LoadLibrary( cPathDados+"SAT.DLL" )
if hACBrDLL > 0
cPathSAT := VerifyINI( "PATHS", "PathSAT", cPath+"\SAT\remessa\SAT", cPathDados+"\nfw.ini", .f.)
if ! MsgYesNo( "Continuar a salvar em "+alltrim(cPathSAT)+"?" )
cPathSAT := cGetDir("Salvar SAT na pasta",cPathSAT)
VerifyINI( "PATHS", "PathSAT", cPathSAT, cPathDados+"\nfw.ini", .t.)
endif
// PEGA DADOS DO EMITENTE - SOFWARE HOUSE
ClCNPJ := VerifyINI( "CLIENTE" ,"CGC" , "" , cPath+"\nfw.ini" )
cSHcnpj := VerifyINI( "SOFTWAREHOUSE","CGC" , cSHcnpj , cPath+"\nfw.ini" )
cSHAtivacao:= VerifyINI( "SOFTWAREHOUSE","Ativacao", cSHAtivacao , cPath+"\nfw.ini" )
cSHsignAC := VerifyINI( "SOFTWAREHOUSE","signAC" , cSHsignAC , cPath+"\nfw.ini" )
cRetorno := AtivarSAT( Random( 999999 ), 1, cSHAtivacao, CharRem( ",./-", ClCNPJ ), 35 )[3]
//? "AtivarSAT",cRetorno,CharRem( ",./-", ClCNPJ ),CharRem( ",./-", cSHcnpj )
oWnd:SetMsg( "SAT-CFe "+cRetorno+"..." )
SysWait( 4 )
endif
return nil
Function CFeGerar( _pedido_ )
PUBLIC hSATDLL
// CNPJ do contribuinte 11.111.111/1111-11
ClCNPJ := "11111111111111"
// CNPJ da Software House 22.222.222/2222-22
cSHcnpj := "22222222222222"
// Codigo de Ativacao
cSHAtivacao := "123123"
// Assinatura do AC concatenar CNPJ do contribuinte(11.111.111/1111-11) com CNPJ da Software House(22.222.222/2222-22)
cSHsignAC := SubStr( replicate( ClCNPJ + cSHcnpj, 13 ), 1, 344 )
// Puxa do INI de configuracao
ClCNPJ := VerifyINI( "CLIENTE" ,"CGC" , ClCNPJ , cPath+"\nfw.ini" )
cSHcnpj := VerifyINI( "SOFTWAREHOUSE","CGC" , cSHcnpj , cPath+"\nfw.ini" )
cSHAtivacao := VerifyINI( "SOFTWAREHOUSE","Ativacao", cSHAtivacao, cPath+"\nfw.ini" )
cSHsignAC := VerifyINI( "SOFTWAREHOUSE","signAC" , cSHsignAC , cPath+"\nfw.ini" )
if !file( cPathDados+"SAT.DLL" )
MsgStop( "SAT.dll nao encontrada em "+cPathDados, "SAT-Fiscal" )
else
FErase( "SAT.TXT" )
cPathSAT := VerifyINI( "PATHS", "PathSAT", cPath+"\SAT\remessa\SAT", cPathDados+"\nfw.ini", .f.)
cXMLCFePath:= cPathSAT+"\CFe"+strZero(PN->IDPEDIDO,5)+".XML"
cXMLFile := GeraXMLCFe( ,,,cPathSAT )
ClCNPJ := CharRem( "./-", ClCNPJ )
cSHcnpj := CharRem( "./-", cSHcnpj )
oWnd:SetMsg( "SAT-CFe: carregando driver..." )
hSATDLL := LoadLibrary( "C:\SAT\SAT.DLL" ) // cPath+"SAT.DLL" )
oWnd:SetMsg( "SAT-CFe: Consultando status..." )
cRespostaSAT := ConsultarSAT( Random( 999999 ) )[3]
SysWait( 4 )
//? "cRespostaSAT", cRespostaSAT, iif( "EM OPERA" $ upper(cRespostaSAT),"sim","nao"), upper(cRespostaSAT)
if "EM OPERA" $ upper(cRespostaSAT)
oWnd:SetMsg( "SAT-CFe: Driver carregado, ativando..." )
//?cSHAtivacao, ClCNPJ, CharRem( "./-", ClCNPJ ), cSHcnpj, CharRem( "./-", cSHcnpj ),;
cRespostaSAT := AtivarSAT( Random( 999999 ), 1, cSHAtivacao, ClCNPJ, 35 )[3]
SysWait( 4 )
if "ATIVADO CORRETAMENTE" $ upper(cRespostaSAT) .or. "JA ATIVADO" $ upper(cRespostaSAT)
oWnd:SetMsg( "SAT-CFe: Associando assinatura..." )
cRespostaSAT := AssociarAssinaturaSAT( Random( 999999 ), cSHAtivacao, ClCNPJ + cSHcnpj, cSHsignAC )
SysWait( 4 )
endif
oWnd:SetMsg( "SAT-CFe: Lendo conteudo do cupom..." )
cCFeTeste := MemoRead( cXMLFile )
SysWait( 4 )
if !empty(cCFeTeste)
oWnd:SetMsg( "SAT-CFe: Enviando dados de venda..." )
cRespostaSAT := EnviarDadosVenda( Random( 999999 ), cSHAtivacao, cCFeTeste )[4]
SysWait( 4 )
else
cRetorno := "SAT-CFe: Arquivo de dados nao foi criado."
oWnd:SetMsg( "SAT-CFe: "+cRetorno+"..." )
SysWait( 4 )
endif
else
oWnd:SetMsg( "SAT-CFe: não foi ativado corretamente, tente outra vez..." )
? "SAT-CFe: não foi ativado corretamente, tente outra vez..."
endif
endif
return nil
/////////////////////////////////////////////////////////////////////////////
Function ConsultarSAT( nSessionRandom )
// Consulta entre AC e Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
cString := SATConsultar( nSessionRandom )
aString := StringToArray( cString, "|" )
//? cString
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function ConsultarStatusOperacionalSAT( nSessionRandom, codigoDeAtivacao )
// Consulta entre AC e Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
cString := SATConsultarStatusOperacional( nSessionRandom, codigoDeAtivacao )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function AtivarSAT( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
cString := SATAtivar( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function AssociarAssinaturaSAT( numeroSessao, codigoDeAtivacao, CNPJ, CNPJSH )
cString := SATAssociarAssinatura( numeroSessao, codigoDeAtivacao, CNPJ, CNPJSH )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function DesligarSAT()
cString := SATDesligar()
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function ConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
// Consulta de número de sessão processada pelo Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// cNumeroDeSessao - Número de sessão a ser consultado no SAT-CF-e
cString := SATConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function TesteFimAFim( numeroSessao, codigoAtivacao, dados )
// Teste fim-a-fim de comunicação de venda (envio de dados para venda de teste).
cString := SATTesteFimAFim( numeroSessao, codigoAtivacao, dados )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function EnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
// Geração do Cupom de Venda
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
// dadosVenda - refere-se aos dados de venda gerados pelo AC e utilizados para compor o CF-e-SAT.
cString := SATEnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
Function CancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
// Cancelamento da última venda
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação e vendas
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
// chave - Chave de acesso do CF-e-SAT a ser cancelado
// dadosCancelamento - refere-se aos dados da venda gerados pelo AC e utilizados para compor o CF-e-SAT de cancelamento
cString := SATCancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
aString := StringToArray( cString, "|" )
return iif(valtype(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
/* OK */ DLL32 FUNCTION SATConsultar( numeroSessao AS _INT ) AS STRING FROM "ConsultarSAT" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATAtivar( numeroSessao AS _INT, subComando AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, cUF AS _INT ) AS STRING FROM "AtivarSAT" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATAssociarAssinatura( numeroSessao AS _INT, codigoDeAtivacao AS STRING, CNPJ AS STRING, AssinaturaCNPJ AS STRING ) AS STRING FROM "AssociarAssinatura" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATDesligar() AS STRING FROM "DesligarSAT" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATConsultarNumeroSessao( getRandom AS _INT, codigoAtivacao AS STRING, numeroSessao AS STRING) AS STRING FROM "ConsultarNumeroSessao" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATTesteFimAFim( numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING FROM "TesteFimAFim" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATEnviarDadosVenda( numeroSessao AS _INT, codigoAtivacao AS STRING, dados AS STRING) AS STRING FROM "EnviarDadosVenda" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATCancelarUltimaVenda( numeroSessao AS _INT, codigoAtivacao AS STRING, chaveAcesso AS STRING, dados AS STRING) AS STRING FROM "CancelarUltimaVenda" LIB hSATDLL
/* OK */ DLL32 FUNCTION SATConsultarStatusOperacional( numeroSessao AS _INT, codigoAtivacao AS STRING ) AS STRING FROM "ConsultarStatusOperacional" LIB hSATDLL
/////////////////////////////////////////////////////////////////////////////
function ComunicarCertificadoICPBRASIL()
// 1 numeroSessao - Número aleatório gerado pelo AC
// 2 codigoDeAtivacao - senha definida pelo contribuinte
// 3 certificado
return SAT_MSGRetorno()
function SAT_ConsultarStatusOperacional
// Consulta de Status Operacional do Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
return SAT_MSGRetorno()
function SAT_ConfigurarInterfaceDeRede
// Configuração da interface de comunicação do SAT.
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte
// dadosConfiguracao - Arquivo de configuração no formato XML.
return SAT_MSGRetorno()
function SAT_AssociarAssinatura
// Vinculação do AC
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// CNPJvalue - CNPJ da empresa desenvolvedora do Aplicativo Comercial + CNPJ do Emitente
// assinaturaCNPJs - Assinatura digital conjunto “CNPJ Software House” + “CNPJ do estabelecimento comercial”.
return SAT_MSGRetorno()
function SAT_AtualizarSoftwareSAT
// Atualização do Software Básico
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
return SAT_MSGRetorno()
function SAT_ExtrairLogs
// Extração de Logs
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
return SAT_MSGRetorno()
function SAT_BloquearSAT
// Solicitação de bloqueio das funções fiscais do Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
return SAT_MSGRetorno()
function SAT_DesbloquearSAT
// Solicitação de desbloqueio das funções fiscais do Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação.
return SAT_MSGRetorno()
function SAT_TrocarCodigoDeAtivacao
// Alteração do Código de Ativação do Equipamento SAT
// numeroSessao - Número aleatório gerado pelo AC para controle da comunicação
// codigoDeAtivacao - senha definida pelo contribuinte no software de ativação
// opcao - Refere-se a opção do conteúdo do parâmetro “codigoDeAtivacao”, sendo:
// 1 – Código de Ativação
// 2 – Código de Ativação de Emergência
// novoCodigo - Novo código de ativação escolhido pelo contribuinte
// confNovoCodigo - Confirmação do novo código de ativação.
return SAT_MSGRetorno()
function StringToArray( cString, cSeparator )
LOCAL nPos
LOCAL aString := {}
DEFAULT cSeparator := ";"
cString := ALLTRIM( cString ) + cSeparator
DO WHILE .T.
nPos := AT( cSeparator, cString )
IF nPos = 0
EXIT
ENDIF
AADD( aString, SUBSTR( cString, 1, nPos-1 ) )
cString := SUBSTR( cString, nPos+1 )
ENDDO
RETURN ( aString )
function SAT_Mensagens( _numErro_ )
local aSATErros := {}
//local _numErro_ := trataMensagem( cMSGErro )
aadd( aSATErros, { 4000, "Ativado corretamente" } )
aadd( aSATErros, { 4001, "Erro na criação do certificado" } )
aadd( aSATErros, { 4002, "SAT não reconhecido pela SEFAZ (CNPJ invalido)" } )
aadd( aSATErros, { 4003, "SAT já ativado" } )
aadd( aSATErros, { 4004, "SAT com uso cessado" } )
aadd( aSATErros, { 4005, "Erro de comunicação com a SEFAZ" } )
aadd( aSATErros, { 4098, "SAT em processamento. tente novamente" } )
aadd( aSATErros, { 4099, "Erro desconhecido na ativacao" } )
aadd( aSATErros, { 5000, "Nota emitida com sucesso" } )
aadd( aSATErros, { 5001, "Código de ativação inválido" } )
aadd( aSATErros, { 5002, "SAT ainda não ativado" } )
aadd( aSATErros, { 5999, "Erro desconhecido na emissão" } )
aadd( aSATErros, { 7000, "Cupom cancelado com sucesso" } )
aadd( aSATErros, { 7001, "Código de ativação inválido" } )
aadd( aSATErros, { 7002, "Cupom inválido" } )
aadd( aSATErros, { 7999, "Erro desconhecido no cancelamento" } )
aadd( aSATErros, { 6000, "Cupom de teste emitido com sucesso" } )
aadd( aSATErros, { 6001, "Códiogo de ativação invalido" } )
aadd( aSATErros, { 6002, "SAT ainda não ativado" } )
aadd( aSATErros, { 6999, "Erro desconhecido na emissão de cupom teste" } )
aadd( aSATErros, { 1001, "Número de registro E14 diferente de 1" } )
aadd( aSATErros, { 1002, "Formato do registro E14 incorreto" } )
aadd( aSATErros, { 1003, "Versão do leiaute E14 inválida" } )
aadd( aSATErros, { 1004, "Versão do leiaute E14 antiga" } )
aadd( aSATErros, { 1005, "CNPJ do estabelecimento inválido" } )
aadd( aSATErros, { 1006, "CNPJ ou CPF do consumidor inválido" } )
aadd( aSATErros, { 1007, "Formato do subtotal incorreto" } )
aadd( aSATErros, { 1008, "Formato do desconto sobre o subtotal incorreto" } )
aadd( aSATErros, { 1009, "Formato do desconto em % sobre o subtotal incorreto" } )
aadd( aSATErros, { 1010, "Formato do acréscimo sobre o subtotal incorreto." } )
aadd( aSATErros, { 1011, "Formato do acréscimo em % sobre o subtotal incorreto" } )
aadd( aSATErros, { 1012, "Formato do valor total liquido incorreto" } )
aadd( aSATErros, { 1013, "CNPJ da nota não confere com cnpj utilizado na ativação" } )
aadd( aSATErros, { 2001, "Arquivo não possui registros E15" } )
aadd( aSATErros, { 2002, "Formato do registro E15 incorreto" } )
aadd( aSATErros, { 2003, "Formato do numero do item incorreto" } )
aadd( aSATErros, { 2004, "Formato do código do produto incorreto" } )
aadd( aSATErros, { 2005, "Formato da descrição do produto incorreto" } )
aadd( aSATErros, { 2006, "Formato da quantidade incorreto" } )
aadd( aSATErros, { 2007, "Formato do valor unitário incorreto" } )
aadd( aSATErros, { 2008, "Formato sobre o desconto sobre o item incorreto" } )
aadd( aSATErros, { 2009, "Formato sobre o acréscimo sobre o item" } )
aadd( aSATErros, { 2010, "Formato do valor total liquido incorreto" } )
aadd( aSATErros, { 2011, "Formato do totalizador parcial incorreto" } )
aadd( aSATErros, { 2012, "Formato indicador de arredondamento incorreto" } )
aadd( aSATErros, { 3001, "Quantidade de registros ROD diferente de 1" } )
aadd( aSATErros, { 3002, "Numero de registros ROD diferente de 1" } )
aadd( aSATErros, { 3003, "Quantidade de registros E15 incorreta" } )
aadd( aSATErros, { 9999, "Registro desconhecido" } )
for i = 1 to len( aSATErros )
if aSATErros[i][1] = _numErro_
return aSATErros[i][2]
endif
next
return ""
function SAT_ValidaMensagens( _numErro_ )
local aSATErros := {}
aadd( aSATErros, { 1001, "sem conexao com a Internet ou sitio da SEFAZ fora do Ar." } ) // 1001>
aadd( aSATErros, { 1002, "Codigo da UF nao confere com a Tabela do IBGE" } ) // 1002>
aadd( aSATErros, { 1003, "Codigo da UF diferente da UF registrada no SAT" } ) // 1003>
aadd( aSATErros, { 1004, "Rejeicao: Versao do leiaute do arquivo de entrada do SAT nao e valida" } ) // 1004>
aadd( aSATErros, { 1005, "Alerta: Versao do leiaute do arquivo de entrada do SAT nao e a mais atual" } ) // 1005>
aadd( aSATErros, { 1226, "Rejeicao: Codigo da UF do Emitente diverge da UF receptora." } ) // 1226>
aadd( aSATErros, { 1450, "Rejeicao: Codigo de modelo de documento fiscal diferente de 59" } ) // 1450>
aadd( aSATErros, { 1258, "Rejeicao: Data/hora invalida. Problemas com o relogio interno do SAT-CF-e" } ) // 1258>
aadd( aSATErros, { 1224, "Rejeicao: CNPJ da Software House invalido" } ) // 1224>
aadd( aSATErros, { 1222, "Rejeicao: Assinatura do Aplicativo Comercial nao e valida" } ) // 1222>
aadd( aSATErros, { 1207, "Rejeicao: CNPJ do emitente invalido" } ) // 1207>
aadd( aSATErros, { 1203, "Rejeicao: Emitente nao autorizado para uso do SAT." } ) // 1203>
aadd( aSATErros, { 1229, "Rejeicao: IE do emitente nao informada" } ) // 1229>
aadd( aSATErros, { 1209, "Rejeicao: IE do emitente invalida" } ) // 1209>
aadd( aSATErros, { 1230, "Rejeicao: IE do emitente diferente da IE do contribuinte autorizado para uso do SAT" } ) // 1230>
aadd( aSATErros, { 1456, "Rejeicao: Codigo de Regime Tributario invalido" } ) // 1456>
aadd( aSATErros, { 1457, "Rejeicao: Codigo de Natureza da Operacao para ISSQN invalido" } ) // 1457>
aadd( aSATErros, { 1507, "Rejeicao: Indicador de rateio para ISSQN invalido" } ) // 1507>
aadd( aSATErros, { 1235, "Rejeicao: CNPJ do destinatario invalido" } ) // 1235>
aadd( aSATErros, { 1237, "Rejeicao: CPF do destinatario invalido" } ) // 1237>
aadd( aSATErros, { 1234, "Alerta: Razao Social/Nome do destinatario em branco" } ) // 1234>
aadd( aSATErros, { 1019, "Rejeicao: numeracao dos itens nao e sequencial crescente" } ) // 1019>
aadd( aSATErros, { 1459, "Rejeicao: Codigo do produto ou servico em branco" } ) // 1459>
aadd( aSATErros, { 1460, "Rejeicao: GTIN do item (N) invalido" } ) // 1460>
aadd( aSATErros, { 1461, "Rejeicao: Descricao do produto ou servico em branco" } ) // 1461>
aadd( aSATErros, { 1462, "Rejeicao: CFOP nao e de Operacao de saida prevista para CF-e-SAT" } ) // 1462>
aadd( aSATErros, { 1463, "Rejeicao: Unidade Comercia do produto ou servico em branco" } ) // 1463>
aadd( aSATErros, { 1464, "Rejeicao: Quantidade Comercial do item (N) invalido." } ) // 1464>
aadd( aSATErros, { 1465, "Rejeicao: Valor Unitario do item (N) invalido." } ) // 1465>
aadd( aSATErros, { 1467, "Rejeicao: Regra de calculo do Item (N) invalido (diferente de (A) e (T))" } ) // 1467>
aadd( aSATErros, { 1468, "Rejeicao: Valor do Desconto do item (N) invalido." } ) // 1468>
aadd( aSATErros, { 1469, "Rejeicao: Valor de outras despesas acessorias do item (N) invalido." } ) // 1469>
aadd( aSATErros, { 1220, "Rejeicao: Valor do rateio do desconto sobre subtotal do item (N) invalido." } ) // 1220>
aadd( aSATErros, { 1228, "Rejeicao: Valor do rateio do acrescimo sobre subtotal do item (N) invalido." } ) // 1228>
aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
aadd( aSATErros, { 1472, "Rejeicao:CST do Item (N) invalido (diferente de 00, 20, 90)" } ) // 1472>
aadd( aSATErros, { 1473, "Rejeicao: Aliquota efetiva do ICMS do item (N) nao e maior ou igual a zero." } ) // 1473>
aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
aadd( aSATErros, { 1475, "Rejeicao:CST do Item (N) invalido (diferente de 40 e 41 e 50 e 60)" } ) // 1475>
aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
aadd( aSATErros, { 1476, "Rejeicao:Codigo de situacao da operacao - Simples Nacional - do Item (N) invalido (diferente de 102, 300 e 500)" } ) // 1476>
aadd( aSATErros, { 1471, "Rejeicao:Origem da mercadoria do Item (N) invalido (diferente de 0, 1 e 2)" } ) // 1471>
aadd( aSATErros, { 1477, "Rejeicao:Codigo de situacao da operacao - Simples Nacional - do Item (N) invalido (diferente de 900)" } ) // 1477>
aadd( aSATErros, { 1473, "Rejeicao: Aliquota efetiva do ICMS do item (N) nao e maior ou igual a zero." } ) // 1473>
aadd( aSATErros, { 1478, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de 01 e 02)" } ) // 1478>
aadd( aSATErros, { 1479, "Rejeicao: Base de calculo do PIS do item (N) invalido" } ) // 1479>
aadd( aSATErros, { 1480, "Rejeicao: Aliquota do PIS do item (N) nao e maior ou igual a zero." } ) // 1480>
aadd( aSATErros, { 1482, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de 03)" } ) // 1482>
aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
aadd( aSATErros, { 1484, "Rejeicao: Aliquota do PIS em R$ do item (N) nao e maior ou igual a zero." } ) // 1484>
aadd( aSATErros, { 1486, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de 04, 06, 07, 08 e 09)" } ) // 1486>
aadd( aSATErros, { 1487, "Rejeicao: Codigo de Situacao Tributaria do PIS invalido (diferente de 49)" } ) // 1487>
aadd( aSATErros, { 1488, "Rejeicao: Codigo de Situacao Tributaria do PIS Invalido (diferente de 99)" } ) // 1488>
aadd( aSATErros, { 1479, "Rejeicao: Base de calculo do PIS do item (N) invalido." } ) // 1479>
aadd( aSATErros, { 1480, "Rejeicao: Aliquota do PIS do item (N) invalido." } ) // 1480>
aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) invalido." } ) // 1483>
aadd( aSATErros, { 1484, "Rejeicao: Aliquota do PIS em R$ do item (N) invalido." } ) // 1484>
aadd( aSATErros, { 1479, "Rejeicao: Base de calculo do PIS do item (N) invalido." } ) // 1479>
aadd( aSATErros, { 1480, "Rejeicao: Aliquota do PIS do item (N) invalida." } ) // 1480>
aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) invalida" } ) // 1483>
aadd( aSATErros, { 1484, "Rejeicao: Aliquota do PIS em R$ do item (N) invalida" } ) // 1484>
aadd( aSATErros, { 1490, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de 01 e 02)" } ) // 1490>
aadd( aSATErros, { 1491, "Rejeicao: Base de calculo do COFINS do item (N) invalido." } ) // 1491>
aadd( aSATErros, { 1492, "Rejeicao: Aliquota da COFINS do item (N) nao e maior ou igual a zero." } ) // 1492>
aadd( aSATErros, { 1494, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de 03)" } ) // 1494>
aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
aadd( aSATErros, { 1496, "Rejeicao: Aliquota da COFINS em R$ do item (N) nao e maior ou igual a zero." } ) // 1496>
aadd( aSATErros, { 1498, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de 04, 06, 07, 08 e 09)" } ) // 1498>
aadd( aSATErros, { 1499, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de 49)" } ) // 1499>
aadd( aSATErros, { 1500, "Rejeicao: Codigo de Situacao Tributaria da COFINS Invalido (diferente de 99)" } ) // 1500>
aadd( aSATErros, { 1491, "Rejeicao: Base de calculo da COFINS do item (N) invalido." } ) // 1491>
aadd( aSATErros, { 1492, "Rejeicao: Aliquota da COFINS do item (N) nao e maior ou igual a zero." } ) // 1492>
aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
aadd( aSATErros, { 1496, "Rejeicao: Aliquota da COFINS em R$ do item (N) nao e maior ou igual a zero." } ) // 1496>
aadd( aSATErros, { 1491, "Rejeicao: Base de calculo da COFINS do item (N) invalido" } ) // 1491>
aadd( aSATErros, { 1492, "Rejeicao: Aliquota da COFINS do item (N) nao e maior ou igual a zero." } ) // 1492>
aadd( aSATErros, { 1483, "Rejeicao: Qtde Vendida do item (N) nao e maior ou igual a zero." } ) // 1483>
aadd( aSATErros, { 1496, "Rejeicao: Aliquota da COFINS em R$ do item (N) nao e maior ou igual a zero" } ) // 1496>
aadd( aSATErros, { 1501, "Rejeicao: Operacao com tributacao de ISSQN sem informar a Inscricao Municipal" } ) // 1501>
aadd( aSATErros, { 1503, "Rejeicao: Valor das deducoes para o ISSQN do item (N) nao e maior ou igual a zero." } ) // 1503>
aadd( aSATErros, { 1505, "Rejeicao: Aliquota efetiva do ISSQN do item (N) nao e maior ou igual a 2,00 (2%) e menor ou igual a 5,00 (5%)." } ) // 1505>
aadd( aSATErros, { 1287, "Rejeicao: Codigo Municipio do FG - ISSQN: digito invalido. Exceto os codigos descritos no Anexo 2 que apresentam digito invalido." } ) // 1287>
aadd( aSATErros, { 1508, "Rejeicao: Item da lista de Servicos do ISSQN do item (N) nao e maior ou igual a zero." } ) // 1508>
aadd( aSATErros, { 1509, "Rejeicao:Codigo municipal de Tributacao do ISSQN do Item (N) em branco." } ) // 1509>
aadd( aSATErros, { 1510, "Rejeicao: Codigo de Natureza da Operacao para ISSQN invalido" } ) // 1510>
aadd( aSATErros, { 1511, "Rejeicao: Indicador de Incentivo Fiscal do ISSQN do item (N) invalido (diferente de 1 e 2)" } ) // 1511>
aadd( aSATErros, { 1527, "Rejeicao: Codigo do Meio de Pagamento invalido" } ) // 1527>
aadd( aSATErros, { 1528, "Rejeicao: Valor do Meio de Pagamento invalido." } ) // 1528>
aadd( aSATErros, { 1408, "Rejeicao: Valor total do CF-e-SAT maior que o somatorio dos valores de Meio de Pagamento empregados em seu pagamento." } ) // 1408>
aadd( aSATErros, { 1409, "Rejeicao: Valor total do CF-e-SAT supera o maximo permitido no arquivo de Parametrizacao de Uso" } ) // 1409>
aadd( aSATErros, { 1073, "Rejeicao: Valor de Desconto sobre total nao e maior ou igual a zero." } ) // 1073>
aadd( aSATErros, { 1074, "Rejeicao: Valor de Acrescimo sobre total nao e maior ou igual a zero." } ) // 1074>
aadd( aSATErros, { 1218, "Chave de acesso do CF-e-SAT ja consta como cancelado" } ) // 1218>
aadd( aSATErros, { 1221, "Aplicativo Comercial nao vinculado ao SAT" } ) // 1221>
aadd( aSATErros, { 1083, "Sem conexao com a Rede Local" } ) // 1083>
aadd( aSATErros, { 1084, "Formatacao do Certificado nao e valido." } ) // 1084>
aadd( aSATErros, { 1085, "Assinatura do Aplicativo Comercial nao confere com o registro do SAT" } ) // 1085>
aadd( aSATErros, { 1999, "Rejeicao: Erro nao identificado" } ) // 1999>
for i = 1 to len( aSATErros )
if aSATErros[i][1] = _numErro_
return aSATErros[i][2]
endif
next
return ""
function IsInternet( cDominio )
local cIp
default cDominio := "www.google.com"
WsaStartUp()
cIp := GETHOSTBYNAME( cDominio ) // se supone que siempre esta activo
WsaCleanUp()
IsConectado := cIp
RETURN iif( cIp <> "0.0.0.0", .t., .f. )
function SAT_MSGRetorno()
return ""
/*
* XML de Nota Fiscal padrao
*/
Function GeraXMLCFe2(cNFeChave)
cXMLFile := "CFeTeste.xml"
EDX oEDX FILE cXMLFile VERSION "1.0" ENCODING "UTF-8" FORMATED
//
EDX OPEN MARK "CFe" ;
ATTRIB "xmlns" VALUE "http://www.fazenda.sp.gov.br/sat" OF oEDX
EDX OPEN MARK "infCFe" ;
ATTRIB "Id" VALUE "&(cNFeChave)" ;
ATTRIB "versao" VALUE "0.02" ;
ATTRIB "versaoDadosEnt" VALUE "1.00" ;
ATTRIB "versaoSB" VALUE "000003" OF oEDX
EDX OPEN MARK "ide" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "cUF" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cNF" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "mod" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "nserieSAT" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "nCFe" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "dEmi" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "hEmi" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cDV" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "tpAmb" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CNPJ" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "signAC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "assinaturaQRCODE" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "emit" OF oEDX
EDX OPEN MARK "CNPJ" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xNome" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xFant" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "enderEmit" OF oEDX
EDX OPEN MARK "xLgr" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "nro" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xCpl" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xBairro" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xMun" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CEP" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "IE" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "IM" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CRT" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cRegTribISSQN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "indRatISSQN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "dest" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CNPJ" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CPF" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xNome" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "det" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "nItem" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "prod" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "cProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "cEAN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "NCM" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CFOP" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "uCom" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "qCom" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vUnCom" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "indRegra" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vDesc" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vOutro" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vItem" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vRatDesc" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vRatAcr" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "obsFiscoDet" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "xCampoDet" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xTextoDet" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "imposto" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "ICMS" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "ICMS00" TYPE "" TAG "" OF oEDX
// CST 00, 20, 90
EDX OPEN MARK "Orig" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "pICMS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vICMS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "ICMS40" TYPE "" TAG "" OF oEDX
// CST 40, 41, 50, 60
EDX OPEN MARK "Orig" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1 * //
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 41 * //
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "ICMSSN102" TYPE "" TAG "" OF oEDX
// CSOSN 102, 300, 500
EDX OPEN MARK "Orig" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CSOSN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "ICMSSN900" TYPE "" TAG "" OF oEDX
// CSOSN 900
EDX OPEN MARK "Orig" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "CSOSN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "pICMS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vICMS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "PIS" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "PISAliq" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 01 * //
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
EDX OPEN MARK "pPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.0000 * //
EDX OPEN MARK "vPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "PISQtde" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "qBCProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "PISNT" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "PISSN" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "PISOutr" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "pPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "qBCProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "PISST" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
EDX OPEN MARK "pPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
EDX OPEN MARK "qBCProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
EDX OPEN MARK "vPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "COFINS" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "COFINSAliq" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "pCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "COFINSQtde" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "qBCProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "COFINSNT" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "COFINSSN" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "COFINSOutr" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "CST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "pCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "qBCProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "COFINSST" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
EDX OPEN MARK "pCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
EDX OPEN MARK "qBCProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
EDX OPEN MARK "vAliqProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.000 * //
EDX OPEN MARK "vCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1.00 * //
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "ISSQN" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "vDeducISSQN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vAliq" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vISSQN" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cMunFG" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cListServ" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cServTribMun" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "cNatOp" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "indincFisc" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "infAdProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "MP" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "cMP" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * 1 * //
EDX OPEN MARK "vMP" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * mesmo que vItem * //
EDX OPEN MARK "cAdmC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "total" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "ICMSTot" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "vICMS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vProd" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vDesc" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vPISST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vCOFINSST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vOutro" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX OPEN MARK "vCFe" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX // * ESTE * //
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "ISSQNtot" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "vBC" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vISS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vPIS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vCOFINS" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vPISST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vCOFINSST" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "DescAcrEntr" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "vDescSubtot" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "vAcresSubtot" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX OPEN MARK "infAdic" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "infCpl" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "obsFisco" TYPE "" TAG "" OF oEDX
EDX OPEN MARK "xCampo" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX OPEN MARK "xTexto" TYPE "" TAG "" AUTOCLOSE REQUIRED OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
EDX CLOSE MARK OF oEDX
//
EDX END oEDX
return .t.
O código acima está com data de 08/01/2014, mas tenho certeza de não ter mexido nele para testes nesta data, pois desde 2013 não mexi com nenhuma versão do emulador porque nem conseguia configurar direito.
Mas é um começo, ou fim...