Mostra o que pode ser feito com FOR/EACH, sem precisar de macro, e facilita muito.
Eu tinha feito assim:
Código: Selecionar todos
IF Len( mlcLicList ) > 0
@ Row() + 1, 1 SAY Pad( "Lic.01", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 1, LIC_DATA ]
IF AddMonth( mlcLicList[ 1, LIC_DATA ], mlcLicList[ 1, LIC_VALIDADE ] ) - mlcLicList[ 1, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 1, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 1
@ Row() + 1, 1 SAY Pad( "Lic.02", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 2, LIC_DATA ]
IF AddMonth( mlcLicList[ 2, LIC_DATA ], mlcLicList[ 2, LIC_VALIDADE ] ) - mlcLicList[ 2, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 2, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 2
@ Row() + 1, 1 SAY Pad( "Lic.03", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 3, LIC_DATA ]
IF AddMonth( mlcLicList[ 3, LIC_DATA ], mlcLicList[ 3, LIC_VALIDADE ]) - mlcLicList[ 3, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 3, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 3
@ Row() + 1, 1 SAY Pad( "Lic.04", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 4, LIC_DATA ]
IF AddMonth( mlcLicList[ 4, LIC_DATA ], mlcLicList[ 4, LIC_VALIDADE ] ) - mlcLicList[ 4, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 4, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 4
@ Row() + 1, 1 SAY Pad( "Lic.05", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 5, LIC_DATA ]
IF AddMonth( mlcLicList[ 5, LIC_DATA ], mlcLicList[ 5, LIC_VALIDADE ] ) - mlcLicList[ 5, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 5, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 5
@ Row() + 1, 1 SAY Pad( "Lic.06", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 6, LIC_DATA ]
IF AddMonth( mlcLicList[ 6, LIC_DATA ], mlcLicList[ 6, LIC_VALIDADE ] ) - mlcLicList[ 6, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 6, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 6
@ Row() + 1, 1 SAY Pad( "Lic.07", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 7, LIC_DATA ]
IF AddMonth( mlcLicList[ 7, LIC_DATA ], mlcLicList[ 7, LIC_VALIDADE ] ) - mlcLicList[ 7, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 7, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 7
@ Row() + 1, 1 SAY Pad( "Lic.08", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 8, LIC_DATA ]
IF AddMonth( mlcLicList[ 8, LIC_DATA ], mlcLicList[ 8, LIC_VALIDADE ] ) - mlcLicList[ 8, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 8, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 8
@ Row() + 1, 1 SAY Pad( "Lic.09", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 9, LIC_DATA ]
IF AddMonth( mlcLicList[ 9, LIC_DATA ], mlcLicList[ 9, LIC_VALIDADE ] ) - mlcLicList[ 9, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 9, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 9
@ Row() + 1, 1 SAY Pad( "Lic.10", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 10, LIC_DATA ]
IF AddMonth( mlcLicList[ 10, LIC_DATA ], mlcLicList[ 10, LIC_VALIDADE ] ) - mlcLicList[ 10, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 10, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 10
@ Row() + 1, 1 SAY Pad( "Lic.11", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 11, LIC_DATA ]
IF AddMonth( mlcLicList[ 11, LIC_DATA ], mlcLicList[ 11, LIC_VALIDADE ] ) - mlcLicList[ 11, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 11, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
IF Len( mlcLicList ) > 11
@ Row() + 1, 1 SAY Pad( "Lic.12", LIC_TAMANHODESC, "." ) + ".:" GET mlcLicList[ 12, LIC_DATA ]
IF AddMonth( mlcLicList[ 12, LIC_DATA ], mlcLicList[ 12, LIC_VALIDADE ] ) - mlcLicList[ 12, LIC_PRAZO ] < Date()
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 40 ) COLOR SetColorAlerta()
ENDIF
Encontra( AUX_LICTIP + mlcLicList[ 12, LIC_CODIGO ], "jptabel", "numlan" )
@ Row(), 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
ENDIF
Código: Selecionar todos
FOR EACH oLicenca IN mlcLicList
IF Val( oLicenca[ LIC_CODIGO ] ) != 0
Encontra( AUX_LICTIP + oLicenca[ LIC_CODIGO ], "jptabel", "numlan" )
@ Row() + 1, 1 SAY Pad( Trim( jptabel->axDescri ), LIC_TAMANHODESC, "." )
@ Row(), Col() SAY ":" GET oLicenca[ LIC_DATA ] VALID oLicenca[ LIC_DATA ] <= Date()
@ Row(), Col() + 2 SAY Str( oLicenca[ LIC_VALIDADE ], 3 ) + "m"
@ Row(), Col() + 2 SAY Dtoc( AddMonth( oLicenca[ LIC_DATA ], oLicenca[ LIC_VALIDADE ] ) )
@ Row(), Col() + 2 SAY Str( oLicenca[ LIC_PRAZO ], 3 ) + "d"
IF AddMonth( oLicenca[ LIC_DATA ], oLicenca[ LIC_VALIDADE ] ) - oLicenca[ LIC_PRAZO ] < Date() ;
.OR. ( oLicenca[ LIC_DATA ] > Date() .AND. oLicenca[ LIC_DATA ] - oLicenca[ LIC_PRAZO ] < Date() )
@ Row(), Col() + 2 SAY Padc( "VENCIDA", 20 ) COLOR SetColorAlerta()
ELSEIF oLicenca[ LIC_DATA ] > Date()
@ Row(), Col() + 2 SAY Padc( "DATA ERRADA", 20 ) COLOR SetColorAlerta()
ENDIF
ENDIF
NEXT
Agora tem texto, data, meses, data vencto, dias pra aviso, pra cada um dos ítens da lista
Pois é.... dobrou a quantidade de informação, e ficou mais simples que antes, graças ao uso do FOR/EACH


