bom no meu caso eu criei uma tabela com todos os dados da NF-e/NFC-e com os mesmos nomes das TAG do XML e alguns campos de controle
Código: Selecionar todos
************************************************************************************************************************************************************************************************************************
METHOD ABRE_DANFE( ) CLASS ARQUIVOSCLASS
************************************************************************************************************************************************************************************************************************
LOCAL cQuery;
cQuery:= "CREATE TABLE IF NOT EXISTS `danfe` (";
+"`DANFE_Id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,";
+"`PEDIDOS_ID` int(11) DEFAULT NULL,";
+"`ENTRADA_ID` int(11) DEFAULT NULL,";
+"`CLIENTE_ID` int(11) DEFAULT NULL,";
+"`A_VERSAO` varchar(4) DEFAULT NULL,";
+"`A_ID` varchar(47) DEFAULT NULL,";
+"`B_CUF` varchar(2) DEFAULT NULL,";
+"`B_CNF` varchar(8) DEFAULT NULL,";
+"`B_NATOP` varchar(60) DEFAULT NULL,";
+"`B_MOD` varchar(2) DEFAULT NULL,";
+"`B_SERIE` varchar(3) DEFAULT NULL,";
+"`B_NNF` int(9) DEFAULT NULL,";
+"`B_DHEMI` varchar(25) DEFAULT NULL,";
+"`B_DHSAIENT` varchar(25) DEFAULT NULL,";
+"`B_TPNF` varchar(1) DEFAULT NULL,";
+"`B_IDDEST` varchar(1) DEFAULT NULL,";
+"`B_CMUNFG` varchar(7) DEFAULT NULL,";
+"`B_TPIMP` varchar(1) DEFAULT NULL,";
+"`B_TPEMIS` varchar(1) DEFAULT NULL,";
+"`B_CDV` varchar(1) DEFAULT NULL,";
+"`B_TPAMB` varchar(1) DEFAULT NULL,";
+"`B_FINNFE` varchar(1) DEFAULT NULL,";
+"`B_INDFINAL` varchar(1) DEFAULT NULL,";
+"`B_INDPRES` varchar(1) DEFAULT NULL,";
+"`B_PROCEMI` varchar(1) DEFAULT NULL,";
+"`B_VERPROC` varchar(20) DEFAULT NULL,";
+"`B_DHCONT` varchar(25) DEFAULT NULL,";
+"`B_XJUST` text DEFAULT NULL,";
+"`C_CNPJ` varchar(14) DEFAULT NULL,";
+"`C_XNOME` varchar(60) DEFAULT NULL,";
+"`C_XFANT` varchar(60) DEFAULT NULL,";
+"`C_XLGR` varchar(60) DEFAULT NULL,";
+"`C_NRO` varchar(60) DEFAULT NULL,";
+"`C_XCPL` varchar(60) DEFAULT NULL,";
+"`C_XBAIRRO` varchar(60) DEFAULT NULL,";
+"`C_CMUN` varchar(7) DEFAULT NULL,";
+"`C_XMUN` varchar(60) DEFAULT NULL,";
+"`C_UF` varchar(2) DEFAULT NULL,";
+"`C_CEP` varchar(8) DEFAULT NULL,";
+"`C_CPAIS` varchar(4) DEFAULT NULL,";
+"`C_XPAIS` varchar(60) DEFAULT NULL,";
+"`C_FONE` varchar(14) DEFAULT NULL,";
+"`C_IE` varchar(14) DEFAULT NULL,";
+"`C_IEST` varchar(14) DEFAULT NULL,";
+"`C_IM` varchar(15) DEFAULT NULL,";
+"`C_CNAE` varchar(7) DEFAULT NULL,";
+"`C_CRT` varchar(1) DEFAULT NULL,";
+"`E_CNPJ` varchar(14) DEFAULT NULL,";
+"`E_IDESTR` varchar(20) DEFAULT NULL,";
+"`E_XNOME` varchar(60) DEFAULT NULL,";
+"`E_XFANT` varchar(60) DEFAULT NULL,";
+"`E_XLGR` varchar(60) DEFAULT NULL,";
+"`E_NRO` varchar(60) DEFAULT NULL,";
+"`E_XCPL` varchar(60) DEFAULT NULL,";
+"`E_XBAIRR` varchar(60) DEFAULT NULL,";
+"`E_CMUN` varchar(7) DEFAULT NULL,";
+"`E_XMUN` varchar(60) DEFAULT NULL,";
+"`E_UF` varchar(2) DEFAULT NULL,";
+"`E_CEP` varchar(8) DEFAULT NULL,";
+"`E_CPAIS` varchar(4) DEFAULT NULL,";
+"`E_XPAIS` varchar(60) DEFAULT NULL,";
+"`E_FONE` varchar(14) DEFAULT NULL,";
+"`E_INDIE` varchar(1) DEFAULT NULL,";
+"`E_IE` varchar(14) DEFAULT NULL,";
+"`E_ISUF` varchar(9) DEFAULT NULL,";
+"`E_IM` varchar(15) DEFAULT NULL,";
+"`E_EMAIL` varchar(60) DEFAULT NULL,";
+"`F_CNPJ` varchar(14) DEFAULT NULL,";
+"`F_XLGR` varchar(60) DEFAULT NULL,";
+"`F_NRO` varchar(60) DEFAULT NULL,";
+"`F_XCPL` varchar(60) DEFAULT NULL,";
+"`F_XBAIRR` varchar(60) DEFAULT NULL,";
+"`F_CMUN` varchar(7) DEFAULT NULL,";
+"`F_XMUN` varchar(60) DEFAULT NULL,";
+"`F_UF` varchar(2) DEFAULT NULL,";
+"`G_CNPJ` varchar(14) DEFAULT NULL,";
+"`G_XLGR` varchar(60) DEFAULT NULL,";
+"`G_NRO` varchar(60) DEFAULT NULL,";
+"`G_XCPL` varchar(60) DEFAULT NULL,";
+"`G_XBAIRR` varchar(60) DEFAULT NULL,";
+"`G_CMUN` varchar(7) DEFAULT NULL,";
+"`G_XMUN` varchar(60) DEFAULT NULL,";
+"`G_UF` varchar(2) DEFAULT NULL,";
+"`W_VBC` decimal(14,2) DEFAULT 0.00,";
+"`W_VICMS` decimal(14,2) DEFAULT 0.00,";
+"`W_VICMSD` decimal(14,2) DEFAULT 0.00,";
+"`W_VBCST` decimal(14,2) DEFAULT 0.00,";
+"`W_VST` decimal(14,2) DEFAULT 0.00,";
+"`W_VPROD` decimal(14,2) DEFAULT 0.00,";
+"`W_VFRETE` decimal(14,2) DEFAULT 0.00,";
+"`W_VSEG` decimal(14,2) DEFAULT 0.00,";
+"`W_VDESC` decimal(14,2) DEFAULT 0.00,";
+"`W_VII` decimal(14,2) DEFAULT 0.00,";
+"`W_VIPI` decimal(14,2) DEFAULT 0.00,";
+"`W_VPIS` decimal(14,2) DEFAULT 0.00,";
+"`W_VCOFINS` decimal(14,2) DEFAULT 0.00,";
+"`W_VOUTRO` decimal(14,2) DEFAULT 0.00,";
+"`W_VNF` decimal(14,2) DEFAULT 0.00,";
+"`W_VTOTTRIB` decimal(14,2) DEFAULT 0.00,";
+"`YA_TPAG` varchar(2) DEFAULT NULL,";
+"`YA_VPAG` decimal(14,2) DEFAULT 0.00,";
+"`YA_CNPJ` varchar(14) DEFAULT NULL,";
+"`YA_BAND` varchar(2) DEFAULT NULL,";
+"`YA_AUT` varchar(20) DEFAULT NULL,";
+"`Z_INFADFIS` text DEFAULT NULL,";
+"`Z_INFCPL` text DEFAULT NULL,";
+"`ZB_XNEMP` varchar(22) DEFAULT NULL,";
+"`ZB_XPED` varchar(60) DEFAULT NULL,";
+"`ZB_XCONT` varchar(60) DEFAULT NULL,";
+"`FL_VALIDA` tinyint(1) DEFAULT 0,";
+"`FL_ASSINA` tinyint(1) DEFAULT 0,";
+"`FL_TRANSM` tinyint(1) DEFAULT 0,";
+"`FL_IMPRIM` tinyint(1) DEFAULT 0,";
+"`FL_EXPORT` tinyint(1) DEFAULT 0,";
+"`FL_SITUAC` varchar(3) DEFAULT NULL,";
+"`FL_MOTIVO` varchar(60) DEFAULT NULL,";
+"`FL_CANCEL` tinyint(1) DEFAULT 0,";
+"`FL_DHEMI` varchar(25) DEFAULT NULL,";
+"`FL_INUTIL` tinyint(1) DEFAULT 0,";
+"`FL_DHRECBT` varchar(25) DEFAULT NULL,";
+"`FL_CONTIG` tinyint(1) DEFAULT 0,";
+"`FL_DHCONT` varchar(25) DEFAULT NULL,";
+"`FL_CONTEN` tinyint(1) DEFAULT 0,";
+"`FL_DHCOEN` varchar(25) DEFAULT NULL,";
+"`OPERADOR` varchar(20) DEFAULT NULL,";
+"`MAQUINA` varchar(20) DEFAULT NULL,";
+"`TIPPAG` tinyint(2) DEFAULT 0,";
+"`CERTIFICADO_DIGITAL` varchar(100) DEFAULT NULL,";
+"`cIdTokenCupom` int(6) DEFAULT NULL," ;
+"`CSCCupomFiscal` varchar(40) DEFAULT NULL," ;
+"`Tipo_Operacao` int(2) DEFAULT NULL)" ;
+"COLLATE='utf8_general_ci' ENGINE=InnoDB "
ConeccoesClass():ExecuteSQL(::oServer, cQuery)
RETURN NIL
e a geração dos dados de itens sao feitos em tempo de execucao atravez de uma query que traz tudo que preciso para gerar a DANFE.
Atualmente como antigamente tenho uma tabela que tem alguns dados de configuração, nesta tabela eu controlo a SERIE/NUMERO das NF-e/NFC-e algo parecido como a SEQUENCE mostrada em post acima.
outra coisa que mantenho é : mesmo que a NF-e/NFC-e seja recusada por algum motivo eu continuo com a numeracao e mantenho os dados basicos da nota , somente altero o que causou o erro e gero a NF novamente com dta/hora e chave nova, mantenho os dados do XML ate para poder colocar ele no validador do RS e verificar quais os erros.