/*Cambios que se harían a la forma:

* Cursor c_movtos se podrían nvl a cod_proveedor
* No es necesario calcular min o max del proveedor
* Variables debpago, crepago y vsaldo pasarian a 
  definirse de acuerdo cxp_det_pago_nota.mon_pago
* Quitar where de cxp_movimientotmp*/

begin
   for serv in (select distinct servidor from repservidores)
   loop
      Replicacion.FijarEstado(serv.Servidor, Replicacion.ChequearServidor(serv.servidor));
   end loop;
end;
/
---------------------------------------------------------------------------------------------
RepInvCat

REPINVCAT

Instruccion para Montar Replicación:

* Crear Objetos Replicacion para server (Tablas:RepSecuencia, RepComDef, RepErrores, RepTablas, 
  RepPlantilla, RepServidor, RepInstancias, Vistas: RepServidores, RepInstanciasv, Montar preferencia server, 
  paquetes: xrp, replicacion, repsync, genarcreplic).

* Generar script para generación de vistas para clientes
  - Eliminar tablas y meter vistas en bodega

* Crear objectos replicacion para cliente(Tablas: repsecuencia, repcomdef, reperrores, repinstancias, 
  vistas: repservidores, repinstanciasv).

* Con el generador de rutinas de replicacion crear vistas con script para el cliente.

* Crear parar el cliente cliente los paquetes: xrp, replicacion, repsync, genarcreplic.

* Crear datalinks

* Llenar datos en server: repsecuencia (REP, ERR), repservidor, reptablas, repplantilla, repinstancias.

* Llenar datos en clientes: repsecuencia(REP, ERR), repinstancias

* Con el generador de rutinas de replicacion crear alters, paquetes y los triggers
  para cada uno de los servidores, al momento de montar los objetos se hará en ese
  orden.

* Los alters, paquetes y vistas para el cliente son unicos para todos, 
  cada servidor tendrá sus propias rutinas de triggers.

* Montar los alters, paquetes y triggers para todos en ese orden.

Validaciones para generar:

* Va a haber un unico servidor que es master                        ok
* En el servidor master debe estar la lista completa de tablas      ok
  con la definicion de columnas y es la unica que vale.
* En un servidor esclavo debe validarse que no exista una tabla     ok
  que no este en el master.
* Solo en el master se puede hacer la generación de trigger         ok
  y paquetes y lo hara para todos los servidores.
* Meter el catálogo de servidores que sería solo para el maestro.   ok
* Hacer vista para los esclavos para reptabla y repplantilla, repservidor
  del servidor.ok

drop trigger ReplBefVENDEVOLUCION ;
drop trigger ReplAftVENDEVOLUCION ;
drop package repventas;

delete from repinstancias;
delete from repplantilla;
delete from reptablas;

alter table inv_acum_periodo drop column local1;
alter table inv_acum_periodo drop column replica1;
alter table inv_artic_locbod drop column local1;
alter table inv_artic_locbod drop column replica1;
alter table inv_articulo drop column local1;
alter table inv_articulo drop column replica1;
alter table inv_articulobod drop column local1;
alter table inv_articulobod drop column replica1;
alter table inv_consec_movtos drop column local1;
alter table inv_consec_movtos drop column replica1;
alter table inv_detmovimiento drop column local1;
alter table inv_detmovimiento drop column replica1;
alter table inv_encabmovimiento drop column local1;
alter table inv_encabmovimiento drop column replica1;
alter table inv_lote drop column local1;
alter table inv_lote drop column replica1;
alter table inv_lote_artic_bodega drop column local1;
alter table inv_lote_artic_bodega drop column replica1;
drop trigger ReplBefinv_acum_periodo ;
drop trigger ReplAftinv_acum_periodo ;
drop trigger ReplBefinv_artic_locbod ;
drop trigger ReplAftinv_artic_locbod ;
drop trigger ReplBefinv_articulo ;
drop trigger ReplAftinv_articulo ;
drop trigger ReplBefinv_articulobod ;
drop trigger ReplAftinv_articulobod ;
drop trigger ReplBefinv_consec_movtos ;
drop trigger ReplAftinv_consec_movtos ;
drop trigger ReplBefinv_detmovimiento ;
drop trigger ReplAftinv_detmovimiento ;
drop trigger ReplBefinv_encabmovimiento ;
drop trigger ReplAftinv_encabmovimiento ;
drop trigger ReplBefinv_lote ;
drop trigger ReplAftinv_lote ;
drop trigger ReplBefinv_lote_artic_bodega ;
drop trigger ReplAftinv_lote_artic_bodega ;
drop package repINVENTARIO;

