FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Numeracion consecutiva de codigo (SOLUCIONADO)
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 03:20 PM

Amigos del foro,

Estoy tratando de crear un codigo que me genere numeracion automatica el registro nuevo siguiente, es decir, cada vez que ingrese un nuevo registro, asigne un nuevo numero de codigo en forma consecutiva.

Aca el codigo que estoy utilizando

cCODANT := BANCO->BCO_CODIGO

    @ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10 ;
    VALID (CODBCO := StrZero( Val( CODBCO), 12 ), CODBCO: = cCODANT+1, oCodigo:Refresh(), .T. )

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO
    NREG:=BANCO->(RECNO())

    CODBCO := SPACE(12)
    NOMBCO := SPACE(30)
    CTABCO := SPACE(30)

ELSE

    NREG:=BANCO->(RECNO())
    CODBCO := BANCO->BCO_CODIGO
    NOMBCO := BANCO->BCO_DESCRI
    CTABCO := BANCO->BCO_CUENTA
ENDIF

RETURN (.T.)

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Numeracion consecutiva de codigo
Posted: Tue Feb 15, 2011 05:13 PM

Hola
Cuando estes en la opci贸n de Altas, busca primero el 煤ltimo c贸digo que tienes
BCO->(dbGoBottom())-----> ir al final de la tabla
CODBCO := VAL(BCO->CODBCO) +1 ---------> tomar el 煤ltimo c贸digo y sumarle uno
CODBCO := StrZero(VAl(CODBCO),12)----> Si ademas quieres ponerlo con todos los ceros

y despu茅s

@ 1,1 GET oCodigo VAR CODBCO OF oDlg SIZE 40, 10 ;
VALID (CODBCO := StrZero( Val( CODBCO), 12 ), CODBCO: = cCODANT+1, oCodigo:Refresh(), .T. )

la lectura del get corespondiente

Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo
Posted: Tue Feb 15, 2011 05:22 PM

Pedro, siguiendo tu sugerencia deberia quedar asi,.

STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO
    NREG:=BANCO->(RECNO())
    BANCO->(DBGOBOTTOM()) //-----> ir al final de la tabla
    CODBCO := VAL(BANCO->CODBCO) +1

    CODBCO := SPACE (12)
    NOMBCO := SPACE(30)
    CTABCO := SPACE(30)

ELSE

    NREG:=BANCO->(RECNO())
    CODBCO := BANCO->BCO_CODIGO
    NOMBCO := BANCO->BCO_DESCRI
    CTABCO := BANCO->BCO_CUENTA
ENDIF

RETURN (.T.)

Solo que me arroja error con CODBCO := VAL(BANCO->CODBCO) +1 al decir que variable no existe

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Numeracion consecutiva de codigo
Posted: Tue Feb 15, 2011 05:34 PM
Disculpa, puse CODBCO, que es tu variable, para que tu pusieras ah铆 el nombre del campo, que veo que es BCO_CODIGO
M谩s o menos as铆
Code (fw): Select all Collapse
STATIC FUNCTION BCONUEVO(TNUEVO)

IF TNUEVO
NREG:=BANCO->(RECNO())
BANCO->(DBGOBOTTOM()) //-----> ir al final de la tabla
CODBCO := VAL(BANCO->BCO_CODIGO) +1
CODBCO := StrZero(CODBCO,12)
NOMBCO := SPACE(30)
CTABCO := SPACE(30)

ELSE

NREG:=BANCO->(RECNO())
CODBCO := BANCO->BCO_CODIGO
NOMBCO := BANCO->BCO_DESCRI
CTABCO := BANCO->BCO_CUENTA
ENDIF

RETURN (.T.)
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo
Posted: Tue Feb 15, 2011 05:39 PM

Pedro,

Excelente tu aporte. De esa manera funciona..ahora... todavia muestra el cursos en el codigo cuando este deberia estar en NOMBCO ya que CODBCO es llenado en forma automatica al dar de Alta....como posiciono el cursor en el siguiente campo?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Numeracion consecutiva de codigo
Posted: Tue Feb 15, 2011 05:46 PM
El que el cursor se quede en el campo es porque espera la validaci贸n del usuario, es decir el enter que lo valide, si no deseas que el usuario valide el c贸digo que t煤 ya le das, creo que debes poner un messagepara que tome el enter , algo as铆 PostMessage( ::hWnd, WM_KEYDOWN, 13 ) ,o no validarlo y directamente ir al segundo get.
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo
Posted: Tue Feb 15, 2011 05:48 PM

Ok muchas gracias por tu apoyo.

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 05:53 PM

Como puedo ir directamente al segundo Get????

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 06:05 PM

