Clarion - Problemas con set y loop

 
Vista:
sin imagen de perfil

Problemas con set y loop

Publicado por Marco (155 intervenciones) el 23/11/2009 20:50:25
tengo el siguiente codigo que describo a continuacion:

!!!!!!!! Inicio
COM:FECHA=glo:fecha_desde
set(COM:POR_FECHA,COM:POR_FECHA)
loop
next(COMPRAS)
if errorcode() or COM:FECHA>glo:fecha_hasta then break.
PRO:IDENT_PROVEEDOR = COM:IDENT_PROVEEDOR
get(PROVEEDOR,PRO:POR_IDENTIFICADOR)
if errorcode()
Dproveedor = ' '
else
Dproveedor = clip(PRO:D_PROV)
ruc=clip(PRO:RUC)
.
TipoDoc = clip(COM:TIPO_DOCUMENTO)
NroDoc = clip(COM:NRO_DOCUMENTO)
fecha = COM:FECHA
gravada=0
exenta=0
iva=0
gravada5=0
iva5=0
DET:IDENT_CO = COM:IDENTIFICADOR
set(DET:POR_COMPRA,DET:POR_COMPRA)
loop while DET:IDENT_CO = COM:IDENTIFICADOR
next(DETA_COM)
if DET:IDENT_CO <> COM:IDENTIFICADOR or errorcode() then break.
if DET:IMPUESTO = 'S'
message('Entro')
if DET:TASA = 5
message('Gravada 5')
gravada5 += (DET:CANTIDAD * DET:PRECIO)
iva5 += ((DET:CANTIDAD * DET:PRECIO) * 5 / 100)
else
gravada += (DET:CANTIDAD * DET:PRECIO)
iva += ((DET:CANTIDAD * DET:PRECIO) * 10 / 100)
message('Gravada 10')
end
else
exenta += (DET:CANTIDAD * DET:PRECIO)
message('Exenta')
end
end
add(LIBROCOMPRA)
if errorcode() then stop('No se pudo agregar registro temporal' & error()).
.
.
!!!!!!!!! fin

El 1er set y loop funciona perfectamente, pero el 2do no siquiera entra, me podrian dar una mano con esto?, ya verifique los indices en el diccionario y esa parte esta todo bien, le puse mensajes para ver como funciona, pero como dije anteriormente, en el segundo set y loop ni siquiera entra, desde ya muchas gracias.
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

RE:Problemas con set y loop

Publicado por Joan (69 intervenciones) el 24/11/2009 12:14:46
Hola Marco
esta linea de codigo es incorrecta:
if DET:IDENT_CO <> COM:IDENTIFICADOR or errorcode() then break.

deberia ser en 2 lineas asi:

if errorcode() then break.
if DET:IDENT_CO <> COM:IDENTIFICADOR then break.

el errorcode() debe de ser la primera orden despues del NEXT de acceso al registro.

next(DETA_COM)
if errorcode() then break.
if DET:IDENT_CO <> COM:IDENTIFICADOR then break.

Saludos Joan.
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
sin imagen de perfil

RE:Problemas con set y loop

Publicado por raxe (196 intervenciones) el 24/11/2009 13:02:32
Hola. Con referencia a lo que pone Joan, el orden de los factores no afecta en ese caso, pero para seguir mejor el codigo has eso.
donde empiezas el Loop while, quita eso, deja solo el Loop, lo demas me creo q no lo tienes bien.
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:Problemas con set y loop

Publicado por Joan (69 intervenciones) el 24/11/2009 16:26:45
Hola Marco, espero que estas modificacione ste funcionen bien tal como yo he probado quefunciona bien pues he reproducido parte de tu aplicacion con los datos por ti facilitados
y funciona correctamente con la modificaciones siguientes:
linea !!!!!! 1 la cambio por la linea !!!!!!2
para que COM:IDENTIFICADOR sea como las lineas !!!!!3 y !!!!!4
cambio tu linea !!!!!!6 separando las 2 condiciones
por las que aqui ves como !!!!!!5 y !!!!! 6
y funciona correctamente.

desde Barcelona ,Saludos. Joan.

!!!!!!!! Inicio
COM:FECHA=glo:fecha_desde
set(COM:POR_FECHA,COM:POR_FECHA)
loop
next(COMPRAS)
if errorcode() or COM:FECHA>glo:fecha_hasta then break.
! PRO:IDENT_PROVEEDOR = COM:IDENT_PROVEEDOR !!!!!!! 1
PRO:IDENT_PROVEEDOR = COM:IDENTIFICADOR !!!!!!!!!!!2

get(PROVEEDOR,PRO:POR_IDENTIFICADOR)

if errorcode()
Dproveedor = ' '
else
Dproveedor = clip(PRO:D_PROV)
ruc=clip(PRO:RUC)
.
TipoDoc = clip(COM:TIPO_DOCUMENTO)
NroDoc = clip(COM:NRO_DOCUMENTO)
fecha = COM:FECHA
gravada=0
exenta=0
iva=0
gravada5=0
iva5=0
DET:IDENT_CO = COM:IDENTIFICADOR !!!!!! 3
message(DET:IDENT_CO)

set(DET:POR_COMPRA,DET:POR_COMPRA)
loop while DET:IDENT_CO = COM:IDENTIFICADOR !!!!!4
next(DETA_COM)
if errorcode() then break. !!!!!!!5
if DET:IDENT_CO <> COM:IDENTIFICADOR . ! or errorcode() then break. !!!!!6
if DET:IMPUESTO = 'S'
message('Entro')
if DET:TASA = 5
message('Gravada 5')
gravada5 += (DET:CANTIDAD * DET:PRECIO)
iva5 += ((DET:CANTIDAD * DET:PRECIO) * 5 / 100)
else
gravada += (DET:CANTIDAD * DET:PRECIO)
iva += ((DET:CANTIDAD * DET:PRECIO) * 10 / 100)
message('Gravada 10')
end
else
exenta += (DET:CANTIDAD * DET:PRECIO)
message('Exenta')
end
display()
end
!add(LIBROCOMPRA)
!if errorcode() then stop('No se pudo agregar registro temporal' & error()).
.
!.
!!!!!!!!! fin
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