--Generar un jar
jar cvfm lab1.jar miManifiesto.mf laboratorio1\*

--Videos Manual
http://www.jdeveloperla.com/joomla/index.php?option=com_content&task=view&id=119&Itemid=104

create table prreplic(a varchar2(3) not null, 
                      b number(5), 
                      local1 varchar2(1) default 'S', 
                      replica1 varchar2(1) default 'N', 
                      constraint prreplicapk primary key (a));

create table prreplic2(a varchar2(3) not null, 
                      b number(5), 
                      local1 varchar2(1) default 'S', 
                      replica1 varchar2(1) default 'N', 
                      constraint prreplica2pk primary key (a));

create table prreplic3(a varchar2(3) not null, 
                      b number(5), 
                      local1 varchar2(1) default 'S', 
                      replica1 varchar2(1) default 'N', 
                      constraint prreplica3pk primary key (a));

CREATE OR REPLACE TRIGGER ReplBefPrReplic
BEFORE INSERT OR UPDATE ON PrReplic
FOR EACH ROW 
BEGIN 
  :New.Replica1 := :New.Control1;
  :New.Control1 := 'S';
End; 
/

CREATE OR REPLACE TRIGGER ReplAftPrReplic
AFTER INSERT OR UPDATE OR DELETE ON PrReplic
FOR EACH ROW 
BEGIN 
   If Inserting and :New.Replica1='S' Then       
      RepPrReplic.InsPrReplic2(:new.a, :new.b);
      RepPrReplic.InsPrReplic3(:new.a, :new.b);

   elsif Updating and :New.Replica1='S' then  
      RepPrReplic.ActPrReplic2(:Old.A, :new.a, :new.b);
      RepPrReplic.ActPrReplic3(:Old.A, :new.a, :new.b);

   elsif Deleting and :Old.Replica1='S' then
      RepPrReplic.DelPrReplic2(:Old.A);
      RepPrReplic.DelPrReplic3(:Old.A);
   end if; 
End; 
/

Create or Replace Package RepPrReplic is

   --##Tabla PrReplic
   Procedure InsPrReplic(pA in Varchar2, pB in Number);
   Procedure ActPrReplic(pOldA in Varchar2, pA in Varchar2, pB in Number);
   Procedure DelPrReplic(pA in Varchar2);

End RepPrReplic;
/

Create or Replace Package Body RepPrReplic is

   --##Tabla PrReplic
   Procedure InsPrReplic(pA in Varchar2, pB in Number) Is
   Begin
      Insert Into PrReplic(A, B, Control1) 
                    Values(pA, pB, 'N');
   End InsPrReplic;

   Procedure ActPrReplic(pOldA in Varchar2, pA in Varchar2, pB in Number) Is
   Begin
      Update PrReplic
         Set A        = pA, 
             B        = pB,
             Control1 = 'N'
      Where A = pOldA;

      If Sql%NotFound Then
         InsPrReplic(pA, pB);
      End If;
   End ActPrReplic;

   Procedure DelPrReplic(pA in Varchar2) Is
   Begin
      Update PrReplic
         Set Control1 = 'N'
      Where A = pA;

      If Sql%Found Then
         Delete From PrReplic
         Where A = pA;
      End If;
   End DelPrReplic;

End RepPrReplic;
/

select * from prreplic;
select * from prreplic2;
select * from prreplic3;

ALTER TABLE XX ADD(LOCAL1 VARCHAR2(1) DEFAULT 'S', REPLICA1 VARCHAR2(1) DEFAULT 'N');
-----------------------*******************************************************-------------------------------------
-----------------------********************PENDIENTES*************************-------------------------------------
-----------------------*******************************************************-------------------------------------

--------------------------------------------------------------------------------
Alta Prioridad:

1- Error de preparación de pagos. Débitos superan 
   a los créditos.

Reportes Gi:
1) *Resumen del total vtas, vs total de compras y la utilidad por año    no!
2) *Compras mensuales por proveedor Enero a Diciembra                    no!
3) *Reporte por mes de lo comprado a proveedores sustitutos              no!
4) *Productos mas vendidos por mes                                       no!
8) *Proyección de consumos y compras por producto                        no!

----------------------------------------------------------------------------------------------------------------
Baja Prioridad:

1- ¿Suena familiar forma prepenco.fmb o tabla gen_camb_costo?

2- Chequear el registro del reclamo en la parte de inventarios
   contra la aplicación de facturas.

   ¿Pq no utiliza invact.detalle?

3- Anothers keys en compras:
      
   COM_DET_FACTURA
      BD: COM_DET_FACTURA_UQ (COD_CIA, SUCURSAL, NUM_FACTURA, COD_PROVEEDOR, COD_ARTICULO, FEC_VENCE)
      PD: COM_DET_FACTURA_UQ (COD_CIA, SUCURSAL, NUM_FACTURA, COD_PROVEEDOR, COD_ARTICULO, FEC_VENCE)

      Debería ser:
      COM_DET_FACTURA_UQ (COD_CIA, SUCURSAL, NUM_FACTURA, COD_PROVEEDOR, COD_ARTICULO_FINAL, FEC_VENCE)    

   COM_DET_NACIONALIZACION
      BD: COM_DET_NACIONALIZACION_UQ (COD_CIA, SUCURSAL, NUM_NACIONALIZACION, COD_ARTICULO, FEC_VENCE)
      PD: COM_DET_NACIONALIZACION_UQ (COD_CIA, SUCURSAL, NUM_NACIONALIZACION, COD_ARTICULO, FEC_VENCE)

      Debería ser:
      COM_DET_NACIONALIZACION_UQ (COD_CIA, SUCURSAL, NUM_NACIONALIZACION, COD_ARTICULO_FINAL, FEC_VENCE)

   COM_DET_RECIBO
      BD: COM_DET_RECIBO_NACIO_UQ (COD_CIA, SUCURSAL, DOCUMENTO, COD_BODEGA, COD_ARTICULO, COD_ARTICULO_FINAL)
      PD: COM_DET_RECIBO_NACIO_UQ (COD_CIA, SUCURSAL, DOCUMENTO, COD_BODEGA, COD_ARTICULO, COD_ARTICULO_FINAL)

      Está bien? No debería meterse fec_vence?

Ventas

1. Recordar correccion otros cargos en venxcaja.rdf 

3. No existe forma llobet/rpvenmon (facturas x cliente lista de articulos)

4. Reportes, Facturas, Vendedor, linea, artículo. Reporte Clientes x Vendedor Detallado: 
   no existe llobet\venxagdt	

Planillas

1. detplaco.rdf no tiene nada
2. librosaltmp.rdf 08052002 0115 esto aun se utiliza porque existe librosal?
3. retimpv.rdf  08052002 0121 no compila el modelo: las tablas pladetdecimp b , plaencdecimp no existen.

Compras "Articulos Finales"

corregir comrredi articulo final

En la nacionalizacion y el recibo se debe 
traer la descripcion del articulo final, sino 
existe la de articulos.

En el recibo se deben juntar ambos articulos

Varios: 

Ordenamiento de estados de cuenta en reportes de cobros
Recibo resumido en traslados de inventario.

Pasar cuenta a compras.
Variable ccosto recibo.

Insert Null en aplicar pago. cxp_enc_pago_nota.monpago

tamaño desccosto invmoves

Planillas Candy: Provisiones, hay algunas provisiones que no deberian poder
		 cambiarse por empleado, ejemplo: Aporte Patronal Asociacion.


Correccion en reportes de antiguedad y puesto en planilla (antiguedad y antigagen)

Agregar la nueva contabilización a Cxp.

Eliminar reportes de estadisticas.

Documentos a pagar con varias obligaciones

-----------------------*******************************************************-------------------------------------
-----------------------********************FIN PENDIENTES*************************-------------------------------------
-----------------------*******************************************************-------------------------------------

------------------------------------------------------------------------------------
Cambios Sge Mexico

traer la cantidad bonificada en oc y factura.

corregir el query del reporte de artículos sin movimiento, 
el reporte debe ser de los articulos que tienen existencia
y costo.

-----------------------*******************************************************-------------------------------------
-----------------------**************CAMBIO TABLAS Y VISTAS PRECIOS***********-------------------------------------
-----------------------*******************************************************-------------------------------------
FAC_PROMOCION     = PrePromocion
FAC_DETPROMOCION  = PreDetPromocion
GEN_ENC_PRECIO    = PreEncCambio
GEN_CAMB_PRECIO   = PreDetCambio
gen_incon_campre  = PreInconsCambio
fac_precio_pro    = PrePrecioPro
fac_desc_cliente  = PreDescClase
CAMB_PRECIO_ACT   = PreCambioAct
CAMB_PRECIO_PEN   = PreCambioPen

Cambios nombre tablas y vistas precios:

Librerias

Platino
Precio
VenFac

Paquetes

descuentos (dsc)

Formas

FacPromo
FcactPro
FrFacPro
Precampp
PreCauCam
PreCliPe
PrecMope
PreCorfe
PreGenCa
PreGencp
PreLiPre
PreLiprh
PreMovif
PreMovPe
PreqCara
PrerMoPe
RVenProm
Pretracp
cobros\cxccacli
compra\comcafac
compra\comcamar
ventas\desclin
ventas\desclinlanco
ventas\venprexi

Reportes

FcDescu
PreCampr
PreMovCp
Prerlipr
Prermope
Prerprnt
RFacProm
Rpvenxa
RVenProm
compra\comrfadp
compra\comrnacc
compra\comrnacf
compra\comrrena
------------------------------------------------------------------------------------

Recibos ver gestión de lotes al hacer entradas y salidas. 18-02-2008

* Se activo el campo lote_interno
------------------------------------------------------------------------------------
Cambios méxico 28-02-2008

Resumiendo:
1) Identificar adecuadamente cuando se va a usar prov.titular.

   estgen.fmb
   estpivote.sql
   esrpgen.fmb
   repvtas.fmb
   estvtas.fmb
   fcprompr.rdf
   fcrpromp.fmb
   estadist.mmb

   * En la forma se utiliza la vista venvresventa que no se encuentra.
   * En consecutivo de facturas (rpfacxco): El query del reporte croma porque no encuentra
                                            venfactnot.descripcion.
 
2) Agregar clase cliente como pivote en todo lado que hayan pivotes en estadisticas.

 
3) Hacer un reporte de ranking en estadisticas con los n mejores pivotes
   Por cantidad, monto, utilidad con porcentajes.

--------------------------------------------------------------------------------------

06-03-2008

Propuesta de Cambio Corrección costos en el traslado en el recibo
de mercadería.

1- En compras.pll: la rutina invact.detalle debe
   ser una función y retornar el costo de compra retornado
   por fac_inv.ins_detfactent y fac_inv.ins_detfactsal.

2- En comfactu.fmb: Recibir el costo retornado por invact.detalle
                    en la rutina aplicadetalle.

3- En comnacio.fmb: Recibir el costo retornado por invact.detalle
                    en la rutina aplicadetalle.

4- En comrenac.fmb: 
      * Recibir el costo de la salida en aplicadetalle.
      * El costo a utilizar en la entrada es el de la salida si es un traslado
        o el cos_compra del origen del recibo.
      * Recibir el costo de la entrada en aplicadetalle.

Estimación: 4 horas

------------------------------------------------------------------------------------------
-----------***************Guia Distribuciones*************------------------------------
------------------------------------------------------------------------------------------

--En el pre-form (**talvez no haga falta llamarla**)
--Inicializa la sesion de distribuciones
Dist.Iniciar(:encabezado.cod_cia, :parameter.Sistema);

--Se debe invocar cuando se desea ver la distribucion en pantalla
--Muestra la distribucion
Dist.MostrarDist(:com_enc_factura.cod_cia, :parameter.sistema, :coord.distribucion);

