Clarion - Problema al cancelar un registro

   
Vista:

Problema al cancelar un registro

Publicado por deysi (15 intervenciones) el 08/12/2007 01:02:37
Tengo una factura que deseo cancelar pero esta tiene varias 2 partidas pero a la vez cada la primer partida tiene otros cuatro partidas y la segunda tiene tres partidas.
al cancelar solo me cancela
las dos prrimeras partidas y las tres ultimas

Factura Partida Detalle partida
0001 cancelada 1 cancelada 1 pero estas no me las cancela
2
3
4

2 cancelada 1 cancelada
2 cancelada
3 cancelada

GET(Queue:2,Choice(?Browse:2)) ! Facturas
FAC:Id_Factura = FAC:Id_Factura
SET(Facturas,FAC:PKIdFactura)
NEXT(Facturas)
FAC:StatusFactura ='Cancelado'
PUT(Facturas)
!*****************DETALLE FACTURA*********************************************************
LOOP I# = 1 TO FAC:CantPartidas BY 1 ! Tiene dos partidas
OPEN(DetaFac)
DETF:Id_Factura = FAC:Id_Factura
DETF:PartidaFact = I#
SET(DETF:PKIdDetalleFactura,DETF:SKPartidaFact,DETF:PartidaFact)
NEXT(DetaFac)
DETF:StatusDetFactura = 'Cancelado'
PUT(DetaFac)
END
!*******************DETALLE FACTURA 2*********************************************************
LOOP I# = 1 TO DETF:CantidadPartidas BY 1
OPEN(DetaFac2)
DET2:Id_Factura = FAC:Id_Factura
DET2:PartidaFact = DETF:PartidaFact
DET2:ExtPartida = I#
SET(DET2:PKDetalle2,DET2:SKPartidaFact,DET2:ExtPartida)
NEXT(DetaFac2)
DET2:SatusDeta2 ='Cancelado'
PUT(DetaFac2)
END
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Clarion
- Código fuente de Clarion
- Cursos de Clarion
información
Códigos de Clarion
- Llamar al form para insertar desde el menu

RE:Problema al cancelar un registro

Publicado por esbxp (12 intervenciones) el 10/12/2007 02:29:09
La Verdad te entiendo la Idea .... Pero no el Algoritmo....
Esto Te servira .... espero

RutCliente = 78987897
MontoRecibido = 100.000

Clear(FAC:Record)
FAC:RutCliente = RutCliente
Set(FAC:K_ClienteFolio, FAC:K_ClienteFolio)
LOOP Until Eof(Facturas)
Next(Facturas)
IF(FAC:RutCliente <> RutCliente)THEN Break.

IF(FAC:SALDO > 0000 )THEN
IF(FAC:SALDO <= MontoRecibido)THEN
MontoRecibido -= FAC:Saldo !. Descuenta el Saldo Abonado
FAC:Saldo = 0
PUT(Facturas)
ELSE
FAC:Saldo = MontoRecibido !. Solo Abona al Saldo
MontoRecibido = 0 !. Ya no hay mas MontoRecibido
END !. Para Segir Abonando
END

IF(MontoRecibido <= 0000)THEN Break. !. Emtonces se Sale.
END

Al Entendido pocas palabras.... La idea es que tomes un monto,, y este te cancele las facturas que alcance a cubrir ese monto,,, cada vez que el monto cubra el Saldo de una factura,,, entonces del mismo MontoRecibido,, lo vas descontando,,, hasta que sea cero y te sales del Ciclo,,, analizalo ... porque es como mas lógico y ordenado....

Saludos !!!!
esbxp.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema al cancelar un registro

Publicado por Jose Luis (126 intervenciones) el 10/12/2007 17:06:15
Pues el algoritmo esta medio raro, creo q te complicas mucho.

Primero hay q ver q campos estan relacionados en cada tabla

Entonces suponiendo q tengas
Facturas
DetalleFacturas
DetallePartidasFacturas
Etc.

Entonces primero obtienes el registro de la factura
FAC:NumFactura = Loc:NumFactura
get(Facturas, FAC:Llave_NumFactura) !Suponiendo q solo hay un registro
para el encabezado de la factura
if ~errorcode()
!! actualizas el estado del registro
FAC:Estado = 'Cancelada'
put(Facturas)
!! control de errores

!! buscas los detalles de la factura
DFAC:NumFactura = FAC:NumFactura
SET(DFAC:Llave_NumFactura, DFAC:Llave_NumFactura) !! llave con el campo
!! q relaciona la tabla
!! facturas con
!! detallesfacturas
loop
next(DetalleFacturas)
if errorcode() then break.
if DFAC:NumFactura <> FAC:NumFactura then break.
!! cancelar registro detalle facturas

!! procesar aqui los detalles del tercer archivo
!! debe haber otro campo aparte del numero de factura q lo referencie

DPFAC:NumFactura = FAC:NumFactura
DPFAC:NumPartida = DFAC:NumPartida
SET(DPFAC:Llave_NumFacturaNumPartida, DPFAC:Llave_NumFacturaNumPartida)
loop
next(DetallePartidasFacturas)
if errorcode() then break.
if DPFAC:NumFactura <> DFAC:NumFactura then break.
if DPFAC:NumPartida <> DFAC:NumPartida then break.
!! cancelar aqui el registro

end

end
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar