-------------------------------
cPara:=xServer:Query( "SELECT * FROM parametro Where ma_codi = '"+"VALE"+"'" )
If cPara:LastRec() > 0
nVale:=cPara:ma_nume
// actualiza de inmediato el campo VALE con (nValor + 1) y te quedas con el numero que ya tienes almacenado en la variable nVale hasta que lo utilices al grabar
aCampos := { 'ma_nume' }
aValues := { nVale+1}
aWhere := "ma_codi= '"+"VALE"+"'"
xServer :Update( "parametro", aCampos, aValues, aWhere )
Endif
cPara:End()
-------------------------------
IF lNew // SE COLOCA DESPUES QUE SE HAYA EJECUTADO EL INSERT AUTOMATICO PARA OBTENER NUMERO REGISTRO
oQryId := TDolphinQry():New( "SELECT last_insert_id() AS nId", oDatos:oConex ) // OBTENGO EL NUMERO DEL REGISTRO RECIEN CREADO
aVar[1] := oQryId:nId // NUM.ID AUTO-INCREMENT // COMO ES UN VALOR UNICO, LO PASO A UNA var
ENDIF
FUNCTION IncContador( cCampo )
LOCAL nContador := 0
IF oServer:Execute( "UPDATE CONTROL SET " + cCampo + " = " + cCampo + " + 1" )
nContador := oServer:QueryScalar( "SELECT " + cCampo + " AS CONTADOR FROM CONTROL LIMIT 1" )
IF HB_IsNil( nContador )
nContador := 0
ENDIF
ENDIF
RETURN nContador
FUNCTION Fact_Grabar()
LOCAL lGrabado := FALSE
IF lCredito .and. nNumClie == 0
MsgAlert( "El cliente no esta autorizado a facturar al credito.", "Alerta" )
RETURN FALSE
ENDIF
TRY
oServer:BeginTransaction()
IF ( nNumFact := IncContador( "CONT_FACT" ) ) > 0
IF !Fact_Imprimir()
Throw( ErrorNew( "Error de impresión.", 0, 0, "Error en la Impresión de factura de venta." ) )
ENDIF
oServer:Insert2( "MFACTURAS", { { "NUM_FACT" , nNumFact },;
{ "FECHA" , dFecha },;
{ "TC" , nTC },;
{ "CREDITO" , lCredito },;
{ "PLAZO" , nPlazo },;
{ "NUM_VEND" , nNumVend },;
{ "NOM_VEND" , cNomVend },;
{ "REFERENCIA", cReferencia },;
{ "NUM_CLIE" , nNumClie },;
{ "NOM_CLIE" , cNomClie },;
{ "DIR_CLIE" , cDirClie },;
{ "RUC_CLIE" , cRucClie },;
{ "TEL_CLIE" , cTelClie },;
{ "EXONERADO" , lExonerado },;
{ "TIPOPAGO" , cTipoPago },;
{ "REFEPAGO" , cRefePago },;
{ "NOTA" , cNota },;
{ "PORCDESC" , nPorcDesc },;
{ "SUBTOTAL" , nSubTotal },;
{ "DESCUENTO" , nDescuento },;
{ "IVA" , nImpuesto },;
{ "TOTAL" , nTotal },;
{ "SALDO" , IIf( lCredito, nTotal, 0 ) },;
{ "PAGADA" , !lCredito },;
{ "ANULADA" , FALSE } } )
DETA->( DBGoTop() )
DO WHILE !DETA->( Eof() )
oServer:Insert2( "DFACTURAS", { { "NUM_FACT", nNumFact },;
{ "NUM_PROD", DETA->NUM_PROD },;
{ "NOM_PROD", DETA->NOM_PROD },;
{ "UMEDIDA" , DETA->UMEDIDA },;
{ "SERVICIO", DETA->SERVICIO },;
{ "CANTIDAD", DETA->CANTIDAD },;
{ "PRECIO" , DETA->PRECIO },;
{ "VALOR" , DETA->VALOR },;
{ "P_DESC" , DETA->P_DESC },;
{ "V_DESC" , DETA->V_DESC },;
{ "G_IVA" , DETA->G_IVA },;
{ "V_IVA" , DETA->V_IVA },;
{ "SERIAL" , DETA->SERIAL } } )
IF !DETA->SERVICIO
oServer:Execute2( "UPDATE PRODUCTOS SET EXISTENCIA=EXISTENCIA-%1 WHERE NUM_PROD=%2 LIMIT 1", { DETA->CANTIDAD, DETA->NUM_PROD } )
ENDIF
DETA->( DBSkip() )
ENDDO
IF nNumProf>0
oServer:Execute2( "DELETE FROM DPROFORMAS WHERE NUM_PROF=%1", { nNumProf } )
oServer:Execute2( "DELETE FROM MPROFORMAS WHERE NUM_PROF=%1", { nNumProf } )
ENDIF
ENDIF
oServer:CommitTransaction()
oQryFact:ReQuery()
lGrabado := TRUE
CATCH oError
oServer:RollBack()
ShowError( oError )
END
IF lGrabado
oBrw:GoBottom()
oBrw:Refresh()
ELSE
oBrw:Refresh()
ENDIF
DETA->( DBGoTop() )
RETURN lGrabado
carlos vargas wrote:voy ha hacer algo mejor,
este link es de walter in experto en sql firebird.tiene muchos post sobre sql, firebird y tecnicas de negocios.
https://firebird21.wordpress.com/
salu2
carlos vargas
carlos vargas wrote:voy ha hacer algo mejor,
este link es de walter in experto en sql firebird.tiene muchos post sobre sql, firebird y tecnicas de negocios.
https://firebird21.wordpress.com/
hay un post no recuerdo la direccion exacta que trata sobre este asunto de una manera detallada y clara.
salu2
carlos vargas
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: wilsongamboa and 47 guests