Procediment emmagatzemat per transferir factures desde APM a les taules intermitges que utilitza SAP:
USE [apmtosap] GO /****** Object: StoredProcedure [dbo].[apmInfoToSAP] Script Date: 14/03/2019 15:04:24 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[apmInfoToSAP] AS BEGIN -- Traspàs de dades APM a SAP -- -- Autor: Sergi Zaragoza -- Modificacions: David Marti -- -- Registre de canvis: -- 25/01/2018 S'afegeix el pais a les adreces (SII) i es crea la taula INTRX_PaisosZones pel seu tractament -- 25/01/2018 Treure els espais en blanc dels codis (articles, vies de pagament, condicions ...) -- 25/01/2018 Arreglar el procés de les comptes bancaries de clients (esta mal particionat i no posa les dades correctes als camps) -- 25/01/2018 S'Esborra la taula IVAAPMtoSAP, no fa res. -- 25/01/2018 S'Esborra el procediment apmBusinessPartsToSAP -- 25/01/2018 S'ha creat l'usuari SQLServer intarex per utilitzar al programa de traspàs de dades -- 26/01/2018 Esborrar totes les dades que no hagin estat marcades com processades (BusinessPartners, Documents ...) així es poden actualitzar correctament. -- 26/01/2018 Arreglar els conceptes de vies de pago i condicions de pago, estan al revés. -- Canviar les dades dels camps PayTermsGrpCode <-> PeymentMethodCode -- Ampliar el camp PeymentMethodCode a 20 -- 26/01/2018 Crear taula INTRX_FormaPagoSAP per solucionar el problema de les vies de pago (pagament/cobrament) -- Aquesta taula la usa internament el programa de traspàs de dades i no hi ha referencia en aquest procedimient -- 26/01/2018 Es suprimeixen de tots els NIF els espais en blanc i el guionet. -- 27/01/2018 Els grups impositius EI (IVA comunitari) i EX (IVA exportació) estan al revés -- 27/01/2018 Es renombra aquest procediment de apmInfoToBusinessPartners a apmInfoToSAP -- 29/01/2018 Els venciments en divises tornen el valor en moneda base (EUR) i no en divisa -- 29/01/2018 No se quin es el motiu, però hi ha venciments que venen duplicats o triplicats (factura de compra 01000001 per exemple, amb 3 venciments) -- Al programa que ho importa ja ho tracto (select distinct) -- 29/01/2018 L'indicador per que un IC utilitzi totes les monedes no es el ###, es el ## -- 29/01/2018 Hi ha clients amb NIF malformat degut al doble codi de pais (C002230 PLPL7331003763) -- 29/01/2018 Hi ha factures de vendes sense línies, doncs l'albarà es de 2017 i la factura del 2018 -- 30/01/2018 Canviar de nom els camps de la taula INTRX_FormaPagoSAP i utilitzar-la directament en aquest procediment -- 30/01/2018 Les factures de compres de la CEE porten el total amb IVA quan no l'hauríen de portar -- (el grup impositiu ja indica que s'ha de crear una autoliquidació) -- 30/01/2018 Els venciments, en algunes factures, estan agafant dades d'altres anys i això fa que no -- quadri els total de venciments amb el total de la factura i no es traspassi (Exemple factura compra 01000011) -- Per arreglar-ho afegeixo la condició situacion='C' als venciments de les factures de compra. -- 31/01/2018 S'havia assumit de forma errónea que totes les factures de compra teníen albarans associats, -- Però no es així, hi ha factures de compra SENSE albarans i aquestes no sortíen a la apmtosap. -- 31/01/2018 S'afegeix una taula de mapeig INTRX_MapeigPC per les comptes comptables -- 31/01/2018 S'omplen correctament els camps DebitorAccount de la BusinessPartners i AccountCode de la Document_Lines -- 01/02/2018 Els proveïdors només tenen IBAN (en la majoria dels casos) a APM, ho tractarem al procés d'importació cap a SAP -- S'ignora el contingut de la taula BPBankAccounts a la importació de IC, doncs cada IC només te un banc i aquesta -- informació ja ve a la BusinessPartner. -- 01/02/2018 S'esborra la taula BPBankAccounts. -- 01/02/2018 Tant per clients com per proveïdors es passa la compta sensera a DefaultAccount de BusinessPartners. -- Als clients es una CCC i ha proveïdors un IBAN (normalment, també he vist alguna CCC) -- 02/02/2018 S'havia assumit erroneament que les comptes comptables de vendes estaven a la familia d'articles. -- No es així, agafarem la compta comptable de vendes a partir del tipus d'iva (Normal/Comunitari/Exent) -- Tambe diferenciem els articles que porten cost de ports a la compta 705002 -- Com que son pocs (7) ZZxxxx els posem estàtics al codi. -- 02/02/2018 Al camp DocType dels documents hi posem el tipus d'iva. -- 02/02/2018 La diferencia entre factures i abonaments de venda no la fem per tipus de factura (6,7,8,9 = abonament) -- La fem mirant el total_factura, doncs he vist una factura en negatiu i entenc que hauría de ser un abonament. -- 05/02/2018 Arreglar els codis de pais que no estan normalitzats a APM -- Inclou NIFS, Adreces. -- 08/02/2018 Deshabilitem el mapeig de comptes de compres, doncs entenem que ja estan entrant les comptes correctes al APM -- 20/02/2018 La taula d'intercanvi INTRX_PaisosZones només em servía per posar inicialment el pais de intrastat als clients/proveidors -- A partir d'ara només la faig servir per trobar el codi ISO correcte, doncs hi han clients/proveidors que no es així. -- 23/04/2018 A partir del 01/05/2018 tots els abonaments de factures de venda es passen a la compta 708000 -- 04/06/2018 Contactes -- 05/06/2018 He afegit un parell de disparadors a la Vidalb clientes i proveedores per controlar les modificacions de dades desde APM -- 14/01/2019 He canviat les taules del 2017 a 2018 i les del 2018 al 2019 per que es puguin importar les noves factures -- 24/01/2019 Millores en la selecció de dades. -- 24/01/2019 He canviat com es crea el numero de la factura de compra a traspassar a SAP. -- Ara te en compte l'any de la data de registre: -- RIGHT(YEAR(regiva.DATA_REGISTRE),2)+(regiva.SERIE)+(regiva.REGISTRE) -> 1902000012 -- 04/03/2019 Arreglada la posibilitat de que dues o mes factures de compres puguin tenir un mateix número -- 04/03/2019 Afegir que el article Z0005 vagi a parar la compta 705001 -- 14/03/2019 Arreglat el error que duplicava les factures de compra, doncs no tenia en compta que el h_facturas_c20xx porta info dels albarans DECLARE @inici as DateTime = GETDATE(); PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inici del traspàs de APM a SAP ...'; -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + '[BP] Esborrar no traspassats (es tornaràn a traspassar) ...'; -- Només esborrem els clients/proveidors que no estiguin traspassats DELETE [apmtosap].[dbo].[BusinessPartners] WHERE (Processed='N' or Processed is Null); -- Clients PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + '[BP] Clients ...'; INSERT INTO [apmtosap].[dbo].[BusinessPartners] ([DateTime] ,[Processed] ,[CardCode] ,[CardType] ,[CardName] ,[CardForeignName] ,[SinglePayment] ,[Phone1] ,[Fax] ,[Cellular] ,[EmailAddress] ,[Website] ,[ContactPerson] ,[Notes] ,[BilltoDefault] ,[ShipToDefault] ,[SalesPersonCode] ,[PayTermsGrpCode] ,[PeymentMethodCode] ,[CreditLimit] ,[MaxCommitment] ,[PriceListNum] ,[Currency] ,[BankCountry] ,[DefaultBankCode] ,[DefaultBranch] ,[DefaultAccount] ,[HouseBankCountry] ,[HouseBank] ,[HouseBankBranch] ,[HouseBankAccount] ,[VatLiable] ,[Equalitzation] ,[FederalTaxID] ,[ResidentNumber] ,[DebitorAccount] ,[LanguageCode] ,[SubjectToWithholdingTax] ,[WTCode] ) SELECT GETDATE() , 'N' procesado , 'C0' + cli.cliente CardCode , 'C' CardType , cli.n_fiscal CardName , cli.nombre CardForeignName , 'Y' SinglePayment , cli.telefono Phone1 , cli.fax Fax , mobil_c1 Cellular , cli.email EmailAddress , cli.web Website , null ContactPerson , SUBSTRING(cli.notas, 1,100) Notes , cli.n_fiscal BilltoDefault , cli.nombre ShipToDefault , SUBSTRING(ISNULL(cli.representante + '-' + rep.nombre,''),1,30) SalesPersonCode , fpag.PayTermsGrpCode , sapfpag.PayMethodCodeCobro , cli.riesgo_con CreditLimit , cli.riesgo_con MaxCommitment , 1 PriceListNum , '##' Currency , pz.paisISO BankCountry , Null DefaultBank , Null DefaultBrach , case when LEN(cli.ccc_1) = 23 then replace(replace(ccc_1,'-',''),' ','') when LEN(cli.ccc_2) = 23 then replace(replace(ccc_2,'-',''),' ','') when LEN(cli.ccc_3) = 23 then replace(replace(ccc_3,'-',''),' ','') else null end DefaultAccount , Null HouseBankCountry , Null HouseBank , Null HouseBankBranch , Null HouseBankAccount , case when tfac.clase_iva IN ('N') then 'Y' when tfac.clase_iva IN ('C') then 'E' when tfac.clase_iva IN ('E','X') then 'N' end , 'N' Equalitzation , REPLACE(REPLACE(case when ISNULL(cli.destino_intras, 'ES') = 'ES' then LTRIM(RTRIM(pz.paisISO COLLATE Modern_Spanish_CI_AS + cli.cif)) else RTRIM(LTRIM(cli.cif)) end,' ',''),'-','') FederalTaxID , case when tfac.clase_iva IN ('N') then '1' when tfac.clase_iva IN ('C') then '2' when tfac.clase_iva IN ('E','X') then '6' end ResidentNumber , mpc.ComptaSAP DebitorAccount , CASE WHEN cli.idioma = 'L' then '3' WHEN cli.idioma = 'A' then '3' WHEN cli.idioma = 'C' then '23' WHEN cli.idioma = 'D' then '3' WHEN cli.idioma = 'E' then '23' WHEN cli.idioma = 'F' then '22' WHEN cli.idioma = 'G' then '23' WHEN cli.idioma = 'H' then '3' WHEN cli.idioma = 'I' then '13' WHEN cli.idioma = 'N' then '13' WHEN cli.idioma = 'P' then '19' WHEN cli.idioma = 'R' then '3' WHEN cli.idioma = 'S' then '3' WHEN cli.idioma = 'X' then '3' end LanguageCode , 'N' SubjectToWithholdingTax , '0' WTCode FROM vidalb.dbo.clientes cli INNER JOIN vidalb.dbo.facturas tfac ON tfac.factura = cli.t_factura INNER JOIN FormaPagoAPMtoSAP fpag ON cli.forma = fpag.FormaPagoAPM COLLATE Modern_Spanish_CI_AS INNER JOIN vidalb.dbo.representantes rep ON rep.representante = cli.representante LEFT JOIN BusinessPartners sapcli ON sapcli.CardCode = 'C0' + cli.cliente COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_FormaPagoSAP sapfpag ON sapfpag.PeymentMethodCode=fpag.PeymentMethodCode LEFT JOIN INTRX_MapeigPC mpc ON mpc.ComptaAPM=cli.pref_com COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_PaisosZones pz ON pz.pais=cli.destino_intras WHERE sapcli.CardCode IS NULL -- Proveidors PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + '[BP] Proveïdors ...'; INSERT INTO [apmtosap].[dbo].[BusinessPartners] ([DateTime] ,[Processed] ,[CardCode] ,[CardType] ,[CardName] ,[CardForeignName] ,[SinglePayment] ,[Phone1] ,[Fax] ,[Cellular] ,[EmailAddress] ,[Website] ,[ContactPerson] ,[Notes] ,[BilltoDefault] ,[ShipToDefault] ,[SalesPersonCode] ,[PayTermsGrpCode] ,[PeymentMethodCode] ,[CreditLimit] ,[MaxCommitment] ,[PriceListNum] ,[Currency] ,[BankCountry] ,[DefaultBankCode] ,[DefaultBranch] ,[DefaultAccount] ,[HouseBankCountry] ,[HouseBank] ,[HouseBankBranch] ,[HouseBankAccount] ,[VatLiable] ,[Equalitzation] ,[FederalTaxID] ,[ResidentNumber] ,[DebitorAccount] ,[LanguageCode] ,[SubjectToWithholdingTax] ,[WTCode] ) SELECT GETDATE() , 'N' procesado , 'P' + prov.proveedor CardCode , 'S' CardType , prov.n_fiscal CardName , prov.nombre CardForeignName , 'Y' SinglePayment , telefono Phone1 , prov.fax Fax , mobil_c1 Cellular , email EmailAddress , www Website , null ContactPerson , SUBSTRING(notas, 1,100) Notes , prov.n_fiscal BilltoDefault , prov.nombre ShipToDefault , null SalesPersonCode , fpag.PayTermsGrpCode , sapfpag.PayMethodCodePago , null CreditLimit , null MaxCommitment , 1 PriceListNum , '##' Currency , pz.PaisISO BankCountry , Null DefaultBankCode , Null DefaultBranch , REPLACE(REPLACE(ccc_1,'-',''),' ','') DefaultAccount , Null HouseBankCountry , Null HouseBank , Null HouseBankBranch , Null HouseBankAccount , case when prov.rec_equi IN ('1') then 'Y' when prov.rec_equi IN ('4') then 'E' when prov.rec_equi IN ('6') then 'N' else 'Y' end VatLiable , 'N' Equalitzation , REPLACE(REPLACE(case when ISNULL(prov.pais_orig, 'ES') = 'ES' then ISNULL(RTRIM(pz.PaisISO COLLATE Modern_Spanish_CI_AS), 'ES') + prov.cif_dni else prov.cif_dni end,' ',''),'-','') FederalTaxID , case when prov.rec_equi IN ('1') then '1' when prov.rec_equi IN ('4') then '2' when prov.rec_equi IN ('6') then '6' else '1' end ResidentNumber , mpc.ComptaSAP DebitorAccount , CASE WHEN prov.idioma = 'L' then '3' WHEN prov.idioma = 'A' then '3' WHEN prov.idioma = 'C' then '23' WHEN prov.idioma = 'D' then '3' WHEN prov.idioma = 'E' then '23' WHEN prov.idioma = 'F' then '22' WHEN prov.idioma = 'G' then '23' WHEN prov.idioma = 'H' then '3' WHEN prov.idioma = 'I' then '13' WHEN prov.idioma = 'N' then '13' WHEN prov.idioma = 'P' then '19' WHEN prov.idioma = 'R' then '3' WHEN prov.idioma = 'S' then '3' WHEN prov.idioma = 'X' then '3' end LanguageCode , 'N' SubjectToWithholdingTax , '0' WTCode FROM vidalb.dbo.proveedores prov INNER JOIN dbo.FormaPagoAPMtoSAP fpag ON prov.forma_pago = fpag.FormaPagoAPM COLLATE Modern_Spanish_CI_AS LEFT JOIN BusinessPartners sapprov ON sapprov.CardCode = 'P' + prov.proveedor COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_FormaPagoSAP sapfpag ON sapfpag.PeymentMethodCode=fpag.PeymentMethodCode LEFT JOIN INTRX_MapeigPC mpc ON mpc.ComptaAPM=(LTRIM(RTRIM(pre_contable))+LTRIM(RTRIM(prov.proveedor))) COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_PaisosZones pz ON pz.pais=prov.pais_orig WHERE sapprov.CardCode IS NULL --Adreces PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + '[BP] Adreces ...'; DELETE FROM [apmtosap].[dbo].[BPAddresses] INSERT INTO [apmtosap].[dbo].[BPAddresses] ([CardCode] ,[AddressName] ,[AddressType] ,[Street] ,[Block] ,[StreetNo] ,[ZipCode] ,[City] ,[Country] ,[FederalTaxID]) SELECT [CardCode] ,[AddressName] ,[AddressType] ,[Street] ,[Block] ,[StreetNo] ,[ZipCode] ,[City] ,[Country] ,[FederalTaxID] FROM (SELECT 'C0' + cliente CardCode ,ISNULL(cli.n_fiscal, cli.nombre) AddressName , 'B' AddressType , cli.direccion Street , cli.direccion_c Block , '' StreetNo , cli.poblacion ZipCode , pob.poblacion City , ISNULL(pz.paisISO COLLATE Modern_Spanish_CI_AS, cli.destino_intras) Country , REPLACE(REPLACE(cli.cif,' ',''),'-','') FederalTaxID FROM vidalb.dbo.clientes cli INNER JOIN vidalb.dbo.poblaciones pob ON pob.c_postal = cli.poblacion LEFT JOIN INTRX_PaisosZones pz ON pz.pais=cli.destino_intras UNION ALL SELECT 'C0' + cliente CardCode ,cli.nombre AddressName , 'S' AddressType , cli.direccion Street , cli.direccion_c Block , '' StreetNo , cli.poblacion ZipCode , pob.poblacion City , ISNULL(pz.paisISO COLLATE Modern_Spanish_CI_AS, cli.destino_intras) Country , cli.cif FROM vidalb.dbo.clientes cli INNER JOIN vidalb.dbo.poblaciones pob ON pob.c_postal = cli.poblacion LEFT JOIN INTRX_PaisosZones pz ON pz.pais=cli.destino_intras UNION ALL SELECT 'C0' + adg.cliente CardCode , adg.c_direccion + ' ' + ISNULL(adg.nombre,cli.nombre) AddressName , 'S' AddressType , adg.direccion Street , adg.direccion_c Block , '' StreetNo , adg.poblacion ZipCode , pob.poblacion City , ISNULL(pz.paisISO COLLATE Modern_Spanish_CI_AS, cli.destino_intras) Country , cli.cif FROM vidalb.dbo.g_clientes adg INNER JOIN vidalb.dbo.poblaciones pob ON pob.c_postal = adg.poblacion INNER JOIN vidalb.dbo.clientes cli ON cli.cliente = adg.cliente LEFT JOIN INTRX_PaisosZones pz ON pz.pais=cli.destino_intras UNION ALL SELECT 'P' + proveedor CardCode ,ISNULL(prov.n_fiscal, prov.nombre) AddressName , 'B' AddressType , prov.direccion Street , prov.direccion_c Block , '' StreetNo , prov.c_poblacion ZipCode , pob.poblacion City , ISNULL(pz.paisISO COLLATE Modern_Spanish_CI_AS, prov.pais_orig) Country , prov.cif_dni FROM vidalb.dbo.proveedores prov INNER JOIN vidalb.dbo.poblaciones pob ON pob.c_postal = prov.c_poblacion LEFT JOIN INTRX_PaisosZones pz ON pz.pais=prov.pais_orig UNION ALL SELECT 'P' + proveedor CardCode ,prov.nombre AddressName , 'S' AddressType , prov.direccion Street , prov.direccion_c Block , '' StreetNo , prov.c_poblacion ZipCode , pob.poblacion City , ISNULL(pz.paisISO COLLATE Modern_Spanish_CI_AS, prov.pais_orig) Country , prov.cif_dni FROM vidalb.dbo.proveedores prov INNER JOIN vidalb.dbo.poblaciones pob ON pob.c_postal = prov.c_poblacion LEFT JOIN INTRX_PaisosZones pz ON pz.pais=prov.pais_orig ) ad GROUP BY [CardCode] ,[AddressName] ,[AddressType] ,[Street] ,[Block] ,[StreetNo] ,[ZipCode] ,[City] ,[Country] ,[FederalTaxID] -- Contactes PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + '[BP] Contactes ...'; DELETE FROM [apmtosap].dbo.BPContactes INSERT INTO [apmtosap].dbo.BPContactes ( [CardCode], [Contacte], [EMail], [Telefon], [Mobil], [Fax], [Carrec]) SELECT cardcode, contacte, email, tel, mobil, fax, cargo FROM ( -- Clients select 'C0'+cliente as cardcode,contacto1 as contacte,email_c1 as email,mobil_c1 as mobil,tel_c1 as tel,particular1 as particular,cargo1 as cargo,fax1 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto2 as contacte,email_c2 as email,mobil_c2 as mobil,tel_c2 as tel,particular2 as particular,cargo2 as cargo,fax2 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto3 as contacte,email_c3 as email,mobil_c3 as mobil,tel_c3 as tel,particular3 as particular,cargo3 as cargo,fax3 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto4 as contacte,email_c4 as email,mobil_c4 as mobil,tel_c4 as tel,particular4 as particular,cargo4 as cargo,fax4 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto5 as contacte,email_c5 as email,mobil_c5 as mobil,tel_c5 as tel,particular5 as particular,cargo5 as cargo,fax5 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto6 as contacte,email_c6 as email,mobil_c6 as mobil,tel_c6 as tel,particular6 as particular,cargo6 as cargo,fax6 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto7 as contacte,email_c7 as email,mobil_c7 as mobil,tel_c7 as tel,particular7 as particular,cargo7 as cargo,fax7 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto8 as contacte,email_c8 as email,mobil_c8 as mobil,tel_c8 as tel,particular8 as particular,cargo8 as cargo,fax8 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto9 as contacte,email_c9 as email,mobil_c9 as mobil,tel_c9 as tel,particular9 as particular,cargo9 as cargo,fax9 as fax from Vidalb.dbo.clientes union all select 'C0'+cliente as cardcode,contacto10 as contacte,email_c10 as email,mobil_c10 as mobil,tel_c10 as tel,particular10 as particular,cargo10 as cargo,fax10 as fax from Vidalb.dbo.clientes union all -- Proveidors select 'P0'+proveedor as cardcode,contacto1 as contacte,email1 as email,mobil_c1 as mobil,tel_c1 as tel,particular1 as particular,cargo1 as cargo,fax_c1 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto2 as contacte,email2 as email,mobil_c2 as mobil,tel_c2 as tel,particular2 as particular,cargo2 as cargo,fax_c2 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto3 as contacte,email3 as email,mobil_c3 as mobil,tel_c3 as tel,particular3 as particular,cargo3 as cargo,fax_c3 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto4 as contacte,email4 as email,mobil_c4 as mobil,tel_c4 as tel,particular4 as particular,cargo4 as cargo,fax_c4 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto5 as contacte,email5 as email,mobil_c5 as mobil,tel_c5 as tel,particular5 as particular,cargo5 as cargo,fax_c5 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto6 as contacte,email6 as email,mobil_c6 as mobil,tel_c6 as tel,particular6 as particular,cargo6 as cargo,fax_c6 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto7 as contacte,email7 as email,mobil_c7 as mobil,tel_c7 as tel,particular7 as particular,cargo7 as cargo,fax_c7 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto8 as contacte,email8 as email,mobil_c8 as mobil,tel_c8 as tel,particular8 as particular,cargo8 as cargo,fax_c8 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto9 as contacte,email9 as email,mobil_c9 as mobil,tel_c9 as tel,particular9 as particular,cargo9 as cargo,fax_c9 as fax from Vidalb.dbo.proveedores union all select 'P0'+proveedor as cardcode,contacto10 as contacte,email10 as email,mobil_c10 as mobil,tel_c10 as tel,particular10 as particular,cargo10 as cargo,fax_c10 as fax from Vidalb.dbo.proveedores ) C0 where not contacte is null or not email is null or not mobil is null or not cargo is null -- Métodes de pagament (VIES) PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Vies de pagament ...'; DELETE FROM [apmtosap].[dbo].[BPPaymentMethods] INSERT INTO [apmtosap].[dbo].[BPPaymentMethods] ([CardCode] ,[PaymentMethodCode]) SELECT prt.CardCode [CardCode] , prt.PayTermsGrpCode [PaymentMethodCode] FROM BusinessPartners prt -- Dias de pagament (CONDICIONS) PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Condicions de pagament ...'; DELETE FROM [apmtosap].dbo.BPPaymentDates INSERT INTO [apmtosap].[dbo].[BPPaymentDates] ([CardCode] ,[PmntDate]) SELECT cardcode, PmntDate FROM (SELECT 'C0' + cliente cardcode , case when LEN(cli.dias_pag) IN ('6','4','2') then substring(convert(varchar, cli.dias_pag),1,2) when LEN(cli.dias_pag) IN ('5','3','1') then substring(convert(varchar, cli.dias_pag),1,1) end PmntDate FROM Vidalb.dbo.clientes cli WHERE LEN(cli.dias_pag) > 0 UNION ALL SELECT 'C0' + cliente , case when LEN(cli.dias_pag) IN ('6','4') then substring(convert(varchar, cli.dias_pag),3,2) when LEN(cli.dias_pag) IN ('5','3') then substring(convert(varchar, cli.dias_pag),2,2) end FROM Vidalb.dbo.clientes cli WHERE LEN(cli.dias_pag) > 2 UNION ALL SELECT 'C0' + cliente , case when LEN(cli.dias_pag) IN ('6') then substring(convert(varchar, cli.dias_pag),5,2) when LEN(cli.dias_pag) IN ('5') then substring(convert(varchar, cli.dias_pag),4,2) end FROM Vidalb.dbo.clientes cli WHERE LEN(cli.dias_pag) > 4 UNION ALL SELECT 'P' + proveedor cardcode , case when LEN(prov.dias_pago) IN ('6','4','2') then substring(convert(varchar, prov.dias_pago),1,2) when LEN(prov.dias_pago) IN ('5','3','1') then substring(convert(varchar, prov.dias_pago),1,1) end PmntDate FROM Vidalb.dbo.proveedores prov WHERE LEN(prov.dias_pago) > 0 UNION ALL SELECT 'P' + proveedor , case when LEN(prov.dias_pago) IN ('6','4') then substring(convert(varchar, prov.dias_pago),3,2) when LEN(prov.dias_pago) IN ('5','3') then substring(convert(varchar, prov.dias_pago),2,2) end FROM Vidalb.dbo.proveedores prov WHERE LEN(prov.dias_pago) > 2 UNION ALL SELECT 'P' + proveedor , case when LEN(prov.dias_pago) IN ('6') then substring(convert(varchar, prov.dias_pago),5,2) when LEN(prov.dias_pago) IN ('5') then substring(convert(varchar, prov.dias_pago),4,2) end FROM Vidalb.dbo.proveedores prov WHERE LEN(prov.dias_pago) > 4) diaspag ORDER BY diaspag.cardcode, diaspag.PmntDate * 1 -- Articles PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Esborrant articles no traspassats (es tornaràn a traspassar) ...'; -- Només esborrem els articles que no han estat traspassats DELETE FROM [apmtosap].[dbo].[Items] WHERE (Processed='N' or Processed is Null); PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inserint articles ...'; INSERT INTO [apmtosap].[dbo].[Items] ([DateTime] ,[Processed] ,[ItemCode] ,[ItemName] ,[ItemsGroupCode] ,[InventoryItem] ,[SalesItem] ,[PurchaseItem] ,[AssetItem]) SELECT GETDATE() , 'N' as Processed , LTRIM(RTRIM(articulo)) ItemCode , LTRIM(RTRIM(descripcion)) ItemName , LTRIM(RTRIM(familia)) ItemsGroupCode , 'N' InventoryItem , 'Y' SalesItem , 'Y' PurchaseItem , 'N' AssetItem FROM vidalb.dbo.articulos art LEFT JOIN [apmtosap].[dbo].[Items] sapart ON sapart.[ItemCode] = art.articulo COLLATE Modern_Spanish_CI_AS WHERE sapart.[ItemCode] IS NULL PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inserint formes de pagament no controlades ...'; -- Inserto les Formes de Pagament no Controlades INSERT INTO dbo.FormaPagoAPMtoSAP (FormaPagoAPM,DescripcionAPM) SELECT pag.pago, pag.descripcion FROM Vidalb.dbo.pagos pag LEFT JOIN dbo.FormaPagoAPMtoSAP sappag ON sappag.FormaPagoAPM = pag.pago COLLATE Modern_Spanish_CI_AS WHERE sappag.FormaPagoAPM IS NULL -- FACTURES PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Esborrant factures no traspassades (es tornaràn a traspassar) ...'; -- Només esborrem les factures que no s'han traspassat DELETE FROM [apmtosap].[dbo].[Documents] WHERE (Processed='N' or Processed is Null); -- Factures de venda PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inserint factures de venda ...'; INSERT INTO [apmtosap].[dbo].[Documents] ( [DateTime] ,[id_document] ,[objectType] ,[DocType] ,[HandWritten] ,[Series] ,[DocDate] ,[TaxDate] ,[CardCode] ,[NumAtCard] ,[DocCurrency] ,[DocRate] ,[DocTotal] ,[DocTotalFc] ,[FederalTaxID] ,[SalesPersonCode] ,[PaymentGroupCode] ,[PaymentMethod] ,[PayToCode] ,[ShipToCode] ,[TrackingNumber] ,[Comments]) SELECT GETDATE() , (facv.serie+facv.registro) ID_DOCUMENT , case when facv.total_factura<0 then 'oCreditNotes' else 'oInvoices' end objectType , facv.clase_iva DocType ,'N' HandWritten , facv.serie Series , CONVERT(varchar, facv.fecha_registro, 112) DocDate , CONVERT(varchar, facv.fecha_registro, 112) TaxDate , 'C0' + cli.cliente CardCode , facv.serie + facv.registro NumAtCard , facv.divisa DocCurrency , ROUND(facv.cotizacion,6) DocRate , ROUND(case when facv.divisa = 'EUR' then facv.total_factura else null end,6) DocTotal , ROUND(case when facv.divisa = 'EUR' then null else facv.importe_divisa end,6) DocTotalFc , REPLACE(REPLACE(case when ISNULL(cli.destino_intras, 'ES') = 'ES' then LTRIM(RTRIM(cli.destino_intras + cli.cif)) else RTRIM(LTRIM(cli.cif)) end,' ',''),'-','') FederalTaxID , SUBSTRING(ISNULL(cli.representante + '-' + rep.nombre,''),1,30) SalesPersonCode , fpag.PayTermsGrpCode , sapfpag.PayMethodCodeCobro , LTRIM(RTRIM(cli.n_fiscal)) BilltoDefault , LTRIM(RTRIM(cli.nombre)) ShipToDefault , '' TrackingNumber , '' Comments FROM vidalb.dbo.ivaclie2019 facv INNER JOIN ( SELECT cab.n_factura, cab.cliente, MAX(cab.t_factura) t_factura, MAX(cab.f_pago) f_pago FROM vidalb.dbo.h_alba_v2019 cab GROUP BY cab.n_factura, cab.cliente UNION ALL SELECT cab.n_factura, cab.cliente, MAX(cab.t_factura) t_factura, MAX(cab.f_pago) f_pago FROM vidalb.dbo.h_alba_v2018 cab GROUP BY cab.n_factura, cab.cliente ) cab ON cab.n_factura = facv.serie + facv.registro INNER JOIN vidalb.dbo.facturas tv ON tv.factura = cab.t_factura INNER JOIN vidalb.dbo.clientes cli ON cli.cliente = cab.cliente INNER JOIN vidalb.dbo.representantes rep ON rep.representante = cli.representante INNER JOIN dbo.FormaPagoAPMtoSAP fpag ON cab.f_pago = fpag.FormaPagoAPM COLLATE Modern_Spanish_CI_AS LEFT JOIN Documents sapcab ON sapcab.id_document = (facv.serie+facv.registro) COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_FormaPagoSAP sapfpag ON sapfpag.PeymentMethodCode=fpag.PeymentMethodCode WHERE sapcab.id_document IS NULL ORDER BY id_document -- Factures de compra PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inserint factures de compra ...'; INSERT INTO [apmtosap].[dbo].[Documents] ( [DateTime] ,[id_document] ,[objectType] ,[DocType] ,[HandWritten] ,[Series] ,[DocDate] ,[TaxDate] ,[CardCode] ,[NumAtCard] ,[DocCurrency] ,[DocRate] ,[DocTotal] ,[DocTotalFc] ,[FederalTaxID] ,[SalesPersonCode] ,[PaymentGroupCode] ,[PaymentMethod] ,[PayToCode] ,[ShipToCode] ,[TrackingNumber] ,[Comments]) SELECT GETDATE() , RIGHT(YEAR(facc.fecha_registro),2)+(facc.serie+facc.registro) id_document , case when total_factura >= 0 then 'oPurchaseInvoices' else 'oPurchaseCreditNotes' end objectType , facc.clase_iva DocType ,'N' HandWritten , facc.serie Series , CONVERT(varchar, facc.fecha_registro, 112) TaxDate , CONVERT(varchar, facc.fecha_registro, 112) DocDate , 'P' + prov.proveedor CardCode , facc.documento NumAtCard , facc.divisa DocCurrency , ROUND(facc.cotizacion,6) DocRate , ROUND( case when facc.divisa = 'EUR' then case when clase_iva='C' then facc.base_1 else facc.total_factura end else null end,6) DocTotal , ROUND( case when facc.divisa = 'EUR' then null else facc.total_factura end,6) DocTotalFc , REPLACE(REPLACE(case when ISNULL(prov.pais_orig, 'ES') = 'ES' then ISNULL(RTRIM(prov.pais_orig), 'ES') + RTRIM(LTRIM(prov.cif_dni)) else prov.cif_dni end,' ',''),'-','') FederalTaxID , '' SalesPersonCode , fpag.PayTermsGrpCode , sapfpag.PayMethodCodePago , LTRIM(RTRIM(prov.n_fiscal)) BilltoDefault , LTRIM(RTRIM(prov.nombre)) ShipToDefault , '' TrackingNumber , '' Comments FROM vidalb.dbo.ivaprov2019 facc LEFT JOIN Vidalb.dbo.proveedores prov ON prov.proveedor=(SELECT TOP 1 proveedor from Vidalb.dbo.h_facturas_c2019 where factura=(facc.serie+facc.registro)) LEFT JOIN FormaPagoAPMtoSAP fpag ON prov.forma_pago = fpag.FormaPagoAPM COLLATE Modern_Spanish_CI_AS LEFT JOIN Documents sapcab ON sapcab.id_document = RIGHT(YEAR(facc.fecha_registro),2)+(facc.serie+facc.registro) COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_FormaPagoSAP sapfpag ON sapfpag.PeymentMethodCode=fpag.PeymentMethodCode WHERE sapcab.id_document IS NULL -- LINIES PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Esborrant Document_Lines ...'; -- Nomes esborrem les linies de les factures que no s'han traspassat DELETE [apmtosap].[dbo].[Document_Lines] -- Linies de factures de vendes PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inserint línies de factures de clients ...'; INSERT INTO [apmtosap].[dbo].[Document_Lines] ([ID_DOCUMENT] ,[ItemDescription] ,[VatGroup] ,[AccountCode] ,[ItemCode] ,[ItemDetails] ,[Quantity] ,[MeasureUnit] ,[UnitPrice] ,[FreeText] ,[WTLiable] ,[Weight1] ,[Weight1Unit] ,[Weight2] ,[Weight2Unit] ,[Volume] ,[Factor4] ,[Num_Linea]) SELECT (facv.serie+facv.registro) ID_DOCUMENT , LTRIM(RTRIM(art.descripcion)) ItemDescription , case when fam.tabla_iva = 1 AND tfac.clase_iva IN ('N') then 'R3' when fam.tabla_iva = 4 AND tfac.clase_iva IN ('N') then 'R0' when tfac.clase_iva IN('C') then 'EI' when tfac.clase_iva IN ('E','X') then 'EX' end VatGroup , case when (facv.total_factura<0) and (GETDATE()>='20180501') then '708000' else case when lin.articulo in ('Z0001','Z0003','Z0010','Z0011','Z0012','Z0013','Z0014') then '705002' when tfac.clase_iva='N' then '701001' when tfac.clase_iva='C' then '701002' when tfac.clase_iva='E' then '701003' when tfac.clase_iva='X' then '701003' end end AccountCode , LTRIM(RTRIM(lin.articulo)) ItemCode , lin.cantidad_alter ItemDetails , lin.cantidad Quantity , art.un_medida MeasureUnit , lin.precio_m_emp UnitPrice , Null [FreeText] , 'N' WTLiable , Null Weight1 , Null Weight1Unit , Null Weight2 , Null Weight2Unit , Null Volume , Null Factor4 , CONVERT(int,lin.n_orden) Num_Linia FROM vidalb.dbo.h_alba_l_v2019 lin INNER JOIN vidalb.dbo.h_alba_v2019 cab ON cab.albaran = lin.albaran INNER JOIN vidalb.dbo.ivaclie2019 facv ON facv.serie + facv.registro = cab.n_factura INNER JOIN vidalb.dbo.articulos art ON art.articulo = lin.articulo INNER JOIN vidalb.dbo.familias fam ON fam.familia = art.familia INNER JOIN vidalb.dbo.facturas tfac ON tfac.factura = cab.t_factura LEFT JOIN Document_Lines saplin ON saplin.ID_DOCUMENT = cab.albaran COLLATE Modern_Spanish_CI_AS AND saplin.Num_Linea = lin.n_orden COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_MapeigPC mpc ON mpc.ComptaAPM=fam.c_ventas COLLATE Modern_Spanish_CI_AS WHERE lin.concepto = 'A' UNION ALL SELECT (facv.serie+facv.registro) id_document , LTRIM(RTRIM(art.descripcion)) ItemDescription , case when fam.tabla_iva = 1 AND tfac.clase_iva IN ('N') then 'R3' when fam.tabla_iva = 4 AND tfac.clase_iva IN ('N') then 'R0' when tfac.clase_iva IN('C') then 'EI' when tfac.clase_iva IN ('E','X') then 'EX' end VatGroup , case when lin.articulo in ('Z0001','Z0003','Z0010','Z0011','Z0012','Z0013','Z0014') then '705002' when tfac.clase_iva='N' then '701001' when tfac.clase_iva='C' then '701002' when tfac.clase_iva='E' then '701003' when tfac.clase_iva='X' then '701003' when lin.articulo in ('Z0005') then '705001' end AccountCode , LTRIM(RTRIM(lin.articulo)) ItemCode , lin.cantidad_alter ItemDetails , lin.cantidad Quantity , art.un_medida MeasureUnit , lin.precio_m_emp UnitPrice , Null [FreeText] , 'N' WTLiable , Null Weight1 , Null Weight1Unit , Null Weight2 , Null Weight2Unit , Null Volume , Null Factor4 , CONVERT(int,lin.n_orden) Num_Linia FROM vidalb.dbo.h_alba_l_v2018 lin INNER JOIN vidalb.dbo.h_alba_v2018 cab ON cab.albaran = lin.albaran INNER JOIN vidalb.dbo.ivaclie2019 facv ON facv.serie + facv.registro = cab.n_factura INNER JOIN vidalb.dbo.articulos art ON art.articulo = lin.articulo INNER JOIN vidalb.dbo.familias fam ON fam.familia = art.familia INNER JOIN vidalb.dbo.facturas tfac ON tfac.factura = cab.t_factura LEFT JOIN Document_Lines saplin ON saplin.ID_DOCUMENT = cab.albaran COLLATE Modern_Spanish_CI_AS AND saplin.Num_Linea = lin.n_orden COLLATE Modern_Spanish_CI_AS LEFT JOIN INTRX_MapeigPC mpc ON mpc.ComptaAPM=fam.c_ventas COLLATE Modern_Spanish_CI_AS WHERE lin.concepto = 'A' -- Linies factures de compra PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Inserint línies de compra ...'; INSERT INTO [apmtosap].[dbo].[Document_Lines] ([ID_DOCUMENT] ,[ItemDescription] ,[VatGroup] ,[AccountCode] ,[ItemCode] ,[ItemDetails] ,[Quantity] ,[MeasureUnit] ,[UnitPrice] ,[FreeText] ,[WTLiable] ,[Weight1] ,[Weight1Unit] ,[Weight2] ,[Weight2Unit] ,[Volume] ,[Factor4] ,[Num_Linea]) SELECT docSAP.id_document ID_DOCUMENT , Null ItemDescription , case ivap.clase_iva when 'N' then -- IVA NACIONAL case when not iva_1 is null and iva_2 is null and iva_3 is null then case when iva_1=21 then 'S3' when iva_1=10 then 'S2' when iva_1=0 then 'S0' end else case when importe=base_1 then case when iva_1=21 then 'S3' when iva_1=10 then 'S2' when iva_1=0 then 'S0' end when importe=base_2 then case when iva_2=21 then 'S3' when iva_2=10 then 'S2' when iva_2=0 then 'S0' end when importe=base_3 then case when iva_3=21 then 'S3' when iva_3=10 then 'S2' when iva_3=0 then 'S0' end end end when 'C' then -- IVA COMUNITARI 'A3' when 'E' then -- EXENT case when bp.BankCountry='ES' then 'S0' else 'I0' end else '' end VatGroup , RTRIM(c.cuenta) AccountCode , Null ItemCode , Null ItemDetails , 1 Quantity , Null MeasureUnit , c.importe UnitPrice , Null [FreeText] , Null WTLiable , Null Weight1 , Null Weight1Unit , Null Weight2 , Null Weight2Unit , Null Volume , Null Factor4 , (ROW_NUMBER() OVER(PARTITION BY docSAP.id_document ORDER BY docSAP.id_document))*100 as Num_Linea FROM Vidalb.dbo.contab_c c JOIN Vidalb.dbo.ivaprov2019 ivap ON (ivap.serie+ivap.registro)=c.registro_iva COLLATE Modern_Spanish_CI_AS JOIN Documents docSAP ON docSAP.id_document=RIGHT(YEAR(c.fecha_registro),2)+c.registro_iva COLLATE Modern_Spanish_CI_AS LEFT JOIN BusinessPartners bp on bp.CardCode=docSAP.CardCode WHERE (c.cuenta like '6%' or c.cuenta like '419%' or c.cuenta like '174%') -- Venciments factures de venda PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Netejant venciments ...'; DELETE FROM [apmtosap].[dbo].[Document_Installments] PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Venciments factures de clients ...'; INSERT INTO [apmtosap].[dbo].[Document_Installments] ([ID_DOCUMENT] ,[DueDate] ,[Total] ,[TotalFc]) SELECT (ivac.serie+ivac.registro) ID_DOCUMENT , CONVERT(varchar, vencimiento, 112) DueDate , case when cob.divisa = 'EUR' then cob.importe else 0 end [Total] , case when cob.divisa <> 'EUR' then ISNULL(cob.importe_divisa,cob.importe) else 0 end [TotalFc] FROM vidalb.dbo.cobro cob INNER JOIN Vidalb.dbo.ivaclie2019 ivac on (ivac.serie+ivac.registro)=cob.documento INNER JOIN [apmtosap].[dbo].[Documents] sapdocs ON sapdocs.id_document COLLATE Modern_Spanish_CI_AS = (ivac.serie+ivac.registro) WHERE sapdocs.[objectType] IN ('oCreditNotes', 'oInvoices') -- Venciments factures de proveidors PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Venciments factures de proveïdors ...'; INSERT INTO [apmtosap].[dbo].[Document_Installments] ([ID_DOCUMENT] ,[DueDate] ,[Total] ,[TotalFc]) SELECT RIGHT(YEAR(ivap.fecha_registro),2)+ivap.serie + ivap.registro ID_DOCUMENT , CONVERT(varchar, pag.vencimiento, 112) DueDate , case when pag.divisa = 'EUR' then pag.importe else 0 end [Total] , case when pag.divisa <> 'EUR' then pag.importe else 0 end [TotalFc] FROM vidalb.dbo.pago pag INNER JOIN vidalb.dbo.ivaprov2019 ivap ON ivap.documento = pag.documento AND ivap.cuenta = pag.creditor AND situacion='C' INNER JOIN [apmtosap].[dbo].[Documents] sapdocs ON sapdocs.id_document COLLATE Modern_Spanish_CI_AS = RIGHT(Year(ivap.fecha_registro),2)+(ivap.serie+ivap.registro) WHERE sapdocs.[objectType] IN ('oPurchaseInvoices', 'oPurchaseCreditNotes') -- Representants PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'Representants ...'; DELETE FROM [apmtosap].[dbo].[SalesPersons] INSERT INTO [apmtosap].[dbo].[SalesPersons] (SalesEmployeeName) SELECT DISTINCT SalesPersonCode FROM [apmtosap].[dbo].[Documents] WHERE ISNULL(SalesPersonCode,'') <> '' PRINT CONVERT(varChar,DATEDIFF(millisecond,@inici,GETDATE())) + ' milisegons'; PRINT CONVERT(nVarChar, GETDATE(), 113) + ' ' + 'FI del traspàs de APM a SAP.'; END