{ ------------------------------------------------------------------ PROGRAMA : PRPRMT008 OBJETIVO : Ordenes de Pedidos PROGRAMADOR : Oscar Castillo FECHA REALIZACION : Sábado 12 de Agosto de 2000 MODIFICADO POR : Victor Gomez C FECHA MODIFICACION: Wednesday, 10 January, 2001 MODIFICADO POR : Victor Gomez C FECHA MODIFICACION: Tuesday, January 16, 2001 Crear campos observacion y fecha de cierre de la orden de produccion. MODIFICACION : CONTROL DSPICE DE LOS PRODUCTOS FECHA MODIFICACION: MODIFICADO POR : JUAN SOTO MODIFIACION : ADICION OPCION DE MODIFICAR LA ORDEN DE PEDIDOS FECHA MODIFICACION : 29 DE OCTUBRE 2008 MODIFICADO POR : JUAN SOTO ------------------------------------------------------------------ } GLOBALS "prprgb000.4gl" DEFINE despiece ARRAY[100] OF RECORD etiqueta CHAR(20), cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, lado_1 DEC(12,5), lado_2 DEC(12,5), lado_3 DEC(12,5), cantidad DEC(12,5), medida DEC(12,5) END RECORD, total_medida DEC(12,5), factor_conv DEC(12,5), tmpnumero INTEGER, arrcuenta SMALLINT, nuevo,cliente1,conduce CHAR(1) DEFINE ptipocliente ui.combobox, ttipo SMALLINT,tdescripcion CHAR(30) DEFINE nombre LIKE vetb00004.nombre, descrip_esp LIKE iptb00002.descrip_esp, unidad LIKE iptb00002.unidad_med, esta,opt4 CHAR(15), nombre_vend,nombres,apellidos CHAR(40),fcalle CHAR(25), fcasa_num CHAR(5), fbarrio,furbanizacion CHAR(15), monto_desc,total1,p_costos1,total_i,total_mo DECIMAL(12,2), ult_numero,cuenta INTEGER, vetb05 RECORD LIKE vetb00005.*, cuenta_p,ridx SMALLINT, pbalance1,pbalance2 DEC(12,2), descripcion_ventas CHAR(30),simbolo CHAR(5) DEFINE prtb15 ARRAY[10] OF RECORD num_oc LIKE prtb00015.num_oc, cod_n LIKE prtb00015.cod_n, cod_grupo LIKE prtb00015.cod_grupo, cod_tipo LIKE prtb00015.cod_tipo, cod_sec LIKE prtb00015.cod_sec, cantidad_1 DEC(12,5), cantidad LIKE prtb00015.cantidad, fecha LIKE prtb00015.fecha END RECORD DEFINE p_prtb14 RECORD LIKE prtb00014.* DEFINE f_itbis DEC(3,2) DEFINE sub_total,sub_total1,balance DECIMAL(10,2), descrip_p CHAR(30) DEFINE p_totales RECORD sub_total DEC(8,2), #-> Sub-Total de los Productos menos descuento unidad_med CHAR(4), #-> Unidad de medida del producto total_v DEC(10,2) #-> Total de la venta END RECORD DEFINE arr_prtb08 ARRAY[200] OF RECORD fila SMALLINT, cod_n LIKE prtb00013.cod_n, cod_grupo LIKE prtb00013.cod_grupo, cod_tipo LIKE prtb00013.cod_tipo, cod_sec LIKE prtb00013.cod_sec, descrip_esp LIKE iptb00002.descrip_esp, unidad_med LIKE iptb00002.unidad_med, altura_zocalo LIKE prtb00013.altura_zocalo, terminacion CHAR(1), bisel LIKE prtb00013.bisel, cantidad_1 DEC(12,5), cantidad LIKE prtb00013.cantidad, precio LIKE prtb00013.precio, descuento LIKE prtb00013.descuento, total_p DECIMAL(10,2) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "smarmotech" USER usuarios USING clave CALL prprmt008() END MAIN FUNCTION prprmt008() # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 23 OPEN WINDOW ctfmmt008 AT 4,3 WITH FORM "prfmmt008" MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" LET INT_FLAG = FALSE CLEAR FORM LET nuevo = "S" CALL prpcad008() COMMAND "Consultar" LET INT_FLAG = FALSE CLEAR FORM CALL prpcmf008() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION prpcad008() ## Captura los datos que va a contener el registro LET INT_FLAG = false LABEL vuelve: IF nuevo = "S" THEN INITIALIZE prtb08.* TO NULL LET prtb08.num_oc = 0 LET prtb08.fecha_entrega = TODAY + 20 SELECT a.num_oc INTO tmpnumero FROM prtb00024 a LET tmpnumero = tmpnumero + 1 UPDATE prtb00024 set num_oc = tmpnumero END IF CALL ui.ComboBox.setDefaultInitializer("cventas") CALL ui.ComboBox.setDefaultInitializer("ccondicion") INPUT BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.ventas,prtb08.cotizacion_no, prtb08.tipo_cliente, prtb08.sec_cliente,prtb08.fecha_entrega, prtb08.cond_pago,prtb08.ubicacion WITHOUT DEFAULTS ON ACTION sec_cliente IF prtb08.tipo_cliente iS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ventas END IF CALL busca_cliente8() DISPLAY BY NAME prtb08.tipo_cliente,prtb08.sec_cliente,nombre ATTRIBUTE(BLUE) AFTER FIELD ventas DECLARE busca_tipo CURSOR FOR SELECT UNIQUE a.tipo_cliente,a.tipo_cliente INTO prtb08.tipo_cliente FROM vetb00060 a WHERE a.ventas = prtb08.ventas LET ptipocliente = ui.ComboBox.forName("formonly.tipo_cliente") CALL ptipocliente.clear() FOREACH busca_tipo CALL ptipocliente.additem(prtb08.tipo_cliente,prtb08.tipo_cliente) END FOREACH DISPLAY BY NAME prtb08.tipo_cliente AFTER FIELD cotizacion_no BEFORE FIELD tipo_cliente IF nuevo <> "S" THEN CALL controlact() IF cliente1 = "N" THEN ERROR "NO PUEDE MODIFICAR DATOS DEL CLIENTE, ESTA ORDEN TIENE AVANCE" NEXT FIELD fecha_entrega END IF END IF { AFTER FIELD sec_cliente SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.telefono, prtb08.fax, prtb08.direccion AFTER FIELD parchivo IF parchivo IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD parchivo END IF LET karchivo = "dir ",FGL_GETENV("FILEPATH"),"\\",parchivo CLIPPED,".bmp" RUN karchivo RETURNING perror IF perror != 0 THEN LET numero_msg = 385 CALL msg(numero_msg) NEXT FIELD parchivo END IF } AFTER FIELD fecha_entrega IF prtb08.fecha_entrega IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_entrega END IF IF prtb08.fecha_entrega < prtb08.fecha_oc THEN LET numero_msg =51 CALL msg(numero_msg) NEXT FIELD fecha_entrega END IF { AFTER FIELD nombre_file LET nombmp = FGL_GETENV("FGLBMP") LET nombmp = nombmp CLIPPED,prtb08.nombre_file CLIPPED,".bmp" DISPLAY nombmp TO bmpfld AFTER FIELD sec_vend IF prtb08.sec_vend IS NOT NULL THEN SELECT a.nom1_emp,a.apell1_emp INTO nombres,apellidos FROM adtb00003 a WHERE a.num_emp = prtb08.sec_vend IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD sec_vend END IF LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED DISPLAY BY NAME nombre_vend ATTRIBUTE(BLUE) END IF } BEFORE FIELD fecha_oc IF nuevo = "S" THEN LET prtb08.fecha_oc = TODAY DISPLAY BY NAME prtb08.fecha_oc ATTRIBUTE(BLUE) END IF AFTER FIELD fecha_oc IF prtb08.fecha_oc > TODAY THEN LET numero_msg = 189 CALL msg(numero_msg) NEXT FIELD fecha_oc END IF { AFTER FIELD cond_pago IF prtb08.cond_pago IS NULL THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD cond_pago END IF SELECT a.descrip INTO descrip_p FROM vetb00012 a WHERE a.cond_pago = prtb08.cond_pago AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cond_pago END IF DISPLAY BY NAME descrip_p ATTRIBUTE(BLUE) } AFTER FIELD sec_cliente SELECT a.nombre,a.telefono,a.fax INTO nombre,prtb08.telefono,prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF SELECT a.* INTO vetb05.* FROM vetb00005 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = vetb05.calle CLIPPED," ",vetb05.casa_num CLIPPED,vetb05.barrio CLIPPED DISPLAY BY NAME prtb08.direccion,prtb08.telefono,nombre ATTRIBUTE(BLUE) SELECT a.sec_vend,b.nom1_emp,b.apell1_emp INTO prtb08.sec_vend,nombres,apellidos FROM vetb00028 a,adtb00003 b WHERE a.sec_vend = b.num_emp AND a.tipo_cliente = prtb08.tipo_cliente and a.sec_cliente = prtb08.sec_cliente IF STATUS = NOTFOUND THEN LET numero_msg =119 CALL msg(numero_msg) NEXT FIELD tipo_cliente END IF IF prtb08.sec_vend IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) LET nombre_vend ="NO TIENE VENDEDOR" DISPLAY BY NAME nombre_vend ATTRIBUTE(RED) END IF LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED DISPLAY BY NAME nombre_vend,prtb08.sec_vend SELECT SUM(a.valor) INTO pbalance1 FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.tipo_doc NOT IN ("PC","AV") AND a.status_t IS NULL IF pbalance1 IS NULL THEN LET pbalance1 = 0 END IF SELECT SUM(a.valor) INTO pbalance2 FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.tipo_doc IN ("AV") AND a.status_t IS NULL IF pbalance2 IS NULL THEN LET pbalance2 = 0 END IF LET balance = pbalance1 - pbalance2 DISPLAY BY NAME balance AFTER INPUT IF INT_FLAG THEN LET opt4 = FGL_WINQUESTION("Pregunta","Esta seguro que desea salir del programa?","no","yes|no|cancel","question",0) LET opt4 = UPSHIFT(opt4) IF opt4 = "NO" THEN LET INT_FLAG = FALSE LET opt4 = NULL CONTINUE INPUT END IF LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF END INPUT IF nuevo = "S" THEN LET p_totales.sub_total = 0 LET prtb08.cantidad_i = 0 LET prtb08.precio_i = 0 LET prtb08.cantidad_mo = 0 LET prtb08.precio_mo = 0 LET prtb08.transporte = 0 LET prtb08.itbis = 0 LET p_totales.total_v = 0 FOR idx =1 to 10 LET arr_prtb08[idx].fila = null LET arr_prtb08[idx].cod_n = null LET arr_prtb08[idx].cod_grupo= null LET arr_prtb08[idx].cod_tipo = null LET arr_prtb08[idx].cod_sec = null LET arr_prtb08[idx].cantidad_1 = null LET arr_prtb08[idx].cantidad = null LET arr_prtb08[idx].precio = null LET arr_prtb08[idx].descuento = null LET arr_prtb08[idx].total_p = null END FOR END IF IF nuevo <> "S" THEN CALL controlact() IF conduce = "N" THEN ERROR "ESTA ORDEN TIENE CONDUCES ACTIVOS, NO PUEDE SER MODIFICADA" RETURN END IF END IF ERROR " PARA LOS DESPACHOS PARCIALES" INPUT ARRAY arr_prtb08 WITHOUT DEFAULTS FROM s_pedido.* ON KEY(F9) CALL parciales() ON KEY(F10) # CONTROL DESPIECE IF nuevo <> "S" THEN SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec IF STATUS != NOTFOUND THEN SELECT UNIQUE a.cod_n FROM prtb00022 a WHERE a.secuencia = arr_prtb08[curr].fila AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec AND a.num_oc = prtb08.num_oc IF STATUS = NOTFOUND THEN LET numero_msg =398 CALL msg(numero_msg) CALL despiece() END IF ELSE ERROR "ESTE PRODUCTO NO SE DESPIEZA" NEXT FIELD cod_n END IF ###--------------------------------------------------------------- END IF CALL despiece() DISPLAY arr_prtb08[curr].cantidad_1 TO s_pedido[scr_l].cantidad_1 BEFORE ROW LET curr = arr_curr() LET scr_l = scr_line() IF nuevo = "S" THEN LET sub_total = 0 END IF ON ACTION cod_n CALL ccodn() DISPLAY arr_prtb08[curr].* TO s_pedido[scr_l].* BEFORE FIELD cod_n IF nuevo = "S" THEN LET arr_prtb08[curr].fila = arr_curr() DISPLAY arr_prtb08[curr].fila TO s_pedido[scr_l].fila END IF AFTER FIELD cod_sec LET descrip_esp = NULL LET p_totales.unidad_med = NULL IF arr_prtb08[curr].cod_sec IS NOT NULL THEN SELECT a.descrip_esp, a.unidad_med INTO descrip_esp,p_totales.unidad_med FROM iptb00002 a WHERE a.cod_n = arr_prtb08[curr].cod_n AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_sec = arr_prtb08[curr].cod_sec AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_n END IF LET arr_prtb08[curr].descrip_esp = descrip_esp LET arr_prtb08[curr].unidad_med = p_totales.unidad_med DISPLAY arr_prtb08[curr].descrip_esp TO s_pedido[scr_l].descrip_esp DISPLAY arr_prtb08[curr].unidad_med TO s_pedido[scr_l].unidad_med { BUSCA LOS PRECIOS DEL PRODUCTO, ESTO NO ESTA FUNCIONANDO HASTA QUE SE AUTORICE IF nuevo = "S" THEN LET p_costos1 = 0 SELECT precio INTO p_costos1 FROM vetb00025 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec AND a.ventas = prtb08.ventas AND a.status_t IS NULL IF STATUS = NOTFOUND THEN SELECT precio INTO p_costos1 FROM vetb00025 a WHERE a.tipo_cliente IS NULL AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_sec = arr_prtb08[curr].cod_sec AND a.ventas = prtb08.ventas AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 85 CALL msg(numero_msg) # NEXT FIELD cod_n END IF END IF END IF } IF nuevo = "S" THEN # CONTROL DESPIECE SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec IF STATUS != NOTFOUND THEN SELECT UNIQUE a.cod_n FROM prtb00022 a WHERE a.secuencia = arr_prtb08[curr].fila AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec AND a.num_oc = tmpnumero IF STATUS = NOTFOUND THEN LET numero_msg =398 CALL msg(numero_msg) CALL despiece() #NEXT FIELD cod_n END IF END IF ###--------------------------------------------------------------- ELSE # CONTROL DESPIECE SELECT UNIQUE a.cod_n FROM iptb00027 a WHERE a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec IF STATUS != NOTFOUND THEN SELECT UNIQUE a.cod_n FROM prtb00022 a WHERE a.secuencia = arr_prtb08[curr].fila AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec AND a.num_oc = prtb08.num_oc IF STATUS = NOTFOUND THEN LET numero_msg =398 CALL msg(numero_msg) NEXT FIELD cod_n END IF END IF END IF ### FACTOR CONVERSION SELECT UNIQUE a.factor_conv INTO factor_conv FROM iptb00001 a WHERE a.cod_n=arr_prtb08[curr].cod_n and a.cod_grupo=arr_prtb08[curr].cod_grupo and a.cod_tipo=arr_prtb08[curr].cod_tipo and a.cod_sec=arr_prtb08[curr].cod_sec and a.status_t IS NULL IF STATUS = NOTFOUND THEN ERROR "NO EXISTE FACTOR DE CONVERSION" NEXT FIELD cod_n END IF # IF nuevo = "S" THEN #LET arr_prtb08[curr].precio = p_costos1 ESTO ES PARA EL PRECIO # END IF DISPLAY arr_prtb08[curr].precio TO s_pedido[scr_l].precio END IF AFTER FIELD terminacion IF arr_prtb08[curr].terminacion IS NOT NULL THEN IF arr_prtb08[curr].terminacion <> "R" AND arr_prtb08[curr].terminacion <> "P" AND arr_prtb08[curr].terminacion <> "B" AND arr_prtb08[curr].terminacion <> "A" THEN NEXT FIELD terminacion END IF END IF DISPLAY arr_prtb08[curr].terminacion TO s_pedido[scr_l].terminacion ATTRIBUTE(BLUE) AFTER FIELD bisel { IF arr_prtb08[curr].bisel IS NOT NULL THEN IF arr_prtb08[curr].bisel <> "DBN" AND arr_prtb08[curr].bisel <> "SDN" THEN NEXT FIELD bisel END IF END IF } DISPLAY arr_prtb08[curr].bisel TO s_pedido[scr_l].bisel ATTRIBUTE(BLUE) AFTER FIELD cantidad_1 IF arr_prtb08[curr].cantidad_1 IS NULL OR arr_prtb08[curr].cantidad_1 < 0 THEN LET arr_prtb08[curr].descuento = 0 END IF LET arr_prtb08[curr].cantidad = arr_prtb08[curr].cantidad_1 * factor_conv DISPLAY arr_prtb08[curr].cantidad TO s_pedido[scr_l].cantidad AFTER FIELD precio IF arr_prtb08[curr].precio IS NULL OR arr_prtb08[curr].precio < 0 THEN LET arr_prtb08[curr].descuento = 0 END IF LET bandera = 0 LET ridx = curr CALL codigoRepite() IF bandera = 1 THEN NEXT FIELD cod_n END IF BEFORE FIELD descuento LET monto_desc = 0 LET total1 = 0 AFTER FIELD descuento IF arr_prtb08[curr].descuento IS NULL THEN LET arr_prtb08[curr].descuento = 0 END IF LET monto_desc = (arr_prtb08[curr].precio * arr_prtb08[curr].cantidad) * (arr_prtb08[curr].descuento /100) LET total1 = (arr_prtb08[curr].precio * arr_prtb08[curr].cantidad) - monto_desc LET arr_prtb08[curr].total_p = total1 LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[curr].total_p DISPLAY arr_prtb08[curr].total_p TO s_pedido[scr_l].total_p DISPLAY BY NAME p_totales.sub_total AFTER ROW IF nuevo = "S" THEN LET p_totales.sub_total = 0 LET arr_prtb08[curr].total_p = arr_prtb08[curr].cantidad * arr_prtb08[curr].precio END IF FOR idx = 1 TO arr_count() IF arr_prtb08[idx].total_p IS NOT NULL THEN LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p END IF END FOR DISPLAY BY NAME p_totales.sub_total AFTER INPUT IF INT_FLAG THEN LET opt4 = FGL_WINQUESTION("Pregunta","Esta seguro que desea salir del programa?","no","yes|no|cancel","question",0) LET opt4 = UPSHIFT(opt4) IF opt4 = "NO" THEN LET INT_FLAG = FALSE LET opt4 = NULL CONTINUE INPUT END IF LET numero_msg = 2 CALL msg(numero_msg) DELETE FROM prtb00022 where num_oc = tmpnumero LET INT_FLAG = FALSE RETURN END IF # CALCULO DE LOS TOTALES LET p_totales.sub_total = 0 LET scr_l = scr_line() FOR idx = 1 TO arr_count() # IF arr_prtb08[idx].total_p IS NULL THEN IF arr_prtb08[idx].precio IS NOT NULL OR arr_prtb08[idx].cantidad IS NOT NULL THEN IF arr_prtb08[idx].precio = 0 THEN LET numero_msg = 207 CALL msg(numero_msg) CONTINUE INPUT END IF LET monto_desc = (arr_prtb08[idx].precio * arr_prtb08[idx].cantidad) * (arr_prtb08[idx].descuento /100) LET arr_prtb08[idx].total_p = (arr_prtb08[idx].cantidad * arr_prtb08[idx].precio)- monto_desc LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p END IF DISPLAY arr_prtb08[idx].total_p TO s_pedido[scr_l].total_p # END IF # IF arr_prtb08[idx].total_p IS NOT NULL THEN LET bandera = 0 LET ridx = idx # END IF END FOR IF p_totales.sub_total IS NULL OR p_totales.sub_total = 0 THEN LET numero_msg =207 CALL msg(numero_msg) CONTINUE INPUT END IF #-> Registra las observaciones de la orden corte vg Tuesday, 13 March, 2001 11:08:14 AM display "Observaciones " at 23,15 SLEEP 4 CALL oc_detalles() EXIT INPUT END INPUT LET arrcuenta = arr_count() LET p_totales.total_v = p_totales.sub_total DISPLAY BY NAME p_totales.sub_total,p_totales.total_v INPUT BY NAME prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis WITHOUT DEFAULTS AFTER FIELD cantidad_i IF prtb08.cantidad_i IS NULL THEN LET prtb08.cantidad_i = 0 END IF AFTER FIELD precio_i IF prtb08.precio_i IS NULL THEN LET prtb08.precio_i = 0 END IF LET total_i = (prtb08.cantidad_i * prtb08.precio_i) AFTER FIELD cantidad_mo IF prtb08.cantidad_mo IS NULL THEN LET prtb08.cantidad_mo = 0 END IF AFTER FIELD precio_mo IF prtb08.precio_mo IS NULL THEN LET prtb08.precio_mo = 0 END IF LET total_mo = (prtb08.cantidad_mo * prtb08.precio_mo) AFTER FIELD transporte LET sub_total = (total_i + total_mo)+ p_totales.sub_total LET sub_total1 = sub_total + prtb08.transporte #-> Bsuca el itbis disponible para la fecha actual vg IF prtb08.tipo_cliente <> 17 THEN SELECT i.itbi/100 INTO f_itbis FROM vetb00019 i WHERE i.disponible = "S" LET prtb08.itbis = (sub_total1 * f_itbis) ELSE LET prtb08.itbis = 0 END IF DISPLAY BY NAME prtb08.itbis LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.total_v AFTER INPUT IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF EXIT INPUT END INPUT LABEL correcto: LET opt4 = FGL_WINQUESTION("Pregunta","Toda La informacion Esta Correcta","yes","yes|no|cancel","question",0) # PROMPT "TODA LA INFORMACION ESTA CORRECTA? " FOR opt4 LET opt4 = upshift(opt4) IF opt4 IS NULL THEN go to correcto END IF IF opt4 = "YES" THEN # SE COLOCO QUE EL NUMERO SE GENERARA A PARTIR DEL 01/01/2003 HACIA ATRAS POR MODIFICACION DEL # SISTEMA Y LA INCLUSION DEL NCF A PARTIR DEL 01/01/2007 # FECHA MODIFICACION: 11/01/2007 SELECT num_oc INTO ult_numero FROM prtb00020 IF nuevo = "S" THEN IF ult_numero IS NULL THEN LET ult_numero = 0 END IF LET ult_numero = ult_numero + 1 LET prtb08.num_oc = ult_numero DISPLAY BY NAME prtb08.num_oc #LET archivo = FGL_GETENV("USORDEN") CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT o_pedido TO archivo END IF #LET prtb08.nombre_file = parchivo CLIPPED,".bmp" LET prtb08.fecha_cierre = NULL #-> Actualiza archivo para el monitoreo de las ordenes vg Wednesday, 14 February, 2001 LET prtb09.num_oc = prtb08.num_oc LET prtb09.fecha = prtb08.fecha_oc LET prtb09.pendiente = "S" LET prtb09.detalle = "SE GENERO LA ORDEN DE PEDIDO" LET prtb09.status_t = NULL IF nuevo = "S" THEN LET prtb08.cerrada = "N" INSERT INTO prtb00012 VALUES (prtb08.*) INSERT INTO prtb00009 (num_oc,fecha,fecha_fabricacion,pendiente,detalle,us_crea,fech_crea) VALUES (prtb09.num_oc,prtb09.fecha,prtb09.fecha_fabricacion,prtb09.pendiente,prtb09.detalle,SUSER_SNAME(),GETDATE()) DELETE FROM prtb00014 WHERE num_oc = prtb08.num_oc INSERT INTO prtb00014 VALUES (prtb08.num_oc,p_prtb14.observacion,NULL,SUSER_SNAME(),GETDATE(),NULL,NULL) UPDATE prtb00012 SET us_crea = SUSER_SNAME(), fech_crea = GETDATE() WHERE @num_oc = prtb08.num_oc UPDATE prtb00009 SET us_crea = SUSER_SNAME(), fech_crea = GETDATE() WHERE @num_oc = prtb09.num_oc UPDATE prtb00020 SET num_oc = ult_numero, us_Crea = SUSER_SNAME(), fech_crea = GETDATE() # ACTUALIZA NUMERO TEMPORAL PARA EL DESPIECE UPDATE prtb00022 SET num_oc = prtb08.num_oc WHERE num_oc = tmpnumero UPDATE prtb00024 SET num_oc = num_oc + 1 # SE ESTA VALIDANDO EL PRODUCTO TERMINADO EN EL CODIGO DE LA MATERIA PRIMA # PARA CUANDO LA ORDEN SEA PARA PRODUCTOS IMPORTADOS QUE NO TIENEN COMPOSICION FOR idx = 1 TO arr_count() IF arr_prtb08[idx].total_p IS NOT NULL THEN INSERT INTO prtb00013 VALUES (prtb08.num_oc,arr_prtb08[idx].fila, arr_prtb08[idx].cod_n, arr_prtb08[idx].cod_grupo, arr_prtb08[idx].cod_tipo, arr_prtb08[idx].cod_sec, arr_prtb08[idx].altura_zocalo, arr_prtb08[idx].terminacion, arr_prtb08[idx].bisel, arr_prtb08[idx].precio, arr_prtb08[idx].cantidad, arr_prtb08[idx].descuento, null,SUSER_SNAME(),GETDATE(),null,null) INSERT INTO prtb00023 VALUES (prtb08.num_oc,arr_prtb08[idx].fila, arr_prtb08[idx].cod_n, arr_prtb08[idx].cod_grupo, arr_prtb08[idx].cod_tipo, arr_prtb08[idx].cod_sec, arr_prtb08[idx].cantidad_1, arr_prtb08[idx].cantidad) OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*) END IF END FOR # Actualizacion Parcialidades FOR idx = 1 TO cuenta_p INSERT INTO prtb00015 VALUES (prtb08.num_oc, prtb15[idx].cod_n, prtb15[idx].cod_grupo, prtb15[idx].cod_tipo, prtb15[idx].cod_sec, prtb15[idx].cantidad, prtb15[idx].fecha, null,SUSER_SNAME(),GETDATE()) END FOR FINISH REPORT o_pedido { LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO") DISPLAY "IMP ",cmd RUN cmd LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO1") RUN cmd } RUN imprime LET cmd = "TYPE ",archivo CLIPPED," ",copia RUN cmd LET numero_msg = 1 CALL msg(numero_msg) ELSE # ACTUALIZACION DE LA ORDEN UPDATE prtb00012 SET prtb00012.* = prtb08.* WHERE prtb00012.num_oc = prtb08.num_oc UPDATE prtb00014 SET (observacion,us_mod,fech_mod)= (p_prtb14.observacion,SUSER_SNAME(),GETDATE()) WHERE prtb00014.num_oc = p_prtb14.num_oc UPDATE prtb00012 SET us_mod = SUSER_SNAME(), fech_mod= GETDATE() WHERE @num_oc = prtb08.num_oc #LET archivo = FGL_GETENV("USORDEN") CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT o_pedido TO archivo DELETE FROM prtb00013 WHERE Num_oc = prtb08.num_oc DELETE FROM prtb00023 WHERE Num_oc = prtb08.num_oc FOR idx = 1 TO arr_count() IF arr_prtb08[idx].total_p IS NOT NULL THEN INSERT INTO prtb00013 VALUES (prtb08.num_oc,arr_prtb08[idx].fila, arr_prtb08[idx].cod_n, arr_prtb08[idx].cod_grupo, arr_prtb08[idx].cod_tipo, arr_prtb08[idx].cod_sec, arr_prtb08[idx].altura_zocalo, arr_prtb08[idx].terminacion, arr_prtb08[idx].bisel, arr_prtb08[idx].precio, arr_prtb08[idx].cantidad, arr_prtb08[idx].descuento, null,SUSER_SNAME(),GETDATE(),null,null) INSERT INTO prtb00023 VALUES (prtb08.num_oc,arr_prtb08[idx].fila, arr_prtb08[idx].cod_n, arr_prtb08[idx].cod_grupo, arr_prtb08[idx].cod_tipo, arr_prtb08[idx].cod_sec, arr_prtb08[idx].cantidad_1, arr_prtb08[idx].cantidad) OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*) END IF END FOR DELETE FROM prtb00015 WHERE num_oc = prtb08.num_oc # Actualizacion Parcialidades FOR idx = 1 TO cuenta_p INSERT INTO prtb00015 VALUES (prtb08.num_oc, prtb15[idx].cod_n, prtb15[idx].cod_grupo, prtb15[idx].cod_tipo, prtb15[idx].cod_sec, prtb15[idx].cantidad, prtb15[idx].fecha, null,SUSER_SNAME(),GETDATE()) END FOR FINISH REPORT o_pedido {LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO") DISPLAY "IMP ",cmd RUN cmd LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO1") RUN cmd } RUN imprime LET cmd = "TYPE ",archivo CLIPPED," ",copia display "CMD ",cmd RUN cmd LET numero_msg = 1 CALL msg(numero_msg) END IF # DECICION ACTUALIZACION ELSE GOTO vuelve END IF CLEAR FORM END FUNCTION FUNCTION prpcmf008() ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT BY NAME criterio ON a.num_oc,a.tipo_cliente,a.sec_cliente IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE a.* FROM prtb00012 a ", " WHERE ",criterio CLIPPED, " AND a.status_t IS NULL "," ORDER BY a.num_oc " PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO prtb08.* IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT SUM(a.valor) INTO balance FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF balance IS NULL THEN LET balance = 0 END IF SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,prtb08.ventas, prtb08.sec_cliente,prtb08.direccion,prtb08.telefono, prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago, balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE) CALL busca_cliente8m() CALL busca_vendm8() #CALL limpia8() CALL busca_detalle8() LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) + prtb08.transporte LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.total_v MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proprtb08.mo registro encontrado" FETCH NEXT datos INTO prtb08.* IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) NEXT OPTION "anterior" END IF SELECT SUM(a.valor) INTO balance FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF balance IS NULL THEN LET balance = 0 END IF SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente, prtb08.sec_cliente,prtb08.direccion,prtb08.telefono, prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago, balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE) CALL busca_cliente8m() CALL busca_vendm8() #CALL limpia8() CALL busca_detalle8() LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) + prtb08.transporte LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.total_v COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO prtb08.* IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) NEXT OPTION "siguiente" END IF SELECT SUM(a.valor) INTO balance FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF balance IS NULL THEN LET balance = 0 END IF SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente, prtb08.sec_cliente,prtb08.direccion,prtb08.telefono, prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago, balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE) CALL busca_cliente8m() CALL busca_vendm8() #CALL limpia8() CALL busca_detalle8() LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) + prtb08.transporte LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.total_v COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO prtb08.* SELECT SUM(a.valor) INTO balance FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF balance IS NULL THEN LET balance = 0 END IF SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente, prtb08.sec_cliente,prtb08.direccion,prtb08.telefono, prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago, balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE) CALL busca_cliente8m() CALL busca_vendm8() #CALL limpia8() CALL busca_detalle8() LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) + prtb08.transporte LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.total_v NEXT OPTION "primero" COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO prtb08.* SELECT SUM(a.valor) INTO balance FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF balance IS NULL THEN LET balance = 0 END IF SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,prtb08.ventas, prtb08.sec_cliente,prtb08.direccion,prtb08.telefono, prtb08.fax,prtb08.fecha_entrega,prtb08.cond_pago, balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE) CALL busca_cliente8m() CALL busca_vendm8() #CALL limpia8() CALL busca_detalle8() NEXT OPTION "anterior" { COMMAND KEY ("T") "Actualizar" LET nuevo = "N" CALL prpcad008()} COMMAND KEY ("N") "aNular" # VERIFICA SI LA ORDEN TIENE AVANCE SELECT UNIQUE a.num_cheque FROM cctb00001 a WHERE a.num_cheque = prtb08.num_oc AND a.tipo_cliente = prtb08.tipo_cliente and a.sec_cliente = prtb08.sec_cliente and a.tipo_doc = "AV" IF STATUS != NOTFOUND THEN ERROR "NO PUEDE ANULAR ORDEN, TIENE AVANCES" RETURN END IF # VERIFICA SI ESTA FACTURADA LA ORDEN SELECT UNIQUE a.orden FROM vetb00002 a WHERE a.orden = prtb08.num_oc AND a.tipo_cliente = prtb08.tipo_cliente and a.sec_cliente = prtb08.sec_cliente and a.status_t is null IF STATUS != NOTFOUND THEN ERROR "NO PUEDE ANULAR ORDEN, TIENE FACTURAS" RETURN END IF # VERIFICACION DESPACHO SELECT UNIQUE a.conduce_no FROM iptb00006 a WHERE a.conduce_no = prtb08.num_oc AND a.cod_sp = prtb08.tipo_cliente and a.cod_sp_sec = prtb08.sec_cliente and a.status_t is null IF STATUS != NOTFOUND THEN ERROR "NO PUEDE ANULAR ORDEN, TIENE CONDUCE" RETURN END IF PROMPT "Esta seguro?" FOR esta LET esta = UPSHIFT(esta) IF esta = "S" THEN LET prtb09.num_oc = prtb08.num_oc LET prtb09.fecha = prtb08.fecha_oc LET prtb09.pendiente = "S" LET prtb09.detalle = "SE CANCELO LA ORDEN DE PEDIDO" LET prtb09.status_t = "E" INSERT INTO prtb00009 VALUES (prtb09.*) UPDATE prtb00012 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @num_oc = prtb08.num_oc UPDATE prtb00014 set status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @num_oc = prtb08.num_oc UPDATE prtb00009 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @num_oc = prtb08.num_oc UPDATE prtb00015 SET status_t = "E", us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @num_oc = prtb08.num_oc LET numero_msg = 39 CALL msg(numero_msg) END IF COMMAND KEY ("I") "rImprimir" SELECT SUM(a.valor) INTO balance FROM cctb00001 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL IF balance IS NULL THEN LET balance = 0 END IF SELECT a.telefono, a.fax INTO prtb08.telefono, prtb08.fax FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente SELECT b.calle,b.casa_num,b.barrio,b.urbanizacion INTO fcalle,fcasa_num,fbarrio,furbanizacion FROM vetb00005 b WHERE b.tipo_cliente = prtb08.tipo_cliente AND b.sec_cliente = prtb08.sec_cliente SELECT * INTO p_prtb14.* FROM prtb00014 WHERE @num_oc = prtb08.num_oc LET prtb08.direccion = fcalle CLIPPED,",",fcasa_num CLIPPED,",", fbarrio CLIPPED,",",furbanizacion CLIPPED DISPLAY BY NAME prtb08.num_oc,prtb08.fecha_oc,prtb08.tipo_cliente,prtb08.sec_cliente, prtb08.direccion,prtb08.telefono,prtb08.fax,prtb08.fecha_entrega, prtb08.cond_pago,balance,prtb08.cantidad_i,prtb08.precio_i,prtb08.cantidad_mo, prtb08.precio_mo,prtb08.transporte,prtb08.itbis,prtb08.sec_vend ATTRIBUTE(BLUE) LET sub_total1 = sub_total + (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) + prtb08.transporte LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.total_v CALL busca_cliente8m() CALL busca_vendm8() #CALL limpia8() CALL busca_detalle8() #LET archivo = FGL_GETENV("USORDEN") CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia START REPORT o_pedido TO archivo # OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*) SELECT COUNT(*) INTO cuenta FROM prtb00013 a WHERE a.num_oc = prtb08.num_oc FOR idx = 1 TO cuenta OUTPUT TO REPORT o_pedido(prtb08.num_oc,arr_prtb08[idx].*,p_prtb14.*) END FOR FINISH REPORT o_pedido {LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO") DISPLAY "IMP ",cmd RUN cmd LET cmd ="TYPE ", archivo CLIPPED," > ",FGL_GETENV("USPRINTO1") RUN cmd } RUN imprime LET cmd = "TYPE ",archivo CLIPPED," ",copia display "CMD ",cmd RUN cmd LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM COMMAND "Retornar" "Retorna al menu anterior" EXIT MENU END MENU END FUNCTION FUNCTION limpia8() FOR idx = 1 TO 10 LET arr_prtb08[idx].fila = NULL LET arr_prtb08[idx].cod_n = NULL LET arr_prtb08[idx].cod_grupo = NULL LET arr_prtb08[idx].cod_tipo = NULL LET arr_prtb08[idx].cod_sec = NULL LET arr_prtb08[idx].bisel = NULL LET arr_prtb08[idx].cantidad = NULL LET arr_prtb08[idx].precio = NULL LET arr_prtb08[idx].descuento = NULL LET arr_prtb08[idx].total_p = NULL END FOR FOR idx = 1 TO 10 DISPLAY arr_prtb08[idx].fila TO s_pedido[idx].fila DISPLAY arr_prtb08[idx].cod_n TO s_pedido[idx].cod_n DISPLAY arr_prtb08[idx].cod_grupo TO s_pedido[idx].cod_grupo DISPLAY arr_prtb08[idx].cod_tipo TO s_pedido[idx].cod_tipo DISPLAY arr_prtb08[idx].cod_sec TO s_pedido[idx].cod_sec DISPLAY arr_prtb08[idx].bisel TO s_pedido[idx].bisel DISPLAY arr_prtb08[idx].cantidad TO s_pedido[idx].cantidad DISPLAY arr_prtb08[idx].precio TO s_pedido[idx].precio DISPLAY arr_prtb08[idx].descuento TO s_pedido[idx].descuento DISPLAY arr_prtb08[idx].total_p TO s_pedido[idx].total_p END FOR END FUNCTION FUNCTION busca_detalle8() DECLARE busca_d CURSOR FOR SELECT a.secuencia,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,c.descrip_esp,c.unidad_med,a.terminacion, a.bisel,b.cantidad_1,a.cantidad,a.precio,a.descuento FROM prtb00013 a,iptb00002 c,outer prtb00023 b WHERE a.num_oc = prtb08.num_oc AND a.secuencia = b.secuencia AND a.num_oc = b.num_oc AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.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 LET idx = 1 LET p_totales.sub_total = 0 LET p_totales.total_v = 0 FOREACH busca_d INTO arr_prtb08[idx].* IF arr_prtb08[idx].cod_n IS NOT NULL THEN SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,p_totales.unidad_med FROM iptb00002 a WHERE a.cod_n = arr_prtb08[idx].cod_n AND a.cod_grupo = arr_prtb08[idx].cod_grupo AND a.cod_tipo = arr_prtb08[idx].cod_tipo AND a.cod_sec = arr_prtb08[idx].cod_sec AND a.status_t IS NULL LET monto_desc = 0 LET total1 = 0 IF arr_prtb08[idx].descuento != 0 THEN LET monto_desc = (arr_prtb08[idx].precio * arr_prtb08[idx].cantidad) * (arr_prtb08[idx].descuento /100) END IF LET total1 = (arr_prtb08[idx].precio * arr_prtb08[idx].cantidad) - monto_desc LET arr_prtb08[idx].total_p = total1 LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p LET idx = idx + 1 END IF END FOREACH LET total_i = (prtb08.cantidad_i * prtb08.precio_i) LET total_mo = (prtb08.cantidad_mo * prtb08.precio_mo) LET sub_total = (total_i + total_mo)+ p_totales.sub_total LET sub_total1 = sub_total + prtb08.transporte LET p_totales.total_v = sub_total1 + prtb08.itbis DISPLAY BY NAME p_totales.sub_total,p_totales.unidad_med DISPLAY BY NAME prtb08.itbis DISPLAY BY NAME p_totales.total_v CALL SET_COUNT(IDX-1) DISPLAY ARRAY arr_prtb08 TO s_pedido.* LET idx = arr_curr() LET scr_l = scr_line() { DISPLAY arr_prtb08[idx].fila TO s_pedido[scr_l].fila ATTRIBUTE(BLUE) DISPLAY arr_prtb08[idx].cod_n TO s_pedido[scr_l].cod_n DISPLAY arr_prtb08[idx].cod_grupo TO s_pedido[scr_l].cod_grupo DISPLAY arr_prtb08[idx].cod_tipo TO s_pedido[scr_l].cod_tipo DISPLAY arr_prtb08[idx].cod_sec TO s_pedido[scr_l].cod_sec DISPLAY arr_prtb08[idx].terminacion TO s_pedido[scr_l].terminacion ATTRIBUTE(BLUE) DISPLAY arr_prtb08[idx].bisel TO s_pedido[scr_l].bisel ATTRIBUTE(BLUE) DISPLAY arr_prtb08[idx].cantidad TO s_pedido[scr_l].cantidad DISPLAY arr_prtb08[idx].precio TO s_pedido[scr_l].precio ATTRIBUTE(BLUE) DISPLAY arr_prtb08[idx].descuento TO s_pedido[scr_l].descuento DISPLAY arr_prtb08[idx].total_p TO s_pedido[scr_l].total_p } #LET p_totales.sub_total = p_totales.sub_total + arr_prtb08[idx].total_p LET cuenta = arr_count() END FUNCTION REPORT o_pedido(xnumero,z,y) DEFINE z RECORD fila SMALLINT, cod_n LIKE prtb00013.cod_n, cod_grupo LIKE prtb00013.cod_grupo, cod_tipo LIKE prtb00013.cod_tipo, cod_sec LIKE prtb00013.cod_sec, descrip_esp LIKE iptb00002.descrip_esp, unidad_med LIKE iptb00002.unidad_med, altura_zocalo LIKE prtb00013.altura_zocalo, terminacion LIKE prtb00013.terminacion, bisel LIKE prtb00013.bisel, cantidad_1 DEC(12,5), cantidad LIKE prtb00013.cantidad, precio LIKE prtb00013.precio, descuento LIKE prtb00013.descuento, total_p DECIMAL(10,2) END RECORD, y RECORD LIKE prtb00014.*, i,xnumero INTEGER, normal,comp_on,comp_off,doce,negrillas_on,negrillas_off, doble_on,doble_off CHAR(2),raya CHAR(120),rayita CHAR(35), total_inst,subtotal DEC(8,2), ult_pago INTEGER, plado1,plado2,plado3,pcantidad,pmedida,total_unidades DEC(12,5), etiqueta,prnc,ptelefono CHAR(20) OUTPUT LEFT MARGIN 0 ORDER BY xnumero FORMAT PAGE HEADER LET normal = ASCII 27, ASCII 80 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ascii 77 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET doble_on = ASCII 14 LET doble_off = ASCII 20 SELECT a.* INTO p_compania.* FROM companias a LET l = (90 - LENGTH(p_compania.nombre CLIPPED))/2 PRINT comp_on PRINT COLUMN l, p_compania.nombre CLIPPED, COLUMN 72, TODAY USING "DD/MM/YYYY" LET l = (100 - LENGTH("Ordenes de Pedido Corte a la Medida"))/2 PRINT COLUMN l, "ORDENES DE PEDIDOS", COLUMN 72, TIME LET prnc ="RNC:",p_compania.rnc LET l = (90 - LENGTH(prnc))/2 PRINT COLUMN l, prnc LET l = (90 - LENGTH(p_compania.direccion))/2 PRINT COLUMN l, p_compania.direccion LET ptelefono = p_compania.telefono LET l = (90 - LENGTH(ptelefono))/2 PRINT COLUMN l, ptelefono IF nuevo = "N" THEN PRINT COLUMN l, "ACTUALIZADA" ELSE PRINT " " END IF PRINT COLUMN 001, "ORDEN NO.: ",doble_on,xnumero USING "<<<<<<",doble_off SKIP 1 LINE PRINT COLUMN 001, "Fecha de la Orden : ",prtb08.fecha_oc USING "DD/MMM/YYYY", COLUMN 62, "Fecha de Entrega : ",prtb08.fecha_entrega USING "DD/MM/YYYY" # Busca el ultimo pago realizado LET ult_pago = NULL SELECT MAX(a.num_doc) INTO ult_pago FROM cctb00001 a WHERE a.tipo_doc IN ("AV","PG") AND a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL PRINT COLUMN 001, "CLIENTE : ",nombre CLIPPED PRINT COLUMN 001, "CODIGO CLIENTE : ",prtb08.tipo_cliente USING "<<","-", prtb08.sec_cliente USING "<<<<" PRINT COLUMN 001, "Direccion : ",prtb08.direccion CLIPPED, COLUMN 62, "Ubicacion : ",prtb08.ubicacion CLIPPED PRINT COLUMN 001, "Telefono : ",prtb08.telefono CLIPPED, COLUMN 62, "Fax : ",prtb08.fax CLIPPED PRINT COLUMN 001, "Condiciones : ", descrip_p CLIPPED, COLUMN 62, "Vendedor : ", prtb08.sec_vend USING "<<<<"," ", nombres CLIPPED," ",apellidos CLIPPED FOR i = 1 TO 120 LET raya[i] = "-" END FOR FOR i = 1 TO 35 LET rayita[i] = "-" END FOR # PRINT "Nombre Archivo dibujo: ",parchivo PRINT doce PRINT raya PRINT COLUMN 033, "|ALTURA", COLUMN 040, "|TERMINACION", COLUMN 64,"|CANTIDAD" PRINT COLUMN 001, " CODIGO ", COLUMN 012, "|DESCRIPCION", COLUMN 033, "|ZOCALO|", # COLUMN 047, "|TERMINACION", COLUMN 048, "|BISEL", COLUMN 55, "|UNID.", COLUMN 64, "|UNIDADES", COLUMN 78, "|CANTIDAD", COLUMN 91, "|PRECIO", COLUMN 101, "|%DESC.", COLUMN 108, " |TOTAL" PRINT raya ON EVERY ROW SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,p_totales.unidad_med FROM iptb00002 a WHERE 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 { LET z.cantidad_1 = 0 SELECT AVG(a.cantidad_1) INTO z.cantidad_1 FROM prtb00023 a WHERE a.num_oc = xnumero 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} PRINT COLUMN 1, z.cod_n USING "&&","-",z.cod_grupo USING "&&","-", z.cod_tipo USING "&&&","-",z.cod_sec USING "&&&"," ", COLUMN 12, z.descrip_esp wordwrap right margin 40, COLUMN 36, z.altura_zocalo USING "&.&&", COLUMN 46, z.terminacion, COLUMN 50, z.bisel CLIPPED, COLUMN 57, p_totales.unidad_med clipped, COLUMN 63, z.cantidad_1 USING "#,###.####", COLUMN 75, z.cantidad USING "#,###,###.#&&&", COLUMN 87, z.precio USING "#,###,###.#&", COLUMN 99, z.descuento USING "###.&&", COLUMN 106, z.total_p USING "##,###,###.&&" display " FILA ",z.fila," codigo ",z.cod_sec DECLARE busca_d1 CURSOR FOR SELECT a.etiqueta,a.lado_1,a.lado_2,a.lado_3,a.cantidad,a.medida FROM prtb00022 a WHERE a.secuencia = z.fila 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 AND a.num_oc = xnumero LET total_unidades = 0 FOREACH busca_d1 INTO etiqueta,plado1,plado2,plado3,pcantidad,pmedida PRINT COLUMN 5,pcantidad USING "<,<<<"," ",etiqueta clipped," DE ",plado1 USING "<<.#####"," X ", plado2 USING "<<.#####"," X ",plado3 USING "<<.#####"," = ",pmedida USING "<<<.#####" LET total_unidades = total_unidades + pcantidad END FOREACH IF total_unidades > 0 THEN PRINT COLUMN 19, "TOTAL UNIDADES ",total_unidades USING "<,<<<" END IF ON LAST ROW # Control Despachos Parciales SELECT unique a.num_oc FROM prtb00015 a WHERE a.num_oc = xnumero IF STATUS != NOTFOUND THEN PRINT rayita PRINT "DESPACHOS PARCIALES" PRINT COLUMN 1, "CODIGOS", COLUMN 15, "CANTIDAD", COLUMN 26, "FECHA" PRINT rayita DECLARE busca_p CURSOR FOR SELECT ' ',a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_sec,a.cantidad,a.fecha FROM prtb00015 a WHERE a.num_oc = xnumero LET idx = 1 FOREACH busca_p INTO prtb15[idx].* PRINT COLUMN 1,prtb15[idx].cod_n USING "&","-", prtb15[idx].cod_grupo USING "&","-", prtb15[idx].cod_tipo USING "&&","-", prtb15[idx].cod_sec USING "&&&", COLUMN 15, prtb15[idx].cantidad USING "##,###.##", COLUMN 26, prtb15[idx].fecha USING "dd/mm/yyyy" LET idx = idx + 1 END FOREACH END IF PRINT raya PRINT COLUMN 060, "Total Material", COLUMN 106, p_totales.sub_total USING "#,###,###.&&" SKIP 1 LINE PRINT COLUMN 075, "INSTALACION" PRINT COLUMN 065, rayita PRINT COLUMN 065,"|"," Cantidad |", COLUMN 075, " Precio |", COLUMN 085," Total " PRINT COLUMN 045, "Instalacion Tope", COLUMN 068, prtb08.cantidad_i USING "####.#&", COLUMN 078, prtb08.precio_i USING "#,###.#&", COLUMN 088,(prtb08.cantidad_i * prtb08.precio_i) USING "#,###,###.#&" PRINT COLUMN 045, "Mano de Obra", COLUMN 068, prtb08.cantidad_mo USING "####.#&", COLUMN 078, prtb08.precio_mo USING "#,###.#&", COLUMN 088,(prtb08.cantidad_mo * prtb08.precio_mo) USING "#,###,###.#&" PRINT COLUMN 065, rayita LET total_inst = (prtb08.cantidad_i * prtb08.precio_i) + (prtb08.cantidad_mo * prtb08.precio_mo) PRINT COLUMN 065, "Total Instalacion", COLUMN 088, total_inst USING "#,###,###.#&" PRINT COLUMN 060, "Transporte", COLUMN 088, prtb08.transporte USING "#,###,###.#&" PRINT COLUMN 060, "Sub-Total", COLUMN 088, p_totales.sub_total + total_inst USING "#,###,###.#&" PRINT COLUMN 060, "Itbis", COLUMN 088, prtb08.itbis USING "#,###,###.#&" PRINT COLUMN 060, "Total Ventas", COLUMN 088, p_totales.total_v USING "#,###,###.#&" PRINT normal SKIP 2 LINES PRINT COLUMN 003, y.observacion wordwrap right margin 50 PAGE TRAILER PRINT COLUMN 10, "-------------------", COLUMN 35, "-------------------", COLUMN 57, "-------------------" PRINT COLUMN 13, "VENDEDOR", COLUMN 39, "CLIENTE", COLUMN 61, "APROBADO POR" END REPORT FUNCTION busca_cliente8() OPEN WINDOW busqueda AT 7,12 WITH FORM "vefmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET INT_FLAG = false CONSTRUCT criterio ON a.nombre FROM nombre LET selec2 = "SELECT a.tipo_cliente, a.sec_cliente, a.nombre ", " FROM vetb00004 a", " WHERE ", "a.status_t is NULL AND ", criterio clipped," AND a.tipo_cliente = ",prtb08.tipo_cliente, " ORDER BY a.nombre " IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_c END IF PREPARE busca_cliente8s FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 END IF END IF DECLARE buscar_clientes CURSOR FOR busca_cliente8s LET idx = 1 FOREACH buscar_clientes INTO arr_clientes[idx].* IF status = NOTFOUND THEN EXIT FOREACH END IF IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Cliente donde esta el cursor" DISPLAY ARRAY arr_clientes TO s_clientes.* LET curr1 = arr_curr() LET prtb08.tipo_cliente = arr_clientes[curr1].tipo_cliente LET prtb08.sec_cliente = arr_clientes[curr1].sec_cliente LET nombre = arr_clientes[curr1].nombre LABEL salir_consulta_c: CLOSE WINDOW busqueda END FUNCTION FUNCTION busca_cliente8m() SELECT a.nombre INTO nombre FROM vetb00004 a WHERE a.tipo_cliente = prtb08.tipo_cliente AND a.sec_cliente = prtb08.sec_cliente AND a.status_t IS NULL # CALL ui.combobox.setdefaultinitializer("cventas") # CALL ui.combobox.setdefaultinitializer("ccondicion") DISPLAY BY NAME nombre ATTRIBUTE(BLUE) END FUNCTION FUNCTION busca_product8() SELECT a.descrip_esp,a.unidad_med INTO descrip_esp,unidad FROM iptb00002 a WHERE a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec DISPLAY BY NAME unidad,descrip_esp ATTRIBUTE(BLUE) END FUNCTION FUNCTION vendedor8es() DEFINE descrip6 LIKE adtb00003.nom1_emp OPEN WINDOW busqueda2 AT 7,12 WITH FORM "vefmwd001" ATTRIBUTE (BORDER,FORM LINE FIRST + 2,COMMENT LINE LAST,MESSAGE LINE LAST) LET INT_FLAG = false CONSTRUCT criterio ON a.nom1_emp FROM descrip6 LET selec2 = "SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp ", " FROM adtb00003 a,vetb00028 b", " WHERE a.num_emp = b.sec_vend AND ", "a.status_t is NULL AND ", criterio clipped, "ORDER BY 1 " IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) GO TO salir_consulta_e END IF PREPARE busca_empleados FROM selec2 IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 3 CALL msg(numero_msg) END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 END IF END IF DECLARE buscar_empleados CURSOR FOR busca_empleados LET idx = 1 FOREACH buscar_empleados INTO arr_empleados[idx].* IF status = NOTFOUND THEN EXIT FOREACH END IF IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT FOREACH END IF LET empleados[idx].cod_emp_sec = arr_empleados[idx].num_emp LET empleados[idx].descrip6 = arr_empleados[idx].nom1_emp clipped," ",arr_empleados[idx].apell1_emp clipped LET idx = idx + 1 END FOREACH CALL set_count(idx-1) MESSAGE " Selecciona Empleado donde esta el cursor" DISPLAY ARRAY empleados TO s_empleados.* LET curr1 = scr_line() LET prtb08.sec_vend = empleados[curr1].cod_emp_sec LET nombre_vend = empleados[curr1].descrip6 LABEL salir_consulta_e: CLOSE WINDOW busqueda2 END FUNCTION FUNCTION busca_vendm8() IF prtb08.sec_vend IS NOT NULL THEN SELECT a.nom1_emp,a.apell1_emp INTO nombres,apellidos FROM adtb00003 a WHERE a.num_emp = prtb08.sec_vend LET nombre_vend = nombres CLIPPED," ",apellidos CLIPPED DISPLAY BY NAME nombre_vend ATTRIBUTE(BLUE) END IF END FUNCTION FUNCTION oc_detalles() OPEN WINDOW wobserva AT 14,2 WITH FORM "prfmwd002" ATTRIBUTE (BORDER,FORM LINE FIRST +1) INITIALIZE p_prtb14.* TO NULL SELECT a.* INTO p_prtb14.* FROM prtb00014 a WHERE a.num_oc = prtb08.num_oc INPUT BY NAME p_prtb14.observacion WITHOUT DEFAULTS CLOSE WINDOW wobserva END FUNCTION FUNCTION parciales() OPEN WINDOW wdparciales AT 14,2 WITH FORM "prfmwd003" ATTRIBUTE (BORDER,FORM LINE FIRST +1) FOR idx = 1 TO 10 LET prtb15[idx].num_oc = NULL LET prtb15[idx].cod_n = NULL LET prtb15[idx].cod_grupo = NULL LET prtb15[idx].cod_tipo = NULL LET prtb15[idx].cod_sec = NULL LET prtb15[idx].fecha = NULL LET prtb15[idx].cantidad = NULL END FOR LET prtb15[1].num_oc = prtb08.num_oc LET prtb15[1].cod_n = arr_prtb08[curr].cod_n LET prtb15[1].cod_grupo = arr_prtb08[curr].cod_grupo LET prtb15[1].cod_tipo = arr_prtb08[curr].cod_tipo LET prtb15[1].cod_sec = arr_prtb08[curr].cod_sec LET prtb15[1].fecha = today LET prtb15[1].cantidad = arr_prtb08[curr].cantidad INPUT ARRAY prtb15 WITHOUT DEFAULTS FROM sprtb15.* IF int_flag THEN LET int_flag = FALSE LET numero_msg = 2 CALL msg(numero_msg) GOTO salir END IF LET cuenta_p = ARR_COUNT() LABEL salir: CLOSE WINDOW wdparciales END FUNCTION FUNCTION codigoRepite() DEFINE ant_art RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, precio DEC(12,3) END RECORD LET ant_art.cod_n = arr_prtb08[ridx].cod_n LET ant_art.cod_grupo = arr_prtb08[ridx].cod_grupo LET ant_art.cod_tipo = arr_prtb08[ridx].cod_tipo LET ant_art.cod_sec = arr_prtb08[ridx].cod_sec LET ant_art.precio = arr_prtb08[ridx].precio FOR idx = 1 TO arr_count() IF idx != ridx THEN IF arr_prtb08[idx].cod_n = ant_art.cod_n AND arr_prtb08[idx].cod_grupo = ant_art.cod_grupo AND arr_prtb08[idx].cod_tipo = ant_art.cod_tipo AND arr_prtb08[idx].cod_sec = ant_art.cod_sec AND arr_prtb08[idx].precio = ant_art.precio THEN LET numero_msg = 21 CALL msg(numero_msg) LET bandera = 1 EXIT FOR END IF END IF END FOR END FUNCTION FUNCTION despiece() OPEN WINDOW wdespiece AT 5,3 WITH FORM "prfmwd004" ATTRIBUTE (BORDER,FORM LINE FIRST + 1,PROMPT LINE LAST) DISPLAY BY NAME descrip_esp DISPLAY BY NAME p_totales.unidad_med IF nuevo = "S" THEN 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 a.num_oc = tmpnumero AND a.secuencia = arr_prtb08[curr].fila AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec LET idx = 1 FOREACH busca_despiece INTO despiece[idx].* LET idx = idx + 1 END FOREACH ELSE DECLARE busca_despiece1 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 a.num_oc =prtb08.num_oc AND a.secuencia = arr_prtb08[curr].fila AND a.cod_n = arr_prtb08[curr].cod_n AND a.cod_grupo = arr_prtb08[curr].cod_grupo AND a.cod_tipo = arr_prtb08[curr].cod_tipo AND a.cod_sec = arr_prtb08[curr].cod_sec LET idx = 1 FOREACH busca_despiece1 INTO despiece[idx].* LET idx = idx + 1 END FOREACH END IF LET despiece[1].cod_n = arr_prtb08[curr].cod_n LET despiece[1].cod_grupo = arr_prtb08[curr].cod_grupo LET despiece[1].cod_tipo = arr_prtb08[curr].cod_tipo LET despiece[1].cod_sec = arr_prtb08[curr].cod_sec CALL set_count(idx-1) INPUT ARRAY despiece WITHOUT DEFAULTS FROM sdespiece.* BEFORE ROW LET curr1 = arr_curr() LET fila = scr_line() LET despiece[curr1].cod_n = arr_prtb08[curr].cod_n LET despiece[curr1].cod_grupo = arr_prtb08[curr].cod_grupo LET despiece[curr1].cod_tipo = arr_prtb08[curr].cod_tipo LET despiece[curr1].cod_sec = arr_prtb08[curr].cod_sec IF curr1 > 1 THEN IF despiece[curr1].etiqueta IS NULL THEN LET despiece[curr1].etiqueta = despiece[curr1-1].etiqueta END IF END IF DISPLAY despiece[curr1].etiqueta TO sdespiece[fila].etiqueta DISPLAY arr_prtb08[curr].cod_n TO sdespiece[fila].cod_n DISPLAY arr_prtb08[curr].cod_grupo TO sdespiece[fila].cod_grupo DISPLAY arr_prtb08[curr].cod_tipo TO sdespiece[fila].cod_tipo DISPLAY arr_prtb08[curr].cod_sec TO sdespiece[fila].cod_sec AFTER FIELD cantidad IF p_totales.unidad_med= "M2" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2) END IF IF p_totales.unidad_med= "M3" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * (despiece[curr1].lado_1 * despiece[curr1].lado_2 * despiece[curr1].lado_3) END IF IF p_totales.unidad_med= "ML" THEN LET despiece[curr1].medida = despiece[curr1].cantidad * despiece[curr1].lado_1 LET despiece[curr1].lado_2 = 0 END IF IF p_totales.unidad_med= "UD" OR p_totales.unidad_med= "GL" THEN LET despiece[curr1].medida = despiece[curr1].cantidad END IF DISPLAY despiece[curr1].medida TO sdespiece[fila].medida AFTER ROW IF despiece[curr1].medida IS NULL AND despiece[curr1].lado_1 IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD lado_1 END IF LET total_medida = 0 FOR idx = 1 TO arr_count() IF despiece[idx].medida IS NOT NULL THEN LET total_medida = total_medida + despiece[idx].medida END IF END FOR DISPLAY BY NAME total_medida AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) EXIT INPUT END IF LET total_medida = 0 FOR idx = 1 TO arr_count() IF despiece[idx].medida IS NOT NULL THEN LET total_medida = total_medida + despiece[idx].medida END IF END FOR DISPLAY BY NAME total_medida END INPUT IF int_flag THEN LET int_flag = FALSE RETURN END IF # CONTROL NUMERICO IF nuevo <> "S" THEN LET tmpnumero = prtb08.num_oc END IF DELETE FROM PRTB00022 WHERE num_oc = tmpnumero AND secuencia = arr_prtb08[curr].fila AND cod_n = arr_prtb08[curr].cod_n AND cod_grupo = arr_prtb08[curr].cod_grupo AND cod_tipo = arr_prtb08[curr].cod_tipo AND cod_sec = arr_prtb08[curr].cod_sec LET total_medida = 0 FOR idx = 1 TO arr_count() IF despiece[idx].medida IS NOT NULL THEN INSERT INTO PRTB00022 VALUES (despiece[idx].etiqueta,tmpnumero,arr_prtb08[curr].fila, arr_prtb08[curr].cod_n,arr_prtb08[curr].cod_grupo, arr_prtb08[curr].cod_tipo,arr_prtb08[curr].cod_sec, despiece[idx].lado_1,despiece[idx].lado_2, despiece[idx].lado_3,despiece[idx].cantidad, despiece[idx].medida,null,SUSER_SNAME(),GETDATE(),null,null) LET total_medida = total_medida + despiece[idx].medida END IF END FOR LET arr_prtb08[curr].cantidad_1 = total_medida CLOSE WINDOW wdespiece END FUNCTION FUNCTION controlact() # CONTROL AVANCES SELECT UNIQUE a.num_cheque FROM cctb00001 a WHERE a.num_cheque = prtb08.num_oc and tipo_doc = "AV" and a.num_doc = a.aplica_a and a.tipo_cliente = prtb08.tipo_cliente and a.sec_cliente = prtb08.sec_cliente and a.status_t is null IF STATUS <> NOTFOUND THEN LET cliente1 = "N" DISPLAY "TIENE AVANCE" END IF # CONTROL INVENTARIO SELECT UNIQUE a.conduce_no FROM iptb00006 a WHERE a.conduce_no = prtb08.num_oc AND cod_mov in (30,31,55) and a.status_t IS NULL IF STATUS <> NOTFOUND THEN LET conduce = "N" END IF END FUNCTION FUNCTION cventas(pventas) DEFINE pventas ui.combobox, kventas smallint, pdescrip CHAR(30) CALL pventas.clear() DECLARE bventas CURSOR FOR SELECT a.ventas,a.descripcion FROM vetb00061 a ORDER BY a.ventas FOREACH bventas INTO kventas,pdescrip CALL pventas.additem(kventas,pdescrip) END FOREACH END FUNCTION FUNCTION ccondicion(pcondicion) DEFINE pcondicion ui.combobox,kcondicion SMALLINT,kdescripcion CHAR(30) CALL pcondicion.clear() DECLARE busca_cond CURSOR FOR SELECT a.cond_pago,a.descrip FROM vetb00012 a WHERE a.status_t IS NULL ORDER BY a.descrip FOREACH busca_cond INTO kcondicion,kdescripcion CALL pcondicion.additem(kcondicion,kdescripcion) END FOREACH END FUNCTION FUNCTION ccodn() DEFINE arr_busca DYNAMIC ARRAY OF RECORD cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_Sec SMALLINT, descrip_esp CHAR(30), unidad_med CHAR(4) END RECORD OPEN WINDOW w1 WITH FORM "prfmwd013" CONSTRUCT BY NAME criterio ON a.descrip_esp LET selec = "SELECT a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,a.unidad_med FROM iptb00002 a ", " WHERE a.status_t IS NULL AND ",criterio CLIPPED, "ORDER BY a.descrip_esp " PREPARE comando FROM selec DECLARE busca_codn CURSOR FOR comando LET idx = 1 FOREACH busca_codn INTO arr_busca[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx) DISPLAY ARRAY arr_busca TO s_codigos.* AFTER DISPLAY IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE EXIT DISPLAY END IF LET idx = arr_curr() LET arr_prtb08[curr].cod_n = arr_busca[idx].cod_n LET arr_prtb08[curr].cod_grupo = arr_busca[idx].cod_grupo LET arr_prtb08[curr].cod_tipo = arr_busca[idx].cod_tipo LET arr_prtb08[curr].cod_sec = arr_busca[idx].cod_sec LET arr_prtb08[curr].descrip_esp = arr_busca[idx].descrip_esp LET arr_prtb08[curr].unidad_med = arr_busca[idx].unidad_med EXIT DISPLAY END DISPLAY CLOSE WINDOW w1 END FUNCTION