ipprmt020: avisa (sin bloquear) cuando un item se repite en el detalle al guardar

Nueva funcion itemRepetido(): misma area, clase, grupo, tipo y medida entre las
lineas con cantidad. Si hay repetido pregunta si desea continuar; NO vuelve a
la edicion (CONTINUE DIALOG), YES guarda como antes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-22 16:04:21 -04:00
co-authored by Claude Sonnet 5.5
parent 4bfaea0a47
commit b5bf9e2b26
+46
View File
@@ -20,6 +20,8 @@ DEFINE Toemail,
emailadd,
retorne
STRING
DEFINE descRepetido, respuesta STRING
DEFINE
d_tipos,
mensaje,
@@ -492,6 +494,22 @@ FUNCTION entradas()
DISPLAY arr_iptb58[idx].cantidad TO sdetalle[scr_l].cantidad
END IF
ON ACTION guardar ATTRIBUTE(TEXT = opcion, IMAGE = "save")
# Aviso (no bloqueo) si un item se repite en el detalle
LET descRepetido = itemRepetido()
IF descRepetido IS NOT NULL THEN
LET respuesta =
fgl_winquestion(
"Item repetido",
"El item " || descRepetido CLIPPED
|| " esta repetido en el detalle. Desea continuar?",
"NO",
"YES|NO",
"QUESTION",
0)
IF respuesta != "YES" THEN
CONTINUE DIALOG
END IF
END IF
IF p_iptb57.bodega IS NOT NULL THEN
LET nombreBodega =
ui.ComboBox.forName('formonly.bodega')
@@ -751,6 +769,34 @@ FUNCTION entradas()
END DIALOG
END FUNCTION
# Devuelve la descripcion del primer item repetido (misma area, clase, grupo,
# tipo y medida) entre las lineas con cantidad; NULL si no hay repetidos.
FUNCTION itemRepetido()
DEFINE i, j INT
DEFINE texto STRING
FOR i = 1 TO arr_iptb58.getLength()
IF arr_iptb58[i].cantidad IS NOT NULL THEN
FOR j = i + 1 TO arr_iptb58.getLength()
IF arr_iptb58[j].cantidad IS NOT NULL
AND arr_iptb58[j].area = arr_iptb58[i].area
AND arr_iptb58[j].cod_n = arr_iptb58[i].cod_n
AND arr_iptb58[j].cod_grupo = arr_iptb58[i].cod_grupo
AND arr_iptb58[j].cod_tipo = arr_iptb58[i].cod_tipo
AND arr_iptb58[j].cod_sec = arr_iptb58[i].cod_sec THEN
LET texto = arr_iptb58[i].cod_n USING "&&&&", "-",
arr_iptb58[i].cod_grupo USING "&&&&", "-",
arr_iptb58[i].cod_tipo USING "&&&&", "-",
arr_iptb58[i].cod_sec USING "&&&&&&",
" ", arr_iptb58[i].descripcion CLIPPED
RETURN texto
END IF
END FOR
END IF
END FOR
RETURN NULL
END FUNCTION
FUNCTION anular()
DEFINE respuesta STRING