Clipper On Line • Ver Tópico - Meu modo de trabalho

Meu modo de trabalho

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Meu modo de trabalho

Mensagempor JoséQuintas » 25 Out 2021 14:04

Aproveitando...

Hoje sim, emiti as duas primeiras notas, com XML gerado totalmente pelo MySQL.

Até agora era parcial, hoje foi total.

Esse fuso horário foi um dos problemas, que eu me esqueci dele.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 25 Mar 2023 20:22

SELECT 
   CPNOME,
   ze_ContabilSaldoExercicio( IDCTCONTA, '2021-12-31', '2021-12-31' ) AS SDANT,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-01-01','2022-01-31') AS DEB01,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-01-01','2022-01-31') AS CRE01,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-01-31','2021-12-31' ) AS ACU01,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-01-31', '2021-12-31' ) AS EXE01,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-02-01','2022-02-28') AS DEB02,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-02-01','2022-02-28') AS CRE02,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-02-28','2021-12-31' ) AS ACU02,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-02-28', '2021-12-31' ) AS EXE02,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-03-01','2022-03-31') AS DEB03,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-03-01','2022-03-31') AS CRE03,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-03-31','2021-12-31' ) AS ACU03,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-03-31', '2021-12-31' ) AS EXE03,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-04-01','2022-04-30') AS DEB04,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-04-01','2022-04-30') AS CRE04,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-04-30','2021-12-31' ) AS ACU04,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-04-30', '2021-12-31' ) AS EXE04,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-05-01','2022-05-31') AS DEB05,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-05-01','2022-05-31') AS CRE05,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-05-31','2021-12-31' ) AS ACU05,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-05-31', '2021-12-31' ) AS EXE05,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-06-01','2022-06-30') AS DEB06,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-06-01','2022-06-30') AS CRE06,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-06-30','2021-12-31' ) AS ACU06,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-06-30', '2021-12-31' ) AS EXE06,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-07-01','2022-07-31') AS DEB07,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-07-01','2022-07-31') AS CRE07,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-07-31','2021-12-31' ) AS ACU07,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-07-31', '2021-12-31' ) AS EXE07,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-08-01','2022-08-31') AS DEB08,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-08-01','2022-08-31') AS CRE08,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-08-31','2021-12-31' ) AS ACU08,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-08-31', '2021-12-31' ) AS EXE08,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-09-01','2022-09-30') AS DEB09,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-09-01','2022-09-30') AS CRE09,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-09-30','2021-12-31' ) AS ACU09,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-09-30', '2021-12-31' ) AS EXE09,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-10-01','2022-10-31') AS DEB10,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-10-01','2022-10-31') AS CRE10,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-10-31','2021-12-31' ) AS ACU10,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-10-31', '2021-12-31' ) AS EXE10,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-11-01','2022-11-30') AS DEB11,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-11-01','2022-11-30') AS CRE11,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-11-30','2021-12-31' ) AS ACU11,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-11-30', '2021-12-31' ) AS EXE11,
   ze_ContabilSaldoDebito( IDCTCONTA, '2022-12-01','2022-12-31') AS DEB12,
   ze_ContabilSaldoCredito( IDCTCONTA, '2022-12-01','2022-12-31') AS CRE12,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-12-31','2021-12-31' ) AS ACU12,
   ze_ContabilSaldoExercicio( IDCTCONTA,'2022-12-31', '2021-12-31' ) AS EXE12
FROM JPCTCONTA
WHERE IDCTCONTA = 5


Modifiquei radical a contabilidade.
O MySQL faz tudo.
balancete, balanço patrimonial, demonstração de resultado, vém tudo pronto.
Esse acima é pra consulta de saldos mensais.
Sei lá se compensa pegar um de cada vez....
Retorna tudo em menos de 1 segundo.
No HeidiSQL mostra 0.016 segundos
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 25 Mar 2023 20:27

/*
PCONTSALDO - CONSULTA AOS VALORES DO PLANO DE CONTAS
1991.04 - José Quintas
*/

#include "inkey.ch"
#include "josequintas.ch"

