Power Builder - Asignar un numero de acuerdo al año

 
Vista:
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por Juan (231 intervenciones) el 26/10/2013 02:12:54
Hola foristas, deseo asignarle a un campo llamado numeracion tipo string, un numero personalizado de acuerdo al año en curso, por decir.

Durante el año 2013, he registrado un promedio de 5,000 registros aproximadamente, luego estoy pensando que para el otro año estros registros se tiene que volver a guardar desde 000 nuevamente, por eso es que quiero que mediante un código al detectar el año actual, si ya paso del año 2013, entonces automáticamente reinicie de 001, 002, 003, 004, 005 .... etc y se asigne a este campo.

Claro siempre teniendo en cuenta la incrementación a partir del último numero, que se encuentra guardado, ya que si eliminé como por decir el registro Nro. 009 y en el campo queda como último registro el 008 , entonces incremente el nuevo como 009...

como poder hacerlo?

gracias por su aporte
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por juan (231 intervenciones) el 26/10/2013 21:38:28
bueno, ya logre accederle el codigo personalizado al campo de esta forma:

long filas
string ls_cod
Select Count(numeracion)
into :Filas
From comision;

ls_cod=string(Filas+1,"00000")
if dw_1.Rowcount()=1 then
else
dw_1.InsertRow(1)
dw_1.ScrollToRow(1)
end if
dw_1.Setitem(dw_1.GetRow(),"numeracion",ls_cod)


(el campo "numeracion" es un campo string)

AHORA, como puedo hacer para que a esta numeración (00001, 00002...etc) se le anteponga el año en curso ejemplo (2013-00001, 2013-00002...etc) y si el año ya cambio al 2014 entonces se reinicie de 00001 y se le anteponga el 2014 es decir así (2014-00001, 2014-00002...) espero su valioso aporte muchachos;

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Asignar un numero de acuerdo al año

Publicado por Manos de tijera (1 intervención) el 29/10/2013 21:01:09
Hola en que BD trabajas? si es SQL Server, puedes obtener el último código de la siguiente manera:

SELECT MAX(numeracion)
into :ls_ultimocodigo
From comision
WHERE SUBSTRING(codigo,1,4) = convert(varchar,year(GETDATE()));

Suponiendo que esta consulta te devuelva: '2013-00020'

Entonces en PB, sólo extraes la parte derecha para incrementarla en 1 y la concatenas nuevamente:
ls_nuevocodigo = left(ls_ultimocodigo,5) + string(long(right(ls_ultimocodigo,5))+1, '00000')

Y quedará asi: '2013-00021'.

Si llega el 2014 la consulta no te devolverá nada, entonces concatenas ese año con secuencia 1:
'2014-00001'. A partir de allí se seguirán incrementando los códigos para el 2014.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por Juan (231 intervenciones) el 30/10/2013 14:20:46
Ok Manos de tijera muy buen aporte, lo probare, te comento luego

Muichas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por Juan (231 intervenciones) el 31/10/2013 16:44:47
Hola doctor, trabajo en el server anywhere del power builder 10.5

me emite un error
dice: Bad argument list for Function: left


(Lista de argumentos malo para la función: a la izquierda)

que pueda ser?

este es el código que puse de acuerdo a tu comentario

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
long ls_ultimocodigo
string ls_nuevocodigo
SELECT MAX(numeracion)
into :ls_ultimocodigo
From comision
WHERE SUBSTRING(año,1,4) = convert(varchar,year(GETDATE()));

ls_nuevocodigo = left(ls_ultimocodigo,5) + string(long(right(ls_ultimocodigo,5))+1, "00000")

espero tu respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Asignar un numero de acuerdo al año

Publicado por Manos de tijera (1 intervención) el 31/10/2013 17:42:33
Hola,

ls_ultimocodigo debe ser declarada como string no como long.

Asumo que tu campo 'numeracion' es de tipo varchar para que puedas almacenar codigos como '2013-00001', si no es asi me comentas.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por juan (231 intervenciones) el 31/10/2013 18:45:37
Claro, disculpa no te mencione. Si, el campo es de tipo varchar.

Modifique esta variable de tipo string pero cuando doy doble clic para comenzar a asignar el codigo al dw_1, no le asigna nada:

Dime en esta parte de tu codigo:

WHERE SUBSTRING(numeracion,1,4) = convert(varchar,year(GETDATE()));

