ipprmt020: avisa del item repetido al escribirlo/buscarlo (al dar Tab) y aviso mas compacto
Si el item ya esta en otra linea, muestra un aviso corto, limpia la fila y regresa a Clase. Se mantiene el chequeo al guardar como respaldo. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -422,6 +422,11 @@ FUNCTION entradas()
|
||||
arr_iptb58[idx].cod_sec,
|
||||
arr_iptb58[idx].descripcion
|
||||
CALL producto()
|
||||
IF repetidoEnOtraFila(idx) THEN
|
||||
CALL avisoRepetido(idx)
|
||||
CALL limpiaItem(idx)
|
||||
NEXT FIELD cod_n
|
||||
END IF
|
||||
IF tienedespiece THEN
|
||||
LET dcodn = arr_iptb58[idx].cod_n
|
||||
LET dcodgrupo = arr_iptb58[idx].cod_grupo
|
||||
@@ -457,6 +462,11 @@ FUNCTION entradas()
|
||||
CALL msg(3)
|
||||
NEXT FIELD cod_sec
|
||||
END IF
|
||||
IF repetidoEnOtraFila(idx) THEN
|
||||
CALL avisoRepetido(idx)
|
||||
CALL limpiaItem(idx)
|
||||
NEXT FIELD cod_n
|
||||
END IF
|
||||
IF tienedespiece THEN
|
||||
LET dcodn = arr_iptb58[idx].cod_n
|
||||
LET dcodgrupo = arr_iptb58[idx].cod_grupo
|
||||
@@ -498,9 +508,9 @@ FUNCTION entradas()
|
||||
LET descRepetido = itemRepetido()
|
||||
IF descRepetido IS NOT NULL THEN
|
||||
CALL fgl_winmessage(
|
||||
"ERROR",
|
||||
"El item " || descRepetido CLIPPED
|
||||
|| " esta repetido en el detalle. Deje una sola linea por item.",
|
||||
"Item repetido",
|
||||
"No se puede repetir el item:
|
||||
" || descRepetido CLIPPED,
|
||||
"stop")
|
||||
CONTINUE DIALOG
|
||||
END IF
|
||||
@@ -763,6 +773,62 @@ FUNCTION entradas()
|
||||
|
||||
END DIALOG
|
||||
END FUNCTION
|
||||
# TRUE si el item de la fila p ya esta en otra fila del detalle.
|
||||
FUNCTION repetidoEnOtraFila(p)
|
||||
DEFINE p, j INT
|
||||
|
||||
IF arr_iptb58[p].cod_sec IS NULL THEN
|
||||
RETURN FALSE
|
||||
END IF
|
||||
FOR j = 1 TO arr_iptb58.getLength()
|
||||
IF j != p AND arr_iptb58[j].cod_sec IS NOT NULL
|
||||
AND arr_iptb58[j].cod_n = arr_iptb58[p].cod_n
|
||||
AND arr_iptb58[j].cod_grupo = arr_iptb58[p].cod_grupo
|
||||
AND arr_iptb58[j].cod_tipo = arr_iptb58[p].cod_tipo
|
||||
AND arr_iptb58[j].cod_sec = arr_iptb58[p].cod_sec THEN
|
||||
RETURN TRUE
|
||||
END IF
|
||||
END FOR
|
||||
RETURN FALSE
|
||||
END FUNCTION
|
||||
|
||||
# Aviso corto de item repetido (codigo y descripcion recortada).
|
||||
FUNCTION avisoRepetido(p)
|
||||
DEFINE p INT
|
||||
DEFINE texto, desc STRING
|
||||
|
||||
LET desc = arr_iptb58[p].descripcion CLIPPED
|
||||
IF desc.getLength() > 35 THEN
|
||||
LET desc = desc.subString(1, 35)
|
||||
END IF
|
||||
LET texto = arr_iptb58[p].cod_n USING "&&&&", "-",
|
||||
arr_iptb58[p].cod_grupo USING "&&&&", "-",
|
||||
arr_iptb58[p].cod_tipo USING "&&&&", "-",
|
||||
arr_iptb58[p].cod_sec USING "&&&&&&"
|
||||
CALL fgl_winmessage(
|
||||
"Item repetido",
|
||||
"Este item ya esta en el detalle:
|
||||
" || texto || "
|
||||
"
|
||||
|| desc,
|
||||
"stop")
|
||||
END FUNCTION
|
||||
|
||||
# Deja la fila p sin item para volver a escribirlo.
|
||||
FUNCTION limpiaItem(p)
|
||||
DEFINE p INT
|
||||
|
||||
LET arr_iptb58[p].cod_n = NULL
|
||||
LET arr_iptb58[p].cod_grupo = NULL
|
||||
LET arr_iptb58[p].cod_tipo = NULL
|
||||
LET arr_iptb58[p].cod_sec = NULL
|
||||
LET arr_iptb58[p].descripcion = NULL
|
||||
LET arr_iptb58[p].unidad_med = NULL
|
||||
LET arr_iptb58[p].factor_conv = NULL
|
||||
LET arr_iptb58[p].cantidad_1 = NULL
|
||||
LET arr_iptb58[p].cantidad = NULL
|
||||
END FUNCTION
|
||||
|
||||
# Devuelve la descripcion del primer item repetido (misma clase, grupo, tipo y
|
||||
# medida, sin importar el area) entre las lineas con cantidad; NULL si no hay.
|
||||
FUNCTION itemRepetido()
|
||||
|
||||
Reference in New Issue
Block a user