PROCEDURE pContSaldo

   LOCAL nIdCtConta := 0, nCont, nAnoAtual, GetList := {}, cnSQL := ADOLocal(), dInicial, dFinal
   LOCAL nFechaMes, nFechamento, dFechamento, dFechaExe

   @  2, 2 SAY "Ano. . . .:"
   @  4, 2 SAY "Conta. . .:"

   @  6, 2  SAY "--mes--"
   @  6, 10 SAY " " + Padc( "Débitos", 21, "-" )
   @  6, 32 SAY " " + Padc( "Créditos", 21, "-" )
   @  6, 54 SAY " " + Padc( "Saldo Exercício", 21, "-" )
   @  6, 76 SAY " " + Padc( "Saldo Período", 21, "-" )

   @  7, 2  SAY "DEZ/"
   @  9, 2  SAY "JAN/"
   @ 11, 2  SAY "FEV/"
   @ 13, 2  SAY "MAR/"
   @ 15, 2  SAY "ABR/"
   @ 17, 2  SAY "MAI/"
   @ 19, 2  SAY "JUN/"
   @ 21, 2  SAY "JUL/"
   @ 23, 2  SAY "AGO/"
   @ 25, 2  SAY "SET/"
   @ 27, 2  SAY "OUT/"
   @ 29, 2  SAY "NOV/"
   @ 31, 2  SAY "DEZ/"

   nAnoAtual := 0

   DO WHILE .T.
      Mensagem( "F9 pesquisa, ESC sai" )
      @ 2, 13 GET nAnoAtual  PICTURE "9999" VALID nAnoAtual > 2000
      @ 4, 13 GET nIdCtConta PICTURE "999999" VALID JPCTCONTAClass():New():Valida( @nIdCtConta )
      READ
      Mensagem()
      IF LastKey() == K_ESC
         EXIT
      ENDIF
      Altd()
      WITH OBJECT cnSQL
         :Execute( "SELECT EMFECHA FROM JPEMPRESA WHERE IDEMPRESA=1" )
         nFechamento := :Number( "EMFECHA" )
         :CloseRecordset()
         dFechaExe := Stod( StrZero( nAnoAtual - 1, 4 ) + "1231" )
         :cSQL := "SELECT CPNOME," + ;
            "ze_ContabilSaldoExercicio( IDCTCONTA, " + DateSQL( dFechaExe ) + ", " + DateSQL( dFechaExe ) + " ) AS SDANT," + hb_Eol()
         FOR nCont = 1 TO 12
            dInicial    := Stod( StrZero( nAnoAtual, 4 ) + StrZero( nCont, 2 ) + "01" )
            dFinal      := Last_Day( dInicial )
            nFechaMes   := Int( ( nCont - 1 ) / nFechamento )
            IF nFechaMes == 0
               dFechamento := Stod( StrZero( nAnoAtual - 1, 4 ) + "1231" )
            ELSE
               dFechamento := Last_Day( Stod( StrZero( nAnoAtual, 4 ) + StrZero( nCont, 2 ) + "01" ) )
            ENDIF
            :cSQL += "ze_ContabilSaldoDebito( IDCTCONTA, " + DateSQL( dInicial ) + "," + DateSQL( dFinal ) + ") AS DEB" + StrZero( nCont, 2 ) + "," + ;
                     "ze_ContabilSaldoCredito( IDCTCONTA, " + DateSQL( dInicial ) + "," + DateSQL( dFinal ) + ") AS CRE" + StrZero( nCont, 2 ) + "," + ;
                     "ze_ContabilSaldoExercicio( IDCTCONTA," + DateSQL( dFinal ) + "," + DateSQL( dFechaExe ) + " ) AS ACU" + StrZero( nCont, 2 ) + "," + ;
                     "ze_ContabilSaldoExercicio( IDCTCONTA," + DateSQL( dFinal ) + ", " + DateSQL( dFechamento ) + " ) AS EXE" + StrZero( nCont, 2 ) + ;
                     iif( nCont == 12, "", "," ) + hb_Eol()
         NEXT
         :cSQL += " FROM JPCTCONTA" + ;
            " WHERE IDCTCONTA = " + NumberSQL( nIdCtConta )
         :Execute()
         @ 7,  6 SAY StrZero( nAnoAtual - 1, 4 )
         @ 7, 52 SAY :Number( "SDANT" ) PICTURE PicVal(14,2)
         @ 7, 74 SAY :Number( "SDANT" ) PICTURE PicVal(14,2)
         FOR nCont = 1 TO 12
            @ nCont * 2 + 7, 0 SAY ""
            @ Row(), 6  SAY StrZero( nAnoAtual, 4 )
            @ Row(), 10 SAY :Number( "DEB" + StrZero( nCont, 2 ) ) PICTURE PicVal(14,2)
            @ Row(), 32 SAY :Number( "CRE" + StrZero( nCont, 2 ) ) PICTURE PicVal(14,2)
            @ Row(), 52 SAY :Number( "ACU" + StrZero( nCont, 2 ) ) PICTURE PicVal(14,2)
            @ Row(), 74 SAY :Number( "EXE" + StrZero( nCont, 2 ) ) PICTURE PicVal(14,2)
         NEXT
      ENDWITH
   ENDDO
   CLOSE DATABASES

   RETURN


Fonte da consulta.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 26 Mar 2023 11:54

Atualizando aqui.
Seguindo os avanços, executando STORED PROCEDUREs, e pegando retorno de STORED FUNCTIONs
      :ExecuteProcedure( "ze_ContabilBalancete", dInicial, dFinal, iif( nOpcResultado == 1, 0, 12 ), nOpcGrau, iif( nOpcResultado == 3, 1, 0 ) )


   nIdPedido := cnSQL:ReturnFunction( "ze_PedidoDuplica", nIdPedido, Date(), LogInfo() )


   cnSQL:ExecuteProcedureNoReturn( "ze_PedidoCalculo", nIdPedido )


Detalhe nesse último: TODOS os cálculos do pedido no MySQL e não no Harbour.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor Mario Mesquita » 27 Mar 2023 12:20

Bom dia a todos.

Quintas, então aquela função naquele Select enorme não está no programa e sim numa Stored Procedure do BD?

Poderoso mesmo...

Saudações,
Mario.
Avatar de usuário

Mario Mesquita
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 557
Data de registro: 08 Dez 2009 12:47
Cidade/Estado: Rio de Janeiro
Curtiu: 73 vezes
Mens.Curtidas: 13 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 27 Mar 2023 15:23

Mario Mesquita escreveu:Quintas, então aquela função naquele Select enorme não está no programa e sim numa Stored Procedure do BD?
Poderoso mesmo...


Tenho de tudo um pouco.

No caso do balancete contábil, tem rotina que cria tudo no MySQL e trás pronto em uma tabela.

Minha geração de XML de nota fiscal está toda no MySQL.
São várias rotinas, uma chamando a outra.
O aplicativo apenas pede o XML de uma nota, e vém pronto.

E é muito rápido isso tudo, de um modo geral, menos de 1 segundo tá tudo pronto.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 05 Abr 2023 21:47

telaped.png


Uia
Agora com "dialog" dá pra brincar um pouco mais.

Ainda falta ajustar os controles, referente a cores e tamanho de fonte.
No harbour 3.4 funcionava melhor.
Como nunca usei, nem me preocupei com os detalhes.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 21 Abr 2023 13:34

tamanho.png


Sei lá....
De ontem pra hoje o EXE reduziu 8 MB.
E comparando com 23/02/2023 reduziu 245 MB

Nem perguntem, só olhei de curiosidade.
backupd\ é backup, tá faltando atualizar o backup kkkk
wwwjpa\arquivos, é o último que fiz upload pra internet, assim que fizer upload passa a ser o atual.
Foi só coincidência ter os 3 por aqui ainda.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 25 Mai 2023 12:34

tamanho.png
tamanho.png (6.37 KiB) Visualizado 108356 vezes


Sei lá pra que... reduziu um pouco mais.
Só retirando lixo.
Sped fiscal por exemplo, nunca usei, pra que manter no aplicativo...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 02 Out 2023 17:12

Tava revendo aqui.
Por coincidência, está complementando DOIS ANOS que passei a gerar XML de NFE no próprio MySQL.
E por coincidência hoje dividi um pouco mais, pra não ficar muito grande.

Apenas uma parte:
CREATE FUNCTION ze_XmlNfeProduto( nIdItPed INT(11), nNumItem INT(11) )
RETURNS TEXT CHARSET latin1

PRODUTO: BEGIN

   DECLARE cXml TEXT;
   DECLARE nIdProduto, nSomenteIcms INT(11);
   DECLARE nQtde DECIMAL(16,4);
   DECLARE nValFre, nValSeg, nValDes, nValOut, nImpVal DECIMAL(16,2);
   DECLARE nPreNot DECIMAL(16,5);
   DECLARE cNome VARCHAR(60);
   DECLARE cPedCom, cUnid, cGtin, cGtinTri, cNcm, cCest, cPedCli, cCfop VARCHAR(20);

   SET cXml := '';

   SELECT IPPRODUTO, IPQTDE, IPPRENOT, IPVALFRE, IPVALSEG, IPVALDES, IPVALOUT + IPVALEXT, IPCFOP, ze_SoNumeros( IPPEDCOM ), IPIMPVAL,
      IENOME, IEUNID, IEGTIN, IEGTINTRI, IENCM, IECEST,
      PDPEDCLI
      FROM JPITPED
      LEFT JOIN JPPEDIDO ON IDPEDIDO = IPPEDIDO
      LEFT JOIN JPNOTFIS ON NFPEDIDO = IDPEDIDO
      LEFT JOIN JPITEM ON IDPRODUTO = IPPRODUTO
      WHERE IDITPED = nIdItPed
   INTO nIdProduto, nQtde, nPreNot, nValFre, nValSeg, nValDes, nValOut, cCfop, cPedCom, nImpVal,
      cNome, cUnid, cGtin, cGtinTri, cNcm, cCest, cPedCli;

   SET nSomenteIcms := IF( cCfop = '1.604' OR INSTR( cNome, ' DE ICMS' ) != 0, 1, 0 );

   SET cXml := CONCAT( cXml,
      '<det nItem="', nNumItem, '">',
      '<prod>',
      ze_XmlTag( 'cProd', LPAD( nIdProduto, 6, '0' ) ),
      ze_XmlTag( 'cEAN', ze_XmlNfeGtin( cGtin ) ),
      ze_XmlTag( 'xProd', cNome ),
      ze_XmlTag( 'NCM', cNcm ),
      IF( LENGTH( cCest ) = 0, '', ze_XmlTag( 'CEST', cCest ) ),
      ze_XmlTag( 'CFOP', ze_SoNumeros( cCFOP ) ),
      ze_XmlTag( 'uCom', LEFT( CONCAT( cUnid, '.' ), 6 ) ),
      ze_XmlTag( 'qCom', nQtde ),
      ze_XmlTag( 'vUnCom', IF( nSomenteIcms = 1, 0.00, nPreNot ) ),
      ze_XmlTag( 'vProd', IF( nSomenteIcms = 1, 0.00, ROUND( nQtde * nPreNot, 2 ) ) ),
      ze_XmlTag( 'cEANTrib', ze_XmlNfeGtin( cGtinTri ) ),
      ze_XmlTag( 'uTrib', LEFT( CONCAT( cUnid, '.' ), 6 ) ),
      ze_XmlTag( 'qTrib', nQtde ),
      ze_XmlTag( 'vUnTrib', IF( nSomenteIcms = 1, 0.00, nPreNot ) ),
      IF( nValFre = 0, '', ze_XmlTag( 'vFrete', nValFre ) ),
      IF( nValSeg = 0, '', ze_XmlTag( 'vSeg', nValSeg ) ),
      IF( nValDes = 0, '', ze_XmlTag( 'vDesc', nValDes ) ),
      IF( nValOut = 0, '', ze_XmlTag( 'vOutro', nValOut ) ),
      ze_XmlTag( 'indTot', '1' ) );

PRODUTOIMPORTACAO: BEGIN

   SET cXml := CONCAT( cXml, '' );

