Buenos dias, necesito su ayuda
POr favor guienme o ayudenme, estoy haciendo un sistema que genere un numero de ticket para un cliente para ser atendido; ademas este numero de ticket debe reiniciar cada dia, para empezar de nuevo un nuevo dia.
No se si generar este numero incrementable en el form o en pdf???
lo que veo mas complejo es la accion de reiniciar este numero cada dia.
Gracias por cualquier ayuda
yo pienso que debes de tener una tabla con un campo tipo numerico para el consecutivo y otro campo tipo datetime para la guardar fechahora del ultimo numero generado.
o sea que cada vez que generes un consecutivo, actualices la fechahora de generacion.
y tiene que crear una funcion que va a retornar el numero siguiente y a su vez actualiza la tabla con el nuevo numero y la fechahora. y en esta funcion evaluas la fecha actual con now() versus la fecha del ultimo consecutivo. si es otro dia, actualizas el consecutivo a cero.
y isto
Gracias por la respuesta alvagar, si te entiendo la idea, lo que pasa es que se muy poco de programacion y no entiendo muy bien como organizar estos datos que me das en el scriptcase, si me ayudaras ejemplificando o dandome un codigo concreto para colocar en el scriptcase.
gracias de antemano por la paciencia y ayuda ofrecida y la que me puedas brindar
que base de datos estas usando?
Estoy usando mysql
con mysql administrator:
–creas una tabla asi:
create table consecutivo (codigo int not null, NUMEROACTUAL int not null,
ULTIMAFECHA date not null, primary key (codigo)) engine = InnoDB;
– insertas un registro inicial
insert into consecutivo values (1, 0, sysdate());
– Luego creas esta funcion:
DELIMITER $$
DROP FUNCTION IF EXISTS f_get_consecutivo
$$
CREATE FUNCTION f_get_consecutivo
() returns int
BEGIN
DECLARE v_CONSECUTIVO INT(8);
DECLARE V_FECHA DATE;
SELECT NUMEROACTUAL, ULTIMAFECHA
INTO v_CONSECUTIVO, V_FECHA
FROM consecutivo;
set v_CONSECUTIVO = v_CONSECUTIVO + 1;
IF (DAY(V_FECHA) <> DAY(NOW())) THEN
set V_FECHA = now();
set v_CONSECUTIVO = 1;
END IF;
update consecutivo set NUMEROACTUAL = v_CONSECUTIVO, ULTIMAFECHA = V_FECHA where codigo = 1;
return v_CONSECUTIVO;
END $$
DELIMITER ;
— y llamas esta funcion en el evento onvalidate asi:
sc_lookup(dataset, “select f_get_consecutivo()” );
$consecutivo = {dataset[0][0]};
hombre gracias por la dedicacion de verdad; te comento:
-Para crear la tabla con el codigo que dices me toco investigar y habilitar el innoDB en mySQL, luego que lo habilite funciono el primer codigo y cre? la tabla
-Use el segundo codigo para cargar un registro inicial, hasta ahi bien, o cargo con los datos, todo bien
-PERO, el problema lo tengo con el tercer codigo para crear la funcion; asumo que ese codigo tambien lo coloco en el mysql, pues cuando lo voy a generar me da un error de sintaxis diciendo que revise el manual de version de mi mysql, el mensaje es este:
MySQL ha dicho:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘DELIMITER $$
DROP FUNCTION IF EXISTS f_get_consecutivo
$$
CREATE FUNCTION `f’ at line 1
No se si es algun caso de diferencia de versiones, por si acaso te mensiono la version que manejo:
El servidor Web Apache Versi?n 2.2.8
Script PHP Language Version 5.2.6
MySQL Database Versi?n 5.0.51b
phpMyAdmin Database Administrador Version 2.10.3
Gracias de antemano.
Debes correrlo con mysql administator y con la herramienta mysql query browser, alli seleccionas FILE - NEW SCRIPT TAB. y corres la funcion.
o Busca en google como corre una funcion en mysql
Bueno amigo, ya hice todo, descargue, instale mysql administrator y query browser, y ejecute los codigos que dijiste, todo bien, peeero;
tengo una gran duda:
todo eso del codigo y y la tabla que se cre? (consecutivo), realmente ?como las aplico en scriptcase?, en principio pense en crear un form de la tabla consecutivo y probar, pero no se si deba cambiar alguna propiedad de los campos (por ejemplo colocar autoincrementable el campo codigo),
?o acaso esa tabla y esa funcion se creo para ser llamada desde cualquier otra tabla?, y si es asi podria entonces aplicarla en un form de otra tabla, pero ?tendria que llamar el campo numero actual?
De verdad Disculpa mi ignorancia con el tema, entiendo la paciencia y dedicacion de tu parte alvagar.
Gracias de antemano
Se cre? una tabla y una funci?n. La tabla es para tener el registro del numero actual en que va el ticket y la fecha en que se gener? ese ultimo numero.
La funcion permite retornar el nuevo numero del ticket y esta se debe de llamar desde SC en el formulario que tu tienes para generar los tickets.
Si no lo tienes creas un control y desde alli llamas la funcion con este codigo:
— y llamas esta funcion en el evento onvalidate asi:
sc_lookup(dataset, “select f_get_consecutivo()” );
$consecutivo = {dataset[0][0]};
En este caso la variable $consecutivo almacena el valor del nuevo consecutivo del ticket y lo puedes mostrar asignando esta variable a un campo que tu tengas del control.
Por ejmplo:
{campo_consec} = $consecutivo;
control SC
si no puedes dame tu email yo te mando un control .
Hola, Siento que estoy cerca de lograrlo, pero no quisiera incomadar con tanta pregunta; lamentablemente aun no logro el resultado,
Si mal no entiendo, yo al cargar el codigo que mencionas en el on validate de sc, estoy llamando la funcion que se creo en el mysql,
yo tengo un form con unos datos (entre ellos el campo numero de ticket de tipo int, sin ninguna caracteristica de autoincremento ni nada); en este form en el on_validate coloco el codigo que dices, pero en este form no veo donde o como asignar la variable a mi campo ticket;
yo lo unico que pense fue en hacer esa asignacion en el mismo onvalidate, abajo del codigo, dejandolo asi:
sc_lookup(dataset, “select f_get_consecutivo()” );
$consecutivo = {dataset[0][0]};
{ticket} = $consecutivo;
bien, pues haciendo esto, lo que resulta es que me esta colocando en el campo ticket el numero 2, no importa cuantos registros cree, siempre coloca “2” en el campo ticket.
Usa un CONTROL como te dije para eso, y vera que funciona, yo lo hice y me funciono correctamente.
Todo Solucionado satisfactoriamente, Muy agradecido con nuestro amigo alvagar que me tuvo tanta paciencia y me presto tan dedicada ayuda paso a paso con codigo y todo, todo resulto como el menciono a traves de este post, tal cual con el codigo y todo.
excelente
Hola Alvagar, yo tengo un problema similar, quiero generar un n?mero de matricula, sin embargo la matricula se compone por diferentes digitos:
[ultimos dos digitos del a?o][codigo del estado][codigo de plantel][numero incrementable]
lo estoy tratando de hacer con metodo php por lo que el codigo es el siguiente:
{Matricula}=$var=date(“y”).(“17”).{Plantel}; //*lo que me falta en esta linea es el n?mero consecutivo el cual se debe reiniciar al cambiar el a?o
los datos que me arrojan son los siguientes:
1517C0004G… pero me hace falta 0001, 0002, 0003 y asi sucesivamente, podr?as apoyarme, te lo agraedecere mucho!
Por favor, crea un nuevo hilo con tu duda, intentar no have necroposting.
Aprovecha para a?adir esta informaci?n que te pido en ese nuevo hilo. Ese consecutivo depende solo del a?o? O de algo mas? Qu? te impide tener una tabla de contador por a?os y consultarla retorn?ndote el valor necesario?
Saludos.
Hola Luis yo creo que es algo parecido a lo que ya se dijo en este thread, aqui debes comparar en el campo ULTIMAFECHA con la fecha actual del sistema y si el a?o ha cambiado se debe generar el siguiente consecutivo = 1. de lo contrario se genera el actual +1.
Tienes toda la raz?n Giu, soy nuevo en los foros, perd?n, sin embargo puedo comentar que lo hice aqu? por que es muy similar la duda que tengo, solo quer?a modificar algunos datos, no ocurrir? la siguiente ocasi?n, por lo pronto quiero dar a conocer que ya pude realizar la funci?n adaptada, la dejo por aqu? por si a alguien le funciona, agradezco la aportaci?n que realiz? alvargar, no solo en esta ultima respuesta si no en todo el c?digo que proporciono ya que me ayudo bastante, gracias, sin embargo me gustar?a por ultimo saber como puedo generar mi numero como 0001 ya que solo me pone 1, 2, 3… podr?s apoyarme? saludos!
/Funci?n MySql/
create table consecutivo (codigo int not null, NUMEROACTUAL int not null,
ULTIMAFECHA date not null, primary key (codigo)) engine = InnoDB;
/* insertas un registro inicial, solo aclarando que yo lo hice de forma manual*/
insert into consecutivo values (1, 0, sysdate());
/* Luego creas esta funci?n*/
DELIMITER $$
DROP FUNCTION IF EXISTS f_get_consecutivo
$$
CREATE FUNCTION f_get_consecutivo
() returns int
BEGIN
DECLARE v_CONSECUTIVO INT(8);
DECLARE V_FECHA DATE;
SELECT NUMEROACTUAL, ULTIMAFECHA
INTO v_CONSECUTIVO, V_FECHA
FROM consecutivo;
set v_CONSECUTIVO = v_CONSECUTIVO + 1;
IF (YEAR(V_FECHA) <> YEAR(NOW())) THEN
set V_FECHA = now();
set v_CONSECUTIVO = 1;
END IF;
update consecutivo set NUMEROACTUAL = v_CONSECUTIVO, ULTIMAFECHA = V_FECHA where codigo = 1;
return v_CONSECUTIVO;
END $$
DELIMITER ;
/Codigo Scriptcase Before Insert/
sc_lookup(dataset, “select f_get_consecutivo()” );
$consecutivo = {dataset[0][0]};
{Matricula}= $var=date(“y”).(“17”).{Plantel}.$consecutivo;
Yo creo que puede usar la funcion LPAD para que le pongas la mascara con los ceros deseados, Mira el sitio: http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_lpad