{ ------------------------------------------------------------------------------------ PROGRAMA : VEPRRP051(607) OBJETIVO : VENTAS ANUALES PARA LA DGII(DIRECCION DE IMPUESTOS INTERNOS) PROGRAMADOR : JUAN F. SOTO FECHA REALIZACION : Enero 28, 2008 ------------------------------------------------------------------------------------- } SCHEMA decomarmol GLOBALS DEFINE encabezado RECORD codigo_id SMALLINT, rnc CHAR(11), periodo SMALLINT, cantidad_r SMALLINT, total CHAR(16) END RECORD, pcel,prow,p_res SMALLINT, archivo1 CHAR(200), documento,prnc,pcedula CHAR(11), tipo_trx CHAR(20), mess CHAR(50),numero_c,numero_c1,numero_c2 SMALLINT, responde char(3), periodo char(6) DEFINE detalle RECORD tipo_doc CHAR(2), ventas CHAR(30), tipo_cliente SMALLINT, rnc CHAR(11), tipo_id CHAR(1), codigodgii CHAR(11), comprobante INT, comprobante_m CHAR(19), fecha DATE, itbis CHAR(12), monto CHAR(12), cod_motivo SMALLINT, documento INT, aplica_a INT, nombre_cli CHAR(30), cod_ventas smallint, localidad SMALLINT, mes char(20), MONTO_ORIG DEC(12,2), TASA DEC(12,2), ano SMALLINT END RECORD, fecha1,fecha2 DATE, pmes SMALLINT, ptasa DEC(12,2) DEFINE pano,l,xi SMALLINT DEFINE fecha_2 CHAR(8), etiqueta1,cels CHAR(40), archivo,sysos CHAR(120), cnt,numero_msg SMALLINT , decide,idioma_office,fila_excel CHAR(1), rcol, usuarios,clave CHAR(50), p_companias RECORD LIKE companias.* CONSTANT filename = "dgi607" CONSTANT prog ="EXCEL" END GLOBALS MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL STARTLOG("VERP051.LOG") CONNECT to "decomarmol" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL veprrp051() END MAIN FUNCTION veprrp051() define codigo_m CHAR(20), ncf_m INT OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 ##### Abriendo y desplegando el formulario de captura de datos OPEN FORM vefmrp048 FROM "vefmrp051" DISPLAY FORM vefmrp048 CALL pantalla() DISPLAY "veprrp048" AT 4,3 DISPLAY "VENTAS PARA DGII ANUAL" AT 6,25 ###### Aceptando los valores para el rango de fecha LET prow = 12 INPUT BY NAME fecha1,fecha2,idioma_office,tipo_trx IF int_flag THEN ERROR "(2) OPERACION CANCELADA" LET int_flag = false RETURN END IF # SELECT MIN(a.fecha_inicio),MAX(a.fecha_corte) # INTO fecha1,fecha2 # FROM prdtable a # WHERE a.ano = pano LET pano = YEAR(fecha1) DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) #LET prog = "EXCEL" IF idioma_office = "E" THEN LET fila_excel = "F" ELSE LET fila_excel = "R" END IF { if TIPO_TRX = "ACTIVAS" THEN CALL ui.Interface.frontCall("standard","getenv", ["USDGII607"], [filename] ) DISPLAY BY NAME filename CALL ui.Interface.frontCall("standard","shellexec", [filename], [p_res] ) CALL chqDdeError(p_res,"shellexec "||filename) CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,filename], [p_res] ) CALL chqDdeError(p_res,"DDEConnect "||filename) CALL ui.Interface.refresh() ELSE CALL ui.Interface.frontCall("standard","getenv", ["USDGII608"], [filename] ) DISPLAY BY NAME filename CALL ui.Interface.frontCall("standard","shellexec", [filename], [p_res] ) CALL chqDdeError(p_res,"shellexec "||filename) CALL ui.Interface.frontCall("WINDDE","DDEConnect", [prog,filename], [p_res] ) CALL chqDdeError(p_res,"DDEConnect "||filename) CALL ui.Interface.refresh() END IF } IF tipo_trx = "ACTIVAS" THEN # SELECT itbi INTO pitbis FROM vetb00019 WHERE disponible = "S" DECLARE busca CURSOR FOR SELECT 'FT',e.descripcion,c.tipo_cliente,a.num_rnc,a.zona_postal,b.codigo_dgii,b.ncf,'0', CONVERT(CHAR(10),c.fecha_factura,103),c.monto_itbi,c.sub_total-c.monto_desc,'0',b.documento, b.documento ,a.nombre,d.ventas,c.sucid FROM vetb00004 a,vetb00061 d,vetb00002 c, vetb00072 b,vetb00060 e WHERE a.tipo_cliente = c.tipo_cliente and a.sec_cliente = c.sec_cliente and c.factura = b.documento AND c.factura IN (63690,63720,63826,63853) AND d.ventas = e.ventas AND c.tipo_cliente = d.tipo_cliente AND c.sucid = b.sucid AND b.tipo_doc = "FT" and c.ventas = d.ventas and c.fecha_factura BETWEEN fecha1 AND fecha2 AND c.status_t IS NULL AND c.tipo_factura="NCF" UNION SELECT c.tipo_doc,e.descripcion,c.tipo_cliente,a.num_rnc,a.zona_postal,b.codigo_dgii,b.ncf,'0', CONVERT(CHAR(10),c.fecha_orig,103),SUM(c.valor_cheque),SUM(c.valor-c.valor_cheque),'0',c.num_doc, c.aplica_a,a.nombre,d.ventas,c.localidad_aplica_a FROM vetb00004 a,vetb00072 b,cctb00001 c,vetb00061 d,vetb00060 e WHERE a.tipo_cliente = c.tipo_cliente and a.tipo_cliente = d.tipo_cliente and d.ventas = e.ventas and a.sec_cliente = c.sec_cliente and c.num_doc = b.documento AND c.localidad_aplica_a = b.sucid AND b.tipo_doc =c.tipo_doc and c.tipo_doc IN ("NC","ND") and c.fecha_orig between fecha1 and fecha2 AND c.status_t IS NULL GROUP BY c.tipo_doc,e.descripcion,c.tipo_cliente,a.num_rnc,a.zona_postal,b.codigo_dgii,b.ncf,c.fecha_orig,C.NUM_DOC,c.aplica_a,a.nombre,d.ventas, c.localidad_aplica_a LET numero_c1 = 0 SELECT COUNT(*) INTO numero_c1 FROM vetb00002 c, vetb00072 b WHERE c.factura = b.documento and b.tipo_doc in( "FT","FE") AND # b.sucid = c.sucid AND c.fecha_factura BETWEEN fecha1 AND fecha2 AND c.status_t IS NULL AND c.tipo_factura="NCF" LET numero_c2 = 0 SELECT COUNT(*) INTO numero_c2 FROM vetb00072 b,cctb00001 c,vetb00002 d WHERE c.num_doc = b.documento and b.tipo_doc in("NC","ND") and c.tipo_doc =b.tipo_Doc AND c.aplica_a = d.factura AND c.cod_cia = d.cod_cia AND d.fecha_factura between fecha1 and fecha2 and c.status_t is NULL AND d.tipo_factura="NCF" LET numero_c = numero_c1 + numero_c2 LET periodo = pano USING "&&&&",month(fecha1) USING "&&" DISPLAY "1",numero_c LET rcol = "C3" LET xi = 4 CALL pru_new_dde(p_companias.rnc,rcol,xi) DISPLAY "2",rcol LET rcol = "C3" LET xi = 5 CALL pru_new_dde(periodo,rcol,xi) {CANTIDAD REGISTORS} LET rcol = "C3" LET xi = 6 CALL pru_new_dde(numero_c,rcol,xi) DISPLAY "3",numero_c LET rcol = "C3" LET xi = 5 CALL pru_new_dde(periodo,rcol,xi) LET responde = fgl_winquestion("WARNING","Precione el boton de INICIO en el formulario para iniciar descarga informacion", "yes","yes|no","question",1) LET responde = UPSHIFT(responde) IF responde = "YES" then START REPORT reporte4 FOREACH busca INTO detalle.* LET DETALLE.ano = pano SELECT UNIQUE a.mes INTO pmes FROM prdtable a WHERE a.fecha_inicio <= detalle.fecha AND a.fecha_corte >= detalle.fecha AND a.ano = pano select descrip INTO detalle.mes FROM mestable where mes = pmes LET detalle.monto_orig = detalle.monto let PTASA = 1 SELECT UNIQUE a.mes INTO pmes FROM prdtable a WHERE a.fecha_inicio <= detalle.fecha AND a.fecha_corte >= detalle.fecha AND a.ano = pano SELECT a.tasa INTO ptasa FROM cgtb00084 a WHERE a.mes = pmes and a.ano = pano AND a.tipo_cliente = detalle.tipo_cliente AND a.ventas = detalle.cod_ventas IF ptasa IS NULL THEN LET ptasa = 1 end if LET detalle.monto = detalle.monto * ptasa LET detalle.itbis = detalle.itbis * ptasa LET detalle.tasa = ptasa IF detalle.monto <0 THEN LET detalle.monto = detalle.monto *-1 END IF IF detalle.itbis <0 THEN LET detalle.itbis = detalle.itbis *-1 END IF LET detalle.comprobante_m = null IF detalle.tipo_doc = "NC" OR detalle.tipo_Doc = "ND" THEN SELECT a.codigo_dgii,a.ncf INTO codigo_m,ncf_m FROM vetb00072 a WHERE a.tipo_doc IN ("FT","FE") and a.documento = detalle.aplica_a AND a.sucid = detalle.localidad LET detalle.comprobante_m = codigo_m CLIPPED,ncf_m USING "&&&&&&&&" END IF OUTPUT TO REPORT reporte4(detalle.*,pano) END FOREACH FINISH REPORT reporte4 END IF ELSE ########## DOCUMENTOS NULOS ##################################################3 DECLARE busca1 CURSOR FOR SELECT 'FT',e.descripcion,c.tipo_cliente,a.num_rnc,a.zona_postal,b.codigo_dgii,b.ncf,'0', CONVERT(CHAR(10),c.fecha_factura,103),c.monto_itbi,c.sub_total-c.monto_desc,'0',b.documento, b.documento ,a.nombre,d.ventas,c.sucid FROM vetb00004 a,vetb00061 d,vetb00002 c, vetb00072 b,vetb00060 e WHERE a.tipo_cliente = c.tipo_cliente and a.sec_cliente = c.sec_cliente and c.factura = b.documento AND d.ventas = e.ventas AND c.tipo_cliente = d.tipo_cliente AND c.sucid = b.sucid AND b.tipo_doc = "FT" and c.ventas = d.ventas and c.fecha_factura BETWEEN fecha1 AND fecha2 AND c.status_t IS NOT NULL AND c.tipo_factura="NCF" UNION SELECT c.tipo_doc,e.descripcion,c.tipo_cliente,a.num_rnc,a.zona_postal,b.codigo_dgii,b.ncf,'0', CONVERT(CHAR(10),c.fecha_orig,103),SUM(c.valor_cheque),SUM(c.valor-c.valor_cheque),'0',c.num_doc, c.aplica_a,a.nombre,d.ventas,c.localidad_aplica_a FROM vetb00004 a,vetb00072 b,cctb00001 c,vetb00061 d,vetb00060 e WHERE a.tipo_cliente = c.tipo_cliente and a.tipo_cliente = d.tipo_cliente and d.ventas = e.ventas and a.sec_cliente = c.sec_cliente and c.num_doc = b.documento AND c.localidad_aplica_a = b.sucid AND b.tipo_doc =c.tipo_doc and c.tipo_doc IN ("NC","ND") and c.fecha_orig between fecha1 and fecha2 AND c.status_t IS NOT null GROUP BY c.tipo_doc,e.descripcion,c.tipo_cliente,a.num_rnc,a.zona_postal,b.codigo_dgii,b.ncf,c.fecha_orig,C.NUM_DOC,c.aplica_a,a.nombre,d.ventas, c.localidad_aplica_a LET numero_c1 = 0 SELECT COUNT(*) INTO numero_c1 FROM vetb00002 c, vetb00072 b WHERE c.factura = b.documento and b.tipo_doc in( "FT","FE") AND #b.sucid = c.sucid AND c.fecha_factura BETWEEN fecha1 AND fecha2 AND c.status_t IS NOT NULL AND c.tipo_factura="NCF" LET numero_c2 = 0 SELECT COUNT(*) INTO numero_c2 FROM vetb00072 b,cctb00001 c,vetb00002 d WHERE c.num_doc = b.documento and b.tipo_doc in("NC","ND") and c.tipo_doc =b.tipo_Doc AND c.aplica_a = d.factura AND c.cod_cia = d.cod_cia AND d.fecha_factura between fecha1 and fecha2 and c.status_t is NOT NULL AND d.tipo_factura="NCF" IF numero_c2 IS NULL THEN LET numero_c2 = 0 END IF LET numero_c = numero_c1 + numero_c2 LET rcol = "C3" LET xi = 4 CALL pru_new_dde(p_companias.rnc,rcol,xi) LET rcol = "C3" LET xi = 5 CALL pru_new_dde(pano,rcol,xi) {CANTIDAD REGISTORS} LET rcol = "C3" LET xi = 6 CALL pru_new_dde(numero_c,rcol,xi) LET responde = fgl_winquestion("WARNING","Precione el boton de INICIO en el formulario para iniciar descarga informacion", "yes","yes|no","question",1) LET responde = UPSHIFT(responde) IF responde = "YES" then START REPORT reporte41 FOREACH busca1 INTO detalle.* IF detalle.tipo_doc = "NC" OR detalle.tipo_Doc = "ND" THEN SELECT a.codigo_dgii,a.ncf INTO codigo_m,ncf_m FROM vetb00072 a WHERE a.tipo_doc IN ("FT","FE") and a.documento = detalle.aplica_a AND a.sucid = detalle.localidad LET detalle.comprobante_m = codigo_m CLIPPED,ncf_m USING "&&&&&&&&" END IF OUTPUT TO REPORT reporte41(detalle.*,pano) END FOREACH FINISH REPORT reporte41 END IF END IF END FUNCTION REPORT reporte4(x,xano) DEFINE x RECORD tipo_doc CHAR(2), ventas char(30), tipo_cliente SMALLINT, rnc CHAR(11), tipo_id CHAR(1), codigodgii CHAR(11), comprobante INT, comprobante_m CHAR(19), fecha DATE, itbis CHAR(12), monto CHAR(12), cod_motivo SMALLINT, documento INT, aplica_a INT, nombre_cli CHAR(30), cod_ventas smallint, localidad SMALLINT, mes char(20), MONTO_ORIG DEC(12,2), TASA DEC(12,2), ano SMALLINT END RECORD,xano SMALLINT, strfiscal CHAR(19),chfecha CHAR(8), total_monto DEC(12,2) OUTPUT PAGE LENGTH 3000 TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 0 order by x.tipo_ID FORMAT first page header if TOTAL_MONTO is null then let TOTAL_MONTO = 0 END IF ON EVERY ROW IF x.rnc = '0 ' THEN let x.rnc = ' ' end IF LET rcol = "C2" LET xi = prow CALL pru_new_dde(x.rnc,rcol,xi) LET rcol = "C3" LET xi = prow CALL pru_new_dde(x.tipo_id,rcol,xi) LET strfiscal = x.codigodgii CLIPPED,x.comprobante USING "&&&&&&&&" LET rcol = "C4" LET xi = prow CALL pru_new_dde(strfiscal,rcol,xi) LET rcol = "C5" LET xi = prow CALL pru_new_dde(x.comprobante_m,rcol,xi) LET chfecha = x.fecha USING "yyyymmdd" LET rcol = "C6" LET xi = prow CALL pru_new_dde(chfecha,rcol,xi) LET rcol = "C7" LET xi = prow CALL pru_new_dde(x.itbis,rcol,xi) LET rcol = "C8" LET xi = prow CALL pru_new_dde(x.monto,rcol,xi) LET prow = prow + 1 ON LAST ROW LET rcol = "C3" LET xi = 7 CALL pru_new_dde(SUM(x.monto),rcol,xi) END REPORT REPORT reporte41(x,xano) DEFINE x RECORD tipo_doc CHAR(2), ventas char(30), tipo_cliente SMALLINT, rnc CHAR(11), tipo_id CHAR(1), codigodgii CHAR(11), comprobante INT, comprobante_m CHAR(19), fecha DATE, itbis CHAR(12), monto CHAR(12), cod_motivo SMALLINT, documento INT, aplica_a INT, nombre_cli CHAR(30), cod_ventas smallint, localidad smallint, mes char(20), MONTO_ORIG DEC(12,2), TASA DEC(12,2), ano SMALLINT END RECORD, xano SMALLINT, strfiscal CHAR(19),chfecha CHAR(8) OUTPUT PAGE LENGTH 3000 TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 0 ORDER BY x.tipo_doc FORMAT # FIRST PAGE HEADER # PRINT "608101521262 ",pano USING "<<<<",COUNT(*) USING "&&&&&&&&&&&&",SUM(x.monto) USING "&&&&&&&&&&&&&.&&" ON EVERY ROW { PRINT x.rnc,x.tipo_id,x.codigodgii,x.comprobante using "&&&&&&&&"," ",x.fecha USING "yyyymmdd", x.itbis USING "&&&&&&&&&&&&",x.monto USING "&&&&&&&&&.&&",x.cod_motivo USING "&&" PRINT x.rnc,"|",x.tipo_id,"|",x.codigodgii,x.comprobante using "&&&&&&&&",X.NOMBRE_CLI,"|"," ","|",x.fecha USING "yyyymmdd","|", x.itbis USING "&&&&&&&&&&&&","|",x.monto USING "&&&&&&&&&.&&","|",x.cod_motivo USING "&&","|",x.documento,"|",X.MES } IF x.rnc = '0 ' THEN let x.rnc = ' ' end IF LET rcol = "C2" LET xi = prow CALL pru_new_dde(x.rnc,rcol,xi) LET rcol = "C3" LET xi = prow CALL pru_new_dde(x.tipo_id,rcol,xi) LET strfiscal = x.codigodgii CLIPPED,x.comprobante USING "&&&&&&&&" LET rcol = "C4" LET xi = prow CALL pru_new_dde(strfiscal,rcol,xi) LET rcol = "C5" LET xi = prow CALL pru_new_dde(x.comprobante_m,rcol,xi) LET chfecha = x.fecha USING "yyyymmdd" LET rcol = "C6" LET xi = prow CALL pru_new_dde(chfecha,rcol,xi) LET rcol = "C7" LET xi = prow CALL pru_new_dde(x.itbis,rcol,xi) LET rcol = "C8" LET xi = prow CALL pru_new_dde(x.monto,rcol,xi) LET prow = prow + 1 {AFTER group OF x.codigodgii SKIP 1 LINE PRINT x.codigodgii,"==> ",GROUP SUM(x.monto) USING "###,###,###.##"} END REPORT FUNCTION pantalla() DEFINE fecha CHAR(8), hora char(5) SELECT * INTO p_companias.* FROM companias LET l = (80 - LENGTH(p_companias.nombre CLIPPED)) / 2 LET fecha = today USING "dd/mm/yy" LET hora = time DISPLAY p_companias.nombre CLIPPED AT 4,l ATTRIBUTE (REVERSE,YELLOW) DISPLAY fecha AT 4,70 ATTRIBUTE (YELLOW) DISPLAY "Sistema de Contabilidad General" AT 5,24 DISPLAY hora AT 6,73 ATTRIBUTE(YELLOW) CALL fgl_drawbox(5,79,3,1) CALL fgl_drawbox(1,79,22,1) END FUNCTION FUNCTION pru_new_dde(xval,xcol,i) DEFINE celda,rval,xval,xcol STRING DEFINE i INTEGER LET celda = fila_excel,i USING "<<<<&",xcol CLIPPED LET rval = xval #CALL fgl_winmessage("PROGRAMA",prog,"stop") #CALL fgl_winmessage("FILE",filename,"stop") #CALL fgl_winmessage("CELDA",celda,"stop") #CALL fgl_winmessage("rVAL",rval,"stop") #CALL fgl_winmessage("P_RES",p_res,"stop") CALL ui.Interface.frontCall("WINDDE","DDEPoke", [prog,filename,celda,rval], [p_res] ) CALL chqDdeError(p_res,"DDEPoke "||celda) { MESSAGE "Salvando la planilla ",file CLIPPED," !" CALL ui.Interface.refresh() LET p_cmd="[save()]" CALL ui.Interface.frontCall("WINDDE","DDEExecute", [prog,file,p_cmd], [p_res] ) IF p_res THEN CALL fgl_winmessage("Planilla salvada", "Nombre = "||file, "information") ELSE CALL chqDdeError(p_res,"DDEExecute save") END IF CAL ui.Interface.frontCall("WINDDE","DDEFinish", [prog,file], [p_res] ) CALL chqDdeError(p_res,"DDEFinish") CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] ) CALL chqDdeError(p_res,"DDEFinishAll") } END FUNCTION FUNCTION chqDdeError(p_res,p_msg) DEFINE p_res INTEGER, p_msg STRING, m_err STRING, m_log STRING IF p_res THEN RETURN END IF CALL ui.Interface.frontCall("WINDDE","DDEError",[],[m_err]) CALL ui.Interface.frontCall("WINDDE","DDEFinishAll", [], [p_res] ) LET m_log="DDE Error: ",m_err CLIPPED," (",p_msg,")" # CALL errorlog(m_log) LET m_log="Se ha producido un Error en '",p_msg CLIPPED,"'. Para mas detalle revise el LOG de errores." CALL fgl_winmessage("DDE Error", m_log, "stop") EXIT PROGRAM END FUNCTION