Ver Mensaje Individual
  #5 (permalink)  
Antiguo 29/06/2015, 09:10
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 QUE TENGO HASTA AHORA ES ASI

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS " . $nombreProc . ";
  2. CREATE DEFINER=`root`@`localhost` PROCEDURE `" . $nombreProc . "`() DETERMINISTIC NO SQL SQL SECURITY DEFINER
  3. DECLARE v_tercero VARCHAR (20);
  4. DECLARE puc_cuenta VARCHAR(20);
  5. DECLARE puc_terceros INT DEFAULT 0;
  6. DECLARE puc_movimiento INT DEFAULT 0;
  7. DECLARE puc_mayor VARCHAR(20);
  8. DECLARE puc_centro_costo INT DEFAULT 0;
  9. DECLARE v_id_cabecera INT DEFAULT 0;
  10. DECLARE v_id_saldo INT DEFAULT 0;
  11. DECLARE v_codigo_cuenta VARCHAR(20);
  12. DECLARE v_sucursal VARCHAR(4);
  13. DECLARE v_debito DOUBLE(15,2);
  14. DECLARE v_credito DOUBLE(15,2);
  15. DECLARE v_centro_costo VARCHAR(6);
  16. DECLARE padre_centro_costo VARCHAR(6);
  17. DECLARE tmp_continuar INT DEFAULT 0;
  18. DECLARE detalle_cur CURSOR FOR SELECT detalle.id_cabecera, detalle.codigo_cuenta, detalle.sucursal, detalle.debito, detalle.credito, detalle.tercero, detalle.centrocosto FROM " . $tablaMes . " as detalle HAVING detalle.id_cabecera = " . $idComprobante . ";
  19. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET continuar = false;
  20. OPEN detalle_cur;
  21.     FETCH  detalle_cur INTO v_id_cabecera, v_codigo_cuenta, v_sucursal, v_debito, v_credito, v_tercero, v_centro_costo;
  22.     SET tmp_continuar = continuar;
  23.     SELECT v_codigo_cuenta, v_sucursal, v_debito, v_credito, v_tercero, v_centro_costo;
  24.    
  25.     IF v_codigo_cuenta IS NOT NULL THEN
  26.         loop_interno: LOOP
  27.            SELECT codigo,movimiento,terceros,mayor,centrocosto FROM puc WHERE codigo = v_codigo_cuenta
  28.            INTO puc_cuenta, puc_movimiento, puc_terceros, puc_mayor, puc_centro_costo;
  29.            SELECT puc_cuenta, puc_movimiento, puc_terceros, puc_mayor, puc_centro_costo;
  30.               IF puc_movimiento=1 THEN
  31.                     IF puc_terceros=1 THEN
  32.                         SET v_id_saldo=0;
  33.                         SELECT id FROM ".$tablaSaldos." WHERE cuenta = v_codigo_cuenta and tercero = v_tercero and sucursal = v_sucursal INTO v_id_saldo;
  34.                         IF  v_id_saldo = 0 THEN
  35.                             INSERT INTO ".$tablaSaldos." (cuenta,tercero,sucursal,".$campoDebito.",".$campoCredito.") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`,v_debito,v_credito);
  36.                         ELSE
  37.                             UPDATE ".$tablaSaldos." SET ".$campoDebito." = ".$campoDebito.$signo." v_debito, ".$campoCredito." = ".$campoCredito.$signo." v_credito WHERE id = v_id_saldo;
  38.                         END IF;
  39.                     END IF;
  40.               END IF;
  41.                 IF puc_centro_costo = 1 THEN
  42.                     loop_centro: LOOP
  43.                        
  44.                        SELECT id_padre FROM centros_costo WHERE id_centro_costo = v_centro_costo INTO padre_centro_costo;
  45.                        SELECT padre_centro_costo;
  46.  
  47.                         SET v_id_saldo=0;
  48.                         SELECT id FROM ".$tablaSaldos." WHERE cuenta = v_codigo_cuenta and tercero = v_tercero and sucursal = v_sucursal INTO v_id_saldo;
  49.                         IF  v_id_saldo = 0 THEN
  50.                             INSERT INTO " . $tablaSaldos . " (cuenta,tercero,sucursal,centroCosto," . $campoDebito . "," . $campoCredito . ") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`, `v_centro_costo`,v_debito,v_credito);
  51.                         ELSE
  52.                             UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito WHERE id = v_id_saldo;
  53.                         END IF;  
  54.                        
  55.                        SET v_centro_costo = padre_centro_costo;
  56.                        IF  v_centro_costo IS NULL THEN        
  57.                           LEAVE loop_centro;   
  58.                        END IF;
  59.                        
  60.                     END LOOP loop_centro;
  61.                 END IF;
  62.                            
  63.                 SET v_id_saldo=0;
  64.                 SELECT id FROM ".$tablaSaldos." WHERE cuenta = v_codigo_cuenta and tercero = v_tercero and sucursal = v_sucursal INTO v_id_saldo;
  65.                 IF  v_id_saldo = 0 THEN
  66.                     INSERT INTO " . $tablaSaldos . " (cuenta,tercero,sucursal,centroCosto," . $campoDebito . "," . $campoCredito . ") VALUES(`v_codigo_cuenta`,`v_tercero`,`v_sucursal`, `v_centro_costo`,v_debito,v_credito);
  67.                 ELSE
  68.                     UPDATE " . $tablaSaldos . " SET " . $campoDebito . " = " . $campoDebito . $signo . " v_debito, " . $campoCredito . " = " . $campoCredito . $signo . " v_credito WHERE id = v_id_saldo;
  69.                 END IF;
  70.            SET v_codigo_cuenta = puc_mayor;
  71.            IF  v_codigo_cuenta IS NULL THEN
  72.               LEAVE loop_interno;  
  73.            END IF;
  74.         END LOOP loop_interno;
  75.     END IF;
  76.     SET continuar= tmp_continuar;
  77. UNTIL NOT continuar END REPEAT;
  78. CLOSE detalle_cur;
  79. END";

El diseñadoor de la base de datos crea una tabla que se encarga de guardar la mayorización de proceso contable por año, por eso lo del procedimiento que crea tablas diferentes nombres estructura igual.
La idea del procedimiento es que si yo ingreso una cuenta con un centro de costo

11050502 con un centro de costo 102030
11100503 sin centro de costo

en mi base de datos en mi tabla me debe guardar el padre de la cuenta y del centro de costo, pero si mi cuenta no tiene centro de costo solo ingrese el padre de la cuenta con el centro de costo null

Lo que debe hacer...........

CUENTA CENTRO_COSTO

11100503 NULL
111005 NULL
1110 NULL
11 NULL
1 NULL
11050502 102030
11050502 102000
11050502 100000
11050502

110505 102030
110505 102000
110505 100000
110505

1105 102030
1105 102000
1105 100000
1105

11 102030
11 102000
11 100000
11

1 102030
1 102000
1 100000
1

eso es lo que me debe hacer el procedimiento, pero el procedimiento que hasta el momento tengo solo me guarda

Lo que hace .............

CUENTA CENTRO COSTO

11100503 NULL
111005 NULL
1110 NULL
11 NULL
1 NULL
11050502 102030
11050502 102000
11050502 100000
11050502

nose por donde mas moverle, llevo 4 dias en lo mismo y no he podido encontrar la solución agradezco toda la ayuda que me puedan brindar

Última edición por gnzsoloyo; 29/06/2015 a las 11:41