Código: Selecionar todos
METHOD CalculaValores( nIdPedido ) CLASS SubPedidoClass
LOCAL nCont, mLei, mpdDifCal, mpdLeis
LOCAL cnSQL := ADOClass():New( AppConexao() )
IF nIdPedido == 0
RETURN NIL
ENDIF
// Parte 1 - Rateia over, se houver
// soma tudo primeiro
WITH OBJECT cnSQL
:cSQL := "UPDATE JPPEDIDO" + ;
" JOIN " + ;
" ( SELECT IPPEDIDO, SUM( IPQTDE * IPPREPED ) AS SOMA" + ;
" FROM JPITPED WHERE IPPEDIDO = " + NumberSQL( nIdPedido ) + ;
" GROUP BY IPPEDIDO ) AS TEMP" + ;
" ON TEMP.IPPEDIDO = JPPEDIDO.IDPEDIDO" + ;
" SET JPPEDIDO.PDVALPRO = TEMP.SOMA" + ;
" WHERE IDPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
// valor adicional rateado
:cSQL := "UPDATE JPITPED" + ;
" JOIN JPPEDIDO ON JPPEDIDO.IDPEDIDO = JPITPED.IPPEDIDO" + ;
" SET IPVALADI = Round( JPPEDIDO.PDVALADI / IF( PDVALPRO = 0, 1, PDVALPRO) * ( JPITPED.IPPREPED * JPITPED.IPQTDE ), 2 )" + ;
" WHERE JPITPED.IPPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
:cSQL := "UPDATE JPITPED" + ;
" JOIN JPPEDIDO ON JPPEDIDO.IDPEDIDO = JPITPED.IPPEDIDO" + ;
" SET JPITPED.IPPRENOT = Round( IF( IPQTDE = 0, 0, ( ( JPITPED.IPPREPED + JPITPED.IPVALADI ) * JPITPED.IPQTDE )" + ;
" * ( ( 100 - JPPEDIDO.PDPERDES ) / 100 ) * ( ( 100 + JPPEDIDO.PDPERADI ) / 100 )" + ;
" / IF( JPITPED.IPQTDE = 0, 1, JPITPED.IPQTDE ) ), 5 ) WHERE JPITPED.IPPEDIDO = " + NumberSQL( nidPedido )
:ExecuteCmd()
:cSQL := "UPDATE JPITPED" + ;
" SET IPVALPRO = IPPRENOT * IPQTDE" + ;
" WHERE IPPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
// Parte 3 - Soma pra calcular valores rateados
:cSQL := "UPDATE JPPEDIDO" + ;
" JOIN" + ;
" ( SELECT SUM( IPVALPRO ) AS SOMA" + ;
" FROM JPITPED WHERE IPPEDIDO = " + NumberSQL( nIdPedido ) + ;
" GROUP BY IPPEDIDO ) AS TEMP" + ;
" SET PDVALPRO = TEMP.SOMA" + ;
" WHERE IDPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
// Parte 4 - Rateio e totais
:cSQL := "UPDATE JPITPED" + ;
" JOIN JPPEDIDO ON JPPEDIDO.IDPEDIDO = JPITPED.IPPEDIDO" + ;
" SET" + ;
" IPVALPRO = Round( IPPRENOT * IPQTDE, 2 ), " + ;
" IPVALFRE = Round( JPPEDIDO.PDVALFRE * IPVALPRO / IF( JPPEDIDO.PDVALPRO = 0, 1, JPPEDIDO.PDVALPRO ), 2 ), " + ;
" IPVALSEG = Round( JPPEDIDO.PDVALSEG * IPVALPRO / IF( JPPEDIDO.PDVALPRO = 0, 1, JPPEDIDO.PDVALPRO ), 2 ), " + ;
" IPVALOUT = Round( JPPEDIDO.PDVALOUT * IPVALPRO / IF( JPPEDIDO.PDVALPRO = 0, 1, JPPEDIDO.PDVALPRO ), 2 ), " + ;
" IPVALEXT = Round( JPPEDIDO.PDVALEXT * IPVALPRO / IF( JPPEDIDO.PDVALPRO = 0, 1, JPPEDIDO.PDVALPRO ), 2 ), " + ;
" IPVALDES = Round( JPPEDIDO.PDVALDES * IPVALPRO / IF( JPPEDIDO.PDVALPRO = 0, 1, JPPEDIDO.PDVALPRO ), 2 ), " + ;
" IPVALADI = Round( JPPEDIDO.PDVALADI * IPVALPRO / IF( JPPEDIDO.PDVALPRO = 0, 1, JPPEDIDO.PDVALPRO ), 2 ) " + ;
" WHERE JPITPED.IPPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
:cSQL := "UPDATE JPITPED" + ;
" SET IPVALNOT = IPVALPRO" + ;
" WHERE IPPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
:cSQL := "UPDATE JPPEDIDO" + ;
" JOIN" + ;
" ( SELECT SUM( IPVALNOT ) AS SOMA" + ;
" FROM JPITPED" + ;
" WHERE IPPEDIDO = " + NumberSQL( nIdPedido ) + ;
" GROUP BY IPPEDIDO ) AS TEMP" + ;
" SET JPPEDIDO.PDVALNOT = TEMP.SOMA" + ;
" WHERE IDPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
// aqui grava tudo no dbf
:cSQL := "SELECT * FROM JPITPED WHERE IPPEDIDO = " + NumberSQL( nIdPedido )
:Execute()
DO WHILE ! :Eof()
::CalculaImpostosProduto( :Number( "IDITPED" ) )
:MoveNext()
ENDDO
ENDWITH
WITH OBJECT cnSQL
:cSQL := "UPDATE JPPEDIDO" + ;
" JOIN" + ;
;
" ( SELECT SUM( IPISSBAS ) AS ISSBAS, SUM( IPISSVAL ) AS ISSVAL, " + ;
" SUM( IPIIBAS ) AS IIBAS, SUM( IPIIVAL ) AS IIVAL, " + ;
" SUM( IPIPIBAS ) AS IPIBAS, SUM( IPIPIVAL ) AS IPIVAL, " + ;
" SUM( IPICMBAS ) AS ICMBAS, SUM( IPICMVAL ) AS ICMVAL, " + ;
" SUM( IPFCPVAL ) AS FCPVAL, SUM( IPSUBBAS ) AS SUBBAS, " + ;
" SUM( IPSUBVAL ) AS SUBVAL, " + ;
" SUM( IPDIFVALI ) AS DIFVALI, SUM( IPDIFVALF ) AS DIFVALF, " + ;
" SUM( IPPISBAS ) AS PISBAS, SUM( IPPISVAL ) AS PISVAL," + ;
" SUM( IPCOFBAS ) AS COFBAS, SUM( IPCOFVAL ) AS COFVAL," + ;
" SUM( IPVALNOT ) AS VALNOT, SUM( IPICSBAS ) AS ICSBAS," + ;
" SUM( IPICSVAL ) AS ICSVAL, SUM( IPVALADU ) AS VALADU," + ;
" SUM( IPVALIOF ) AS VALIOF, SUM( IPIMPVAL ) AS IMPVAL," + ;
" SUM( IPVALCUS ) AS VALCUS, AVG( IPICSALI ) AS ICSALI" + ;
" FROM JPITPED" + ;
" WHERE IPPEDIDO = " + NumberSQL( nIdPedido ) + ;
" GROUP BY IPPEDIDO ) AS TEMP" + ;
;
" SET PDISSBAS = TEMP.ISSBAS, PDISSVAL = TEMP.ISSVAL," + ;
" PDIIBAS = TEMP.IIBAS, PDIIVAL = TEMP.IIVAL," + ;
" PDIPIBAS = TEMP.IPIBAS, PDIPIVAL = TEMP.IPIVAL," + ;
" PDICMBAS = TEMP.ICMBAS, PDICMVAL = TEMP.ICMVAL," + ;
" PDFCPVAL = TEMP.FCPVAL, PDSUBBAS = TEMP.SUBBAS," + ;
" PDSUBVAL = TEMP.SUBVAL, PDDIFVALI = TEMP.DIFVALI," + ;
" PDDIFVALF = TEMP.DIFVALF, PDPISBAS = TEMP.PISBAS," + ;
" PDPISVAL = TEMP.PISVAL, PDCOFBAS = TEMP.COFBAS," + ;
" PDCOFVAL = TEMP.COFVAL, PDVALNOT = TEMP.VALNOT," + ;
" PDICSBAS = TEMP.ICSBAS, PDICSVAL = TEMP.ICSVAL," + ;
" PDVALADU = TEMP.VALADU, PDVALIOF = TEMP.VALIOF," + ;
" PDIMPVAL = TEMP.IMPVAL, PDVALCUS = TEMP.VALCUS," + ;
" PDICSALI = TEMP.ICSALI" + ;
" WHERE JPPEDIDO.IDPEDIDO = " + NumberSQL( nIdPedido )
:ExecuteCmd()
:cSQL := "SELECT * FROM JPITPED WHERE IPPEDIDO = " + NumberSQL( nIdPedido )
:Execute()
mpdLeis := ""
mpdDifCal := "N"
DO WHILE ! :Eof()
mpdDifCal := iif( :String( "IPDIFCAL", 1 ) == "S", "S", mpdDifCal )
FOR nCont = 1 TO Len( :String( "IPLEIS" ) ) STEP 7
mLei := Substr( :String( "IPLEIS" ), nCont, 6 )
IF Val( mLei ) # 0 .AND. ! mLei $ mpdLeis
mpdLeis := mpdLeis + mLei + ","
ENDIF
NEXT
:MoveNext()
ENDDO
:CloseRecordset()
:QueryCreate()
:QueryAdd( "PDLEIS", mpdLeis )
:QueryAdd( "PDDIFCAL", mpdDifCal )
:QueryExecuteUpdate( "JPPEDIDO", "IDPEDIDO = " + NumberSQL( nIdPedido ) )
ENDWITH
RETURN NIL
METHOD CalculaImpostosProduto( nIdItPed ) CLASS SubPedidoClass
LOCAL mipIcmBas, mipIcmAli, mipIcmRed, mipIcmVal, cIDCfop, nIDImposto, cIdIpiCst, cIdIpiEnq
LOCAL mipFcpAli, mipFcpVal, cIdIcmCst, cIdPisCst, cIDPisEnq, cIDCofCst, cIDCofEnq
LOCAL mipIpiBas, mipIpiAli, mipIpiVal, mipImpAli, mipImpVal
LOCAL mipIssBas, mipIssAli, mipIssVal
LOCAL mipPisBas, mipPisAli, mipPisVal
LOCAL mipCofBas, mipCofAli, mipCofVal
LOCAL mipSubBas, mipSubIva, mipSubAli, mipSubRed, mipSubVal
LOCAL mipValNot, mipIIBas, mipIIVal
LOCAL mipIcsBas, mipIcsVal, mipIcsAli, mipIpiIcm
LOCAL mipValPro, mipValFre, mipValSeg, mipValOut, mipLeis, mipValExt
LOCAL mipValDes, mipIIAli, mipDifAlii, mipDifAliu, mipDifAlif, mipDifVali, mipDifValf, mipDifBas, mipDifCal
LOCAL cnSQL := ADOClass():New( AppConexao() )
IF nIdItPed == 0
RETURN NIL
ENDIF
WITH OBJECT cnSQL
:cSQL := ;
" SELECT JPITPED.*," + ;
" JPPEDIDO.PDTRANSACAO," + ;
" JPCADASTRO.CDUFENT, JPCADASTRO.CDTRICAD," + ;
" JPITEM.IETRIPRO," + ;
" JPTABUF.UFTRIUF," + ;
" JPTRANSACAO.TRREACAO," + ;
" JPTABIBPT.IBNACALI," + ;
" JPTABIBPT.IBIMPALI," + ;
" JPIMPOSTO.*" + ;
" FROM JPITPED" + ;
" LEFT JOIN JPPEDIDO ON JPPEDIDO.IDPEDIDO = JPITPED.IPPEDIDO" + ;
" LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPPEDIDO.PDCADASTRO" + ;
" LEFT JOIN JPITEM ON JPITEM.IDPRODUTO = JPITPED.IPPRODUTO" + ;
" LEFT JOIN JPTABUF ON JPTABUF.IDUF = JPCADASTRO.CDUFENT" + ;
" LEFT JOIN JPTRANSACAO ON JPTRANSACAO.IDTRANSACAO = JPPEDIDO.PDTRANSACAO" + ;
" LEFT JOIN JPIMPOSTO" + ;
" ON JPIMPOSTO.IMTRANSACAO = JPPEDIDO.PDTRANSACAO" + ;
" AND JPIMPOSTO.IMTRIUF = JPTABUF.UFTRIUF" + ;
" AND JPIMPOSTO.IMTRICAD = JPCADASTRO.CDTRICAD" + ;
" AND JPIMPOSTO.IMTRIPRO = JPITEM.IETRIPRO" + ;
" LEFT JOIN JPTABIBPT ON JPTABIBPT.IBCODIGO = JPITEM.IENCM" + ;
" WHERE IDITPED = " + NumberSQL( nidItPed )
:Execute()
nIdImposto := :Number( "IDIMPOSTO" )
cIdCfOp := iif( nIdImposto == 999999, :String( "IPCFOP" ), :String( "IMCFOP" ) )
mipIIAli := iif( nIdImposto == 999999, :Number( "IPIIALI" ), :Number( "IMIIALI" ) )
mipIssAli := iif( nIdImposto == 999999, :Number( "IPISSALI" ), :Number( "IMISSALI" ) )
cIdIpiCst := iif( nIdImposto == 999999, :String( "IPIPICST" ), :String( "IMIPICST" ) )
mipIpiAli := iif( nIdImposto == 999999, :Number( "IPIPIALI" ), :Number( "IMIPIALI" ) )
mipIpiIcm := iif( nIdImposto == 999999, :String( "IPIPIICM", 1 ), :String( "IMIPIICM", 1 ) )
cidIpiEnq := iif( nIdImposto == 999999, :String( "IPIPIENQ" ), :String( "IMIPIENQ" ) )
cidIcmCst := iif( nIdImposto == 999999, :String( "IPICMCST" ), :String( "IMICMCST" ) )
mipIcmAli := iif( nIdImposto == 999999, :Number( "IPICMALI" ), :Number( "IMICMALI" ) )
mipIcmRed := iif( nIdImposto == 999999, :Number( "IPICMRED" ), :Number( "IMICMRED" ) )
mipFcpAli := iif( nIdImposto == 999999, :Number( "IPFCPALI" ), :Number( "IMFCPALI" ) )
mipSubAli := iif( nIdImposto == 999999, :Number( "IPSUBALI" ), :Number( "IMSUBALI" ) )
mipSubIva := iif( nIdImposto == 999999, :Number( "IPSUBIVA" ), :Number( "IMSUBIVA" ) )
mipSubRed := iif( nIdImposto == 999999, :Number( "IPSUBRED" ), :Number( "IMSUBRED" ) )
mipDifCal := iif( nIdImposto == 999999, :String( "IPDIFCAL", 1 ), :String( "IMDIFCAL", 1 ) )
mipDifAlii := iif( nIdImposto == 999999, :Number( "IPDIFALII" ), :Number( "IMDIFALII" ) )
mipDifAliu := iif( nIdImposto == 999999, :Number( "IPDIFALIU" ), :Number( "IMDIFALIU" ) )
mipDifAlif := iif( nIdImposto == 999999, :Number( "IPDIFALIF" ), :Number( "IMDIFALIF" ) )
cIdPisCst := iif( nIdImposto == 999999, :String( "IPPISCST" ), :String( "IMPISCST" ) )
mipPisAli := iif( nIdImposto == 999999, :Number( "IPPISALI" ), :Number( "IMPISALI" ) )
cIdPisEnq := iif( nIdImposto == 999999, :String( "IPPISENQ" ), :String( "IMPISENQ" ) )
cIdCofCst := iif( nIdImposto == 999999, :String( "IPCOFCST" ), :String( "IMCOFCST" ) )
mipCofAli := iif( nIdImposto == 999999, :Number( "IPCOFALI" ), :Number( "IMCOFALI" ) )
cIdCofEnq := iif( nIdImposto == 999999, :String( "IPCOFENQ" ), :String( "IMCOFENQ" ) )
mipIcsAli := iif( nIdImposto == 999999, :Number( "IPICSALI" ), :Number( "IMICSALI" ) )
mipLeis := iif( nIdImposto == 999999, :String( "IPLEIS" ), :String( "IMLEIS" ) )
IF "CONSUMIDOR" $ :String( "TRREACAO" )
IF hb_ASCan( { "0", "3", "4", "5" }, Left( cIdIcmCst, 1 ),,, .T. ) != 0
mipImpAli := :Number( "IBNACALI" )
ELSE
mipImpAli := :Number( "IBIMPALI" )
ENDIF
ELSE
mipImpAli := 0
ENDIF
mipValPro := Round( :Number( "IPPRENOT" ) * :Number( "IPQTDE" ), 2 )
mipValFre := :Number( "IPVALFRE" )
mipValSeg := :Number( "IPVALSEG" )
mipValOut := :Number( "IPVALOUT" )
mipValExt := :Number( "IPVALEXT" )
mipValDes := :Number( "IPVALDES" )
:CloseRecordset()
ENDWITH
IF mipIIAli > 0
mipIIBas := mipValPro
mipIIVal := Int( mipIIBas * mipIIAli ) / 100
ELSE
mipIIBas := 0
mipIIVal := 0
ENDIF
IF mipIssAli > 0
mipIssBas := mipValPro + mipIIVal
mipIssVal := Int( mipIssBas * mipIssAli ) / 100
ELSE
mipIssBas := 0
mipIssAli := 0
mipIssVal := 0
ENDIF
IF mipIpiAli > 0
mipIpiBas := mipValPro + mipIIVal
mipIpiVal := Int( mipIpiBas * mipIpiAli ) / 100
ELSE
mipIpiBas := 0
mipIpiAli := 0
mipIpiVal := 0
ENDIF
IF mipIcmAli > 0 .AND. hb_AScan( { "00", "10", "20", "70", "90", "201", "202", "203", "900" }, Substr( cIdIcmCst, 2 ),,, .T. ) != 0
mipIcmBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal
IF mipIpiIcm != "N"
mipIcmBas += mipIpiVal
ENDIF
IF mipIcmRed > 0 .AND. hb_ASCan( { "20", "70", "90", "202", "202", "203", "900" }, Substr( cIdIcmCst, 2 ),,,.T. ) != 0
mipIcmBas := mipIcmBas - ( Int( mipIcmBas * mipIcmRed ) / 100 )
ELSE
mipIcmRed := 0
ENDIF
mipIcmVal := Int( mipIcmBas * mipIcmAli ) / 100
ELSE
mipIcmBas := 0
mipIcmAli := 0
mipIcmVal := 0
ENDIF
IF mipFcpAli > 0
mipFcpVal := Int( mipIcmBas * mipFcpAli ) / 100
ELSE
mipFcpVal := 0
ENDIF
IF mipSubAli > 0 .AND. hb_ASCan( { "10", "30", "70", "90", "900" }, Substr( cIdIcmCst, 2 ),,, .T. ) != 0
mipSubBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal
IF mipIpiIcm != "N"
mipSubBas += mipIpiVal
ENDIF
mipSubBas := mipSubBas + ( Int( mipSubBas * mipSubIva ) / 100)
IF mipSubRed > 0 .AND. hb_ASCan( { "20", "70", "90", "900" }, Substr( cIdIcmCst, 2 ),,, .T. ) != 0
mipSubBas := mipSubBas - ( Int( mipSubBas * mipSubRed ) / 100 )
ELSE
mipSubRed := 0
ENDIF
mipSubVal := Int( mipSubBas * mipSubAli ) / 100
mipSubVal := mipSubVal - mipIcmVal
IF mipSubVal < 0
mipSubVal := 0
ENDIF
ELSE
mipSubBas := 0
mipSubIva := 0
mipSubAli := 0
mipSubRed := 0
mipSubVal := 0
ENDIF
IF mipDifCal == "S"
mipDifBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal
IF mipIpiIcm != "N"
mipDifBas += mipIpiVal
ENDIF
mipDifVali := Max( Int( ( mipDifBas * mipDifAliu ) - ( mipDifBas * mipDifAlii ) ) / 100, 0 )
mipDifValf := Int( mipDifBas * mipDifAlif ) / 100
ELSE
mipDifBas := 0
mipDifVali := 0
mipDifValf := 0
ENDIF
// Aqui sem ST
mipValNot := mipValPro + mipIIVal + mipIpiVal + mipValFre + mipValSeg + mipValOut + mipValExt
IF mipPisAli > 0
mipPisBas := mipValNot
mipPisVal := Int( mipPisBas * mipPisAli ) / 100
ELSE
mipPisBas := 0
mipPisVal := 0
ENDIF
IF mipCofAli > 0
mipCofBas := mipValNot
mipCofVal := Int( mipCofBas * mipCofAli ) / 100
ELSE
mipCofBas := 0
mipCofVal := 0
ENDIF
IF mipIcsAli > 0
mipIcsBas := mipValNot
mipIcsVal := Int( mipIcsBas * mipIcsAli ) / 100
ELSE
mipIcsBas := 0
mipIcsVal := 0
ENDIF
// Soma pra nota ST e desconto
mipValNot := mipValNot - mipValDes + mipSubVal
IF Left( cIdCfop, 1 ) = "3" .AND. Left( cIdIcmCst, 1 ) == "1" // Importacao direta
// Formula Pis/Cofins retirada de http://www4.receita.fazenda.gov.br/simulador/Simulacao-tag.jsp
// Demais retiradas de http://www.comexblog.com.br/importacao/calculando-uma-nf-de-entrada-na-importacao
mipPisBas := mipValPro * ( ( 1 + ( mipIcmAli / 100 * ( mipIIAli / 100 + ( mipIpiAli / 100 * ( 1 + mipIIAli / 100 ) ) ) ) ) / ( ( 1 - mipPisAli / 100 - mipCofAli / 100 ) * ( 1 - mipIcmAli / 100 ) ) )
mipPisVal := mipPisBas * mipPisAli / 100
mipCofBas := mipValPro * ( ( 1 + ( mipIcmAli / 100 * ( mipIIAli / 100 + ( mipIpiAli / 100 * ( 1 + mipIIAli / 100 ) ) ) ) ) / ( ( 1 - mipPisAli / 100 - mipCofAli / 100 ) * ( 1 - mipIcmAli / 100 ) ) )
mipCofVal := mipCofBas * mipCofAli / 100
mipIcmBas := mipValPro + mipValFre + mipValSeg + mipValOut + mipIIVal // + mipPisVal + mipCofVal // Pis/Cof calculado sobre ICMS
IF mipIpiIcm != "N"
mipIcmBas += mipIpiVal
ENDIF
mipIcmBas := Int( mipIcmBas / ( 100 - mipIcmAli ) * 10000 ) / 100
mipIcmVal := Int( mipIcmBas * mipIcmAli ) / 100
mipValNot := mipPisBas // equivalente a soma de tudo
ENDIF
IF Len( Trim( cIdIcmCst ) ) > 3 .AND. ! Substr( cIdIcmCst, 2 ) == "900" // Simples Nacional
mipIcmAli := 0
mipIcmVal := 0
ENDIF
//IF jpitped->ipCfOp == "1.604 "
// mipValNot := 0
//ENDIF
mipImpVal := Round( mipValNot * mipImpAli / 100, 2 )
WITH OBJECT cnSQL
:QueryCreate()
:QueryAdd( "IPVALPRO", mipValPro )
:QueryAdd( "IPVALNOT", mipValNot )
:QueryAdd( "IPCFOP", cIdCfop )
:QueryAdd( "IPTRIBUT", StrZero( nIdImposto, 6 ) )
:QueryAdd( "IPCOFALI", mipCofAli )
:QueryAdd( "IPCOFBAS", mipCofBas )
:QueryAdd( "IPCOFCST", cIdCofCst )
:QueryAdd( "IPCOFENQ", cIdCofEnq )
:QueryAdd( "IPCOFVAL", mipCofVal )
:QueryAdd( "IPDIFALIF", mipDifALif )
:QueryAdd( "IPDIFALII", mipDifAlii )
:QueryAdd( "IPDIFALIU", mipDifAliu )
:QueryAdd( "IPDIFBAS", mipDifBas )
:QueryAdd( "IPDIFCAL", mipDifCal )
:QueryAdd( "IPDIFVALF", mipDifValf )
:QueryAdd( "IPDIFVALI", mipDifVAli )
:QueryAdd( "IPFCPALI", mipFcpAli )
:QueryAdd( "IPFCPVAL", mipFcpVal )
:QueryAdd( "IPICMALI", mipIcmAli )
:QueryAdd( "IPICMBAS", mipIcmBas )
:QueryAdd( "IPICMCST", cIdIcmCst )
:QueryAdd( "IPICMRED", mipIcmRed )
:QueryAdd( "IPICMVAL", mipIcmVal )
:QueryAdd( "IPICSBAS", mipIcsBas )
:QueryAdd( "IPICSALI", mipIcsAli )
:QueryAdd( "IPICSVAL", mipIcsVal )
:QueryAdd( "IPIIBAS", mipIIBas )
:QueryAdd( "IPIIVAL", mipIIVal )
:QueryAdd( "IPIMPVAL", mipImpVal )
:QueryAdd( "IPIPIBAS", mipIpiBas )
:QueryAdd( "IPIPICST", cIdIpiCst )
:QueryAdd( "IPIPIENQ", cIdIpiEnq )
:QueryAdd( "IPIPIVAL", mipIpiVal )
:QueryAdd( "IPISSALI", mipIssAli )
:QueryAdd( "IPISSBAS", mipIssBas )
:QueryAdd( "IPISSVAL", mipIssVal )
:QueryAdd( "IPLEIS", mipLeis )
:QueryAdd( "IPPISALI", mipPisAli )
:QueryAdd( "IPPISBAS", mipPisBas )
:QueryAdd( "IPPISCST", cIdPisCst )
:QueryAdd( "IPPISENQ", cIdPisEnq )
:QueryAdd( "IPPISVAL", mipPisVal )
:QueryAdd( "IPSUBALI", mipSubAli )
:QueryAdd( "IPSUBBAS", mipSubBas )
:QueryAdd( "IPSUBIVA", mipSubIVA )
:QueryAdd( "IPSUBRED", mipSubRed )
:QueryAdd( "IPSUBVAL", mipSubVal )
:QueryAdd( "IPINFALT", LogInfo() )
:QueryExecuteUpdate( "JPITPED", "IDITPED = " + NumberSQL( nidItPed ) )
ENDWITH
RETURN .T.
É todo cálculo do pedido, e trata-se de ler do mysql pra salvar em seguida.
Parece o uso ideal de STORED PROCEDURE.
Dá pra dizer que é converter o aplicativo pra qualquer coisa, sem nem saber que "coisa" vai ser essa, sem importar linguagem de programação ou sistema operacional.
Continuar assim...
Pode ser interessante pensar em criar telas também no MySQL.... ou com ajuda dele...