modificaciones facturacion electronica

This commit is contained in:
Luis
2026-10-15 16:07:57 -04:00
parent 07649704b1
commit ba982b7635
158 changed files with 206301 additions and 27838 deletions
+1 -1
View File
@@ -419,7 +419,7 @@
<Application binaryName="IPPRMT054" dependencies="209,106772141,-415778402" externalDependencies="libgre.42x" id="587539186" label="IPPRMT054">
<File filePath="ipdir/ipprmt054.4gl"/>
</Application>
<Application binaryName="ipprmt064" commandLineArguments="lmsoto Lm5798379" dependencies="209,-415778402" id="133232655" label="ipprmt064">
<Application binaryName="ipprmt064" commandLineArguments="lmsoto 1234" dependencies="209,-415778402" id="133232655" label="ipprmt064">
<File filePath="ipdir/ipprmt064.4gl"/>
</Application>
<Application binaryName="IPPRMT074" dependencies="209,210" id="262035654" label="IPPRMT074">
+137 -108
View File
@@ -205,7 +205,7 @@
<File n="ipdir/secciones.4gl" s="2" ts="20260615105100974">
<Fct c="10" el="17" l="1" n="cseccion(almacen SMALLINT)" t="F" v="pub"/>
</File>
<File n="../PROYECTO/otrodir/sus_caracter.4gl" s="2" ts="20260527074013033">
<File n="../PROYECTO/otrodir/sus_caracter.4gl" s="2" ts="20261012101006446">
<Fct c="10" el="26" l="2" n="sus_caracter(cadena STRING)" t="F" v="pub"/>
</File>
<File n="otrodir/termo.4gl" s="2" ts="20220110100523953">
@@ -1888,40 +1888,55 @@
<File n="ipdir/ipactualizareqtrx.4gl" s="2" ts="20260615091821208">
<Fct c="10" el="30" l="1" n="actualizareqtrx(pnumdoc INTEGER)" t="F" v="pub"/>
</File>
<File n="ipdir/ipprmt044.4gl" s="2" ts="20260920042422391">
<Fct c="10" el="2686" l="2648" n="control_requisicion(cantidad_Trx DECIMAL(12,5),xcodn SMALLINT,xcodgrupo SMALLINT,xcodtipo SMALLINT,xcodsec SMALLINT,xkit INTEGER)" t="F" v="pub"/>
<Fct c="10" el="2624" l="2610" n="cetiquetas()" t="F" v="pub"/>
<Fct c="10" el="2608" l="2549" n="existencia(pcodn SMALLINT,pcodgrupo SMALLINT,pcodtipo SMALLINT,pcodsec SMALLINT,cantidad DECIMAL(12,5),pid SMALLINT,xbodega SMALLINT)" t="F" v="pub"/>
<Fct c="10" el="2547" l="2494" n="visualizacion_despacho()" t="F" v="pub"/>
<Fct c="10" el="2493" l="2437" n="actualiza_st(forden INTEGER)" t="F" v="pub"/>
<Fct c="10" el="2435" l="2408" n="busca_info()" t="F" v="pub"/>
<Fct c="11" el="2407" l="2240" n="consulta()" t="F" v="pub">
<Call c="11" l="2271" n="msg" t="F"/>
<Call c="8" l="2274" n="busca_info" t="F"/>
<Call c="16" l="2282" n="msg" t="F"/>
<Call c="13" l="2284" n="busca_info" t="F"/>
<Call c="16" l="2292" n="msg" t="F"/>
<Call c="13" l="2294" n="busca_info" t="F"/>
<Call c="13" l="2303" n="msg" t="F"/>
<Call c="13" l="2304" n="busca_info" t="F"/>
<Call c="13" l="2312" n="msg" t="F"/>
<Call c="13" l="2313" n="busca_info" t="F"/>
<Call c="13" l="2380" n="fgl_report_loadCurrentSettings" t="F"/>
<Call c="18" l="2381" n="fgl_report_selectPreview" t="F"/>
<Call c="27" l="2382" n="fgl_report_commitCurrentSettings" t="F"/>
<Call c="23" l="2386" n="formu4" t="R"/>
<Call c="39" l="2394" n="formu4" t="R"/>
<Call c="23" l="2399" n="formu4" t="R"/>
<File n="ipdir/ipprmt044.4gl" s="2" ts="20261014123950097">
<Fct c="10" el="3044" l="3014" n="abre_despiece_si_falta()" t="F" v="pub">
<Call c="8" l="3036" n="despiece" t="F"/>
</Fct>
<Fct c="11" el="2238" l="2016" n="despiece()" t="F" v="pub">
<Call c="14" l="2138" n="cetiquetas" t="F"/>
<Call c="17" l="2182" n="msg" t="F"/>
<Call c="17" l="2197" n="msg" t="F"/>
<Fct c="10" el="3009" l="2986" n="falta_despiece()" t="F" v="pub"/>
<Fct c="10" el="2981" l="2909" n="cierre_orden_requisicion()" t="F" v="pub"/>
<Fct c="10" el="2898" l="2865" n="cantidad_cabe_en_orden(prow INTEGER)" t="F" v="pub">
<Call c="8" l="2870" n="pendiente_orden" t="F"/>
<Call c="11" l="2894" n="fgl_winmessage" t="F"/>
</Fct>
<Fct c="10" el="2014" l="1964" n="busca_prod1()" t="F" v="pub"/>
<Fct c="10" el="1962" l="1933" n="busca_vend()" t="F" v="pub"/>
<Fct c="8" el="1931" l="1752" n="formu4(x RECORD,z RECORD)" t="R" v="pub"/>
<Fct c="10" el="1750" l="127" n="ipprad44()" t="F" v="pub">
<Fct c="10" el="2861" l="2830" n="pendiente_orden(pcod_n INTEGER,pcod_grupo INTEGER,pcod_tipo INTEGER,pcod_sec INTEGER,pid_kit INTEGER)" t="F" v="pub"/>
<Fct c="10" el="2825" l="2783" n="control_requisicion(cantidad_Trx DECIMAL(12,5),xcodn SMALLINT,xcodgrupo SMALLINT,xcodtipo SMALLINT,xcodsec SMALLINT,xkit INTEGER)" t="F" v="pub"/>
<Fct c="10" el="2759" l="2745" n="cetiquetas()" t="F" v="pub"/>
<Fct c="10" el="2743" l="2684" n="existencia(pcodn SMALLINT,pcodgrupo SMALLINT,pcodtipo SMALLINT,pcodsec SMALLINT,cantidad DECIMAL(12,5),pid SMALLINT,xbodega SMALLINT)" t="F" v="pub"/>
<Fct c="10" el="2682" l="2629" n="visualizacion_despacho()" t="F" v="pub"/>
<Fct c="10" el="2628" l="2572" n="actualiza_st(forden INTEGER)" t="F" v="pub"/>
<Fct c="10" el="2570" l="2543" n="busca_info()" t="F" v="pub"/>
<Fct c="11" el="2542" l="2374" n="consulta()" t="F" v="pub">
<Call c="11" l="2405" n="msg" t="F"/>
<Call c="8" l="2408" n="busca_info" t="F"/>
<Call c="16" l="2416" n="msg" t="F"/>
<Call c="13" l="2418" n="busca_info" t="F"/>
<Call c="16" l="2426" n="msg" t="F"/>
<Call c="13" l="2428" n="busca_info" t="F"/>
<Call c="13" l="2437" n="msg" t="F"/>
<Call c="13" l="2438" n="busca_info" t="F"/>
<Call c="13" l="2446" n="msg" t="F"/>
<Call c="13" l="2447" n="busca_info" t="F"/>
<Call c="13" l="2514" n="fgl_report_loadCurrentSettings" t="F"/>
<Call c="18" l="2515" n="fgl_report_selectDevice" t="F"/>
<Call c="18" l="2516" n="fgl_report_selectPreview" t="F"/>
<Call c="27" l="2517" n="fgl_report_commitCurrentSettings" t="F"/>
<Call c="23" l="2521" n="formu4" t="R"/>
<Call c="39" l="2529" n="formu4" t="R"/>
<Call c="23" l="2534" n="formu4" t="R"/>
</Fct>
<Fct c="11" el="2372" l="2052" n="despiece()" t="F" v="pub">
<Call c="16" l="2147" n="fgl_winmessage" t="F"/>
<Call c="19" l="2177" n="fgl_winmessage" t="F"/>
<Call c="14" l="2255" n="cetiquetas" t="F"/>
<Call c="17" l="2300" n="msg" t="F"/>
<Call c="17" l="2305" n="fgl_winmessage" t="F"/>
<Call c="17" l="2320" n="msg" t="F"/>
<Call c="21" l="2328" n="fgl_winmessage" t="F"/>
</Fct>
<Fct c="10" el="2050" l="2000" n="busca_prod1()" t="F" v="pub"/>
<Fct c="10" el="1998" l="1969" n="busca_vend()" t="F" v="pub"/>
<Fct c="8" el="1967" l="1785" n="formu4(x RECORD,z RECORD)" t="R" v="pub"/>
<Fct c="10" el="1783" l="127" n="ipprad44()" t="F" v="pub">
<Call c="8" l="146" n="prd" t="F"/>
<Call c="10" l="194" n="bodegas" t="F"/>
<Call c="10" l="198" n="cmovimientos" t="F"/>
@@ -1937,80 +1952,90 @@
<Call c="18" l="327" n="msg" t="F"/>
<Call c="14" l="335" n="msg" t="F"/>
<Call c="14" l="343" n="msg" t="F"/>
<Call c="16" l="378" n="msg" t="F"/>
<Call c="13" l="382" n="integridad" t="F"/>
<Call c="10" l="395" n="bodegas" t="F"/>
<Call c="13" l="410" n="visualizacion_despacho" t="F"/>
<Call c="16" l="416" n="msg" t="F"/>
<Call c="18" l="431" n="msg" t="F"/>
<Call c="13" l="463" n="msg" t="F"/>
<Call c="13" l="470" n="fgl_winmessage" t="F"/>
<Call c="16" l="481" n="msg" t="F"/>
<Call c="17" l="489" n="msg" t="F"/>
<Call c="24" l="509" n="msg" t="F"/>
<Call c="18" l="538" n="msg" t="F"/>
<Call c="18" l="553" n="msg" t="F"/>
<Call c="17" l="565" n="msg" t="F"/>
<Call c="12" l="573" n="busca_vend" t="F"/>
<Call c="12" l="584" n="msg" t="F"/>
<Call c="11" l="596" n="msg" t="F"/>
<Call c="14" l="603" n="msg" t="F"/>
<Call c="21" l="620" n="msg" t="F"/>
<Call c="17" l="639" n="msg" t="F"/>
<Call c="14" l="651" n="msg" t="F"/>
<Call c="17" l="677" n="msg" t="F"/>
<Call c="16" l="719" n="msg" t="F"/>
<Call c="16" l="728" n="msg" t="F"/>
<Call c="13" l="742" n="msg" t="F"/>
<Call c="16" l="747" n="msg" t="F"/>
<Call c="13" l="752" n="msg" t="F"/>
<Call c="13" l="759" n="fgl_winmessage" t="F"/>
<Call c="21" l="782" n="msg" t="F"/>
<Call c="13" l="794" n="msg" t="F"/>
<Call c="18" l="954" n="msg" t="F"/>
<Call c="15" l="961" n="despiece" t="F"/>
<Call c="16" l="968" n="busca_prod1" t="F"/>
<Call c="16" l="987" n="busca_prod1" t="F"/>
<Call c="16" l="1006" n="busca_prod1" t="F"/>
<Call c="16" l="1025" n="busca_prod1" t="F"/>
<Call c="13" l="1042" n="integridad" t="F"/>
<Call c="18" l="1053" n="msg" t="F"/>
<Call c="28" l="1077" n="msg" t="F"/>
<Call c="21" l="1084" n="msg" t="F"/>
<Call c="28" l="1108" n="msg" t="F"/>
<Call c="13" l="1119" n="msg" t="F"/>
<Call c="28" l="1137" n="msg" t="F"/>
<Call c="13" l="1147" n="msg" t="F"/>
<Call c="28" l="1165" n="msg" t="F"/>
<Call c="16" l="1175" n="msg" t="F"/>
<Call c="17" l="1181" n="msg" t="F"/>
<Call c="21" l="1200" n="msg" t="F"/>
<Call c="22" l="1211" n="msg" t="F"/>
<Call c="28" l="1237" n="msg" t="F"/>
<Call c="19" l="1254" n="msg" t="F"/>
<Call c="24" l="1298" n="msg" t="F"/>
<Call c="21" l="1308" n="msg" t="F"/>
<Call c="18" l="1325" n="msg" t="F"/>
<Call c="22" l="1335" n="msg" t="F"/>
<Call c="17" l="1368" n="msg" t="F"/>
<Call c="20" l="1380" n="existencia" t="F"/>
<Call c="24" l="1387" n="msg" t="F"/>
<Call c="24" l="1423" n="msg" t="F"/>
<Call c="25" l="1449" n="msg" t="F"/>
<Call c="26" l="1493" n="msg" t="F"/>
<Call c="15" l="1531" n="msg" t="F"/>
<Call c="20" l="1600" n="existencia" t="F"/>
<Call c="23" l="1648" n="msg" t="F"/>
<Call c="19" l="1652" n="control_requisicion" t="F"/>
<Call c="23" l="1660" n="fgl_winmessage" t="F"/>
<Call c="16" l="1688" n="integridad" t="F"/>
<Call c="13" l="1722" n="fgl_report_loadCurrentSettings" t="F"/>
<Call c="18" l="1723" n="fgl_report_selectPreview" t="F"/>
<Call c="27" l="1724" n="fgl_report_commitCurrentSettings" t="F"/>
<Call c="23" l="1728" n="formu4" t="R"/>
<Call c="34" l="1733" n="formu4" t="R"/>
<Call c="22" l="1737" n="formu4" t="R"/>
<Call c="16" l="1742" n="msg" t="F"/>
<Call c="16" l="383" n="msg" t="F"/>
<Call c="13" l="387" n="integridad" t="F"/>
<Call c="10" l="400" n="bodegas" t="F"/>
<Call c="13" l="415" n="visualizacion_despacho" t="F"/>
<Call c="16" l="421" n="msg" t="F"/>
<Call c="18" l="436" n="msg" t="F"/>
<Call c="13" l="468" n="msg" t="F"/>
<Call c="13" l="475" n="fgl_winmessage" t="F"/>
<Call c="16" l="486" n="msg" t="F"/>
<Call c="17" l="494" n="msg" t="F"/>
<Call c="24" l="514" n="msg" t="F"/>
<Call c="18" l="543" n="msg" t="F"/>
<Call c="18" l="558" n="msg" t="F"/>
<Call c="17" l="570" n="msg" t="F"/>
<Call c="12" l="578" n="busca_vend" t="F"/>
<Call c="12" l="589" n="msg" t="F"/>
<Call c="11" l="601" n="msg" t="F"/>
<Call c="14" l="608" n="msg" t="F"/>
<Call c="21" l="625" n="msg" t="F"/>
<Call c="17" l="644" n="msg" t="F"/>
<Call c="14" l="656" n="msg" t="F"/>
<Call c="17" l="682" n="msg" t="F"/>
<Call c="16" l="724" n="msg" t="F"/>
<Call c="16" l="733" n="msg" t="F"/>
<Call c="13" l="747" n="msg" t="F"/>
<Call c="16" l="752" n="msg" t="F"/>
<Call c="13" l="757" n="msg" t="F"/>
<Call c="13" l="764" n="fgl_winmessage" t="F"/>
<Call c="21" l="787" n="msg" t="F"/>
<Call c="13" l="799" n="msg" t="F"/>
<Call c="18" l="959" n="msg" t="F"/>
<Call c="15" l="966" n="despiece" t="F"/>
<Call c="16" l="973" n="busca_prod1" t="F"/>
<Call c="16" l="992" n="busca_prod1" t="F"/>
<Call c="16" l="1011" n="busca_prod1" t="F"/>
<Call c="16" l="1030" n="busca_prod1" t="F"/>
<Call c="13" l="1047" n="integridad" t="F"/>
<Call c="18" l="1058" n="msg" t="F"/>
<Call c="28" l="1082" n="msg" t="F"/>
<Call c="21" l="1089" n="msg" t="F"/>
<Call c="28" l="1113" n="msg" t="F"/>
<Call c="13" l="1124" n="msg" t="F"/>
<Call c="28" l="1142" n="msg" t="F"/>
<Call c="13" l="1152" n="msg" t="F"/>
<Call c="28" l="1170" n="msg" t="F"/>
<Call c="16" l="1180" n="msg" t="F"/>
<Call c="17" l="1186" n="msg" t="F"/>
<Call c="21" l="1205" n="msg" t="F"/>
<Call c="22" l="1216" n="msg" t="F"/>
<Call c="28" l="1242" n="msg" t="F"/>
<Call c="19" l="1259" n="msg" t="F"/>
<Call c="26" l="1304" n="abre_despiece_si_falta" t="F"/>
<Call c="27" l="1306" n="msg" t="F"/>
<Call c="21" l="1317" n="msg" t="F"/>
<Call c="17" l="1331" n="abre_despiece_si_falta" t="F"/>
<Call c="18" l="1334" n="msg" t="F"/>
<Call c="18" l="1347" n="msg" t="F"/>
<Call c="22" l="1357" n="msg" t="F"/>
<Call c="17" l="1390" n="msg" t="F"/>
<Call c="20" l="1402" n="existencia" t="F"/>
<Call c="24" l="1409" n="msg" t="F"/>
<Call c="24" l="1445" n="msg" t="F"/>
<Call c="28" l="1483" n="msg" t="F"/>
<Call c="26" l="1528" n="msg" t="F"/>
<Call c="18" l="1536" n="pendiente_orden" t="F"/>
<Call c="23" l="1543" n="cantidad_cabe_en_orden" t="F"/>
<Call c="15" l="1561" n="msg" t="F"/>
<Call c="17" l="1568" n="falta_despiece" t="F"/>
<Call c="15" l="1570" n="msg" t="F"/>
<Call c="20" l="1641" n="existencia" t="F"/>
<Call c="20" l="1667" n="pendiente_orden" t="F"/>
<Call c="23" l="1678" n="msg" t="F"/>
<Call c="19" l="1682" n="control_requisicion" t="F"/>
<Call c="23" l="1690" n="fgl_winmessage" t="F"/>
<Call c="16" l="1718" n="integridad" t="F"/>
<Call c="8" l="1739" n="cierre_orden_requisicion" t="F"/>
<Call c="13" l="1754" n="fgl_report_loadCurrentSettings" t="F"/>
<Call c="18" l="1755" n="fgl_report_selectDevice" t="F"/>
<Call c="18" l="1756" n="fgl_report_selectPreview" t="F"/>
<Call c="27" l="1757" n="fgl_report_commitCurrentSettings" t="F"/>
<Call c="23" l="1761" n="formu4" t="R"/>
<Call c="34" l="1766" n="formu4" t="R"/>
<Call c="22" l="1770" n="formu4" t="R"/>
<Call c="16" l="1775" n="msg" t="F"/>
</Fct>
<Fct c="10" el="125" l="100" n="ipprmt044()" t="F" v="pub">
<Call c="9" l="124" n="ipprad44" t="F"/>
@@ -2019,6 +2044,7 @@
<Fct c="1" el="71" l="56" n="main()" t="F" v="pub">
<Call c="9" l="70" n="ipprmt044" t="F"/>
</Fct>
<Todo l="1565" t="producto que lleva despiece (iptb00027) debe tener su despiece&#13;"/>
</File>
<File n="ipdir/loadDespiece.4gl" s="2" ts="20260615091820658">
<Fct c="10" el="94" l="1" n="loadDespiece(pcodn INTEGER,pcodgrupo INTEGER,pcodtipo INTEGER,pcodsec INTEGER,parea INTEGER,pentrada INTEGER,pcodmov1 INTEGER,control_despacho VARCHAR(2),ordenx INTEGER,pnum_req INTEGER)" t="F" v="pub"/>
@@ -2147,6 +2173,7 @@
</File>
<File n="ipdir/ipprrp002_1.4gl" s="1" ts="20220110100513097">
<Ref t="ipdir/ipprgb000.4gl"/>
<![CDATA[An error occurred during the project database update: the file 'ipprrp002_1.4gl' contains errors]]>
</File>
<File n="ipdir/ipprrp003.4gl" s="2" ts="20220110100527104">
<Ref t="ipdir/ipprgb000.4gl"/>
@@ -4132,5 +4159,7 @@
<Call c="9" l="54" n="ipprmt017" t="F"/>
</Fct>
</File>
<File n="../../fourjs/fgl220/demo/TopMenu/TopMenu1.4gl" s="1" ts="20250731120352427"/>
<File n="../../fourjs/fgl220/demo/TopMenu/TopMenu1.4gl" s="1" ts="20250731120352427">
<![CDATA[An error occurred during the project database update: the file 'TopMenu1.4gl' contains errors]]>
</File>
</WorkspaceDatabase>
+2 -2
View File
@@ -31,7 +31,7 @@
<Document container="true" filePath="ipdir/ipprgb000.4gl" locator="317:2" module="mod-ce3">
<Data name="8" value="CP1252"/>
</Document>
<Document container="true" filePath="ipdir/ipprmt044.4gl" locator="266:58" module="mod-ce3">
<Document container="true" filePath="ipdir/ipprmt044.4gl" locator="2510:8:2510:8" module="mod-ce3">
<Data name="8" value="CP1252"/>
</Document>
<Document container="true" filePath="bin/ipprmt044.4rp" locator="" module="mod-rw"/>
@@ -44,5 +44,5 @@
</Document>
<Document container="true" filePath="ipdir/ipfmwd010.4fd" locator="" module="mod-fd"/>
</OpenDocuments>
<CurrentDocument filePath="" module="mod-wp"/>
<CurrentDocument filePath="ipdir/ipprmt044.4gl" module="mod-ce3"/>
</WorkspaceViewState>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+462 -105
View File
@@ -12,7 +12,7 @@ GLOBALS
"ipprgb000.4gl"
DEFINE ordenx,tmpnumero,tmpnueroExistencia INTEGER,
DEFINE ordenx,tmpnumero,tmpnueroExistencia,vnum_desp INTEGER,
hacerdocumento BOOLEAN,
direccion_p VARCHAR(200),
sucid SMALLINT
@@ -358,6 +358,11 @@ DISPLAY "numero factura2 ",otros_mov.descrip4
END IF
LET otros_mov.num_doc = tmpnumero + 1
DISPLAY BY NAME otros_mov.num_doc
# Numero provisional del DESPIECE: el provisional del documento en NEGATIVO
# (nunca coincide con un documento real) y siempre filtrado por usuario.
# Se limpian piezas que haya dejado un intento anterior no grabado.
LET vnum_desp = otros_mov.num_doc * -1
DELETE FROM iptb00025 WHERE num_doc = vnum_desp AND us_crea = usuarios
LET otros_mov.fecha = TODAY
DISPLAY BY NAME otros_mov.fecha
@@ -1291,12 +1296,16 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND
a.num_doc = otros_mov.num_Doc
a.num_doc = vnum_desp AND a.us_crea = usuarios
IF STATUS = NOTFOUND THEN
LET numero_msg =398
CALL msg(numero_msg)
NEXT FIELD cod_n
# El producto lleva despiece y no se ha hecho: abrir la ventana
# sola (antes solo mostraba el mensaje 398)
IF NOT abre_despiece_si_falta() THEN
LET numero_msg =398
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
END IF
END IF
@@ -1313,6 +1322,19 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
END IF # CONTROL CODIGO EN BLANCO
BEFORE FIELD cantidad_1
# En devoluciones el cursor salta directo a la cantidad (no pasa por
# cod_sec): si el producto lleva despiece y no se ha hecho, abrirlo
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
LET p_act = arr_curr()
LET scr_l = scr_line()
IF NOT abre_despiece_si_falta() THEN
# se cancelo: avisa; al grabar igual lo exige (msg 398)
LET numero_msg = 398
CALL msg(numero_msg)
END IF
END IF
AFTER FIELD cantidad_1
LET p_act = arr_curr()
@@ -1398,8 +1420,8 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
# CONTROL CANTIDAD DESPIECE
LET total_medida = 0
IF otros_mov.cod_mov = 30 OR otros_mov.cod_mov = 31 OR
otros_mov.cod_mov = 55 OR otros_mov.cod_mov = 70 OR otros_mov.cod_mov = 71 OR
otros_mov.cod_mov = 72 THEN
otros_mov.cod_mov = 55 OR otros_mov.cod_mov = 56 OR otros_mov.cod_mov = 70 OR
otros_mov.cod_mov = 71 OR otros_mov.cod_mov = 72 THEN
# CONTROL DESPIECE
SELECT UNIQUE a.cod_n FROM iptb00027 a
@@ -1416,7 +1438,7 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND
a.num_doc = otros_mov.num_Doc
a.num_doc = vnum_desp AND a.us_crea = usuarios
IF STATUS = NOTFOUND THEN
LET numero_msg =398
@@ -1431,7 +1453,7 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND
a.num_doc = otros_mov.num_doc
a.num_doc = vnum_desp AND a.us_crea = usuarios
IF STATUS != NOTFOUND THEN
SELECT SUM(a.medida) INTO total_medida
@@ -1442,12 +1464,25 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
a.cod_sec = movi2[p_act].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND
a.area = movi2[p_act].area AND
a.num_doc = otros_mov.num_doc
a.num_doc = vnum_desp AND a.us_crea = usuarios
IF total_medida <> movi2[p_act].cantidad_1 THEN
LET numero_msg = 152
CALL msg(numero_msg)
NEXT FIELD cantidad_1
# Diferencia de redondeo (la requisicion guarda 4 decimales y
# el despiece 5): la linea toma el total exacto del despiece.
LET diferencia = total_medida - movi2[p_act].cantidad_1
IF diferencia < 0 THEN
LET diferencia = diferencia * -1
END IF
IF diferencia <= .01 THEN
LET movi2[p_act].cantidad_1 = total_medida
LET movi2[p_act].cantidad_2 = movi2[p_act].cantidad_1 * factor_conv[p_act]
DISPLAY movi2[p_act].cantidad_1 TO s_movi1[scr_l].cantidad_1
DISPLAY movi2[p_act].cantidad_2 TO s_movi1[scr_l].cantidad_2
ELSE
LET numero_msg = 152
CALL msg(numero_msg)
NEXT FIELD cantidad_1
END IF
END IF
END IF
LET selec_pt = selec_pt CLIPPED,movi2[p_act].descrip_esp," CANTIDAD ",
@@ -1496,25 +1531,20 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
END IF
IF otros_mov.cod_mov <> 12 AND otros_mov.cod_mov <> 13 and otros_mov.cod_mov <> 43
THEN
LET cantidad_conduce = 0
IF movi2[p_act].id_kit IS NULL THEN
SELECT SUM(a.cantidad) INTO cantidad_conduce FROM prtb00013 a
WHERE a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.num_oc = ordenx AND
a.status_t IS NULL
ELSE
SELECT SUM(a.cantidad) INTO cantidad_conduce FROM prtb00030 a
WHERE a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.num_oc = ordenx
END IF
LET cantidad_orden =0
# Pendiente de la orden = pedido - ya despachado (antes se calculaba
# el pedido pero NUNCA se comparaba con la cantidad digitada)
CALL pendiente_orden(movi2[p_act].cod_n,movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
movi2[p_act].id_kit)
RETURNING cantidad_conduce,cantidad_orden
LET movi2[p_act].cantidad_p = cantidad_conduce - cantidad_orden
DISPLAY movi2[p_act].cantidad_p TO s_movi1[scr_l].cantidad_p
IF pcontrol_despacho = "SI" THEN
IF NOT cantidad_cabe_en_orden(p_act) THEN
LET hacerdocumento = FALSE
NEXT FIELD cantidad_1
END IF
END IF
END IF # CONTROL CONDUCE_NO
END IF # CONTROL DEVOLUCION
@@ -1525,17 +1555,26 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
AFTER INPUT
IF int_flag THEN
DELETE FROM iptb00025 WHERE cod_mov = otros_mov.cod_mov and num_doc = otros_mov.num_Doc
DELETE FROM iptb00025 WHERE cod_mov = otros_mov.cod_mov and num_doc = vnum_desp AND us_crea = usuarios
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
# Todo producto que lleva despiece (iptb00027) debe tener su despiece
# abierto (iptb00025). Antes solo se validaba al salir de cod_sec, y los
# productos que vienen cargados de la orden nunca pasan por ese campo.
LET idx = falta_despiece()
IF idx > 0 THEN
CALL msg(398)
CALL fgl_set_arr_curr(idx)
NEXT FIELD cantidad_1
END IF
END INPUT
LABEL sale_boni:
PROMPT "Toda la Informacion Esta Correcta? (S/N)" FOR CHAR opc
LET opc = "S" # sin pregunta al guardar (antes: PROMPT "Toda la Informacion Esta Correcta? (S/N)")
IF OPC = "S" or OPC = "s" THEN
BEGIN WORK
@@ -1557,12 +1596,14 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
fech_crea = getdate()
WHERE cod_mov = otros_mov.cod_mov AND bodega = otros_mov.bodega
UPDATE iptb00025 SET num_doc = otros_mov.num_doc WHERE num_doc = tmpnueroExistencia AND
cod_mov = otros_mov.cod_mov
DISPLAY BY NAME otros_mov.num_doc ATTRIBUTE (BLUE)
# El despiece se capturo con el numero provisional NEGATIVO del usuario
# (vnum_desp); aqui pasa al numero definitivo. Antes renumeraba desde
# tmpnumero (provisional - 1) y tmpnueroExistencia, y arrastraba piezas de
# OTROS documentos reales con ese numero.
UPDATE iptb00025 SET num_doc = otros_mov.num_doc
WHERE num_doc = tmpnumero AND cod_mov = otros_mov.cod_mov
WHERE num_doc = vnum_desp AND cod_mov = otros_mov.cod_mov AND us_crea = usuarios
DISPLAY BY NAME otros_mov.num_doc ATTRIBUTE (BLUE)
# INSERTA REGISTROS DE ENTRADAS CON LOS CONDUCES
IF otros_mov.cod_mov1 IS NOT NULL THEN
@@ -1621,28 +1662,17 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
# CONTROL REQUISICION DESPACHO
#======================================================================
SELECT SUM(a.cantidad_2*-1) INTO cantidad_orden
FROM iptb00006 a
WHERE a.cod_n=movi2[idx].cod_n and a.cod_grupo=movi2[idx].cod_grupo
and a.cod_tipo=movi2[idx].cod_tipo AND
a.cod_sec=movi2[idx].cod_sec
and a.num_oc =ordenx AND
a.cod_mov in (30,31,55,12,13,43)
and a.status_t IS NULL
IF cantidad_orden IS NULL THEN
LET cantidad_orden = 0
END IF
IF cantidad_conduce IS NULL THEN
LET cantidad_conduce = 0
END IF
# pendiente de ESTE producto (incluye lo ya grabado en esta misma
# transaccion para renglones anteriores del mismo producto)
CALL pendiente_orden(movi2[idx].cod_n,movi2[idx].cod_grupo,
movi2[idx].cod_tipo,movi2[idx].cod_sec,
movi2[idx].id_kit)
RETURNING cantidad_conduce,cantidad_orden
LET movi2[idx].cantidad_p = cantidad_conduce - cantidad_orden
IF movi2[idx].cantidad_2 > movi2[idx].cantidad_p THEN
IF movi2[idx].cantidad_2 > movi2[idx].cantidad_p + .01 THEN # .01 = tolerancia de redondeo
ROLLBACK WORK
DISPLAY movi2[idx].cantidad_p TO s_movi1[scr_l].cantidad_p ATTRIBUTE(RED)
CALL msg(46)
@@ -1651,7 +1681,7 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
CALL control_requisicion(movi2[idx].cantidad_2,
movi2[idx].cod_n,movi2[idx].cod_grupo,
movi2[idx].cod_tipo,movi2[p_act].cod_sec,
movi2[idx].cod_tipo,movi2[idx].cod_sec,
movi2[idx].id_kit)
RETURNING estado_req
@@ -1705,9 +1735,11 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
ELSE
UPDATE iptb00043 SET num_doc = otros_mov.num_doc WHERE usuario = usuarios
END IF
# Estado de la requisicion y cierre de la orden (como la version de junio)
CALL cierre_orden_requisicion()
COMMIT WORK
PROMPT "Desea Imprimir Formulario Ahora? (S/N)" FOR CHAR opt2
LET opt2 = "S" # imprime (PDF) sin preguntar (antes: PROMPT "Desea Imprimir Formulario Ahora? (S/N)")
IF opt2 = "S" OR opt2 = "s" THEN
@@ -1720,6 +1752,7 @@ DISPLAY "CANTIDAD E ",cantidad_entrada," c salida ",cantidad_conduce
-- Carga el .4rp grafico nuevo (ipprmt044.4rp) en vez del default por
-- nombre del report. El cuerpo de formu4 ahora usa PRINTX.
IF fgl_report_loadCurrentSettings("ipprmt044.4rp") THEN
CALL fgl_report_selectDevice("PDF") -- el formulario sale en PDF
CALL fgl_report_selectPreview(TRUE)
LET handler = fgl_report_commitCurrentSettings()
ELSE
@@ -1910,6 +1943,9 @@ FORMAT
WHERE a.cod_mov = x.cod_mov AND a.num_doc = x.num_doc
AND a.cod_n = z.cod_n AND a.cod_grupo = z.cod_grupo
AND a.cod_tipo = z.cod_tipo AND a.cod_sec = z.cod_sec
-- por AREA: el mismo producto en dos lineas de areas distintas
-- imprimia las piezas de las dos debajo de cada linea
AND (a.area = z.area OR a.area IS NULL OR a.area = 0)
BEFORE GROUP OF z.area
@@ -2014,7 +2050,10 @@ FIRST + 1,PROMPT LINE LAST)
END FUNCTION
FUNCTION despiece()
DEFINE cetiqueta VARCHAR(20)
DEFINE cetiqueta VARCHAR(20),
vi INTEGER,
vtotal_piezas,vdespachado,vdif DEC(12,5),
vmensaje STRING
OPEN WINDOW wdespiece AT 5,3 WITH FORM "ipfmwd010" ATTRIBUTE (BORDER,FORM LINE
FIRST + 1,PROMPT LINE LAST)
@@ -2039,7 +2078,7 @@ FIRST + 1,PROMPT LINE LAST)
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
FROM iptb00025 a
WHERE a.cod_mov = otros_mov.cod_mov AND
a.num_doc = tmpnumero AND
a.num_doc = vnum_desp AND a.us_crea = usuarios AND
a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
@@ -2055,7 +2094,7 @@ FIRST + 1,PROMPT LINE LAST)
SELECT UNIQUE a.cod_n FROM iptb00025 a
WHERE a.cod_mov = otros_mov.cod_mov AND
a.num_doc = otros_mov.num_doc AND
a.num_doc = vnum_desp AND a.us_crea = usuarios AND
a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
@@ -2063,64 +2102,142 @@ FIRST + 1,PROMPT LINE LAST)
a.area = movi2[p_act].area
IF STATUS = NOTFOUND THEN
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
# DEVOLUCION: el despiece que realmente se DESPACHO para esa factura, o sea
# el de su(s) conduce(s) de salida (iptb00025 de los movs 30/31/55/56 con
# fact_no = factura). No el de la orden: si la orden no se despacho entera
# daria un valor errado. Primero con el area de la linea; si no hay, sin area.
DECLARE busca_despiece_dev CURSOR FOR
SELECT p.etiqueta,p.cod_n,p.cod_grupo,p.cod_tipo,p.cod_sec,p.lado_1,p.lado_2,p.lado_3,p.cantidad,p.medida
FROM iptb00025 p
WHERE p.cod_n = movi2[p_act].cod_n AND
p.cod_grupo = movi2[p_act].cod_grupo AND
p.cod_tipo = movi2[p_act].cod_tipo AND
p.cod_sec = movi2[p_act].cod_sec AND
p.area = movi2[p_act].area AND
p.cod_mov IN (30,31,55,56) AND
p.num_doc IN (SELECT d.num_doc FROM iptb00006 d
WHERE d.fact_no = otros_mov.fact_no AND d.cod_mov IN (30,31,55,56)
AND d.status_t IS NULL
AND d.cod_n = movi2[p_act].cod_n AND d.cod_grupo = movi2[p_act].cod_grupo
AND d.cod_tipo = movi2[p_act].cod_tipo AND d.cod_sec = movi2[p_act].cod_sec)
LET idx = 1
FOREACH busca_despiece_dev INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
DECLARE busca_despiece_dev2 CURSOR FOR
SELECT p.etiqueta,p.cod_n,p.cod_grupo,p.cod_tipo,p.cod_sec,p.lado_1,p.lado_2,p.lado_3,p.cantidad,p.medida
FROM iptb00025 p
WHERE p.cod_n = movi2[p_act].cod_n AND
p.cod_grupo = movi2[p_act].cod_grupo AND
p.cod_tipo = movi2[p_act].cod_tipo AND
p.cod_sec = movi2[p_act].cod_sec AND
p.cod_mov IN (30,31,55,56) AND
p.num_doc IN (SELECT d.num_doc FROM iptb00006 d
WHERE d.fact_no = otros_mov.fact_no AND d.cod_mov IN (30,31,55,56)
AND d.status_t IS NULL
AND d.cod_n = movi2[p_act].cod_n AND d.cod_grupo = movi2[p_act].cod_grupo
AND d.cod_tipo = movi2[p_act].cod_tipo AND d.cod_sec = movi2[p_act].cod_sec)
FOREACH busca_despiece_dev2 INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
END IF
IF idx = 1 THEN
CALL fgl_winmessage("DESPIECE",
"No se encontro el despiece de este producto en los conduces de la factura.",
"exclamation")
ELSE
# Control: la suma de las piezas debe cuadrar con lo despachado de ese
# producto en los conduces de la factura (conduces viejos pueden tener
# el despiece duplicado)
LET vtotal_piezas = 0
FOR vi = 1 TO idx - 1
IF despiece[vi].medida IS NOT NULL THEN
LET vtotal_piezas = vtotal_piezas + despiece[vi].medida
END IF
END FOR
LET vdespachado = 0
SELECT SUM(d.cantidad_2 * -1) INTO vdespachado FROM iptb00006 d
WHERE d.fact_no = otros_mov.fact_no AND d.cod_mov IN (30,31,55,56)
AND d.status_t IS NULL
AND d.cod_n = movi2[p_act].cod_n AND d.cod_grupo = movi2[p_act].cod_grupo
AND d.cod_tipo = movi2[p_act].cod_tipo AND d.cod_sec = movi2[p_act].cod_sec
IF vdespachado IS NULL THEN
LET vdespachado = 0
END IF
LET vdif = vtotal_piezas - vdespachado
IF vdif < 0 THEN
LET vdif = vdif * -1
END IF
IF vdif > .01 THEN
LET vmensaje = "El despiece del conduce suma ", vtotal_piezas USING "<<<,<<<,<<&.&&&&&",
" pero lo despachado de este producto fue ", vdespachado USING "<<<,<<<,<<&.&&&&&", ".",
"\nRevise las piezas antes de aceptar (el conduce puede tener piezas repetidas)."
CALL fgl_winmessage("DESPIECE",vmensaje,"exclamation")
END IF
END IF
ELSE
IF pcontrol_despacho = "SI" AND pnum_req IS NOT NULL THEN
# Despacho con requisicion: las piezas autorizadas en la requisicion
# (cctb00027, copia de las piezas de la orden con lo que se despacha).
# Antes se tomaban TODAS las piezas de la orden (prtb00022) y si la orden
# tenia mas de ese producto que la requisicion, la cantidad cambiaba
# (ej. requisicion 17, orden 19 -> el despiece ponia 19).
DECLARE busca_despiece_req CURSOR FOR
SELECT c.etiqueta,c.cod_n,c.cod_grupo,c.cod_tipo,
c.cod_sec,c.lado_1,c.lado_2,c.lado_3,
c.cantidad_r,c.medida_r
FROM cctb00027 c
WHERE c.num_req = pnum_req AND
c.area = movi2[p_act].area AND
c.cod_n = movi2[p_act].cod_n AND
c.cod_grupo = movi2[p_act].cod_grupo AND
c.cod_tipo = movi2[p_act].cod_tipo AND
c.cod_sec = movi2[p_act].cod_sec
LET idx = 1
FOREACH busca_despiece_req INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
ELSE
DECLARE busca_despiece CURSOR FOR
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
FROM prtb00022 a
WHERE
WHERE
a.num_oc =ordenx AND
a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.area = movi2[p_act].area
a.area = movi2[p_act].area
LET idx = 1
FOREACH busca_despiece INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
END IF
END IF
ELSE
IF pcontrol_despacho <> "SI" THEN
DECLARE busca_despiece1 CURSOR FOR
SELECT b.descripcion,a.cod_n,a.cod_grupo,a.cod_tipo,
a.cod_sec,a.lado_1,a.lado_2,a.lado_3, a.cantidad,a.medida
FROM prtb00022 a,vetb00026 b
WHERE a.num_oc = otros_mov.conduce_no AND
a.area = movi2[p_act].area AND
a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
CAST(a.etiqueta AS SMALLINT) = b.codid
LET idx = 1
FOREACH busca_despiece1 INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
ELSE
DECLARE busca_despiece12 CURSOR FOR
# Ya hay despiece guardado de este producto en el documento (se esta
# volviendo a abrir): cargar LAS PIEZAS GUARDADAS para seguir editandolas.
# Antes recargaba todas las piezas de la orden (prtb00022) y con la
# DESCRIPCION de la etiqueta en un campo numerico, por lo que aparecian
# piezas de mas y todas con la etiqueta vacia.
DECLARE busca_despiece_guardado CURSOR FOR
SELECT a.etiqueta,a.cod_n,a.cod_grupo,a.cod_tipo,
a.cod_sec,a.lado_1,a.lado_2,a.lado_3,
c.cantidad_r,c.medida_r
FROM prtb00022 a, cctb00027 c
WHERE a.num_oc = ordenx AND
a.area = c.area AND
a.area = movi2[p_act].area AND
a.cod_sec,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida
FROM iptb00025 a
WHERE a.cod_mov = otros_mov.cod_mov AND
a.num_doc = vnum_desp AND a.us_crea = usuarios AND
a.cod_n = movi2[p_act].cod_n AND
a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND
a.cod_sec = movi2[p_act].cod_sec AND
a.cod_n = C.cod_n AND
a.cod_grupo = c.cod_grupo AND
a.cod_tipo = c.cod_tipo AND
a.cod_sec = c.cod_sec AND
c.num_req = pnum_req
a.area = movi2[p_act].area
LET idx = 1
FOREACH busca_despiece12 INTO despiece[idx].*
FOREACH busca_despiece_guardado INTO despiece[idx].*
LET idx = idx + 1
END FOREACH
END IF
END IF
END IF
@@ -2147,7 +2264,8 @@ FIRST + 1,PROMPT LINE LAST)
LET despiece[curr1].etiqueta = despiece[curr1-1].etiqueta
END IF
END IF
DISPLAY cetiqueta TO sdespiece[fila].etiqueta
# antes mostraba cetiqueta (siempre vacia) y BORRABA la etiqueta de la linea
DISPLAY despiece[curr1].etiqueta TO sdespiece[fila].etiqueta
DISPLAY movi2[p_act].cod_n TO sdespiece[fila].cod_n
DISPLAY movi2[p_act].cod_grupo TO sdespiece[fila].cod_grupo
@@ -2182,6 +2300,11 @@ FIRST + 1,PROMPT LINE LAST)
CALL msg(numero_msg)
NEXT FIELD lado_1
END IF
IF despiece[curr1].etiqueta IS NULL AND
(despiece[curr1].lado_1 IS NOT NULL OR despiece[curr1].medida IS NOT NULL) THEN
CALL fgl_winmessage("DESPIECE","Seleccione la etiqueta de la pieza.","exclamation")
NEXT FIELD etiqueta
END IF
LET total_medida = 0
FOR idx = 1 TO arr_count()
IF despiece[idx].medida IS NOT NULL THEN
@@ -2197,6 +2320,17 @@ FIRST + 1,PROMPT LINE LAST)
CALL msg(numero_msg)
EXIT INPUT
END IF
# toda pieza con medidas debe tener etiqueta (las cargadas de la orden o
# la requisicion pueden venir sin ella)
FOR idx = 1 TO arr_count()
IF despiece[idx].etiqueta IS NULL AND
(despiece[idx].lado_1 IS NOT NULL OR despiece[idx].medida IS NOT NULL) THEN
CALL fgl_winmessage("DESPIECE",
"Hay piezas sin etiqueta. Seleccione la etiqueta de la linea marcada.","exclamation")
CALL fgl_set_arr_curr(idx)
NEXT FIELD etiqueta
END IF
END FOR
LET total_medida = 0
FOR idx = 1 TO arr_count()
IF despiece[idx].medida IS NOT NULL THEN
@@ -2210,7 +2344,7 @@ FIRST + 1,PROMPT LINE LAST)
CLOSE WINDOW wdespiece
RETURN
END IF
DELETE FROM iptb00025 WHERE num_doc = otros_mov.num_doc AND
DELETE FROM iptb00025 WHERE num_doc = vnum_desp AND us_crea = usuarios AND
cod_mov = otros_mov.cod_mov AND
cod_n = movi2[p_act].cod_n AND
cod_grupo = movi2[p_act].cod_grupo AND
@@ -2223,7 +2357,7 @@ FIRST + 1,PROMPT LINE LAST)
INSERT INTO iptb00025(etiqueta,cod_mov,num_doc,cod_n,cod_grupo,cod_tipo,cod_sec,
lado_1,lado_2,lado_3,cantidad,medida,us_crea,fech_crea,bodega,area)
VALUES(despiece[idx].etiqueta,otros_mov.cod_mov,otros_mov.num_doc,
VALUES(despiece[idx].etiqueta,otros_mov.cod_mov,vnum_desp,
movi2[p_act].cod_n,movi2[p_act].cod_grupo,
movi2[p_act].cod_tipo,movi2[p_act].cod_sec,
despiece[idx].lado_1,despiece[idx].lado_2,
@@ -2378,6 +2512,7 @@ MENU "Busqueda "
-- Carga el .4rp grafico nuevo (ipprmt044.4rp) en vez del default por
-- nombre del report. El cuerpo de formu4 ahora usa PRINTX.
IF fgl_report_loadCurrentSettings("ipprmt044.4rp") THEN
CALL fgl_report_selectDevice("PDF") -- el formulario sale en PDF
CALL fgl_report_selectPreview(TRUE)
LET handler = fgl_report_commitCurrentSettings()
ELSE
@@ -2661,7 +2796,7 @@ FUNCTION control_requisicion(cantidad_Trx,xcodn,xcodgrupo,xcodtipo,xcodsec,xkit)
a.num_req = pnum_req AND
a.status_t IS NULL
LET Rcantidad_requisicion = 0
SELECT SUM(a.cantidad_2) INTO Rcantidad_requisicion
SELECT SUM(a.cantidad_2 * -1) INTO Rcantidad_requisicion # despachos se graban en negativo
FROM iptb00006 a
WHERE
@@ -2669,14 +2804,18 @@ FUNCTION control_requisicion(cantidad_Trx,xcodn,xcodgrupo,xcodtipo,xcodsec,xkit)
a.cod_grupo = xcodgrupo AND
a.cod_tipo = xcodtipo AND
a.cod_sec = xcodsec AND
a.cod_mov IN (30,31,55,12,13) and
a.cod_mov IN (30,31,55,56,12,13) and
a.num_req = pnum_req AND
a.status_t IS NULL
IF Rcantidad_requisicion IS NULL THEN
LET Rcantidad_requisicion=0
END IF
IF (Rcantidad_requisicion)+cantidad_Trx > cantidadRequisicion THEN
IF cantidadRequisicion IS NULL THEN
LET cantidadRequisicion = 0
END IF
# .01 = tolerancia de redondeo (cctb00026.cantidad solo guarda 4 decimales)
IF (Rcantidad_requisicion)+cantidad_Trx > cantidadRequisicion + .01 THEN
RETURN FALSE
ELSE
RETURN true
@@ -2685,3 +2824,221 @@ END IF
END FUNCTION
# Cantidad pedida en la orden (ordenx) de un producto y lo ya despachado.
# Pedido: prtb00013 (o prtb00030 si es kit). Despachado: conduces de salida
# (30,31,55,56) neto de devoluciones/averias (12,13,43) en iptb00006.
FUNCTION pendiente_orden(pcod_n,pcod_grupo,pcod_tipo,pcod_sec,pid_kit)
DEFINE pcod_n,pcod_grupo,pcod_tipo,pcod_sec,pid_kit INTEGER,
vpedido,vdespachado DEC(12,5)
LET vpedido = 0
IF pid_kit IS NULL THEN
SELECT SUM(a.cantidad) INTO vpedido FROM prtb00013 a
WHERE a.cod_n = pcod_n AND a.cod_grupo = pcod_grupo AND
a.cod_tipo = pcod_tipo AND a.cod_sec = pcod_sec AND
a.num_oc = ordenx AND a.status_t IS NULL
ELSE
SELECT SUM(a.cantidad) INTO vpedido FROM prtb00030 a
WHERE a.cod_n = pcod_n AND a.cod_grupo = pcod_grupo AND
a.cod_tipo = pcod_tipo AND a.cod_sec = pcod_sec AND
a.num_oc = ordenx
END IF
IF vpedido IS NULL THEN
LET vpedido = 0
END IF
LET vdespachado = 0
SELECT SUM(a.cantidad_2*-1) INTO vdespachado FROM iptb00006 a
WHERE a.cod_n = pcod_n AND a.cod_grupo = pcod_grupo AND
a.cod_tipo = pcod_tipo AND a.cod_sec = pcod_sec AND
a.num_oc = ordenx AND
a.cod_mov IN (30,31,55,56,12,13,43) AND
a.status_t IS NULL
IF vdespachado IS NULL THEN
LET vdespachado = 0
END IF
RETURN vpedido,vdespachado
END FUNCTION
# TRUE si la cantidad del renglon (mas lo que llevan otros renglones del mismo
# producto en este documento) cabe en lo pendiente de la orden.
FUNCTION cantidad_cabe_en_orden(prow)
DEFINE prow,i INTEGER,
votros,vpedido,vdespachado,vpendiente DEC(12,5),
vmensaje STRING
CALL pendiente_orden(movi2[prow].cod_n,movi2[prow].cod_grupo,
movi2[prow].cod_tipo,movi2[prow].cod_sec,
movi2[prow].id_kit)
RETURNING vpedido,vdespachado
LET vpendiente = vpedido - vdespachado
LET votros = 0
FOR i = 1 TO movi2.getLength()
IF i <> prow AND movi2[i].cantidad_2 IS NOT NULL AND
movi2[i].cod_n = movi2[prow].cod_n AND movi2[i].cod_grupo = movi2[prow].cod_grupo AND
movi2[i].cod_tipo = movi2[prow].cod_tipo AND movi2[i].cod_sec = movi2[prow].cod_sec THEN
LET votros = votros + movi2[i].cantidad_2
END IF
END FOR
IF movi2[prow].cantidad_2 + votros > vpendiente + .01 THEN # .01 = tolerancia de redondeo
LET vmensaje = "La cantidad excede lo pendiente de la orden ", ordenx USING "<<<<<<<<<", ".",
"\nPedido en la orden: ", vpedido USING "<<<,<<<,<<&.&&&&&",
"\nYa despachado: ", vdespachado USING "<<<,<<<,<<&.&&&&&",
"\nPendiente: ", vpendiente USING "<<<,<<<,<<&.&&&&&"
IF votros > 0 THEN
LET vmensaje = vmensaje, "\nEn otras lineas de este documento: ", votros USING "<<<,<<<,<<&.&&&&&"
END IF
LET vmensaje = vmensaje, "\nDigitado: ", movi2[prow].cantidad_2 USING "<<<,<<<,<<&.&&&&&"
CALL fgl_winmessage("CANTIDAD",vmensaje,"stop")
RETURN FALSE
END IF
RETURN TRUE
END FUNCTION
# Despues de grabar un movimiento (dentro de la misma transaccion):
# - Requisicion (pnum_req): DESPACHADA si ya se despacho todo lo pedido en
# ella (cctb00026), si no DESPACHO PARCIAL (cctb00025.estado_despacho).
# - Orden (ordenx): si lo despachado (conduces 30,31,55,56 neto de
# devoluciones 12,13) cubre todo lo pedido (prtb00013), la orden queda
# cerrada = "S" / DESPACHADA y ya no deja despachar mas contra ella.
# - Devoluciones (12/13): la requisicion vuelve a DESPACHO PARCIAL y, si la
# devolucion es parcial, la orden se reabre (cerrada = 'N').
# Portado del ipprmt044 que decomarmol usaba hasta junio 2026.
FUNCTION cierre_orden_requisicion()
DEFINE vpedido_req,vdespachado_req,vpedido,vdespachado,vdif DEC(12,5)
IF pnum_req IS NOT NULL THEN
LET vpedido_req = 0
SELECT ISNULL(SUM(a.cantidad),0) INTO vpedido_req
FROM cctb00026 a
WHERE a.num_req = pnum_req AND a.status_t IS NULL
LET vdespachado_req = 0
SELECT ISNULL(SUM(a.cantidad_2 * -1),0) INTO vdespachado_req
FROM iptb00006 a
WHERE a.num_req = pnum_req AND a.status_t IS NULL
IF vpedido_req - vdespachado_req < .05 THEN
UPDATE cctb00025 SET estado_despacho = 'DESPACHADA',
us_mod = usuarios, fech_mod = getdate()
WHERE num_req = pnum_req
ELSE
UPDATE cctb00025 SET estado_despacho = 'DESPACHO PARCIAL',
us_mod = usuarios, fech_mod = getdate()
WHERE num_req = pnum_req
END IF
END IF
IF ordenx IS NULL THEN
RETURN
END IF
LET vpedido = 0
SELECT ISNULL(SUM(a.cantidad),0) INTO vpedido
FROM prtb00013 a
WHERE a.num_oc = ordenx
LET vdespachado = 0
SELECT ISNULL(SUM(a.cantidad_2 * -1),0) INTO vdespachado
FROM iptb00006 a
WHERE a.num_oc = ordenx
AND a.cod_mov IN (12,13,30,31,55,56)
AND a.status_t IS NULL
LET vdif = vpedido - vdespachado
IF vdif < 0 THEN
LET vdif = vdif * -1
END IF
IF vdif < .05 AND status_m <> 1 THEN
UPDATE prtb00012 SET cerrada = "S",
estado_despacho = 'DESPACHADA',
fecha_cierre = otros_mov.fecha,
us_mod = usuarios, fech_mod = getdate()
WHERE num_oc = ordenx
IF pnum_req IS NOT NULL THEN
UPDATE cctb00025 SET estado_despacho = 'DESPACHADA',
us_mod = usuarios, fech_mod = getdate()
WHERE num_req = pnum_req
END IF
END IF
IF otros_mov.cod_mov = 12 OR otros_mov.cod_mov = 13 THEN
IF pnum_req IS NOT NULL THEN
UPDATE cctb00025 SET estado_despacho = 'DESPACHO PARCIAL',
us_mod = usuarios, fech_mod = getdate()
WHERE num_req = pnum_req AND status_t IS NULL
END IF
IF cantidad_devuelta > vpedido THEN
UPDATE prtb00012 SET estado_devolucion = 'DEVOLUCION COMPLETA',
us_mod = usuarios, fech_mod = getdate()
WHERE num_oc = otros_mov.conduce_no
ELSE
UPDATE prtb00012 SET estado_devolucion = 'DEVOLUCION PARCIAL',
cerrada = 'N',
us_mod = usuarios, fech_mod = getdate()
WHERE num_oc = otros_mov.conduce_no
END IF
END IF
END FUNCTION
# Devuelve el primer renglon cuyo producto lleva despiece (iptb00027) y no
# tiene despiece grabado en iptb00025 para este movimiento/documento; 0 si todos
# estan bien.
FUNCTION falta_despiece()
DEFINE i INTEGER
FOR i = 1 TO movi2.getLength()
IF movi2[i].cod_n IS NULL OR movi2[i].cod_grupo IS NULL OR
movi2[i].cod_tipo IS NULL OR movi2[i].cod_sec IS NULL THEN
CONTINUE FOR
END IF
SELECT UNIQUE a.cod_n FROM iptb00027 a
WHERE a.cod_n = movi2[i].cod_n AND a.cod_grupo = movi2[i].cod_grupo AND
a.cod_tipo = movi2[i].cod_tipo AND a.cod_sec = movi2[i].cod_sec
IF STATUS = NOTFOUND THEN
CONTINUE FOR
END IF
SELECT UNIQUE a.cod_n FROM iptb00025 a
WHERE a.cod_n = movi2[i].cod_n AND a.cod_grupo = movi2[i].cod_grupo AND
a.cod_tipo = movi2[i].cod_tipo AND a.cod_sec = movi2[i].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND a.num_doc = vnum_desp AND a.us_crea = usuarios
IF STATUS = NOTFOUND THEN
RETURN i
END IF
END FOR
RETURN 0
END FUNCTION
# Si el producto del renglon actual (p_act) lleva despiece (iptb00027) y aun no
# tiene despiece en este documento (iptb00025), abre la ventana del despiece.
# Devuelve TRUE si al final el renglon tiene despiece (o no lo necesita).
FUNCTION abre_despiece_si_falta()
IF movi2[p_act].cod_n IS NULL OR movi2[p_act].cod_grupo IS NULL OR
movi2[p_act].cod_tipo IS NULL OR movi2[p_act].cod_sec IS NULL THEN
RETURN TRUE
END IF
SELECT UNIQUE a.cod_n FROM iptb00027 a
WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec
IF STATUS = NOTFOUND THEN
RETURN TRUE
END IF
SELECT UNIQUE a.cod_n FROM iptb00025 a
WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND a.num_doc = vnum_desp AND a.us_crea = usuarios
IF STATUS != NOTFOUND THEN
RETURN TRUE
END IF
IF movi2[p_act].area IS NULL THEN
LET movi2[p_act].area = 1
END IF
CALL despiece()
DISPLAY movi2[p_act].cantidad_1 TO s_movi1[scr_l].cantidad_1
SELECT UNIQUE a.cod_n FROM iptb00025 a
WHERE a.cod_n = movi2[p_act].cod_n AND a.cod_grupo = movi2[p_act].cod_grupo AND
a.cod_tipo = movi2[p_act].cod_tipo AND a.cod_sec = movi2[p_act].cod_sec AND
a.cod_mov = otros_mov.cod_mov AND a.num_doc = vnum_desp AND a.us_crea = usuarios
RETURN (STATUS != NOTFOUND)
END FUNCTION
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6190 -5616
View File
File diff suppressed because it is too large Load Diff