Numeracion consecutiva de codigo (SOLUCIONADO)

Post Reply
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Numeracion consecutiva de codigo (SOLUCIONADO)

Post by Compuin »

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.
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo

Post by Pedro »

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
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo

Post by Compuin »

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
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo

Post by Pedro »

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

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
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo

Post by Compuin »

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?
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo

Post by Pedro »

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
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo

Post by Compuin »

Ok muchas gracias por tu apoyo.
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by Compuin »

Como puedo ir directamente al segundo Get????
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by Pedro »

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
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by Compuin »

Ok probare y te estare comentando.

Gracias
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by joseluisysturiz »

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!
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by Compuin »

Gracias Jose Luis,

Podrias por favor enviarme el ejemplo que me comentas?

Gracias de antemano
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by joseluisysturiz »

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!
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by Compuin »

Gracias Jose Luis,

Lo probare y te dare mis comentarios.

Saludos.
ender
Posts: 28
Joined: Sat Apr 15, 2006 11:25 pm

Re: Numeracion consecutiva de codigo (SOLUCIONADO)

Post by ender »

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() ) }
Post Reply