*-- Se confirma la acción de anular * #exiton MSG.Ask("¿Desea confirmar la anulación de este documento?",2,"Anular documento")<>"S" ; return NO *-- Se valida que la fecha no esté contabilizada, tomando en cuenta el tipo de documento #defvar dFecha,cTabla,oEnc oEnc:=FRM.DM.Items(1).Data dFecha:= ttod(oEnc.Emitida) cTabla:= rtrim(FRM.oConf.TabEnc) #if FRM.oConf.TipoDoc="FA" or FRM.oConf.TipoDoc="NC" or FRM.oConf.TipoDoc="ND" #exiton not ValidaFechaCon(cTabla,dFecha) ; return NO #endif *-- Se actualiza el status de los renglones y del documento. Se elimina también cualquier asociación que * pudiera haber entre este y otros documentos * #defvar oEnc,cTabEnc,cTabRen,nIDDoc,cNumDoc,cTipoDoc,nCodCXC oEnc:=FRM.DM.Items(1).Data cTabEnc:=rtrim(FRM.oConf.TabEnc) cTabRen:=rtrim(FRM.oConf.TabRen) nIDDoc:=oEnc.IDInterno cNumDoc:=oEnc.Numero cTipoDoc:=oEnc.TipoDoc nCodCXC:=oEnc.CodCXC *-- Se inicia la transacción * #wait "Anulando el documento..." #transaction *-- Se elimina cualquier asociacion * #sql delete from traasodoc ; where tipodocori=?cTipoDoc and numdocori=?cNumDoc and modo='A' #if not SQLRESULT #wait clear #rollback #return NO #endif *-- Se eliminan todos los movimientos de kardex asociados a este documento * #sql delete from trakardex ; where numdocori=?cNumDoc and tipomov in ('AE','AS','EN','SA') #if not SQLRESULT #wait clear #rollback #return NO #endif *-- Se ajusta el status de los renglones * #sql update &cTabRen ; set status="ANULADO", ; asociado=?NO ; where iddoc=?nIDDoc #if not SQLRESULT #wait clear #rollback #return NO #endif *-- Se actualiza el status del documento * #defvar dHoy dHoy:=hoy() #sql update &cTabEnc ; set status="ANULADO",; fecsta=?dHoy ; where idinterno=?nIDDoc #if not SQLRESULT #wait clear #rollback #return NO #endif *-- Se finaliza la transacción * #commit #wait clear *-- Se refresca el registro en pantalla * FRM.NAV.RefreshRecord()