Meu modo de trabalho
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Só digo uma coisa:
Tudo bem, enquanto funciona bem.
Pra procurar erros.... pode ser complicado.
Tudo bem, enquanto funciona bem.
Pra procurar erros.... pode ser complicado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Curiosidade:
Na verdade a rotina é pra gerar XML de muitas notas a partir de uma data e de um número.
Inicialmente tinha 61kb, agora com 18kb
A parte que saiu, agora está em SQL.
Ainda não terminei.
Ainda não sei dizer se é vantagem, já que pra debug é complicado.
Código: Selecionar todos
22/09/2021 17:02 18.375 ze_spedxmlmdfe.prg
Inicialmente tinha 61kb, agora com 18kb
A parte que saiu, agora está em SQL.
Ainda não terminei.
Ainda não sei dizer se é vantagem, já que pra debug é complicado.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Simplifiquei mais ainda:
Pensei que ia dar erro, por ter definido o parâmetro como VARCHAR(), mas funciona normalmente.
O MySQL já formata conforme o tipo numérico, quanto a decimais.
E o mesmo com datas.
Nunca ficou tão fácil gerar XML.
Código: Selecionar todos
SET cXml := CONCAT( '<PISOutr>',
ze_XmlTag( 'CST', cPisCst ),
ze_XmlTag( 'vBC', nPisBas ),
ze_XmlTag( 'pPIS', nPisAli ),
ze_XmlTag( 'vPIS', nPisVal ),
'</PISOutr>' );
O MySQL já formata conforme o tipo numérico, quanto a decimais.
E o mesmo com datas.
Nunca ficou tão fácil gerar XML.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
E se fosse pra não depender de função, poderia ser assim:
Não sei porque ainda tem gente que prefere usar INI ou TXT.
Código: Selecionar todos
SET cXml := CONCAT( '<PISOutr>',
'<CST>', cPisCst, '</CST>',
'<vBC>', nPisBas, '</vBC>',
'<pPIS>', nPisAli, '</pPIS>',
'<vPIS>', nPisVal, '</vPIS>',
'</PISOutr>' )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Pra gerar o XML de todos os produtos, iria ficar complicado deixar numa function.
Então... gera um produto de cada vez, e vai juntando tudo.
nIdItPed é a chave única dos produtos dos pedidos.
Esta função pega a lista e vai repassando pra outra que gera somente de um produto.
Ainda em Harbour o bloco de ID, e o que junta tudo.
Esses arquivos SQL são os que criam as FUNCTIONs na base de dados.
Então... gera um produto de cada vez, e vai juntando tudo.
Código: Selecionar todos
CREATE FUNCTION ze_XmlNfeProdutoList( nIdNotFis INT(11) )
RETURNS VARCHAR(10000)
BEGIN
DECLARE cXml VARCHAR(2000) DEFAULT '';
DECLARE nIdItPed, nContador INT(11) DEFAULT 0;
DECLARE nCursorEOF INT(11) DEFAULT 0;
DECLARE SP_CURSOR CURSOR FOR
SELECT IDITPED FROM JPITPED WHERE IPPEDIDO =
( SELECT NFPEDIDO FROM JPNOTFIS WHERE NFPEDIDO != 0 AND IDNOTFIS = nIdNotFis );
DECLARE CONTINUE HANDLER FOR NOT FOUND SET nCursorEOF = 1;
OPEN SP_CURSOR;
THIS:WHILE nCursorEof != 1 DO
FETCH SP_CURSOR INTO nIdItPed;
SET nContador := nContador + 1;
SET cXml := CONCAT( cXml, ze_XmlNfeProduto( nIdItPed, nContador ) );
END WHILE;
CLOSE SP_CURSOR;
RETURN cXml;
END
Esta função pega a lista e vai repassando pra outra que gera somente de um produto.
Ainda em Harbour o bloco de ID, e o que junta tudo.
Código: Selecionar todos
09/10/2021 11:45 8.711 ze_spedxmlnfe.prg
Código: Selecionar todos
Pasta de d:\fontes\integra\sql\function
08/10/2021 22:35 2.737 ze_XmlNfeCobranca.sql
08/10/2021 04:28 2.555 ze_XmlNfeDestinatario.sql
08/10/2021 04:28 2.074 ze_XmlNfeEmitente.sql
08/10/2021 10:01 1.725 ze_XmlNfeEntrega.sql
09/10/2021 11:04 247 ze_XmlNfeGTIN.sql
08/10/2021 11:42 11.049 ze_XmlNfeInfAdic.sql
09/10/2021 11:30 2.898 ze_XmlNfeProduto.sql
05/10/2021 11:11 118 ze_XmlNfeProdutoArmamento.sql
08/10/2021 22:44 1.544 ze_XmlNfeProdutoCofins.sql
05/10/2021 11:13 845 ze_XmlNfeProdutoCombustivel.sql
08/10/2021 22:44 10.678 ze_XmlNfeProdutoIcms.sql
05/10/2021 11:12 109 ze_XmlNfeProdutoII.sql
05/10/2021 11:12 116 ze_XmlNfeProdutoImporta.sql
08/10/2021 22:44 1.118 ze_XmlNfeProdutoipi.sql
05/10/2021 11:12 209 ze_XmlNfeProdutoISS.sql
09/10/2021 11:41 702 ze_XmlNfeProdutoList.sql
05/10/2021 11:12 120 ze_XmlNfeProdutoMedicamento.sql
08/10/2021 22:44 1.493 ze_XmlNfeProdutoPis.sql
05/10/2021 11:12 116 ze_XmlNfeProdutoVeiculo.sql
09/10/2021 00:34 1.187 ze_XmlNfeReferenciadas.sql
08/10/2021 22:33 2.204 ze_XmlNfeTotais.sql
08/10/2021 22:44 2.734 ze_XmlNfeTransporte.sql
09/09/2021 17:17 740 ze_XmlNode.sql
03/10/2021 23:45 332 ze_XmlTag.sql
24 arquivo(s) 47.650 bytes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Hoje entrou pra valer a parte de geração de XML por STORED PROCEDURE/FUNCTION o próprio MySQL fazendo isso.
Apesar de alguns imprevistos, já está instalado.
Situação atual:
Todo cálculo de pedido feito pelo MySQL.
A grande maioria da geração do XML de NFE feita pelo MySQL.
O aplicativo tá virando mais SQL do que Harbour.
Mas parei com a geração de XML e voltei à contabilidade, porque pode acabar virando urgente.
Apesar de alguns imprevistos, já está instalado.
Situação atual:
Todo cálculo de pedido feito pelo MySQL.
A grande maioria da geração do XML de NFE feita pelo MySQL.
O aplicativo tá virando mais SQL do que Harbour.
Mas parei com a geração de XML e voltei à contabilidade, porque pode acabar virando urgente.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Aproveitando...
A geração de XML de NFE era o segundo maior fonte do aplicativo.
A posição atual, entre os maiores.
A geração de XML de NFE era o segundo maior fonte do aplicativo.
A posição atual, entre os maiores.
Código: Selecionar todos
d:\fontes\integra>dir *.prg /o-s | find /n /i "xmlnfe"
...
[93]11/10/2021 07:02 8.715 ze_spedxmlnfe.prg
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Quanto ao EXE, pouca mudança, só reduziu uns 200kb, porque sempre adiciono rotinas de conversão.
E não quero retirar 1.5MB de ícones do resource.
E não quero retirar 1.5MB de ícones do resource.
Código: Selecionar todos
12/10/2021 20:18 1.901.488 jpa.exe
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Alterei tudo pra TEXT, pra precaução, pra não ter limites.
Gerei pouco mais de 5.000 XMLs pra teste, e tudo ok.
E conforme vou mexendo na contabilidade pra SQL, o EXE vai reduzindo um pouco mais.
O módulo de contabilidade está começando a ter alguma coisa funcionando.
Gerei pouco mais de 5.000 XMLs pra teste, e tudo ok.
Código: Selecionar todos
15/10/2021 15:49 1.896.880 jpa.exe
O módulo de contabilidade está começando a ter alguma coisa funcionando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Dando uma geral em tudo.
Alterando campos pra DECIMAL. - só TODOS.
Só causei um pequeno desastre, porque tinha esquecido do DEFAULT ao alterar estruturas.
Mas agora tudo voltou ao normal.
Apagando tabelas que viraram lixo
Apagando STORED PROCEDURE/FUNCTION que viraram lixo
Reduzindo o número de procedure/function, juntando várias.
Pois é.... pelo menos no aplicativo principal, acho que não faltou nenhum.
Achei até uma alíquota (percentual) que tinha colocado como (14,2)... milhões de %, espero não precisar nunca disso.
Alterando campos pra DECIMAL. - só TODOS.
Só causei um pequeno desastre, porque tinha esquecido do DEFAULT ao alterar estruturas.
Mas agora tudo voltou ao normal.
Código: Selecionar todos
STATIC FUNCTION Update1018()
LOCAL cnSQL := ADOLocal(), cName
WITH OBJECT cnSQL
IF :FieldExists( "PCVALOR", "JPPREHIS" )
:ExecuteCmd( "ALTER TABLE JPPREHIS CHANGE COLUMN PCVALOR PHVALOR DECIMAL(15,4) DEFAULT '0'" )
ENDIF
IF ! :FieldExists( "CBS10IPIBAR", "JPCOMBUSTIVEL" )
:ExecuteCmd( "ALTER TABLE JPCOMBUSTIVEL ADD COLUMN CBS10IPIBAR DECIMAL(8,5) DEFAULT '0'" )
ENDIF
IF ! :FieldExists( "CBS500IPIBAR", "JPCOMBUSTIVEL" )
:ExecuteCmd( "ALTER TABLE JPCOMBUSTIVEL ADD COLUMN CBS500IPIBAR DECIMAL(8,5) DEFAULT '0'" )
ENDIF
IF ! :FieldExists( "CBS10PETSAO", "JPCOMBUSTIVEL" )
:ExecuteCmd( "ALTER TABLE JPCOMBUSTIVEL ADD COLUMN CBS10PETSAO DECIMAL(8,5) DEFAULT '0'" )
ENDIF
IF ! :FieldExists( "CBS10SHESAO", "JPCOMBUSTIVEL" )
:ExecuteCmd( "ALTER TABLE JPCOMBUSTIVEL ADD COLUMN CBS10SHESAO DECIMAL(8,5) DEFAULT '0'" )
ENDIF
:ExecuteCmd( "ALTER TABLE JPBAAUTO" + ;
" CHANGE COLUMN BUVALOR BUVALOR DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPBANCARIO" + ;
" CHANGE COLUMN BAVALOR BAVALOR DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN BASALDO BASALDO DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPCADASTRO" + ;
" CHANGE COLUMN CDLIMCRE CDLIMCRE DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN CDVALMES CDVALMES DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPCOMBUSTIVEL" + ;
" CHANGE COLUMN CBS10PETSAO CBS10PETSAO DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS10SHESAO CBS10SHESAO DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS10IPISAO CBS10IPISAO DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS10PETCUB CBS10PETCUB DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS10IPICUB CBS10IPICUB DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS10PETBAR CBS10PETBAR DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS10IPIBAR CBS10IPIBAR DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500PETSAO CBS500PETSAO DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500SHESAO CBS500SHESAO DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500IPISAO CBS500IPISAO DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500PETCUB CBS500PETCUB DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500IPICUB CBS500IPICUB DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500PETBAR CBS500PETBAR DECIMAL(8,5) DEFAULT '0'," + ;
" CHANGE COLUMN CBS500IPIBAR CBS500IPIBAR DECIMAL(8,5) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPCOMISSAO" + ;
" CHANGE COLUMN CMVALOR CMVALOR DECIMAL(7,3) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPESTOQUE" + ;
" CHANGE COLUMN ESQTDE ESQTDE DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN ESVALOR ESVALOR DECIMAL(15,5) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPFINAN" + ;
" CHANGE COLUMN FIVALOR FIVALOR DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN FIJURDES FIJURDES DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPFISCAL" + ;
" CHANGE COLUMN LFVALCON LFVALCON DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFICMBAS LFICMBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFICMALI LFICMALI DECIMAL(7,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFICMSUB LFICMSUB DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFICMOUT LFICMOUT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFICMNAO LFICMNAO DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFIPIBAS LFIPIBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFIPIVAL LFIPIVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFIPIOUT LFIPIOUT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN LFIPINAO LFIPINAO DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPFISICA" + ;
" CHANGE COLUMN FSQTDDIG1 FSQTDDIG1 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDDIG2 FSQTDDIG2 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDDIG3 FSQTDDIG3 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDDIG4 FSQTDDIG4 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDJPA1 FSQTDJPA1 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDJPA2 FSQTDJPA2 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDJPA3 FSQTDJPA3 DECIMAL(14,4) DEFAULT '0'," + ;
" CHANGE COLUMN FSQTDJPA4 FSQTDJPA4 DECIMAL(14,4) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPIMPOSTO" + ;
" CHANGE COLUMN IMIIALI IMIIALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMIPIALI IMIPIALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMIPSALI IMIPSALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMICMRED IMICMRED DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMICMALI IMICMALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMICSALI IMICSALI DECIMAL(9,5) DEFAULT '0'," + ;
" CHANGE COLUMN IMFCPALI IMFCPALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMSUBIVA IMSUBIVA DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMSUBRED IMSUBRED DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMSUBALI IMSUBALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMDIFALII IMDIFALII DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMDIFALIU IMDIFALIU DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMDIFALIF IMDIFALIF DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMISSALI IMISSALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMPISALI IMPISALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IMCOFALI IMCOFALI DECIMAL(6,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPITEM" + ;
" CHANGE COLUMN IERES1 IERES1 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IERES2 IERES2 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IERES3 IERES3 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD1 IEQTD1 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD2 IEQTD2 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD3 IEQTD3 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD4 IEQTD4 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD5 IEQTD5 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD6 IEQTD6 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD7 IEQTD7 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD8 IEQTD8 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTD9 IEQTD9 DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEQTDMIN IEQTDMIN DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEVALOR IEVALOR DECIMAL(15,5) DEFAULT '0'," + ;
" CHANGE COLUMN IEPESBRU IEPESBRU DECIMAL(9,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEPESLIQ IEPESLIQ DECIMAL(9,3) DEFAULT '0'," + ;
" CHANGE COLUMN IEVALCUS IEVALCUS DECIMAL(15,5) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPITPED" + ;
" CHANGE COLUMN IPPRECUS IPPRECUS DECIMAL(16,5) DEFAULT '0'," + ;
" CHANGE COLUMN IPPREPED IPPREPED DECIMAL(16,5) DEFAULT '0'," + ;
" CHANGE COLUMN IPQTDE IPQTDE DECIMAL(14,3) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALCUS IPVALCUS DECIMAL(15,5) DEFAULT '0'," + ;
" CHANGE COLUMN IPPRENOT IPPRENOT DECIMAL(15,5) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALADI IPVALADI DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALFRE IPVALFRE DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALSEG IPVALSEG DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALOUT IPVALOUT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALEXT IPVALEXT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALADU IPVALADU DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALIOF IPVALIOF DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALDES IPVALDES DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALPRO IPVALPRO DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPVALNOT IPVALNOT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIIBAS IPIIBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIIALI IPIIALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIIVAL IPIIVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIPIBAS IPIPIBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIPIALI IPIPIALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIPIVAL IPIPIVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPICMBAS IPICMBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPICMALI IPICMALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPICMRED IPICMRED DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPICMVAL IPICMVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPFCPALI IPFCPALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPFCPVAL IPFCPVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPICSBAS IPICSBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPICSALI IPICSALI DECIMAL(6,3) DEFAULT '0'," + ;
" CHANGE COLUMN IPICSVAL IPICSVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPSUBIVA IPSUBIVA DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPSUBBAS IPSUBBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPSUBRED IPSUBRED DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPSUBALI IPSUBALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPSUBVAL IPSUBVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPDIFBAS IPDIFBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPDIFALIF IPDIFALIF DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPDIFALIU IPDIFALIU DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPDIFALII IPDIFALII DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPDIFVALI IPDIFVALI DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPDIFVALF IPDIFVALF DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPPISBAS IPPISBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPPISALI IPPISALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPPISVAL IPPISVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPCOFBAS IPCOFBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPCOFALI IPCOFALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPCOFVAL IPCOFVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPISSBAS IPISSBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPISSALI IPISSALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPISSVAL IPISSVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIMPALI IPIMPALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN IPIMPVAL IPIMPVAL DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPMDFDET" + ;
" CHANGE COLUMN MDVALMER MDVALMER DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPNOTFIS" + ;
" CHANGE COLUMN NFVALPRO NFVALPRO DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALNOT NFVALNOT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALFRE NFVALFRE DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALSEG NFVALSEG DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALOUT NFVALOUT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALEXT NFVALEXT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALDES NFVALDES DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALADU NFVALADU DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFVALIOF NFVALIOF DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFIPIBAS NFIPIBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFIPIVAL NFIPIVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFICMBAS NFICMBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFICMVAL NFICMVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFFCPVAL NFFCPVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFSUBBAS NFSUBBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFSUBVAL NFSUBVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFDIFVALI NFDIFVALI DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFDIFVALF NFDIFVALF DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFPISBAS NFPISBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFPISVAL NFPISVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFCOFBAS NFCOFBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFCOFVAL NFCOFVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFISSBAS NFISSBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFISSVAL NFISSVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFICSBAS NFICSBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFICSALI NFICSALI DECIMAL(6,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFICSVAL NFICSVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFIMPVAL NFIMPVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFPESBRU NFPESBRU DECIMAL(8,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFPESLIQ NFPESLIQ DECIMAL(8,2) DEFAULT '0'," + ;
" CHANGE COLUMN NFIIVAL NFIIVAL DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPPEDIDO" + ;
" CHANGE COLUMN PDPERDES PDPERDES DECIMAL(5,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDPERADI PDPERADI DECIMAL(5,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALCUS PDVALCUS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALPRO PDVALPRO DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALNOT PDVALNOT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALFRE PDVALFRE DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALSEG PDVALSEG DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALOUT PDVALOUT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALEXT PDVALEXT DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALDES PDVALDES DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALADI PDVALADI DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALADU PDVALADU DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDVALIOF PDVALIOF DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDIIBAS PDIIBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDIIVAL PDIIVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDIPIBAS PDIPIBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDIPIVAL PDIPIVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDICMBAS PDICMBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDICMVAL PDICMVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDFCPVAL PDFCPVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDSUBBAS PDSUBBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDSUBVAL PDSUBVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDDIFVALI PDDIFVALI DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDDIFVALF PDDIFVALF DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDISSBAS PDISSBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDISSVAL PDISSVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDPISBAS PDPISBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDPISVAL PDPISVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDCOFBAS PDCOFBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDCOFVAL PDCOFVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDICSBAS PDICSBAS DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDICSVAL PDICSVAL DECIMAL(14,2) DEFAULT '0'," + ;
" CHANGE COLUMN PDIMPVAL PDIMPVAL DECIMAL(14,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPPRECO" + ;
" CHANGE COLUMN PCVALOR PCVALOR DECIMAL(15,4) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPPREHIS" + ;
" CHANGE COLUMN PHVALOR PHVALOR DECIMAL(15,4) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPTABFORPAG" + ;
" CHANGE COLUMN FPALIADI FPALIADI DECIMAL(8,3) DEFAULT '0'," + ;
" CHANGE COLUMN FPALIDES FPALIDES DECIMAL(8,3) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPTABIBPT" + ;
" CHANGE COLUMN IBNACALI IBNACALI DECIMAL(7,2) DEFAULT '0'," + ;
" CHANGE COLUMN IBIMPALI IBIMPALI DECIMAL(7,2) DEFAULT '0'," + ;
" CHANGE COLUMN IBALIFEDN IBALIFEDN DECIMAL(7,2) DEFAULT '0'," + ;
" CHANGE COLUMN IBALIFEDI IBALIFEDI DECIMAL(7,2) DEFAULT '0'," + ;
" CHANGE COLUMN IBALIEST IBALIEST DECIMAL(7,2) DEFAULT '0'," + ;
" CHANGE COLUMN IBALIMUN IBALIMUN DECIMAL(7,2) DEFAULT '0'" )
:ExecuteCmd( "ALTER TABLE JPVENDEDOR" + ;
" CHANGE COLUMN VDCOMISSAO VDCOMISSAO DECIMAL(7,3) DEFAULT '0'" )
ENDWITH
Código: Selecionar todos
WITH OBJECT cnSQL
:ExecuteCmd( "DROP TABLE IF EXISTS JPCTLOTES" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABINFADI" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPMANIFESTACAO" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPCTHISTO" )
:ExecuteCmd( "DROP TABLE IF EXISTS JPTABANPATI" )
ENDWITH
Reduzindo o número de procedure/function, juntando várias.
Código: Selecionar todos
WITH OBJECT cnSQL
FOR EACH cName IN { "zeexists", "ze_margemcusto", "ze_NfeBlocoProdutoIcms", ;
"ze_NfeBlocoProdutoIcms00", "ze_XmlNumberToXml", "ze_XmlNfeProdutoii", ;
"ze_XmlNfeProdutoiss", "ze_XmlNfeProdutoArmamento", "ze_XmlNfeProdutoCombustivel", ;
"ze_XmlNfeProdutoImporta", "ze_XmlNfeProdutoMedicamento", "ze_XmlNfeProdutoVeiculo", ;
"ze_ValidIeAM", "ze_ValidIeCE", "ze_ValidIeES", "ze_ValidIeMS", "ze_ValidIeMT", ;
"ze_ValidIePA", "ze_ValidIePB", "ze_ValidIePI", "ze_ValidIeRN", "ze_ValidIeRS", ;
"ze_ValidIeSC", "ze_ValidIeSE", "ze_ValidIeTO", "ze_XmlNumber", "ze_saldodebito", ;
"ze_saldocredito", "ze_NumberToXml", "SaldoConta", "ze_xmlnfeprodutoicms", ;
"ze_xmlnfeprodutoipi", "ze_xmlnfeprodutocofins", "ze_xmlnfeprodutopis" }
:ExecuteCmd( "DROP FUNCTION IF EXISTS " + cName )
:ExecuteCmd( "DELETE FROM JPBINARY WHERE BINNAME=" + StringSQL( cName ) + " AND BINTYPE='function'" )
NEXT
FOR EACH cName IN { "ze_PedidoCalculoDifal", "ze_PedidoCalculoFcp", "ze_PedidoCalculoIcms", ;
"ze_PedidoCalculoIi", "ze_PedidoCalculoImportacao", "ze_PedidoCalculoImposto", ;
"ze_PedidoCalculoIpi", "ze_PedidoCalculoIss", "ze_PedidoCalculoPis", ;
"ze_PedidoCalculoRateioExtras", "ze_PedidoCalculoRateioOficial", "ze_PedidoCalculoSimples", ;
"ze_PedidoCalculoSt", "ze_PedidoCalculoTotais", "ze_PedidoCalculoTributacao", ;
"ze_PedidoLeis", "ze_CalculaPedido", "ze_CalculaPedidoImportacao", ;
"ze_PedidoCalculoRateioExtras", "ze_PedidoCalculoRateioOficial", ;
"ze_PedidoCalculoTributacao", "ze_PedidoCalculoDImposto", "ze_PedidoCalculoZTotais", ;
"ze_ProdutoUltimaEntrada", "ze_SaldoContabil", "ze_produtocustocontabil", ;
"ze_produtoultimasaida", "ze_contabilexemplosintetica", "ze_patrimoniolicmixupdate", ;
"ze_patrimoniolixmixupdate", "ze_bancariorecalcula", "ze_financeiroaberto", ;
"ze_pedidcalculoipi", "ze_pedidocalculoeii", "ze_pedidovaloremaberto", "ze_pedidoclonar", ;
"ze_bancorecalcula" }
:ExecuteCmd( "DROP PROCEDURE IF EXISTS " + cName )
:ExecuteCmd( "DELETE FROM JPBINARY WHERE BINNAME=" + StringSQL( cName ) + " AND BINTYPE='procedure'" )
NEXT
ENDWITH
RETURN Nil
Achei até uma alíquota (percentual) que tinha colocado como (14,2)... milhões de %, espero não precisar nunca disso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Cheguei na última parte de gerar XML de NFE em SQL.
último fonte original Harbour (foi tendo ajustes)
e o fonte equivalente em SQL
Fui fazendo o ajuste das sub-rotinas, migrando uma parte de cada vez, e agora é a final geral.
Agora sim, XML de NFE completo pelo SQL.
último fonte original Harbour (foi tendo ajustes)
Código: Selecionar todos
FUNCTION ze_XmlNfe( nIdNotFis, cXml, nIdEmpresa, cVersaoJPA )
LOCAL nSelect, mTexto, nCont, mChaveDigital, cTipoEmissao
LOCAL cnSQL := ADOLocal()
nSelect := Select()
cXml := ""
WITH OBJECT cnSQL
:Execute( "SELECT SEFAZNFEAMBIENTE, SEFAZNFETIPOEMISSAO" + ;
" FROM JPTABSEFAZ" )
cTipoEmissao := :String( "SEFAZNFETIPOEMISSAO" )
:CloseRecordset()
:Execute( "SELECT NFNOTFIS, NFDATEMI, NFCADASTRO, NFPEDIDO, NFFILIAL," + ;
" JPEMPRESA.EMCNPJ" + ;
" FROM JPNOTFIS" + ;
" LEFT JOIN JPEMPRESA ON JPEMPRESA.IDEMPRESA = " + NumberSQL( nIdEmpresa ) + ;
" WHERE IDNOTFIS = " + NumberSQL( nIdNotFis ) )
mChaveDigital := "35" // UF Ibge
mChaveDigital += Substr( StrZero( Year( :Date( "NFDATEMI" ) ), 4 ), 3, 2 ) + StrZero( Month( :Date( "NFDATEMI" ) ), 2 )
mChaveDigital += SoNumeros( :String( "EMCNPJ" ) ) // Cnpj
mChaveDigital += "55" // Modelo de Docto Fiscal
mChaveDigital += "001" // Serie Docto Fiscal
mChaveDigital += StrZero( :Number( "NFNOTFIS" ), 9 ) // NF 9 digitos
mChaveDigital += cTipoEmissao // Tipo de Emissao Normal/Contingencia (começou na NFE 2.00)
mChaveDigital += Right( StrZero( :Number( "NFCADASTRO" ), 6 ), 2 ) + StrZero( :Number( "NFCADASTRO" ), 6 ) // Chave Aleatoria // reduzido 1 posicao
mChaveDigital := mChaveDigital + CalculaDigito( mChaveDigital, "11" )
:CloseRecordset()
ENDWITH
cXml += [<NFe xmlns="http://www.portalfiscal.inf.br/nfe">]
cXml += [<infNFe Id="NFe] + mChaveDigital + [" versao="4.00">]
cXml += cnSQL:ReturnFunction( "ze_XmlNfeIde", mChaveDigital, nIdNotFis, nIdEmpresa, "JPA " + AppVersaoExe() )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeEmitente", nIdEmpresa )
//NfeBlocoNotaAvulsa( @cXml )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeDestinatario", nIdNotFis )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeEntrega", nIdNotFis )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeProdutoList", nIdNotFis )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeTotais", nIdNotFis )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeTransporte", nIdNotFis )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeCobranca", nIdNotFis )
cXml += cnSQL:ReturnFunction( "ze_XmlNfeInfAdic", nIdNotFis )
cXml += [<infRespTec>]
cXml += XmlTag( "CNPJ", "000" )
cXml += XmlTag( "xContato", "Jose M C Quintas" )
cXml += XmlTag( "email", "xxx@gmail.com" )
cXml += XmlTag( "fone", "999" )
cXml += [</infRespTec>]
cXml += [</infNFe>]
cXml += [</NFe>]
RETURN Nil
Código: Selecionar todos
CREATE FUNCTION ze_XmlNfe(
nIdNotFis INT(11),
nIdEmpresa INT(11),
cVersaoJPA CHAR(100)
)
RETURNS TEXT
BEGIN
DECLARE cXml TEXT;
DECLARE cChave VARCHAR(50);
DECLARE cTipoEmissao VARCHAR(1);
DECLARE dEmissao DATE;
DECLARE cCnpj VARCHAR(20);
DECLARE nNumNotFis, nIdCadastro INT(11);
SELECT
NFNOTFIS, NFDATEMI, NFCADASTRO, EMCNPJ, SEFAZNFETIPOEMISSAO
FROM JPNOTFIS
LEFT JOIN JPEMPRESA ON JPEMPRESA.IDEMPRESA = nIdEmpresa
JOIN JPTABSEFAZ
WHERE IDNOTFIS = nIdNotFis LIMIT 1
INTO nNumNotFis, dEmissao, nIdCadastro, cCnpj, cTipoEmissao;
SET cChave := CONCAT(
'35',
LPAD( MOD( YEAR( dEmissao ), 100 ), 2, '0' ),
LPAD( MONTH( dEmissao ), 2, '0' ),
LPAD( ze_SoNumeros( cCnpj ), 14, '0' ),
'55',
'001',
LPAD( nNumNotFis, 9, '0' ),
cTipoEmissao,
RIGHT( LPAD( nIdCadastro, 6, '0' ), 2 ),
LPAD( nIdCadastro, 6, '0' ) );
SET cChave := CONCAT( cChave, ze_CalculaDigito( cChave, '11' ) );
SET cXml := CONCAT(
'<NFe xmlns="http://www.portalfiscal.inf.br/nfe">',
'<infNFe Id="NFe', cChave, '" versao="4.00">',
ze_XmlNfeIde( cChave, nIdNotFis, nIdEmpresa, cVersaoJPA ),
ze_XmlNfeEmitente( nIdEmpresa ),
ze_XmlNfeDestinatario( nIdNotFis ),
ze_XmlNfeEntrega( nIdNotFis ),
ze_XmlNfeProdutoList( nIdNotFis ),
ze_XmlNfeTotais( nIdNotFis ),
ze_XmlNfeTransporte( nIdNotFis ),
ze_XmlNfeCobranca( nIdNotFis ),
ze_XmlNfeInfAdic( nIdNotFis ),
'<infRespTec>',
ze_XmlTag( 'CNPJ', '000' ),
ze_XmlTag( 'xContato', 'Jose M C Quintas' ),
ze_XmlTag( 'email', 'xxx@gmail.com' ),
ze_XmlTag( 'fone', '000' ),
'</infRespTec>',
'</infNFe>',
'</NFe>' );
RETURN cXml;
END
Agora sim, XML de NFE completo pelo SQL.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Gerando XML de nota direto no servidor.
Meio doido, mas diz que foi mais rápido gerar 1.000 notas do que 100 notas....
O que demorou foi pra trazer para o terminal. 11 segundos.
Pois é... no mundo SQL, 11 segundos parece uma eternidade kkkk
Meio doido, mas diz que foi mais rápido gerar 1.000 notas do que 100 notas....
O que demorou foi pra trazer para o terminal. 11 segundos.
Pois é... no mundo SQL, 11 segundos parece uma eternidade kkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
A propósito....
Tive que aumentar o tamanho na rotina que calcula o dígito de controle.
Tava 20 dígitos, mas NFE tem 44 dígitos.
Código: Selecionar todos
CREATE FUNCTION ze_CalculaDigito(
cNumero VARCHAR(100),
nModulo INT(11)
)
RETURNS VARCHAR(1)
Tava 20 dígitos, mas NFE tem 44 dígitos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Código: Selecionar todos
METHOD Valida( nidctConta ) CLASS JPCTCONTAClass
LOCAL nRow := Row(), cNome, cTipo, lEof
@ nRow, 32 SAY Space(60)
WITH OBJECT ::cnSQL
:Execute( "SELECT CPNOME, CPTIPO FROM JPCTCONTA WHERE IDCTCONTA=" + NumberSQL( nidctConta ) )
cNome := :String( "CPNOME", 60 )
cTipo := :String( "CPTIPO", 1 )
lEof := :Eof()
:CloseRecordset()
IF lEof
MsgStop( "Conta não cadastrada" )
RETURN .F.
ENDIF
@ nRow, 32 SAY cNome
IF m_Prog == "PJPCONTABIL" .AND. cTipo != "A"
MsgStop( "Não pode efetuar lançamento em conta sintética" )
RETURN .F.
ENDIF
ENDWITH
RETURN .T.
Na SP é SELECT campos INTO variáveis, o que já pega a informação que interessa e encerra a consulta.
Fazendo o mesmo no Harbour, já encerro o recordset.
Do jeito que eu fazia antes, eu mantinha aberto, pra economizar variáveis, mas.... tinha que fechar nos dois IFs, e no final.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Meu modo de trabalho
Esqueci das datas com UTC...
Muita coisa pra um negócio tão simples...
Talvez o MySQL tenha isso pronto, mas.... vai no que já tenho...
Domingo de páscoa
terça de carnaval
Início do horário de verão
Término do horário de verão
E finalmente, a data com fuso horário
Agora no post que vi: DATE_SUB()
Esse equivale ao DATE_ADD() com data negativa.
Nem sei porque usei diferente....
Muita coisa pra um negócio tão simples...
Talvez o MySQL tenha isso pronto, mas.... vai no que já tenho...
Domingo de páscoa
Código: Selecionar todos
CREATE FUNCTION ze_DomingoDePascoa( nAno INT(11) )
RETURNS DATE
BEGIN
DECLARE nA, nB, nC, nD, nE, nF, nG, nH, nI, nK, nL, nM, nMes, nDia INT;
DECLARE dData DATE;
SET nA = MOD( nAno, 19 );
SET nB = FLOOR( nAno / 100 );
SET nC = MOD( nAno, 100 );
SET nD = FLOOR( nB / 4 );
SET nE = MOD( nB, 4 );
SET nF = FLOOR( ( nB + 8 ) / 25 );
SET nG = FLOOR( ( nB - nF + 1 ) / 3 );
SET nH = MOD( 19 * nA + nB - nD - nG + 15, 30 );
SET nI = FLOOR( nC / 4 );
SET nK = MOD( nC, 4 );
SET nL = MOD( 32 + 2 * nE + 2 * nI - nH - nK, 7 );
SET nM = FLOOR( ( nA + 11 * nH + 22 * nL ) / 451 );
SET nMes = FLOOR( ( nH + nL - 7 * nM + 114 ) / 31 );
SET nDia = MOD( nH + nL - 7 * nM + 114, 31 ) + 1;
SET dData = CONCAT( LPAD( nAno, 4, '0' ), '-', + LPAD( nMes, 2, '0' ), '-', LPAD( nDia, 2, '0' ) );
RETURN dData;
END
Código: Selecionar todos
CREATE FUNCTION ze_TercaDeCarnaval( nAno INT(11) )
RETURNS DATE
BEGIN
DECLARE dData DATE;
SET dData = DATE_SUB( ze_DomingoDePascoa( nAno ), INTERVAL 47 DAY );
RETURN dData;
END
Código: Selecionar todos
CREATE FUNCTION ze_HorarioVeraoInicio( nAno INT(11) )
RETURNS DATE
BEGIN
DECLARE dPrimeiroDia, dPrimeiroDomingo, dTerceiroDomingo DATE;
IF nAno = 2018 THEN
SET dTerceiroDomingo := '2018-11-04';
ELSE
SET dPrimeiroDia := CONCAT( LPAD( nAno, 4, '0' ), '-10-01' );
SET dPrimeiroDomingo := DATE_ADD( dPrimeiroDia, INTERVAL
( 6 - WEEKDAY( dPrimeiroDia ) ) DAY );
SET dTerceiroDomingo := DATE_ADD( dPrimeiroDomingo, INTERVAL 14 DAY );
END IF;
RETURN dTerceiroDomingo;
END
Código: Selecionar todos
CREATE FUNCTION ze_HorarioVeraoTermino( nAno INT(11) )
RETURNS TEXT
BEGIN
DECLARE cText TEXT;
DECLARE dPrimeiroDia, dPrimeiroDomingo, dTerceiroDomingo DATE;
SET dPrimeiroDia := CONCAT( LPAD( nAno + 1, 4, '0' ), '-02-01' );
SET dPrimeiroDomingo := DATE_ADD( dPrimeiroDia, INTERVAL
6 - WEEKDAY( dPrimeiroDia ) DAY );
SET dTerceiroDomingo := DATE_ADD( dPrimeiroDomingo, INTERVAL 14 DAY );
IF dTerceiroDomingo = ze_TercaDeCarnaval( nAno + 1 ) - 2 THEN
SET dTerceiroDomingo := DATE_ADD( dTerceiroDomingo, INTERVAL 7 DAY );
END IF;
RETURN dTerceiroDomingo;
END
Código: Selecionar todos
CREATE FUNCTION ze_DateTimeXml( dDate DATE, cTime VARCHAR(10), cUF VARCHAR(2) )
RETURNS TEXT
BEGIN
DECLARE cText TEXT;
DECLARE nHorarioVerao INT(11);
SET nHorarioVerao :=
dDate >= ze_HorarioVeraoInicio( YEAR( dDate ) ) OR
dDate <= ze_HorarioVeraoTermino( YEAR( dDate ) - 1 ) ;
IF cUF = 'AC' THEN
SET cText := '-05:00';
ELSEIF cUF IN ( 'MT','MS' ) AND nHorarioVerao = 1 THEN
SET cText := '-03:00';
ELSEIF cUF IN ( 'DF', 'ES', 'GO', 'MG', 'PR', 'RJ', 'RS', 'SC' ) AND nHorarioVerao = 1 THEN
SET cText := '-02:00';
ELSEIF cUF IN ( 'AM', 'MT', 'MS', 'RO', 'RR' ) THEN
SET cText := '-04:00';
ELSE
SET cText := '-03:00';
END IF;
SET cText := CONCAT( dDate, 'T', cTime, cText );
RETURN cText;
END
Esse equivale ao DATE_ADD() com data negativa.
Nem sei porque usei diferente....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/