Problema con correlativo

Bueno este código tu me ayudaste a desarrollar pero me pidieron que tenia que generar todos los correlativos necesarios antes de guardar con el SELECT count necesito guardar y después generar otro correlativo, bueno como lo puedo hacer este es el código:
long ll_cant, fila_nueva
SELECT count(ar_codigo)
INTO :ll_cant FROM area;
fila_nueva = dw_2.InsertRow(0) //agregar fila
dw_2.SetItem(fila_nueva,"ar_codigo",string(ll_cant + 1,'A000'))
dw_2.SetTransObject(SQLCA)
dw_2.SetFocus()
dw_2.ScrollToRow(fila_nueva)
dw_2.SetColumn(1)
pb_9.enabled=true
pb_5.enabled=true
espero tu ayuda de

1 Respuesta

Respuesta
1
Haber si te entendí, ¿primero jalas el ultimo correlativo que se encuentra en la tabla y una vez grabado tienes que generar el siguiente a utilizar?
Algo parecido, te explico más detallado, coloco mi primer correlativo escribo su respectiva descripción del código cuando inserto otra fila me genera el mismo primer código y para que no suceda esto, se requiere guardar primer y genere el siguiente. Bueno si no te queda algo claro no dudes en preguntar, de antemano muchas gracias
Ya entendí cada fila que ingreses es un código distinto, dime que tipo de datawindow estas usando.
Si usas dw tipo el excel (grid, tabular), entonces lo que puedes hacer es lo siguiente:
En la primera fila capturas el código, en las siguientes simplemente capturas el código de la fila anterior y aumentas en uno, al final de todo recién grabas, y lógicamente vas a actualizar la tabla de correlativo tomando el código de la ultima fila.
Si usas un dw tipo freeform, no deberías tener ningún problema, ya que para crear un nuevo registro primero deberás guardar el anterior y lógicamente actualizar tu tabla de correlativo.
Indicame cual es tu situación y si tienes alguna duda dímela para aclarártela.
Bueno estoy usando dw tipo grid, bueno según el tipo de dw que me indica no entiendo mucho tu lógica, pero eh echo que aumente de uno y que actualize el SELECT en el código pero no me funciona, ¿tienes alguna idea base al código que se puede hacer?
En el evento clicked del botón insertar, coloca:
ll_fila = dw_1.InsertRow(0)
IF ll_fila = 1 THEN
SELECT count(codigo)
INTO :ll_cant
FROM nombre_tabla;
ELSE
ll_cant = dw_1.GetItemNumber(ll_fila - 1,"codigo")
END IF
ll_cant += 1
dw_1.SetItem(ll_fila,"codigo",ll_cant)
//****
Luego ingresas todos los datos y grabas
Cabe indicar que tanto el campo al cual le hago count tiene que ser numérico y el campo del dw_1 el cual recupero el codio de la fila anterior también debe ser numérico.
En caso no uses estos tipos de datos, me avisas. Y me dices que tipo de datos tienes.
El campo del código es string, ya que se toma de esta forma: "A001, A002..." espero tu ayuda, de antemano muchas gracias
Entonces usalo de esta forma:
En el evento clicked del botón insertar, coloca:
ll_fila = dw_1.InsertRow(0)
IF ll_fila = 1 THEN
SELECT count(long(right(codigo,3))
INTO :ll_cant
FROM nombre_tabla;
ELSE
ls_cant = long(right(dw_1.GetItemString(ll_fila - 1,"codigo"),3))
END IF
ll_cant += 1
ls_correlativo = string(ll_cant,'A000')
dw_1.SetItem(ll_fila,"codigo",ls_correlativo)
Hola, bueno tuve algunos problemas:
Estaba haci:
ls_cant = long(right(dw_1.GetItemString(ll_fila - 1,"codigo"),3))
lo deje haci:
ll_cant = long(right(dw_1.GetItemString(ll_fila - 1,"codigo"),3))
Cuéntame si es problema de tipeo
Y también me sale SQL ERROR DE VINCULO DE COMUNCACION que puede ser, bueno agradecesco la ayuda
nos vemos
La segunda es correcta ll_cant ...
Siempre que la variable ll_cant sea de tipo Long.
Ahora con respecto al error de vinculo de comunicación, es un problema de conexión con la bd, debes verificar que dw_1 este conectándose a la bd.
Verifica si tiene el SetTransObject
¿A qué se refiere que el 'long' no es un nombre de función reconocido?
Te dejo el código que esta en agregar fila:
long ll_cant, ll_fila
string ls_correlativo
dw_2.SetTransObject(SQLCA)
ll_fila = dw_2.InsertRow(0)
IF ll_fila = 1 THEN
SELECT count(long(right(ar_codigo,3))
INTO :ll_cant
FROM area; //aca me identifica el error de SQL
ELSE
ll_cant = long(right(dw_2.GetItemString(ll_fila - 1,"ar_codigo"),3))
END IF
ll_cant += 1
ls_correlativo = string(ll_cant,'A000')
dw_2.SetItem(ll_fila,"ar_codigo",ls_correlativo)
pb_9.enabled=true
pb_5.enabled=true
Cambia el select q tienes por este otro
SELECT count(convert(int,RIGHT(ar_codigo,3)))
INTO :ll_cant
from area;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas