PROCEDURE CREATE_MONTH_CURSOR
*------------------------------
* tdFecha Fecha del mes de inicio
* tnPeriodos Cantidad de Períodos
* tcNameCursor Nombre del cursor a crear
* tcString_Prev Campos a la izquierda
* tcString_post Campos a la derecha
* formato "<concepto,c,40><rev,L><total,n,12,2>"
* "<total,n,12,2>
* Ejemplo ------------------------------------------------------------
* ldFecha = date()
* lnPeriodos = 12
* lcString_prev = "<concepto,c,40><rev,l>"
* lcString_post = "<total,n,12,2>
* lcCursor = Create_Month_Cursor(m.ldFecha,m.lnPeriodos,,m.lcString_prev,m.lcString_Post)
* select (m.lcCursor)
* -----------------------------------------
LPARAMETERS tdFecha,tnPeriodos,tcNameCursor,tcString_prev,tcString_post
TRY
LOCAL LOEX AS EXCEPTION
LOCAL ldFirst,i,;
lnLinPrev,;
lnLinPost,;
lnFields,;
lnLines_add
LOCAL ARRAY laFields(1,4)
lnLinPrev = 0
lnLinPost = 0
lnFields = 0
IF VARTYPE(m.tdFecha)#"D" OR EMPTY(m.tdFecha)
tdFecha = DATE()
ENDIF
IF VARTYPE(m.tnPeriodos)#"N" OR EMPTY(m.tnPeriodos)
tnPeriodos = 12
ENDIF
IF VARTYPE(m.tcNameCursor)#"C" OR EMPTY(m.tcNameCursor)
tcNameCursor = "cmc"+SYS(2015)
ENDIF
IF VARTYPE(m.tcString_prev)#"C"
tcString_Prev = ""
ENDIF
IF VARTYPE(m.tcString_post)#"C"
tcString_Post = ""
ENDIF
IF !EMPTY(m.tcString_prev)
lnLinPrev = ALINES(lalines,UPPER(m.tcString_prev),16,">")
lnFields = m.lnFields + m.lnLinPrev
DIMENSION laFields(m.lnFields,4)
FOR i = 1 TO m.lnLinPrev
lnCount = ALINES(laValues,CHRTRAN(laLines[i],"<>",""),1+4,CHR(44))
laFields[i,1] = laValues[1]
laFields[i,2] = laValues[2]
laFields[i,3] = IIF(m.lnCount>2,VAL(laValues[3]),0)
laFields[i,4] = IIF(m.lnCount>3,VAL(laValues[4]),0)
NEXT
ENDIF
IF !EMPTY(m.tcString_Post)
lnLinPost = ALINES(lalines,UPPER(m.tcString_post),16,">")
ENDIF
ldFirst = DATE(YEAR(m.tdFecha),MONTH(m.tdFecha),1)
lnFields = m.lnFields + m.tnPeriodos
DIMENSION laFields(m.lnFields,4)
FOR i = 1 TO m.tnPeriodos
laFields[m.i + m.lnLinPrev,1] = LEFT(CMONTH(m.ldFirst),3)+TRANSFORM(YEAR(m.ldFirst))
laFields[m.i + m.lnLinPrev,2] = "N"
laFields[m.i + m.lnLinPrev,3] = 12
laFields[m.i + m.lnLinPrev,4] = 2
ldFirst = GOMONTH(m.ldfirst,1)
NEXT
IF !EMPTY(m.tcString_post)
lnLinPost = ALINES(lalines,UPPER(m.tcString_post),16,">")
lnLines_add = m.lnFields
lnFields = m.lnFields + m.lnLinPost
DIMENSION laFields(m.lnFields,4)
FOR i = 1 TO m.lnLinPost
lnCount = ALINES(laValues,CHRTRAN(laLines[i],"<>",""),1+4,CHR(44))
laFields[i + m.lnLines_add,1] = laValues[1]
laFields[i + m.lnLines_add,2] = laValues[2]
laFields[i + m.lnLines_add,3] = IIF(m.lnCount>2,VAL(laValues[3]),0)
laFields[i + m.lnLines_add,4] = IIF(m.lnCount>3,VAL(laValues[4]),0)
NEXT
ENDIF
CREATE CURSOR (m.tcNameCursor) FROM ARRAY laFields
CATCH TO LOEX
LOEX.USERVALUE = PROGRAM()
* SHOWERROR(LOEX) && rutina que muestra el error
tcNameCursor = null
FINALLY
ENDTRY
RETURN m.tcNameCursor