Gracias de nuevo Daniel. Aquí te pongo todo un prg de los que utilizo con varias funciones y que en las versiones 2.x me compilaba todo bien. Seguro que encuentras algún fallo de algo que ahora no es compatible o tengo que cambiar la síntaxis.
Code: Select all
/* ---------------------------------------------------------------------------- */
Procedure Apuntes(nOp)
Local nNum, nImp
SELEC APUNTES
nNum := LASTREC() + 1
DEFINE WINDOW APUNTES AT 274 , 382 WIDTH 775 HEIGHT 200 TITLE "Libreta - Entrada de Apuntes" ICON 'ESCANDA' ;
MODAL NOSIZE
ON KEY ESCAPE OF APUNTES ACTION APUNTES.Release
ON KEY F1 OF APUNTES ACTION AYUDA(31)
nImp := 0
DEFINE LABEL Label_1
ROW 20
COL 20
WIDTH 60
HEIGHT 20
VALUE "Apunte Nº:"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
END LABEL
DEFINE TEXTBOX APUNTES_NUMERO
ROW 10
COL 90
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONENTER Nil
HELPID Nil
TABSTOP .T.
VISIBLE .T.
READONLY .T.
RIGHTALIGN .F.
BACKCOLOR Nil
FONTCOLOR Nil
INPUTMASK "999,999"
FORMAT Nil
VALUE nNum
NUMERIC .T.
END TEXTBOX
DEFINE LABEL Label_2
ROW 20
COL 290
WIDTH 50
HEIGHT 20
VALUE "Cliente :"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
END LABEL
DEFINE COMBOBOX APUNTES_CLIENTE
ROW 10
COL 350
WIDTH 390
HEIGHT 240
// VALUE 0
ITEMSOURCE CLIENTES->NOMBRE
VALUESOURCE CLIENTES->NOMBRE
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
HELPID Nil
TABSTOP .T.
VISIBLE .T.
SORT .F.
ONENTER Nil
ONDISPLAYCHANGE Nil
DISPLAYEDIT .F.
END COMBOBOX
DEFINE LABEL Label_3
ROW 70
COL 40
WIDTH 40
HEIGHT 20
VALUE "Fecha :"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
END LABEL
DEFINE DATEPICKER APUNTES_FECHA
ROW 90
COL 20
WIDTH 110
HEIGHT 30
VALUE CTOD(" / / ")
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONENTER Nil
HELPID Nil
TABSTOP .T.
VISIBLE .T.
SHOWNONE .F.
UPDOWN .F.
RIGHTALIGN .F.
END DATEPICKER
DEFINE LABEL Label_4
ROW 70
COL 270
WIDTH 60
HEIGHT 20
VALUE "Concepto :"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
END LABEL
DEFINE TEXTBOX APUNTES_CONCEPTO
ROW 90
COL 140
WIDTH 450
HEIGHT 30
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONENTER Nil
HELPID Nil
TABSTOP .T.
VISIBLE .T.
READONLY .F.
RIGHTALIGN .F.
BACKCOLOR Nil
FONTCOLOR Nil
MAXLENGTH 40
//INPUTMASK ""
FORMAT Nil
VALUE ""
END TEXTBOX
DEFINE LABEL Label_5
ROW 70
COL 640
WIDTH 50
HEIGHT 20
VALUE "Importe :"
FONTNAME "Arial"
FONTSIZE 9
END LABEL
DEFINE TEXTBOX APUNTES_IMPORTE
ROW 90
COL 610
WIDTH 130
HEIGHT 30
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .F.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONENTER Nil
HELPID Nil
TABSTOP .T.
VISIBLE .T.
READONLY .F.
RIGHTALIGN .F.
BACKCOLOR Nil
FONTCOLOR Nil
INPUTMASK "9,999,999.99"
FORMAT Nil
VALUE nImp
NUMERIC .T.
END TEXTBOX
DEFINE BUTTON Button_1
ROW 130
COL 580
WIDTH 64
HEIGHT 25
ACTION ( AgregaApunte (APUNTES.APUNTES_NUMERO.value,APUNTES.APUNTES_FECHA.value,APUNTES.APUNTES_CLIENTE.value , APUNTES.APUNTES_CONCEPTO.value,APUNTES.APUNTES_IMPORTE.value) ,APUNTES.APUNTES_CONCEPTO.Setfocus )
PICTURE "anadir"
TOOLTIP "Añadir el apunte actual"
END BUTTON
DEFINE BUTTON Button_2
ROW 130
COL 680
WIDTH 64
HEIGHT 25
ACTION ThisWindow.Release
PICTURE "salir"
TOOLTIP "Salir y regresar al menú principal"
END BUTTON
END WINDOW
APUNTES.Center
APUNTES.Activate
ACTUALIZA()
*------------------------------------------------------------------------------*
*------ Grabamos en la base de datos el nuevo Cliente -------*
PROCEDURE AgregaApunte (nNum, dFec , cCli , cCon ,nImp )
*------------------------------------------------------------------------------*
Local lHay , nRec
IF cCon == ""
MSGINFO("No ha introducido ningún Concepto"+CHR(13)+"Por favor vuelva a intentarlo","Añadir Apuntes")
Retu Nil
ENDIF
SELEC CLIENTES
SET INDEX TO DATEN\CLINOM
IF EMPTY(cCli) .OR. DBSEEK(upper(alltrim(cCli))) == .F.
MsgInfo("Ese Cliente No Existe","Añadir Apunte")
SELEC APUNTES
MSGINFO(cCli,"Nombre del Cliente")
Retu .F.
Endif
If flock()
cNumero := ALLTRIM(STR(CLIENTES->NUMERO))
nRec := RECNO()
SELEC CUENTAS
SET INDEX TO DATEN\CUENCLI
DBGOTOP()
lHay := .F.
WHILE !EOF()
IF VAL(CUENTAS->CLIENTE) == CLIENTES->NUMERO
lHay := .T.
EXIT
ENDIF
DBSKIP()
ENDDO
IF lHay == .F.
SET INDEX TO DATEN\CUENTA1
//MSGINFO("Cliente SIN Extracto","Nombre del Cliente")
DBGOBOTTOM()
// cCuenta := VAL(CUENTAS->CUENTA)+1
cCuenta := LASTREC()+1
DBAPPEND()
CUENTAS->CUENTA := ALLTRIM(STR(cCuenta))
CUENTAS->CLIENTE := cNumero
SET INDEX TO DATEN\CUENCLI
REINDEX
ENDIF
SET INDEX TO DATEN\CUENTA1
REINDEX
SELEC APUNTES
Append Blank
APUNTES->FECHA := dFec
APUNTES->NUMCLIENT := CLIENTES->NUMERO
APUNTES->CONCEPTO := cCon
APUNTES->IMPORTE := nImp
REINDEX
SELEC CLIENTES
DBSEEK(upper(alltrim(cCli)))
CLIENTES->SALDO += nImp
SET INDEX TO DATEN\CLINUM
MSGINFO("Apunte Grabado.","Grabar Nuevo Apunte")
APUNTESLEE(nNum, dFec , cCli , cCon ,nImp)
SELEC APUNTES
Retu
Else
MsgStop ('Operacion Cancelada: El Archivo esta siendo actualizado por otro usuario. Reintente mas tarde')
Retu .F.
EndIf
Retu
*------------------------------------------------------------------------------*
PROCEDURE OjearApuntes() // Browse de la base de datos de Apuntes
*------------------------------------------------------------------------------*
Local nSaldo :=0
SELEC APUNTES
SET INDEX TO DATEN\APUNFEC
DBGOTOP()
WHILE .NOT. EOF()
nSaldo += APUNTES->IMPORTE
DBSKIP()
ENDDO
DBGOTOP()
DEFINE WINDOW BROWAPUNTES AT 182 , 307 ;
WIDTH 784 HEIGHT 485 ;
TITLE "Gestión de la Base de Datos de Apuntes" ;
ICON 'ESCANDA' ;
MODAL NOSIZE
ON KEY F1 OF BROWAPUNTES ACTION AYUDA(32)
DEFINE BROWSE Browse_1
ROW 20
COL 10
WIDTH 760
HEIGHT 390
VALUE 0
WIDTHS {50,75,200,300,100}
HEADERS { 'Nº Apt.','Fecha','Cliente','Concepto','Importe' }
WORKAREA APUNTES
FIELDS {'RECNO()','APUNTES->FECHA','PONNOMBRE(APUNTES->NUMCLIENT)','APUNTES->CONCEPTO','APUNTES->IMPORTE'}
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE NIL
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .t.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONDBLCLICK Nil
ALLOWEDIT .T.
ALLOWAPPEND .F.
ONHEADCLICK Nil
ALLOWDELETE .F.
HELPID Nil
VALID Nil
VALIDMESSAGES Nil
LOCK .T.
VSCROLLBAR .T.
FONTCOLOR Nil
IMAGE Nil
JUSTIFY { BROWSE_JTFY_CENTER,BROWSE_JTFY_CENTER, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT,BROWSE_JTFY_RIGHT }
NOLINES .F.
READONLYFIELDS {.T.,.F.,.T.,.F.,.F.}
INPLACEEDIT .F.
VALUE APUNTES->(RECNO())
DYNAMICBACKCOLOR { { || if ( recno() <> -10 , RGB (255,255,0) , RGB (0,255,0) ) } , { || if ( recno() <> -10 , RGB (70,255,13) , RGB (0,255,0) ) } , { || if ( recno() <> -10 , RGB (4,255,255) , RGB (255,0,0) ) } , { || if ( recno() <> -10 , RGB (255,136,17) , RGB (0,255,0) ) } , }
INPUTMASK { '', '' , '' ,'', '999,999,999.99 €' }
END BROWSE
DEFINE LABEL ETIQUETASALDO
ROW 420
COL 50
WIDTH 250
HEIGHT 20
VALUE "El saldo actual de todos los clientes es:"
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
END LABEL
DEFINE TEXTBOX SALDO
ROW 420
COL 300
WIDTH 120
HEIGHT 24
FONTNAME "Arial"
FONTSIZE 9
TOOLTIP ""
ONCHANGE Nil
ONGOTFOCUS Nil
ONLOSTFOCUS Nil
FONTBOLD .T.
FONTITALIC .F.
FONTUNDERLINE .F.
FONTSTRIKEOUT .F.
ONENTER Nil
HELPID Nil
TABSTOP .T.
VISIBLE .T.
READONLY .T.
RIGHTALIGN .F.
BACKCOLOR Nil
FONTCOLOR Nil
INPUTMASK "9,999,999.99 €"
FORMAT Nil
VALUE nSaldo
NUMERIC .T.
END TEXTBOX
DEFINE BUTTON Button_4
ROW 420
COL 430
WIDTH 64
HEIGHT 25
ACTION ((Thiswindow.Release),(OjearApuntes()))
PICTURE "actualizar"
TOOLTIP "Si modifica algún importe, pulse aquí para actualizar los totales."
END BUTTON
DEFINE BUTTON Button_5
ROW 420
COL 520
WIDTH 64
HEIGHT 25
PICTURE "eliminar"
ACTION If ( BrowApuntes.Browse_1.Value <> 0, (BorrarApunte(BrowApuntes.Browse_1.Value) , (Thiswindow.Release),(OjearApuntes()) ) , MsgInfo("Seleccione un apunte de la lista") )
TOOLTIP "Elimina el apunte que hay seleccionado."
END BUTTON
SELEC CLIENTES
SET ORDER TO 2
DEFINE BUTTON Button_3
ROW 420
COL 650
WIDTH 64
HEIGHT 25
ACTION Thiswindow.Release
PICTURE "salir"
TOOLTIP "Cierra esta ventana y regresa al Menú Principal"
END BUTTON
END WINDOW
BrowAPUNTES.Center()
BrowAPUNTES.Activate()
ACTUALIZA()
Retu Nil
/* --------------------------------------------------- */
FUNCTION PONNOMBRE(nCliente)
Local cNomb
SELEC CLIENTES
SET INDEX TO DATEN\CLINUM
DBSEEK(nCliente)
cNomb := CLIENTES->NOMBRE
SELEC APUNTES
Retu cNomb
//*****************************************************************************************************
FUNCTION ACTUALIZA()
//*****************************************************************************************************
Local nCli, nSalClien
DBCLOSEALL()
AbrirBasesDeDatos()
RegeneraExtractos()
SELEC CLIENTES
SET INDEX TO DATEN\CLINUM
DBGOTOP()
WHILE !EOF()
CLIENTES->SALDO := 0
DBSKIP()
ENDDO
DBGOTOP()
SELEC APUNTES
SET INDEX TO DATEN\APUNCLI
DBGOTOP()
WHILE .NOT. EOF()
nCli := APUNTES->NUMCLIENT
nSalClien := 0
WHILE APUNTES->NUMCLIENT == nCli
nSalClien += APUNTES->IMPORTE
DBSKIP()
ENDDO
SELEC CLIENTES
DBSEEK(nCli)
CLIENTES->SALDO := nSalClien
SELEC APUNTES
ENDDO
Retu Nil
//************************************
FUNCTION BorrarApunte(nReg)
SELEC APUNTES
DBGOTO(nReg)
If MsgYesNo ( 'Esta Seguro de Eliminar el Apunte Nº: '+ALLTRIM(STR(RECNO()))+CHR(13);
+ "Del Cliente: "+PONNOMBRE(APUNTES->NUMCLIENT)+CHR(13)+"Concepto: "+ALLTRIM(APUNTES->CONCEPTO)+CHR(13)+"De Importe de: " + ALLTRIM(STR(APUNTES->IMPORTE));
+" €" , 'Eliminar Apuntes' )
DBDELETE()
PACK
REINDEX
MsgInfo("Ha sido borrado el apunte Nº " + ALLTRIM(STR(nReg)),"Borrado de Apuntes" )
ENDIF
Retu NIl
FUNCTION APUNTESLEE(nNum, dFec , cCli , cCon ,nImp, nReg)
APUNTES.APUNTES_NUMERO.value := nNum+1
APUNTES.APUNTES_FECHA.value := dFec
APUNTES.APUNTES_CLIENTE.Refresh
LOCATE FOR CLIENTES->NOMBRE == cCli
APUNTES.APUNTES_CLIENTE.value := RECNO()
APUNTES.APUNTES_CONCEPTO.value := SPACE(40)
APUNTES.APUNTES_IMPORTE.value := 0
Return Nil
Agradecido.
Angel.