el procedimiento solo se ejecuta en una unica tabla, llamada saldos_contables_[año actual] la estructura de esta tabla es
id int(10)
cuenta varchar(20)
sucursal varchar(4)
tercero varchar(20)
centroCosto varchar(6)
db_06 double(15,2)
cr_06 double(15,2)
siempre va ser la misma, lo que varia son los codigos de cuenta y los centros de costo
Código MySQL:
Ver originalSELECT codigo
, movimiento
, terceros
,mayor
, centrocosto ROM puc
WHERE codigo
=v_codigo_cuenta
INTO puc_cuenta
, puc_movimiento
, puc_terceros
, puc_mayor
, puc_centro_costo
; SELECT puc_cuenta
, puc_movimiento
, puc_terceros
, puc_mayor
, puc_centro_costo
;
esta consulta lo unico que hace es consultarme el codigo contable mayor al que esta en ese momento cargada es decir esa consulta me muestra el mayor de 11050502, y solo se ejecuta en una parte que es al principio.
El problema que yo se que es y que veo es que en el procedimiento tengo 2 loop
uno para el codigo_contable (loop_interno) muestra el mayor
11050502
110505
1105 ..
pero dentro de ese loo_interno hay otro que se encargar de mostrar el padre del centro de costo (loop_centro)
102030
102000
100000
el problema es que cuando llega a ejecutar el loop_centro funciona la primera vez
Código MySQL:
Ver originalloop_centro: LOOP
SELECT id
FROM ".$tablaSaldos." WHERE cuenta
= v_codigo_cuenta
and tercero
= v_tercero
and centroCosto
= v_centro_costo
INTO v_id_saldo
; //en este momento me trae el codigo
11050502 y el centro_costo
=102030 INSERT INTO " . $tablaSaldos . " (cuenta
,tercero
,sucursal
,centroCosto
," . $campoDebito . "," . $campoCredito . ") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`, `v_centro_costo`, v_debito
, v_credito
); // inserta en la tabla saldos_contables_2015 ese registro
11050502 102030 UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito
, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito
WHERE id
= v_id_saldo
;
SELECT id_padre
FROM centros_costo
WHERE id_centro_costo
= v_centro_costo
INTO padre_centro_costo
; // consulta el padre del centro de costo
102030
SET v_centro_costo
= padre_centro_costo
; //aqui le esta a la variable v_centro_costo asignando
102000 IF v_centro_costo
IS NULL THEN // como el valor de v_centro_costo
no es
NULL no se me sale del loop
y lo sigue ejecutando
LEAVE loop_centro;
como en el ultimo centro de costo es 100000 y el padre es NULL ahi cierra el loop_centro y lo saca y ahi detiene todo el proceso algo que no deberia hacer, por que cuando me salga de ese loop_centro deberia seguir ejecutando el loop_interno para que me siga ejecutando la cuenta
o por lo menos eso es lo que deberia estar haciendo. que cuando termina de ejecutar loop_centro debe continuar la ejecucion de loop_interno hasta que este tambien se cierre