Ejemplo de cómo generar una stored personalizada para crear pedidos tal cual lo haría el ERP
- Creamos un pedido de cliente con los artículos que pase por parámetro o si no con los que se definan en tabla personalizada Pers_Clientes_PedidoHab
- Definimos la llamada mediante script
Probado con versión 4.2.1
Atención, que si cambiamos de versión y la estructura de tablas cambió, tendremos que adaptar la stored a dichos cambios.
Código SQL:
ALTER TABLE [dbo].[Pers_Clientes_PedidoHab] DROP CONSTRAINT [FK_Pers_Clientes_PedidoHab_Clientes_Datos] GO ALTER TABLE [dbo].[Pers_Clientes_PedidoHab] DROP CONSTRAINT [FK_Pers_Clientes_PedidoHab_Articulos] GO /****** Object: Table [dbo].[Pers_Clientes_PedidoHab] Script Date: 24/03/2017 12:25:25 ******/ DROP TABLE [dbo].[Pers_Clientes_PedidoHab] GO /****** Object: Table [dbo].[Pers_Clientes_PedidoHab] Script Date: 24/03/2017 12:25:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Pers_Clientes_PedidoHab]( [IdCliente] [dbo].[T_Id_Cliente] NOT NULL, [IdArticulo] [dbo].[T_Id_Articulo] NOT NULL, [Cantidad] [dbo].[T_Cantidad] NOT NULL, [IdDoc] [dbo].[T_Id_Doc] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_Pers_Clientes_PedidoHab] PRIMARY KEY CLUSTERED ( [IdCliente] ASC, [IdArticulo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Pers_Clientes_PedidoHab] WITH CHECK ADD CONSTRAINT [FK_Pers_Clientes_PedidoHab_Articulos] FOREIGN KEY([IdArticulo]) REFERENCES [dbo].[Articulos] ([IdArticulo]) ON UPDATE CASCADE ON DELETE CASCADE GO ALTER TABLE [dbo].[Pers_Clientes_PedidoHab] CHECK CONSTRAINT [FK_Pers_Clientes_PedidoHab_Articulos] GO ALTER TABLE [dbo].[Pers_Clientes_PedidoHab] WITH CHECK ADD CONSTRAINT [FK_Pers_Clientes_PedidoHab_Clientes_Datos] FOREIGN KEY([IdCliente]) REFERENCES [dbo].[Clientes_Datos] ([IdCliente]) ON UPDATE CASCADE ON DELETE CASCADE GO ALTER TABLE [dbo].[Pers_Clientes_PedidoHab] CHECK CONSTRAINT [FK_Pers_Clientes_PedidoHab_Clientes_Datos] GO zpermisos Pers_Clientes_PedidoHab go if exists (select * from sys.procedures where name = 'pPers_Pedido_Asistente') begin drop procedure pPers_Pedido_Asistente end go CREATE PROCEDURE [dbo].[pPers_Pedido_Asistente] @IdEmpleado t_id_empleado , @IdCliente t_id_cliente , @IdContacto t_id_contacto , @IdProyecto t_id_proyecto = NULL , @IdFormaPago t_forma_pago = NULL , @IdArticulo1 t_id_articulo = NULL , @Cantidad1 t_cantidad = 1 , @IdArticulo2 t_id_articulo = NULL , @Cantidad2 t_cantidad = 1 , @IdPedido t_id_Pedido = 0 output AS select @IdProyecto=case when isnull(@idproyecto,0)=0 then null else @idproyecto end , @IdContacto=case when isnull(@IdContacto,0)=0 then null else @IdContacto end , @IdFormaPago=case when isnull(@IdFormaPago,0)=0 then null else @IdFormaPago end , @IdArticulo1=case when isnull(@IdArticulo1,'')='' then null else @IdArticulo1 end , @IdArticulo2=case when isnull(@IdArticulo2,'')='' then null else @IdArticulo2 end --declare @IdPedido int declare @IdLinea int --declare @IdFactura int --declare @IdAlbaran int --declare @NumFactura int --set @IdAlbaran = 0 --set @IdPedido = 0 --set @IdLinea = 0 --set @IdFactura = 0 Declare @vRet int declare @IdEmpresa t_id_empresa declare @IdDepartamento t_id_departamento declare @FechaPed smalldatetime --declare @IdContacto t_id_contacto declare @IdContactoA t_id_contacto declare @IdContactoF t_id_contacto declare @DescripPed varchar (255) declare @IdLista t_id_lista declare @FormaPago t_forma_pago declare @IdMoneda t_id_moneda declare @Descuento real declare @ProntoPago real declare @IdPortes T_Id_Portes declare @IdIva T_Id_Iva declare @IdComisionista t_id_empleado declare @Usuario varchar (50) declare @IdCentroCoste T_Id_CentroCoste declare @IdDelegacion t_id_delegacion set @Usuario = USER select @FechaPed=GETDATE() ,@IdContacto=isnull(@IdContacto,cd.IdContacto),@IdContactoA=cd.IdContactoA,@IdContactoF=cd.IdContactoF ,@DescripPed= cd.Cliente + ' Fecha: ' + convert(varchar (10),GETDATE(),103),@IdLista=cde.IdLista ,@FormaPago= ISNULL(@IdFormaPago, cde.FormaPago) ,@IdMoneda=cde.IdMoneda ,@Descuento=cde.Descuento,@ProntoPago=cde.ProntoPago, @IdPortes=IdPortes, @IdIva = IdIva ,@IdComisionista = cdc.IdEmpleado from Clientes_Datos cd inner join Clientes_Datos_Economicos cde on cde.IdCliente=cd.IdCliente inner join Clientes_Datos_Comerciales cdc on cdc.IdCliente=cd.IdCliente where cd.IdCliente = @IdCliente --select @FechaPed=getdate() select @IdDepartamento=ed.IdDepartamento,@IdEmpresa=d.IdEmpresa, @IdDelegacion=d.IdDelegacion from Empleados_Datos ed inner join Departamentos d on d.IdDepartamento=ed.IdDepartamento where ed.IdEmpleado=@IdEmpleado --select @IdCentroCoste=IdCentroCoste from Proyectos where IdProyecto=@IdProyecto select @IdPedido=0, @IdLinea=0 BEGIN TRY BEGIN TRAN Exec @vRet = pPedidos_Cli_Cabecera_I @IdPedido out, --auto @IdEmpresa = 0, @AñoNum = 2017, --lo obtiene automáticamente de acuerdo a la serie y la fecha @SeriePedido = 0, @NumPedido = 0, --auto @Fecha = @FechaPed, @IdCliente = @IdCliente, @Origen = NULL, @IdPedidoCli = NULL, @IdContacto = @IdContacto, --ficha de cliente @IdContactoA = @IdContactoA, --"" @IdContactoF = @IdContactoF, --"" @DescripcionPed = @DescripPed, --descrip opcional @IdLista = @IdLista,--ficha de cliente lista de precios @IdListaRevision = 1, --ficha de cliente lista de precios rev @IdEmpleado = @IdEmpleado, --emp. alta @IdDepartamento = @IdDepartamento, --depto empleado alta @IdTransportista = NULL, @IdMoneda = @IdMoneda, --Ficha de cliente @FormaPago = @FormaPago, --ficha de cliente @Descuento = @Descuento, --ficha de cliente @ProntoPago = @ProntoPago, --ficha de cliente @IdPortes = @IdPortes, --ficha de cliente @IdIva = @IdIva, --ficha de cliente @IdEstado = 0, --pedidos_estados @IdSituacion = 0, @FechaSalida = @FechaPed, @Observaciones = NULL, @Comision = 0, @Cambio = 0, @CambioEuros = 1, @CambioBloqueado = 0, @Representante = @IdComisionista,--comisionista --ficha de cliente @IdCentroCoste = @IdCentroCoste, @IdProyecto = @IdProyecto, @IdOferta = NULL, @Revision = NULL, @Inmovilizado = 0, @Referencia = '0', @RecogidaPorCli = 0, @ContactoLlamada = NULL, @Hora = NULL, @HoraSalida = NULL, @IdTipoPedido = 0, @RecEquivalencia = 0, @Bloqueado = 0, @IdMotivoBloqueo = NULL, @IdEmpleadoBloqueo = NULL, @IdApertura = NULL, @IdPedidoOrigen = 0, @NoCalcularPromo = 0, @IdDoc = NULL, @Usuario = @Usuario, @FechaInsertUpdate = @FechaPed if @vRet = 0 begin RAISERROR('Error al insertar el pedido',12,1) end declare @TablaArticulos table (IdArticulo t_id_Articulo, Descrip varchar (50), IdIva smallint, Cantidad float) if @IdArticulo1 is not null or @IdArticulo2 is not null begin insert into @TablaArticulos (IdArticulo, Descrip, IdIva, Cantidad) select IdArticulo, Descrip,IdIva,isnull(@Cantidad1,1) from articulos where IdArticulo = @IdArticulo1 UNION select IdArticulo, Descrip,IdIva,isnull(@Cantidad2,1) from articulos where IdArticulo = @IdArticulo2 end else begin insert into @TablaArticulos (IdArticulo, Descrip, IdIva, Cantidad) select a.IdArticulo, a.Descrip,a.IdIva,1 from articulos a inner join Pers_Clientes_PedidoHab p on p.IdArticulo=a.IdArticulo where p.IdCliente=@IdCliente end declare @Precio T_Precio, @PrecioPtas T_Precio declare @IdMonedaDev T_Id_Moneda declare @DescuentoLin float declare @Comision T_Comision declare @DtoLP1 float declare @DtoLP2 float declare @idTipoCantidad T_Tipo_Cantidad declare @_IdArticulo t_id_Articulo, @_Descrip varchar (50), @_IdIva t_id_iva, @_Cantidad float DECLARE lCur CURSOR FOR Select IdArticulo,Descrip,IdIva,Cantidad from @TablaArticulos OPEN lCur FETCH NEXT FROM lCur INTO @_IdArticulo, @_Descrip,@_IdIva,@_Cantidad WHILE @@FETCH_STATUS <> -1 BEGIN select @Precio=0, @DtoLP1=0,@DtoLP2=0, @DescuentoLin=0, @Descuento=0 exec dbo.PDamePrecio_Articulo @IdArticulo =@_IdArticulo, @IdCliente =@IdCliente, @IdLista =@IdLista, @Cantidad =@_Cantidad, @IdMoneda =@IdMoneda, @Precio =@Precio OUTPUT, @IdMonedaDev =@IdMoneda OUTPUT, @Descuento =@DescuentoLin OUTPUT, @Comision =@Comision OUTPUT, @IdListaRet =NULL,--@IdLista OUTPUT, @DtoLP1 =@DtoLP1 OUTPUT, @DtoLP2 =@DtoLP2 OUTPUT, @DtoGD =@Descuento OUTPUT, @IdAlmacen =0, @PrecioCosteEuros =0,-- OUTPUT, @PreciosGenericos =0, @CampoPrecioCoste =0, @IdTipoUnidad =@idTipoCantidad OUTPUT, @FechaComprobacion =@FechaPed, @IdDelegacion =@IdDelegacion, @DtoLP3 =NULL, @DtoLP4 =NULL, @DtoLP5 =NULL, @Objeto =NULL, @IdDocObjeto =NULL set @PrecioPtas = @Precio * 166.386 --creamos la línea de pedido --select @IdLista Exec @vRet = pPedidos_Cli_Lineas_I @IdPedido , @IdLinea output, @IdArticulo = @_IdArticulo, @IdArticuloCli = NULL, @IdAlmacen = 0, @Cantidad = @_Cantidad, @Precio = @PrecioPtas, @Precio_EURO = @Precio, @PrecioMoneda = @Precio, @Descuento = @DescuentoLin, @IdIva = @IdIva, @IdEstado = 0, @IdSituacion = 0, @IdEmbalaje = NULL, @CantidadEmbalaje = 1, @Observaciones = NULL, @Descrip = @_Descrip, @Comision = @Comision, @IdAlbaran = NULL, @FechaAlbaran = NULL, @IdFactura = NULL, @FechaFactura = NULL, @CantidadLotes = 0, @Marca = NULL, @EmbalajeFinal = NULL, @CantidadEmbalajeFinal = 1, @Descrip2 = NULL, @PesoNeto = 0, @PesoEmbalaje = 0, @PesoEmbalajeFinal = 0, @Orden = 0, @TotalComision = 0, @Path = NULL, @DtoLP1 = @DtoLP1, @DtoLP2 = @DtoLP2, @DtoGD = @Descuento, @DtoMan = 0, @ConjManual = 0, @IdDocPadre = NULL, @IdFase = NULL, @IdProyecto_Produccion = NULL, @CuentaArticulo = NULL, @TipoUnidadPres = NULL, @UnidadesStock = 0, @UnidadesPres = @Precio, @Precio_EuroPres = @Precio, @PrecioMonedaPres = @Precio, @IdOrdenCarga = NULL, @IdOferta = 0, @Revision = 1, @IdOfertaLinea = 0, @RefCliente = NULL, @NumPlano = NULL, @IdParte = NULL, @IdSeguimiento = NULL, @IdConceptoCertif = NULL, @NumBultos = @_Cantidad, @IdTipoOperacion = NULL, @IdFacturaCertif = 0, @UdsCarga = 0, @IdEmbalaje_Disp = NULL, @IdOrdenRecepcion = NULL, @CantRecep = 0, @NumBultosFinal = 0, @DtoLP3 = 0, @DtoLP4 = 0, @DtoLP5 = 0, @UdStockCarga = 0, @UdStockRecep = 0, @IdMaquina = NULL, @Total_Euros = 0, @Total_Moneda = 0, @IdDoc = NULL, @Usuario = @Usuario, @FechaInsertUpdate = @FechaPed if @vRet = 0 begin RAISERROR('Error al insertar la línea del pedido',12,1) end FETCH NEXT FROM lCur INTO @_IdArticulo, @_Descrip,@_IdIva,@_Cantidad END CLOSE lCur DEALLOCATE lCur exec @vRet = pPedido_MarcarAlbaran @idpedido if @vRet = 0 begin RAISERROR('Error al insertar la línea del pedido',12,1) end COMMIT TRAN --select 'Javascript', 'window.open(''./view.aspx?Tipo=Pers_PedidoCliCab&Where=IdPedido=' + convert(varchar (10),@IdPedido) + ''')' as Javascript --abre nuevo objeto en ventana nueva --select 'window.open(''./view.aspx?Tipo=Pers_Pedido_Cli_Cab&Where=IdPedido=' + convert(varchar (10),@IdPedido) + ''');parent.cierraIframe();parent.location.reload();' as Javascript --Proceso de bolsa, abre nuevo objeto en ventana nueva --select 'alert("' + @Str + '");parent.document.location=parent.document.location' as Javascript --Recarga objeto que lanza el proceso --select 'alert("Actuaciones actualizadas correctamente");parent.document.location.reload();' as Javascript --recargar grid para procesos de bolsa --select 'Javascript', 'window.open(''./view.aspx?Tipo=P_Tarea&Where=IdTarea=' + convert(varchar (10),@IdTarea) + ''')' as Javascript --abre nuevo objeto en ventana nueva --select 'alert("Actuación procesada correctamente");parent.document.location=parent.document.location' as Javascript --Recarga objeto que lanza el proceso RETURN -1 END TRY BEGIN CATCH IF @@TRANCOUNT >0 BEGIN ROLLBACK TRAN END print 'Error al generar el pedido de cliente. ' + ERROR_MESSAGE() RETURN 0 END CATCH GO zpermisos pPers_Pedido_Asistente go --PRUEBA insert into Pers_Clientes_PedidoHab (idcliente, Idarticulo, Cantidad) values ('00001','0',1) insert into Pers_Clientes_PedidoHab (idcliente, Idarticulo, Cantidad) values ('00001','art1',2) go --set context_info 23067 --IdDoc de la Sesion que quiero replicar (tabla ahora_sesion) declare @IdEmpleado t_id_Empleado = 0 , @IdCliente t_id_cliente = '00001' , @IdContacto t_id_contacto = null , @IdProyecto t_id_proyecto = NULL , @IdFormaPago t_forma_pago = NULL , @IdArticulo1 t_id_articulo = NULL , @Cantidad1 t_cantidad = 1 , @IdArticulo2 t_id_articulo = NULL , @Cantidad2 t_cantidad = 1 , @IdPedido t_id_Pedido = 0 begin tran exec dbo.pPers_Pedido_Asistente @IdEmpleado,@IdCliente, @IdContacto,@IdProyecto,@IdFormaPago,@IdArticulo1,@Cantidad1, @IdArticulo2,@Cantidad2, @IdPedido out select @IdPedido as PedidoGen Rollback tran