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
¿Le ha sido útil este artículo?
¡Qué bien!
Gracias por sus comentarios
¡Sentimos mucho no haber sido de ayuda!
Gracias por sus comentarios
Sus comentarios se han enviado
Agradecemos su esfuerzo e intentaremos corregir el artículo