Código autogenerado con power buillder

Mi tabla Registros contiene idregistro quiero el ingreso de códigos se autogenerado para eso hice siguiente y si funciona, se generan los códigos:

H0001
H0002
H0003
Cuando cierro y ingreso nuevamente en dw_1 muestra el código H001 quiero que me genere nuevo campo que siga la secuencia, cuando ingreso nuevo me debe mostrar con id H0004

Por favor su apoyo urgente.

string nom,cod
integer n,m
dw_1.scrolltorow(dw_1.rowcount())
cod=dw_1.getitemstring(dw_1.rowcount(),"idRegistro")//id de tabla
m=integer(right(cod,3))+1
nom="R"+string(m,"000")
N=dw_1.insertrow(0)
dw_1.scrolltorow(N)
dw_1.scrolltorow(dw_1.rowcount())
dw_1.setitem(n, 1, string(nom))

1 respuesta

Respuesta
1

nom="R"+string(string(m),"000")

Sucede que la variable m es un entero y dbees de convertirlo a string. Eso sería todo.

hola william4425, gracias por apoyo esta autogenerando el código pero tengo que registrar sin salir, si sierro entro nuevamente a agregar nuevo registro es el problema

ejemplo

H0001

h0002

cuando agrego nuevo Registro mi datawindow debe refrescarse con el código H0003 así sucesivamente

En todo caso deberías de hacer un max...

Supongo que tu corelatio son los últimos 4 dígitos...

string ls_id

select right( '0000' + cast(max(cast(right(idregistro,4) as int) + 1) as varchar(4)) , 4 ) into :ls_id from Registros ;

ls_id = 'H' + ls_id

dw.setitem(dw.getrow(),'idregistro', ls_id)

***********************************

Lo pruebas y me avisas que tal te fue

hola Experto bueno encontré un ejemplo dado por ti que es lo siguiente

string ls_numero
select max(idregistro) into :ls_numero from REGISTRO;
if isnull(ls_numero)then
ls_numero="CL-0001"
dw_1.scrolltorow(dW_1.insertrow(0))
dw_1.setitem(dw_1.getrow(),"idregistro",ls_numero)
else
ls_numero='CL_'+string(long(right(ls_numero,4))+1,"0000")
dw_1.scrolltorow(dW_1.insertrow(0))
dw_1.setitem(dw_1.getrow(),"idregistro",ls_numero)
end if

esta muy bueno pero no sigue la secuencia se queda en CL-0001 que hacer para seguir la secuencia osea CL-0002 , CL-0003, CL-0004

Que te parece si me envías tu script, desde que genera el código hasta que lo guarda. La verdad con eso es suficiente, a menos que falte ejecutar el generador de código después de guardarlo.

Hola Experto, ahora estoy intentando con el DataStore aquí te adjunto todo los pasos que hago : por favor tu apòyo

código auto generado /*** debo guardar en tabla CONTADOR
campo_Tabla _contador= CodRegistro


y la tabla Registros
campos_Tabla Registro= Idregistro,nombre, fecha ,..etc


el Autogenerado debe guardarse en tabla CONTADOR
así 00001,00002,00003,00004.. y seguir la secuencia


para esto he crea un DataStore


Evento open //ventana mantenimiento Registros
dw_1.settransobject(sqlca)
dw_1.retrieve()

//Creando DataStore
Contador=Create DataStore
Contador.DataObject="odw_contador1"
Contador.SettransObject(Sqlca)
Contador.Retrieve()


//botón nuevo evento clicked
Integer N,Código
//Agrega un articulo en blanco
N=dw_1.insertRow(0)
dw_1.scrollToRow(N)
//Generar y mostrar el código
Código=Contador.GetItemNumber(1,"codregistro")+1
dw_1.SetItem(1,"idregistro",string(Código,"0000"))


cuando ejecuto me sale siguiente Error:
/**Datawindow column type does not match GetItem type at line 7 in clicked event**/

Primero:

Esta linea de codigo está mal.