"numeracion" es el campo de mi dw_1 donde almacenare el nuevo código que se registrará, si es asi entonces estoy bien.

lo malo es que no asigna nada a ese campo, que falta agregar?

//////////ASI QUEDO EL CODIGO///////////////////////////////

string ls_ultimocodigo
string ls_nuevocodigo
SELECT MAX(numeracion)
into :ls_ultimocodigo
From comision
WHERE SUBSTRING(numeracion,1,4) = convert(varchar,year(GETDATE()));
ls_nuevocodigo = left(ls_ultimocodigo,5) + string(long(right(ls_ultimocodigo,5))+1, "00000")

GRACIAS ESPERO TU RESPUESTA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por Juan (231 intervenciones) el 31/10/2013 19:24:01
Hola denuevo, te comento:

Tengo una variable tipo double que se llama "cod"
esta me permite asignarle algunos campos que busco en otro datawindow (dw_fil) que se encuentra en la misma ventana, debajo del dw_1. Al darle doble clic me pega estos datos encontrados en el dw_1 que se encuentra arriba de este.

este es mi codigo:

double clip, cod
if row > 0 then
clip=dw_fil.object.cip[row]
dw_1.Retrieve()
cod=dw_1.InsertRow(0)
dw_1.ScrolltoRow(cod)
dw_1.enabled=true
dw_1.setitem(cod,"dni",dw_fil.object.cip[row])
dw_1.setitem(cod,"apellidos_nombres",dw_fil.object.apellidos_nombres[row])
dw_1.setitem(cod,"domicilio",dw_fil.object.direccion[row])
dw_1.setitem(cod,"telefono",dw_fil.object.telefono[row])
dw_1.setitem(cod,"rpm",dw_fil.object.rpm[row])
dw_1.setitem(cod,"fecha_salida",Today())
END IF

al pegar tu código y correr la aplicación, me borra todo lo que asigno solo al campo "numeracion" de una forma muy rápida y solo veo que así como lo escribe lo borra rápidamente, no entiendo por que¿?

OJO: Solo borra el contenido de este campo "numeracion" tipo varchar, mas no de los otros que al darle clic se asignan al dw_1 automáticamente.

como se solucionaria ¿?

Gracias por tu apoyo,
espero tu respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Asignar un numero de acuerdo al año

Publicado por Manos de tijera (1 intervención) el 06/11/2013 23:05:11
Hola, respecto a tu primera consulta, te falta el código para insertar en el datawindow.

Algo así:

dw_1.Setitem(cod,"numeracion",ls_nuevocodigo)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por juan (231 intervenciones) el 06/11/2013 23:32:19
Hola, si olvide copiar el ultimo renglón, asi es el código:

string ls_ultimocodigo
string ls_nuevocodigo
SELECT MAX(numeracion)
into :ls_ultimocodigo
From comision
WHERE SUBSTRING(numeracion,1,4) = convert(varchar,year(GETDATE()));
ls_nuevocodigo = left(ls_ultimocodigo,5) + string(long(right(ls_ultimocodigo,5))+1, "00000")

////////////
dw_1.Setitem(cod,"numeracion",ls_nuevocodigo)

Pero cuando cambio de año, no escribe nada ya, si es que estoy en el año actual si sigue incrementando pero cuando cambio el año a mi ordenador par ver que hace entonces NO ESCRIBE NADA.

Que me faltaría?

Gracias nuevamente por tu apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Asignar un numero de acuerdo al año

Publicado por Manos de tijera (1 intervención) el 06/11/2013 23:58:35
Claro como te comenté en mi primero mensaje, si la consulta sql no devuelve nada es porque no hay data para ese año y hay que iniciar la secuencia en 1:

Algo así:

//COMENTAMOS ESTO
//dw_1.Setitem(cod,"numeracion",ls_nuevocodigo)

//Y REEMPLAZAMOS POR ESTO
if isnull(ls_ultimocodigo) or ls_ultimocodigo = '' then
dw_1.Setitem(cod,"numeracion",string(today(),'yyyy')+'-00001')
else
dw_1.Setitem(cod,"numeracion",ls_nuevocodigo)
end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 37
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Asignar un numero de acuerdo al año

Publicado por Juan (231 intervenciones) el 07/11/2013 00:10:19
Ok,, doctor era complicado, pero por fin pude entenderte y darme cuenta; gracias por tu aporte me fue de mucha ayuda e ilustración.


100 puntos para ti

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar