fonte parcial anterior:
Código: Selecionar todos
:cSQL := ;
"SELECT " + ;
" IDPRODUTO, IDESTOQUE, ESPRODUTO, ESDATLAN, ESCADASTRO, ESCFOP, ESPEDIDO, ESTIPLAN, " + ;
" IF( JPNFEKEY.KKCHAVE IS NULL, LPAD( RIGHT( TRIM( ESNUMDOC ), 7 ), 7, '0' ), LPAD( '', 7, ' ' ) ) AS NUMDOC," + ;
" ESQTDE * IF( JPITEM.IEQTDCOM < 1, 1, JPITEM.IEQTDCOM ) AS QTDE," + ;
" ESQTDE * ESVALOR AS VALOR," + ;
" JPITEM.IEUNID AS UNIDADE, JPITEM.IEANP AS ANPPRO, JPITEM.IENOME AS ITENOME, " + ;
" IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', JPCADASTRO.CDCNPJ, LPAD( '', 14, '0' ) ) AS CADCNPJ, " + ;
" JPCADASTRO.CDCIDADE AS CADCIDADE, JPCADASTRO.CDUF AS CADUF, JPCADASTRO.CDNOME AS CADNOME," + ;
" TABCIDADE.CIIBGE AS IBGE," + ;
" IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', TMPANPLOC.ALANP, LPAD( '', 7, '0' ) ) AS ANPLOC," + ;
" IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', LPAD( '', 7, '0' ), TMPANPINS.AIANP ) AS ANPINS," + ;
" IF( TMPANPINS.AIANP IS NULL, LPAD( '',10,' '), TMPANPAGE.AAANP ) AS ANPAGE," + ;
" IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', TMPCNAE.IDCNAE, LPAD( '', 5, '0' ) ) AS ANPATI," + ;
" IF( TMPANPINS.AIANP IS NULL, IF( JPCADASTRO.CDCNAE = '9999999', JPTABANPOPE.AOANPOUT, " + ;
" JPTABANPOPE.AOANPNREG ), JPTABANPOPE.AOANPREG ) AS ANPOPE, " + ;
" JPNFEKEY.KKCHAVE AS NFEKEY " + ;
" FROM JPESTOQUE" + ;
" LEFT JOIN JPITEM ON JPITEM.IDPRODUTO = JPESTOQUE.ESPRODUTO" + ;
" LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPESTOQUE.ESCADASTRO" + ;
" LEFT JOIN ( SELECT DISTINCT CIIBGE, CIUF, CINOME FROM JPCIDADE ) AS TABCIDADE " + ;
" ON JPCADASTRO.CDUF = TABCIDADE.CIUF AND LEFT( JPCADASTRO.CDCIDADE, 20 ) = LEFT( TABCIDADE.CINOME, 20 )" + ;
" LEFT JOIN " + ;
" ( SELECT DISTINCT ALIBGE, ALANP FROM JPTABANPLOC WHERE LENGTH( ALVALATE ) < 1 ) AS TMPANPLOC" + ;
" ON TMPANPLOC.ALIBGE = TABCIDADE.CIIBGE " + ;
" LEFT JOIN " + ;
" ( SELECT DISTINCT AICNPJ, AIANP FROM JPTABANPINS WHERE LENGTH( AIVALATE ) < 1 ) AS TMPANPINS" + ;
" ON TMPANPINS.AICNPJ = IF( LENGTH( JPCADASTRO.CDCNPJ ) = 18," + ;
" CONCAT( SUBSTR( JPCADASTRO.CDCNPJ, 1, 2 ), SUBSTR( JPCADASTRO.CDCNPJ, 4, 3 )," + ;
" SUBSTR( JPCADASTRO.CDCNPJ, 8, 3 ), SUBSTR( JPCADASTRO.CDCNPJ, 12, 4 )," + ;
" SUBSTR( JPCADASTRO.CDCNPJ, 17, 2 ) ), 'X' ) " + ;
" LEFT JOIN " + ;
" ( SELECT DISTINCT AACNPJ, AAANP FROM JPTABANPAGE WHERE LENGTH( AAVALATE ) < 1 ) AS TMPANPAGE " + ;
" ON TMPANPAGE.AACNPJ = IF( LENGTH( JPCADASTRO.CDCNPJ ) = 18," + ;
" CONCAT( SUBSTR( JPCADASTRO.CDCNPJ, 1, 2 ), SUBSTR( JPCADASTRO.CDCNPJ, 4, 3 ), SUBSTR( CDCNPJ, 8, 3 ) ), 'X' ) " + ;
Código: Selecionar todos
:cSQL := "CALL ze_govisimp( " + ;
DateSql( dDataInicial ) + ", " + ;
DateSQL( dDataFinal ) + ", " + ;
StringSQL( jpempresa->emCnpj ) + ", 0 )"
:Execute()
Código: Selecionar todos
cnSQL:Execute( ze_GovISimpCreateSql() )
...
STATIC FUNCTION ze_GovISimpCreateSQL()
#pragma __binarystreaminclude "sql/ze_GovISimp.sql" | RETURN %s
Código: Selecionar todos
CREATE PROCEDURE IF NOT EXISTS ze_govisimp( dDataInicial DATE, dDataFinal DATE, cCnpjEmpresa VARCHAR(20), nFilter INT(2) )
BEGIN
SELECT
IDPRODUTO, IDESTOQUE, ESPRODUTO, ESDATLAN, ESCADASTRO, ESCFOP, ESPEDIDO, ESTIPLAN,
IF( JPNFEKEY.KKCHAVE IS NULL, LPAD( RIGHT( TRIM( ESNUMDOC ), 7 ), 7, '0' ), LPAD( '', 7, ' ' ) ) AS NUMDOC,
...
END
Ainda meio relutante de mudar o modo de trabalho.
Continua existindo a compilação no caso de alterações, mas o fonte Harbour só contém Harbour, e o fonte SQL só contém SQL, um não complica o outro.
Também a possibilidade de usar uma base referência, na internet por exemplo, e buscar tudo de lá para atualização/execução.
Ou até cadastradas em uma tabela, e buscar da tabela na internet.
Desta forma, bastaria eu atualizar o servidor referência, e os demais se atualizarem a partir dele, sem qualquer mudança no aplicativo.
Poderia até cadastrar datas nos comandos, pra indicar se precisam ser executados em determinada versão do aplicativo, pra uma possível atualização.
Só testando esse por enquanto, e imaginando possibilidades.
Por causa do modo tradicional deixando tudo no EXE, mas... deixar fora pode abrir mais possibilidades.
Afinal... o uso de internet é obrigatório, atualizar EXE da internet é normal, então atualizar comandos/procedures seria normal também.
Pois é... as possibilidades se multiplicando.