Código=Contador.GetItemNumber(1,"codregistro")+1.....................(a)

debería de ser así.

Código=Contador.GetItemNumber(Contador.rowcount(),"codregistro")+1 ........(b)

Explicación: en (a), lo que haces es capturar el código de la primera fila, que obviamente es 1 y lo que se supone que debes hacer es capturar el valor máximo, que es lo que hace (b), captura el código de la ultima fila que intuyo que es el del codigo máximo.

Segundo:

No sé cual será tu línea 7, pero seguro que es uhn getitem... verifica el tipo de dato en tu dw y envíale el getitem correcto.

Prueba con lo que te envío y me avisas.

Hola Experto hice las pruebas pero me sale saliendo mismo mensaje

Integer N,Código
//Agrega un articulo en blanco
N=dw_1.insertRow(0)
dw_1.scrollToRow(N)
//Generar y mostrar el código
Código=Contador.GetItemNumber(Contador.Rowcount(),"codregistro")+1
dw_1.SetItem(N,"idregistro",string(Código,"0000"))

bueno aquí te indico detalle de los campos de mi tabla:

campo_Tabla _contador= CodRegistro es Varchar(10)


y la tabla Registros
campo_Tabla Registro= Idregistro Char (10)

por favor tu apoyo

Si tu codregistro es varchar, debes de usa getitemstring.

varchar, char :getitemstring

Int, numeric, bigint, tyint, smallint, bit: getitemnumber

Decimal: getitemdecimal

- Todo numerico funciona con ambos casos getitemnumber y getitemdecimal

Para todo fechas: getitemdatetime.

Con todo esto deberías de tenerlo de esta manera:

int codigo

Código=integer(Contador.GetItemstring(Contador.Rowcount(),"codregistro")) + 1

Pruebalo y seguimos en contacto.

muchísimas gracias Experto, con Código=integer(Contador.GetItemstring(Contador.Rowcount(),"codregistro")) + 1 ya no sale error.

pero no esta autogenerando el código, cada vez que hago click en botón Nuevo debe seguir la siguiente secuencia:

0000

0001

0002

0003

0004,etc

el siguiente código si lo autogenera:

Integer N,m,Código
string nom,cod
cod=dw_1.getitemstring(dw_1.rowcount(),"idregistro")//el id de tu tabla
m=integer(right(cod,3))+1 //el numero 3 se supone que ira 3 ceros
nom="R"+string(m,"000")
N=dw_1.insertrow(0)
dw_1.scrolltorow(N)
dw_1.setitem(N,1,string(nom))
dw_1.setcolumn(2)
dw_1.SetFocus()

resultado

es R001,R002,R004, como hacer para no repetir mismo código ejemplo

botón vuelvo

-----------------

si dw_1 campo idregistro ya existe código R001,R002,R004 entonces que me genera una nueva siguiendo la secuencia R005 ... así sucesivamente .. por favor tu apoyo

Haaaaaaa... me estoy dando cuenta que tu columna tiene como tipo de dato char... entonces tendrías que hacerle un trim... así:

cod=trim(dw_1.getitemstring(dw_1.rowcount(),"idregistro"))

m=integer(right(cod,3))+1

nom="R"+string(m,"000")

N=dw_1.insertrow(0)

dw_1.scrolltorow(N)

dw_1.setitem(N, 1, string(nom))

Pruébalo y seguimos en contacto.

muy bueno si llega generar en forma consecutivo ahora quiero que no se repita los códigos

en botón guardar que mas tengo que agregar??

dw_1.update()

dw_2.retrieve()

Para que tengas la certeza que nunca se repetirán deberás de hacerle un max a tu tabla y no jugar con la información que arroja el dw.

deberás de hacer un select max...así:

select isnull(cast(max(right(rtrim(id_registro),3) as int),0) + 1 into :m from contabor;

nom = 'R'+string(m ,'000')

De esa manera, siempre obtendrás el máximo valor y aumentarás en uno y nunca se repetirán.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas