Situación

Este mensaje ocasionalmente se presenta en la comprobación base saldo por diversos motivos en la parte de Controla Costo. Esto se debe a que existen problemas en el registro de la tabla FATSECM, que es la encargada de generar, actualizar y presentar el costo de las mercaderías por sucursal y por departamento. 



Al tratar de ajustar costo y cantidad: 



Ejemplo:

Ticket de ejemplo: Tickets #55300

Cliente INSUMAGRO. 


¿Cómo identifico cuál es el problema con FATSECM?


Primeramente debemos obtener de la comprobación base saldo las mercaderías que tienen el problema de divisor por zero: 


(datos que usaremos para realizar consultas)


Luego nos conectamos a la base del cliente y aplicamos un SQL de consulta que nos retornara los tipos de factura que tienen el valor 0 en el costo. 


QUERY: 


SELECT SECM.DOC, TIPO.CNOMETPFT TIPO, FATU.DDATAFATU FECHA, FATU.NCODIFILI FILIAL, FATU.NCODIDEPA DEPTO
FROM (SELECT TO_NUMBER(SUBSTR(F.CDOCOSECM, 2, 8)) DOC
      FROM FATSECM F
      WHERE F.NCODIMERC = 117 --COD MERCADERIA
      AND F.NCODIFILI = 2     --SUCURSAL
      AND F.NCODIDEPA = 5     --DEPARTAMENTO 
      AND F.NCUMESECM = 0) SECM ,
                           FATFATU FATU,
                           FATTPFT TIPO
WHERE FATU.NCODIFATU = SECM.DOC
AND   FATU.NCODITPFT = TIPO.NCODITPFT;


OBS: se debe cargar el código de la mercadería, la sucursal y el departamento en la query de acuerdo a nuestras informaciones en la comprobación base saldo. 


Aquí ya tenemos un resultado que nos puede llevar a la solución, caso el tipo sea una NOTA DE CREDITO/DEBITO validar si efectivamente debió tocar el costo de la mercadería, caso no, se debe excluir por script ese registro que no debió registrar en FATSECM (repasar a debug). 


Pero caso sean otro tipo de facturas, se debe seguir con el análisis. 


Segundo punto, validamos los movimiento de la mercadería (ficha fast), esta verificación realizamos para ver si no tenemos saldos negativos en algún movimiento de mercadería. Para agilizar el proceso podemos utilizar las siguientes consultas.


- Para verificación de que existen saldos negativos en FATMVME (Movimientos de Mercadería). 


SELECT * FROM (SELECT A1.NCODIMERC COD,
               A1.NCODIFILI FILI,
               A1.NCODIDEPA DEPA, 
               A1.CDOCOMVME DOCO_MVME,
               A1.NCODITPFT TPFT,
               A2.CNOMETPFT TIPO,
               A1.DDATAMVME DATA,
               A1.NVLUNMVME UNIT_CONT,
               A1.NVLGEMVME UNIT_GERE,
               A1.NQUANMVME QTD,
              (SELECT SUM(NQUANMVME*DECODE(B.CTPMVTPFT,'E', 1, -1)) SLDO
                        FROM FATMVME A, FATTPFT B
                       WHERE A.NCODITPFT = B.NCODITPFT
                         AND A.NCODIFILI = A1.NCODIFILI
                         AND A.NCODIDEPA = A1.NCODIDEPA
                         AND A.NCODIMERC = A1.NCODIMERC
                         AND A.DDATAMVME <= A1.DDATAMVME ) SLDO
               FROM FATMVME A1, FATTPFT A2
              WHERE A1.NCODIMERC = 117           --COD MERC
                AND A1.NCODITPFT = A2.NCODITPFT
                --AND DDATAMVME >= '01/01/2021'
                AND A1.NCODIFILI = 2             --SUCURSAL
                AND A1.NCODIDEPA = 5             --DEPARTAMENTO
                --AND A1.SEAT <> B1.SLDO 
ORDER BY A1.NCODIMERC, A1.DDATAMVME) DATOS                                                  
                   WHERE DATOS.SLDO < 0;


OBS: recordar siempre cargar en la QUERY la mercadería, Suc. y Depto.


Si el SQL retorna datos y vemos que se genera saldos negativos, entonces efectivamente ese es nuestro problema en la comprobación base saldo. 


Para seguir con la verificación y apuntar a una solución, debemos saber cuanto es el saldo negativo real, para ello usamos la siguiente consulta que nos reproduce lo mismo que la Ficha de Mercadería - Fast: 


SELECT A1.NCODIMERC COD,
       A1.NCODIFILI FILI,
       A1.NCODIDEPA DEPA, 
       A1.CDOCOMVME DOCO_MVME,
       A1.NCODITPFT TPFT,
       A2.CNOMETPFT TIPO,
       A1.DDATAMVME DATA,
       A1.NVLUNMVME UNIT_CONT,
       A1.NVLGEMVME UNIT_GERE,
       CASE
         WHEN SUBSTR(A2.CNOMETPFT,0, 5) = 'SAIDA' THEN (A1.NQUANMVME * -1)
         ELSE A1.NQUANMVME
       END QTD
  FROM FATMVME A1, FATTPFT A2
 WHERE A1.NCODIMERC = 117                                                     --COD MERC
   AND A1.NCODITPFT = A2.NCODITPFT
   --AND DDATAMVME >= '01/01/2021'
   AND A1.NCODIFILI = 2                                                       --SUCURSAL
   AND A1.NCODIDEPA = 5                                                       --DEPARTAMENTO
--   AND A1.SEAT <> B1.SLDO 
ORDER BY A1.NCODIMERC, A1.DDATAMVME;

OBS: recordar siempre cargar en la QUERY la mercadería, Suc. y Depto.


Luego para poder aplicar una formula migramos esos datos a una hoja de calculo (seleccionamos todas las filas y procedemos con CTRL + C y CTRL + V). 




Enlace de ejemplo con formula y condicional: VERIFICACION SALDO NEG


Como establecimos la condición y la formula vamos viendo nuestra planilla en donde esta pintado en rojo y simulamos una entrada justo antes del saldo negativo: 



Entrada simulada: 


OBS: volver a arrastrar la formula para que aplique el cambio, también tener en cuenta que la simulación debe ser por el valor negativo.


Por ultimo verificamos si en algún otro punto se genera un saldo negativo luego de realizar la simulación, si se vuelve a generar, repetir el proceso.


Aquí culminamos la verificación y basta con sumar los valores de la simulación para saber el valor del saldo negativo, asimismo, la fecha en la que debo corregir. 



ADICIONAL: En la misma planilla de ejemplo agregue la verificación de una mercadería que tenia varios saldos negativos en una sucursal y como se realizaron las simulaciones para detectar el valor real negativo. 



Solución

Como mencionado existen dos caso y por ende dos soluciones. 


Primera solución, caso se trate de una nota de crédito que no debió generar FATSECM, encaminar al Área de Debug para ser aplicado un script sobre ese movimiento y sacar de FATSECM.


Segunda solución, realizar una entrada interna con fecha anterior (un segundo antes) del movimiento que genero el saldo negativo por la cantidad total de las simulaciones.


Listo ! Ahora eres todo un experto en realizar las verificaciones de la comprobación base saldo en cuanto a saldos y costos de las mercaderías.  


Errores relacionados a este caso: ORA-20883