No lo he probado , pero intenta, una vez salgas de la funci贸n BANCO NUEVO poner oGet:SetFocus(2) que supongo ser谩 el siguiente get
Tambien puedes probar, poniendo en el primer get este valid y quitar el otro
Valid (oGet:KillFocus(), oGet:SetFocus(2),.t.)

Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 06:09 PM

Ok probare y te estare comentando.

Gracias

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 08:41 PM

Saludos, auqnue parece ya conseguistes la solcion vas a tener problema si eliminas el ultimo registro, ya que te va a dar como creacion el mismo numero eliminado, para eevitar eso, en mi caso, uso una DBF con numeros de controles la cual llamo control, alli tengo un campo que se llama por decir algo cod_cliente, ese campo se va a incrementando cuando el usuario ya da el toque final de grabar o salvar el registro, y solo si es nuevo, si es modificacion no lo toco, asi me permito la opcion de poder comenzar a enumerar mis clientes, proveedores, numero de factura, recibos de pago, etc, desde el numero que yo quiera, y tengo mayor control ya que puedo tocar esa DBF sin tocar la DBF de mis maestros, llamole a los clientes y demas nombrados, es solo una idea mas y funciona super bien, cualquier duda puedo enviarte un ejemplo...

Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 08:51 PM

Gracias Jose Luis,

Podrias por favor enviarme el ejemplo que me comentas?

Gracias de antemano

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Tue Feb 15, 2011 09:18 PM
ESTES ES EL CODIGO MANEJADOR DE LA DBF...

#include "FiveWin.ch"
#include "Folder.ch" // PARA USO DEL folder

FUNCTION fldconfig() // MAESTRO CONFIGURACIONES (constantes)

LOCAL oGetF1 := Array (15),; // GET FOLDER 2
oBtnCONFIG := Array (2) // BARRA DE BOTONES

PUBLIC oConfig := TGenerales() // VARIABLE PUBLICA DEFINIDA EN CLASES.PRG

DEFINE WINDOW oConfig:oWnd TITLE "Modulo: ARCHIVOS - Maestro Configuraciones" OF oDatos:oWndPPAL MDICHILD NO SYSTEMENU NOZOOM

SET MESSAGE OF oConfig:oWnd TO "Configuraciones y Constantes... " 2007

DEFINE DIALOG oConfig:oDlg RESOURCE "DLG_FOLDER" OF oConfig:oWnd // DEFINICION DEL oDLG PRINCIPAL

REDEFINE FOLDER oConfig:oFld ID 401 OF oConfig:oDlg; // DEFINICION DEL oFOLDER
PROMPT "Constantes"; // PESTA脩AS DEL FOLDER
DIALOGS "Config-01"

/////////////////////////////
DBSELECTAREA("jlconfig") // MAESTRO CONFIG
jlconfig->( OrdSetFocus(1) )
jlconfig->( DBGOTOP() )

DATABASE oConfig:oDbf
oConfig:GOTOP()
oConfig:LOAD()

////////////////////////////

// INICIO BARRA DE BOTONES

DEFINE BUTTONBAR oConfig:oBar SIZE 50, 50 OF oConfig:oWnd UPDATE 2007 // DEFINO BARRA BOTONES
oConfig:bRClicked := {|| NIL } // DESACTIVA BARRA DE BOTONES NAVEGUE BOTON DERECHO

DEFINE BUTTON oBtnCONFIG[1] OF oConfig:oBar UPDATE NOBORDER FILENAME oDatos:rBMP+"SALVAR32.BMP"; // BOTON BARRA - GUARDAR/ACTUALIZAR
ToolTip "Guardar/Actualizar";
MESSAGE "Guardar / Actualizar Datos";
ACTION ( grabacfg( oConfig:oDbf ),; // GUARDO DATOS
MSGWAIT("Espere, Guardando Datos...", " ATENCI脫N", 1) )

DEFINE BUTTON oBtnCONFIG[2] OF oConfig:oBar UPDATE NOBORDER FILENAME oDatos:rBMP+"SALIR32.BMP"; // BOTON BARRA - SALIR
ToolTip "Salir";
MESSAGE "Retornar al Menu Principal";
ACTION ( oConfig:END() )


// INICIO oGETs 1ra.PESTA脩A oConfig:oFld

REDEFINE GET oGetF1[3] VAR oConfig:cfg_codalu; // CODIGO ALUMNO CONSECUTIVO
ID 203 OF oConfig:aDialogs[1] UPDATE PICTURE "9999999";
VALID ( oConfig:cfg_codalu >=0 )

REDEFINE GET oGetF1[4] VAR oConfig:cfg_codpro; // CODIGO PROFESOR CONSECUTIVO
ID 204 OF oConfig:aDialogs[1] UPDATE PICTURE "9999999";
VALID ( oConfig:cfg_codpro >=0 )

REDEFINE GET oGetF1[5] VAR oConfig:cfg_codcon; // CODIGO CONGRESO CONSECUTIVO
ID 205 OF oConfig:aDialogs[1] UPDATE PICTURE "9999999";
VALID ( oConfig:cfg_codcon >=0 )

REDEFINE GET oGetF1[7] VAR oConfig:cfg_numfac; // NUMERO FACTURA CONSECUTIVO
ID 207 OF oConfig:aDialogs[1] UPDATE PICTURE "9999999";
VALID ( oConfig:cfg_numfac >=0 )

REDEFINE GET oGetF1[8] VAR oConfig:cfg_contro; // NUMERO CONTROL
ID 208 OF oConfig:aDialogs[1] UPDATE PICTURE "@K !!-!!!!!!!" READONLY


// FIN oGET F I N G E T s


ACTIVATE DIALOG oConfig:oDlg NOWAIT; // ACTIVA DLG Y LO UBICO DEBAJO DEL BTNBAR
ON INIT ( oConfig:MOVE(oBtnCONFIG[2]:nWidth, 0) );
VALID( !GETKEYSTATE( VK_ESCAPE ) ) // DESHABILITA SALGA DEL DIALOGO CON Esc

ACTIVATE WINDOW oConfig:oWnd; // VENTANA TOMA TAMA脩O DEL DIALOGO
ON INIT ( oConfig:SetSize(oConfig:nWidth, oConfig:nHeight + oBtnCONFIG[2]:nWidth) )

RETURN .T. // FIN MAESTRO CONFIGURACIONES (constantes)

------------------------------------------------------------------------------------------------------------------------------------
ACA COMO ACCEDO Y HAGO EL CODIGO CONSECUTIVO, HAY FUNCIONES QUE NO SON NECESARIAS YA QUE NO TIENE NADA
QUE VER CON EL AUMENTO DEL CODIGO...

DEFINE BUTTON oBtnALUM[5] OF oBarALUM UPDATE NOBORDER FILENAME oDatos:rBMP+"SALVAR32.BMP"; // BOTON BARRA GUARDAR/ACTUALIZAR
ToolTip "Guardar/Actualizar";
MESSAGE "Guardar / Actualizar Datos";
WHEN (nSALVAR > 1);
ACTION ( IIF( oDatos:lAPPEND == .T. ,;
(oDbfCONFIG:cfg_codalu := jlconfig->cfg_codalu + 1 ,;
oDbfALUM:alu_codigo := oDbfCONFIG:cfg_codalu ,;
nCodAlu := oDbfALUM:alu_codigo ,;
oDbfALUM:alu_nivel := nRadNIVEL ,;
oDbfALUM:alu_fecha := DATE() ,;
grabacfg( oDbfCONFIG ), .T.), .T. ) ,; // ASIGNO CODIGO AL NUEVO REGISTRO (se controla en jlconfig)
graba(oDbfALUM, oBrwALUM) ,; // GUARDO DATOS Y RETORNO AL xBROWSE PPAL.
addnotas(nCodAlu, oDbfNOTAS, oBrwNOTAS, oDatos:lAPPEND) ,; // ADICIONO LAS MATERIAS A dbf NOTAS Y LUEGO CARGO EL array
oFldALUM:SetOption(1) ,;
jlalumno->( OrdSetFocus(2) ) ,; // COLOCA DE NUEVO INDICE A LOS NOMBRES-EN VALIDACION codigo NO SE REPITA LO PONGO EN EL 1
oBrwALUM:GOTOP(), oBrwALUM:REFRESH() ,; // VOY 1er REGISTRO Y FERESCO xBRW
nSALVAR := 1 )
----------------------------------------------------------------------------------------------------------------------------------
ACA UNA IMAGEN...ESPERO TE SIRVA, CUALQUIER DUDA O MEJORIA ES BIENVENIDA....



Uploaded with ImageShack.us
Dios no est谩 muerto...



Gracias a mi Dios ante todo!
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Wed Feb 16, 2011 12:53 AM

Gracias Jose Luis,

Lo probare y te dare mis comentarios.

Saludos.

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 30
Joined: Sat Apr 15, 2006 11:25 PM
Re: Numeracion consecutiva de codigo (SOLUCIONADO)
Posted: Sat Mar 05, 2011 07:19 PM

para elegir un get en concreto para poner el foco
oGet[1]:oJump := oGet[2]
oGet[2]:SetFocus()
y en el ini
odlg:bStart = {|| if ( lalta , oGet[1]:SetFocus() , oGet[3]:SetFocus() ) }

Continue the discussion