--Se debe invocar cuando se desea anula una distribucion
--Anula la distribucion
Dist.AnularDist(:com_enc_factura.cod_cia, :parameter.sistema, :coord.distribucion);

--Correr en post query del documento (**talvez no haga falta llamarla**)
--Fija la distribucion actual
--y consulta datos de la distribucion
Dist.Fijar(:com_enc_factura.distribucion);

--Correr en post query del documento
--Setea atributo visual a la distribucion
Dist.MarcarDist('com_enc_factura.distribucion');

--En condetdistribucion.wnbi
--Indica si se puede generar la distribucion
Dist.Generable(:Coord.Bloque,vDist)

--En condetdistribucion.wnbi
--Genera la distribucion
vDist:=Dist.GenerarDist('Documento #'||:coord.ref, :coord.fecha,
                        'FAC'||:coord.origen, :com_enc_factura.cod_movto, :coord.moneda,
                        :coord.tipcambio, :coord.tipcambiobase);

--En condetdistribucion.wnbi o una rutina que sea llamada desde
--ella
--Setea las variables de la plantilla
Contexto.FijarVariable(Var.NomVar, nvl(:Coord.cCosto,'0'));

--En condetdistribucion.wnbi
--Carga el detalle si existe una plantilla para la distribucion
Dist.Cargarplantilla(:com_enc_factura.nom_asiento, null, null, null);

--En condetdistribucion.wnbi
--Indica si se puede tocar la distribucion
Dist.Modificar(get_block_property('com_enc_factura',update_allowed)='TRUE');

--------------Correciones multimoneda-------------
Cambiar discon.datos meter crebas y debbas                            *

Modificar dist.fijar para cargas crebas y debbas en distcon.datos     *

En la Especificacion de Dist meter variables debito y credito         *
de la moneda base 

En Dist.Verificacion: Cargar los totales de la moneda base del paquete  *
                      con los totales del bloque condetdistribucion 

En Dist.Balanceado: Se deben comparar tambien los totales por moneda base *

En ConDetDistribucion.wnri: No eliminar registro si las monedas son diferentes *

En ConDetDistribucion.Cod_Cta.Wvi: Permitir tambien cuentas de moneda base *

Agregar totales al bloque condetdistribucion para totales moneda base       *
Los totales actuales solo deben de tomarlo de los montos de la moneda de la
distribucion.

Agregar moneda base a condetdistribucion. *

En lista de valores considerar tambien la moneda base.*

P Primarys
R Foreign
U Uniques

select constraint_type, decode(index_name, null, 'nulo', 'no nulo') nulo, count(1) from all_constraints
group by constraint_type, decode(index_name, null, 'nulo', 'no nulo');

UNIQUENES  COUNT(1)
--------- ---------
NONUNIQUE        37
UNIQUE           11

Select c.constraint_type, count(1)
from all_constraints c, all_cons_columns cc
where c.owner            = user
  and c.constraint_type in ('P', 'R', 'U')
  and cc.owner           = user
  and cc.constraint_name = c.constraint_name
  and cc.table_name      = c.table_name
  and not exists(select 1 from all_ind_columns ic
                 where ic.index_owner = user
                   and ic.index_name  = c.constraint_name
                   and ic.table_name  = c.table_name
                   and ic.column_name = cc.column_name)
group by c.constraint_type;

Estan constraints pero no en indices
Más errores en llaves foraneas

Total Columnas
3493

C  COUNT(1)
- ---------
P         4
R      1130

select i.uniqueness, count(1)
from all_indexes i, all_ind_columns ic
where i.owner = user
  and (i.uniqueness = 'UNIQUE'	
       or i.index_name like '%FK')
  and ic.index_owner = user
  and ic.index_name  = i.index_name
  and ic.table_name  = i.table_name
  and not exists(select 1 from all_cons_columns cc
                 where cc.owner = user
                   and cc.constraint_name = i.index_name
                   and cc.table_name      = i.table_name
                   and cc.column_name     = ic.column_name)
group by i.uniqueness;

Estan en indices pero no en constraints
Más errores en llaves foraneas

Total Columnas
2407