END PRODUTOIMPORTACAO;

   SET cXml := CONCAT( cXml,
      IF( LENGTH( cPedCli ) = 0, '', ze_XmlTag( 'xPed', cPedCli ) ),
      IF( LENGTH( cPedCom ) = 0, '', ze_XmlTag( 'nItemPed', cPedCom ) ),
      IF( 1 = 1, '', ze_XmlTag( 'cBenef', '' ) ) );

   SET cXml := CONCAT( cXml, ze_xmlnfeprodutoveiculo( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlnfeprodutomedicamento( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlnfeprodutoarmamento( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlNfeprodutocombustivel( nIdItPed ) );

   SET cXml := CONCAT( cXml, '</prod>' );

   SET cXml := CONCAT( cXml, '<imposto>', IF( nImpVal = 0, '', ze_XmlTag( 'vTotTrib', nImpVal ) ) );

   SET cXml := CONCAT( cXml, ze_xmlnfeprodutoicms( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlnfeprodutoipi( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlnfeprodutoii( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlnfeprodutopis( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_xmlnfeprodutocofins( nIdItPed ) );
   SET cXml := CONCAT( cXml, ze_XmlNfeProdutoISS( nIdItPed ) );

   SET cXml := CONCAT( cXml, '</imposto>', '</det>' );

   RETURN cXml;

END PRODUTO;
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 05 Out 2023 09:55

FUNCTION LoadBoletoSetup( oBolSetup, nIdPortador )

   LOCAL cnSQL := ADOLocal()

   WITH OBJECT cnSQL
      :Execute( "SELECT * FROM JPTABFINPOR WHERE IDFINPOR=" + NumberSQL( nIdPortador ) + ;
         " UNION ALL SELECT * FROM JPTABFINPOR WHERE FINPORBANCO=" + NumberSQL( nIdPortador ) )
      oBolSetup:nBanco      := :Number( "FINPORBANCO" )
      oBolSetup:nJuros      := :Number( "FINPORJUROS" )
      oBolSetup:nAgencia    := :Number( "FINPORAGENCIA" )
      oBolSetup:nConta      := :Number( "FINPORCONTA" )
      oBolSetup:nCarteira   := :Number( "FINPORCARTEIRA" )
      oBolSetup:nMulta      := :Number( "FINPORMULTA" )
      oBolSetup:nBancario   := :Number( "FINPORBANCARIO" )
      oBolSetup:nRemessa    := :Number( "FINPORREMESSA" ) + 1
      oBolSetup:nEspecie    := :Number( "FINPORNESPECIE" )
      oBolSetup:cBolEspecie := :String( "FINPORCESPECIE", 2 )
      nIdPortador           := :Number( "IDFINPOR" )
      :CloseRecordset()
   ENDWITH
   IF nIdPortador == 0
      oBolSetup:nBanco    := 341
      oBolSetup:nBancario := Val( LeCnf( "BOLETO NOSSO" ) )
      oBolSetup:nJuros    := Val( LeCnf( "BOLETO JUROS" ) )
      oBolSetup:nAgencia  := Val( LeCnf( "BOLETO AGENCIA" ) )
      oBolSetup:nConta    := Val( LeCNf( "BOLETO CONTA" ) )
      oBolSetup:nCarteira := Val( LeCnf( "BOLETO CARTEIRA" ) )
      oBolSetup:nCarteira := iif( oBolSetup:nCarteira == 0, 109, oBolSetup:nCarteira )
      oBolSetup:nRemessa  := 1
   ENDIF
   oBolSetup:nBancario += 1

   RETURN nIdPortador


Primeiro a configuração ficava no geral, LeCnf() e GravaCnf().
Depois foi pelo banco.
E agora é pelo portador.

      :Execute( "SELECT * FROM JPTABFINPOR WHERE IDFINPOR=" + NumberSQL( nIdPortador ) + ;
         " UNION ALL SELECT * FROM JPTABFINPOR WHERE FINPORBANCO=" + NumberSQL( nIdPortador ) )


Esse select pega portador ou banco, mas prioridade por portador.
Se não encontrar por aí, vai no geral.

Isso resolve questão de cliente que não fez atualização.
Após atualização de todos os clientes, sei lá quando, é remover tudo alternativo.
Assim não tem pressa, não tem correria, não tem esquecimento, é só deixar acontecer.

Pra que deixar pra acertar manual, se dá pra fazer automático ?
É assim que vamos eliminando trabalho extra.
Eliminar trabalho extra significa mais tempo pra melhorar outras coisas.

Não precisa de recursos avançados, conhecimentos avançados, ou inteligência artificial.
É só usar a cabeça.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18161
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Anterior



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 20 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro