Ver Mensaje Individual
  #9 (permalink)  
Antiguo 29/06/2015, 12:57
Avatar de JeMaGa
JeMaGa
 
Fecha de Ingreso: julio-2011
Ubicación: Bogota
Mensajes: 430
Antigüedad: 12 años, 9 meses
Puntos: 4
Respuesta: Procedimiento Almacenado

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 original
  1. SELECT codigo, movimiento, terceros,mayor, centrocosto ROM puc WHERE codigo =v_codigo_cuenta  INTO puc_cuenta, puc_movimiento, puc_terceros, puc_mayor, puc_centro_costo;
  2. 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 original
  1. loop_centro: LOOP      
  2.   SET v_id_saldo=0;
  3.   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
  4.   IF  v_id_saldo = 0 THEN
  5.      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
  6.   ELSE
  7.      UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito WHERE id = v_id_saldo;
  8.   END IF;  
  9.  
  10.   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
  11.   SELECT padre_centro_costo;
  12.  
  13.    SET v_centro_costo = padre_centro_costo; //aqui le esta a la variable v_centro_costo asignando 102000
  14.    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
  15.       LEAVE loop_centro;   
  16.    END IF;                
  17. END LOOP 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

Última edición por gnzsoloyo; 30/06/2015 a las 06:09 Razón: MUY MAL ETIQUETADO