Numeracion consecutiva de codigo (SOLUCIONADO)

Numeracion consecutiva de codigo (SOLUCIONADO)

Postby Compuin » Tue Feb 15, 2011 3: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.)
Last edited by Compuin on Tue Feb 15, 2011 5:48 pm, edited 1 time in total.
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo

Postby Pedro » Tue Feb 15, 2011 5: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
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo

Postby Compuin » Tue Feb 15, 2011 5: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 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo

Postby Pedro » Tue Feb 15, 2011 5: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: Select all  Expand view
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
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo

Postby Compuin » Tue Feb 15, 2011 5: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 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo

Postby Pedro » Tue Feb 15, 2011 5: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
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo

Postby Compuin » Tue Feb 15, 2011 5:48 pm

Ok muchas gracias por tu apoyo.
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby Compuin » Tue Feb 15, 2011 5:53 pm

Como puedo ir directamente al segundo Get????
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby Pedro » Tue Feb 15, 2011 6: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
User avatar
Pedro
 
Posts: 464
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby Compuin » Tue Feb 15, 2011 6:09 pm

Ok probare y te estare comentando.

Gracias
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby joseluisysturiz » Tue Feb 15, 2011 8: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!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby Compuin » Tue Feb 15, 2011 8:51 pm

Gracias Jose Luis,

Podrias por favor enviarme el ejemplo que me comentas?

Gracias de antemano
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby joseluisysturiz » Tue Feb 15, 2011 9: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:oDbf:GOTOP()
oConfig:oDbf:LOAD()

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

// INICIO BARRA DE BOTONES

DEFINE BUTTONBAR oConfig:oBar SIZE 50, 50 OF oConfig:oWnd UPDATE 2007 // DEFINO BARRA BOTONES
oConfig:oBar: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:oWnd:END() )


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

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

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

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

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

REDEFINE GET oGetF1[8] VAR oConfig:oDbf:cfg_contro; // NUMERO CONTROL
ID 208 OF oConfig:oFld: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:oDlg: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:oWnd:SetSize(oConfig:oDlg:nWidth, oConfig:oDlg: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....

Image

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

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby Compuin » Wed Feb 16, 2011 12:53 am

Gracias Jose Luis,

Lo probare y te dare mis comentarios.

Saludos.
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1213
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Postby ender » Sat Mar 05, 2011 7: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() ) }
ender
 
Posts: 30
Joined: Sat Apr 15, 2006 11:25 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: groiss and 61 guests