by marzio » Tue Nov 13, 2007 8:46 am
fivewin 7.1 con xHarbour 0.99.71
non volevo stressarti con le ricerca di un possiblile errore, inserirò ulteriori punti di controllo con salvataggio dati in un file log poi magari più avanti ci risentiamo.
il mio dubbio è dato dal fatto che partendo da comtmp vuoto e ripetendo più volte la stessa procedura non ottengo sempre lo stesso risultato.
come ti dicevo Aggcomm() è la funzione chiamata dai campi memo, di circa 300 righe di codice, con diverse select odbc di controllo, che chiama in diversi punti la funzione qui sotto che aggiunge righe al file comtmp dove io ho il risultato finale.
DbSelectArea("ComTmp")
DbGoBottom()
WHILE aComTes[1] == comtmp->idcomtes .AND. !Bof() // controllo se esiste su tutto il file, stesso numero commessa.
IF comtmp->idartico = oArtico:id .AND. cGruppo = __gruppi__ .AND. (cSttGrp = NIL .OR. (cSttGrp # NIL .AND. cSttGrp = __sttgrp__))
lExist := .t.
EXIT
ENDIF
DbSkip(-1)
END
IF lExist // componente già aggiunto da prec. calcolo.
IF RecLock(1, "comtmp")
comtmp->__qtaord__ += nQuantPri
comtmp->qta1 := comtmp->__qtaord__ + (comtmp->__qtaord__ * nQtaPlus / 100)
DbUnLock()
ELSE
DbSetOrder(nOrdine)
Return(lExist)
ENDIF
ELSE
comtmp->(DbAppend())
comtmp->__gruppi__ := cGruppo
comtmp->__qtaord__ := nQuantPri
comtmp->__codart__ := If(oArtico:codice = NIL, "", oArtico:codice)
comtmp->__idarti__ := If(oArtico:id = NIL, 0, oArtico:id)
comtmp->__idlots__ := IdArt2IdLot(comtmp->__idarti__)
oSelect := oOdbc:Query( "SELECT CAST(prezzo * 10000.0 AS BigInt) / 10000.0 AS prezzo, " +;
"idlistes FROM lisrig WHERE idlistes = " + cValToChar(aComTes[7]) +;
"AND idartico = " + cValToChar(comtmp->__idlots__) ); oSelect:Open()
IF oSelect:RecCount() = 0
cText := LoadValue(1180, CH) + AllTrim(oArtico:codice) + " (" +; // "Manca articolo in riga di listino (LisRig): "
cValToChar(aComTes[8]) + " " + dToc(cTod(DT_1899) + aComTes[9]) + " " + dToc(cTod(DT_1899) + aComTes[10]) + ")" + CRLF
ENDIF
comtmp->prezzo := oSelect:prezzo
comtmp->idlistes:= oSelect:idlistes
oSelect:End(); DbSelectArea("ComTmp")
comtmp->idcomtes:= aComTes[1]
comtmp->idartico:= comtmp->__idarti__
comtmp->idiva := aComTes[5]
comtmp->qta1 := nQuantPri + (nQuantPri * nQtaPlus / 100)
comtmp->oripre := If(oArtico:oripre = NIL, "", oArtico:oripre)
ENDIF