quinta-feira, 24 de março de 2016

Inserção de contas de T.A. numa BD da Primavera Software

O apuramento das tributações autónomas, são cada vez mais complexas e, exige um grande rigor na elaboração do plano de contas de forma a separar e aplicar as taxas de forma correta. O Contabilista terá que fazer a ponte entre a contabilidade geral e a fiscalidade de forma a que os procedimentos de encerramente de contas corra de forma eficaz, com eficiência e rápidez. Para concretizar esse objetivo, terá que planear um plano de contas de acordo com as normas fiscais e aperfeiçoar a sua folha de cálculo de forma a que esta obtenha os valores automáticamente. Neste sentido, apresento um código de inserção direta nas bases de dados de forma a criar a conta ou alterar e o texto da conta associada.

Este código só é possível utilizar no primavera software:

Contas a criar automáticamente:
622642 Cons.-equip. transp.-n/ aceite tot.< 25.000
622643 Cons.-equip. transp.-n/ aceite tot.> 35.000
622644 Cons.-equip. transp.-n/ aceite tot.< 35.000
624212 Gasóleo -n/ aceite pela totalidade < 25.000
624213 Gasóleo -n/ aceite pela totalidade > 35.000
624214 Gasóleo -n/ aceite pela totalidade <35 .000="" nbsp="" p="">62512 Desloc. e estadas-n/aceites p/ tot.  < 25.000
62513 Desloc. e estadas-n/aceites p/ tot. > 35.000
62514 Desloc. e estadas-n/aceites p/ tot. < 35.000
626322 Seguros- r.a.p. -n/aceite pela tot.
626352 Seguros -r.viat.-n/aceite pela tot. < 25.000
626353 Seguros -r.viat.-n/aceite pela tot. > 35.000
626354 Seguros -r.viat.-n/aceite pela tot. < 35.000
626362 Seguros - r.vida-n/aceite pela tot.
642142 Deprec-equipamento de transporte - n/ aceite pela totalidade < 25.000
642143 Deprec-equipamento de transporte - n/ aceite pela totalidade > 35.000
642144 Deprec-equipamento de transporte - n/ aceite pela totalidade < 35.000
681242 Imp. s/trans. rod.-n/ aceites tot. < 25.000
681243 Imp. s/trans. rod.-n/ aceites tot. > 35.000
681244 Imp. s/trans. rod.-n/ aceites tot.< 35.000
69152 Juros  compensatórios - n/aceites
69172 Jur. cont.loc.finan.- n/aceites tot  < 25.000
69173 Jur. cont.loc.finan.- n/aceites tot > 35.000
69174 Jur. cont.loc.finan.- n/aceites tot < 35.000



DECLARE @AnoDest  AS SMALLINT

DECLARE @Grupo    AS VARCHAR(10)



SET @AnoDest = 2015

SET @Grupo = 'GAST'



IF EXISTS

(

        SELECT      TOP 1 'X'

        FROM        [dbo].[ExerciciosCBL]

        WHERE       [Ano] = @AnoDest

)

BEGIN




--Inicio

      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '622644'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('622644', 'Cons.-equip. transp.-n/ aceite tot.< 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Cons.-equip. transp.-n/ aceite tot.< 35.000' WHERE Conta = '622644'

            END










      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '622642'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('622642', 'Cons.-equip. transp.-n/ aceite tot.< 25.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Cons.-equip. transp.-n/ aceite tot.< 25.000' WHERE Conta = '622642'  

            END      












IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '622643'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('622643', 'Cons.-equip. transp.-n/ aceite tot.> 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Cons.-equip. transp.-n/ aceite tot.> 35.000' WHERE Conta = '622643'  

            END      





--GASÓLEO

 IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '624214'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('624214', 'Gasóleo -n/ aceite pela totalidade <35 .000="" nodest="" p="" rupo="">
      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Gasóleo -n/ aceite pela totalidade <35 .000="" conta="624214" nbsp="" p="" where="">
            END










      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '624212'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('624212', 'Gasóleo -n/ aceite pela totalidade < 25.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Gasóleo -n/ aceite pela totalidade < 25.000' WHERE Conta = '624212'  

            END      












IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '624213'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('624213', 'Gasóleo -n/ aceite pela totalidade > 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Gasóleo -n/ aceite pela totalidade > 35.000' WHERE Conta = '624213'  

            END      









--Deslocações


IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '62514'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('62514', 'Desloc. e estadas-n/aceites p/ tot. < 35.000 ', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Desloc. e estadas-n/aceites p/ tot. < 35.000 ' WHERE Conta = '62514'

            END










      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '62512'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('62512', 'Desloc. e estadas-n/aceites p/ tot. < 25.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Desloc. e estadas-n/aceites p/ tot.  < 25.000' WHERE Conta = '62512'  

            END      












IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '62513'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('62513', 'Desloc. e estadas-n/aceites p/ tot. > 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Desloc. e estadas-n/aceites p/ tot. > 35.000' WHERE Conta = '62513'  

            END      





--Seguros



IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '626354'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('626354', 'Seguros -r.viat.-n/aceite pela tot. < 35.000 ', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Seguros -r.viat.-n/aceite pela tot. < 35.000' WHERE Conta = '626354'

            END










      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '626352'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('626352', 'Seguros -r.viat.-n/aceite pela tot.  < 25.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Seguros -r.viat.-n/aceite pela tot. < 25.000' WHERE Conta = '626352'  

            END      












IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '626353'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('626353', 'Seguros -r.viat.-n/aceite pela tot. > 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Seguros -r.viat.-n/aceite pela tot. > 35.000' WHERE Conta = '626353'  

            END      





--IUC


IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '681244'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('681244', 'Imp. s/trans. rod.-n/ aceites tot.< 35.000 ', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Imp. s/trans. rod.-n/ aceites tot.< 35.000' WHERE Conta = '681244'

            END










      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '681242'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('681242', 'Imp. s/trans. rod.-n/ aceites tot. < 25.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Imp. s/trans. rod.-n/ aceites tot. < 25.000' WHERE Conta = '681242'  

            END      












IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '681243'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('681243', 'Imp. s/trans. rod.-n/ aceites tot. > 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Imp. s/trans. rod.-n/ aceites tot. > 35.000' WHERE Conta = '681243'  

            END      




--Juros



IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '69174'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('69174', 'Jur. cont.loc.finan.- n/aceites tot < 35.000 ', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Jur. cont.loc.finan.- n/aceites tot < 35.000' WHERE Conta = '69174'

            END










      IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '69172'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('69172', 'Jur. cont.loc.finan.- n/aceites tot < 25.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Jur. cont.loc.finan.- n/aceites tot  < 25.000' WHERE Conta = '69172'  

            END      





IF NOT EXISTS

      (

              SELECT      TOP 1 'X'

              FROM        [dbo].[PlanoContas]

              WHERE       [Conta] = '69173'

      )

      BEGIN

            INSERT INTO [PlanoContas] ([Conta],[Descricao],[TipoConta], [Ano], [Grupo])

                  VALUES ('69173', 'Jur. cont.loc.finan.- n/aceites tot  > 35.000', 'M', @AnoDest, @Grupo)

      END

      ELSE

            BEGIN

            UPDATE [PlanoContas] SET Descricao = 'Jur. cont.loc.finan.- n/aceites tot > 35.000' WHERE Conta = '69173'  

            END      





--Fim

END
<35 .000="" nodest="" p="" rupo=""><35 .000="" conta="624214" nbsp="" p="" where="">

terça-feira, 22 de março de 2016

Código SQL diretamente para base de dados primavera

Boa tarde,

Depois de deixar um código em SQL direcionado para uma base de dados em acess, pediram-me para editar um código direcionado para as bases de dados do Primavera Software. A lógica é a mesma e diferença está no direcionamento da consulta para aceitar a ligação. Para base de dados em ORACLE existem umas pequenas diferenças nos comandos. Para aceder a estas pequenas diferenças, basta escrever no google para terem acesso aos comandos e alguns exemplos daquilo que fazem.

Este código vai dar cinquenta e quatro campos abastecidos na ficha do ativo, que serão úteis para análise com detalhe do equipamento e detetar erros de simpatia, que os utilizadores costumam dar.



SELECT Fichas.Ficha, Fichas.CodBarras, Fichas.NElementos, Fichas.NumeroInventario, Fichas.DataInventario, Fichas.NumeroSerie, Fichas.DataUtilizacao, Fichas.DataAquisicao, TipoImo.Descricao, Classes.Descricao, Classificacoes.Classificacao, Classificacoes.Descricao, Justificacoes.Descricao, Fichas.VidaManual, Fichas.TaxaManual, Marcas.Marca, Marcas.Descricao, UnidadesCaracterizacao.UnidadeCaracterizacao, UnidadesCaracterizacao.Descricao, Modelos.Modelo, Modelos.Descricao, Fichas.LocacaoValorResidual, Fichas.LocacaoNumRendas, Fichas.LocacaoDataOpCompra, Fichas.LocacaoDataInicio, Fichas.LocacaoValorTotal, Fichas.LNContrato, Fichas.LCompanhia, OutrosTerceiros.Nome, Conjuntos.Conjunto, Conjuntos.Descricao, TiposActividade.Actividade, TiposActividade.Descricao, Estabelecimentos.Estabelecimento, Estabelecimentos.Nome, Fichas.Descricao, Justificacoes.Enquadramento, UnidadesFisicas.UnidadeFisica, UnidadesFisicas.Descricao, UnidadesOrganizacionais.UnidadeOrganizacional, UnidadesOrganizacionais.Descricao, Fichas.Activo, Fichas.BemReinv, ClassificacoesFiscais.TaxaFiscal, Fichas.Justificacao, Fichas.TipoImo, Classificacoes.Diploma, Fichas.Classe, Fichas_Ascendente.Descricao, NodosEquipamentos_Ascendente.Equipamento, V_Processamentos.ValorAquisicao, PlanosDepreciacao.Sistema, PlanosDepreciacao.Tipo, Fichas.FotoEquipamento, Fichas.Observacoes
 FROM   ((((((((((((((((((((Fichas Fichas LEFT OUTER JOIN Classificacoes Classificacoes ON Fichas.IdClassificacao=Classificacoes.IdClassificacao) LEFT OUTER JOIN TipoImo TipoImo ON Fichas.TipoImo=TipoImo.Imobilizado) LEFT OUTER JOIN Classes Classes ON Fichas.Classe=Classes.Classe) LEFT OUTER JOIN Justificacoes Justificacoes ON Fichas.Justificacao=Justificacoes.Justificacao) LEFT OUTER JOIN DiferenciacaoVertical DiferenciacaoVertical ON Fichas.IDDifVertical=DiferenciacaoVertical.IDDifVertical) LEFT OUTER JOIN Marcas Marcas ON Fichas.Marca=Marcas.Marca) LEFT OUTER JOIN Modelos Modelos ON (Fichas.Marca=Modelos.Marca) AND (Fichas.Modelo=Modelos.Modelo)) LEFT OUTER JOIN OutrosTerceiros OutrosTerceiros ON Fichas.LCompanhia=OutrosTerceiros.Terceiro) LEFT OUTER JOIN Conjuntos Conjuntos ON Fichas.Conjunto=Conjuntos.Conjunto) LEFT OUTER JOIN Estabelecimentos Estabelecimentos ON Fichas.Estabelecimento=Estabelecimentos.Estabelecimento) LEFT OUTER JOIN TiposActividade TiposActividade ON Fichas.Actividade=TiposActividade.Actividade) LEFT OUTER JOIN UnidadesCaracterizacao UnidadesCaracterizacao ON Fichas.UnidadeCaracterizacao=UnidadesCaracterizacao.UnidadeCaracterizacao) LEFT OUTER JOIN V_EAP_UltimoProcessamento V_Processamentos ON Fichas.Ficha=V_Processamentos.Ficha) INNER JOIN NodosEquipamentos NodosEquipamentos ON Fichas.Ficha=NodosEquipamentos.Equipamento) LEFT OUTER JOIN NodosEquipamentos NodosEquipamentos_Ascendente ON NodosEquipamentos.IDNodoPai=NodosEquipamentos_Ascendente.IDNodo) LEFT OUTER JOIN Fichas Fichas_Ascendente ON NodosEquipamentos_Ascendente.Equipamento=Fichas_Ascendente.Ficha) LEFT OUTER JOIN PlanosDepreciacao PlanosDepreciacao ON V_Processamentos.Plano=PlanosDepreciacao.Plano) LEFT OUTER JOIN ClassificacoesFiscais ClassificacoesFiscais ON Classificacoes.IdClassificacao=ClassificacoesFiscais.IdClassificacao) LEFT OUTER JOIN UnidadesFisicas UnidadesFisicas ON DiferenciacaoVertical.UnidadeFisica=UnidadesFisicas.UnidadeFisica) LEFT OUTER JOIN UnidadesOrganizacionais UnidadesOrganizacionais ON DiferenciacaoVertical.UnidadeOrganica=UnidadesOrganizacionais.UnidadeOrganizacional) left Outer Join V_FichasEstados ON V_FichasEstados.Ficha=Fichas.ficha

 WHERE  PlanosDepreciacao.Sistema=1 AND PlanosDepreciacao.Tipo=1 and V_FichasEstados.DataDecrescimo Is Null

sábado, 19 de março de 2016

Curiosidade dos códigos

Recebo alguns emails sobre o que é o SQL e o que ele faz. Bem, primeiro quero referir que não tenho nenhuma formação em informática por isso, se algum perito em informática detetar algum erro, já sabe que não é a minha área de dominio. O SQL são consultas as bases de dados dos programas que usamos diariamente. Estes programas tem por detrás tabelas onde guardam tudo o que fazemos. Se tivermos acesso as tabelas, podemos consultar e devolver todos os dados de análise que precisamos sem grande trabalho(depois de termos o nosso código). O problema que enfrentamos é a quantidade de tabelas e campos dentro dessas tabelas. Só para terem uma ideia, o software da primavera tem +/- 17.600 campos que estão dispersos em diversas tabelas. Pois é, muitas tabelas e muitos campos e o problema inicial é como se ligam entre eles. Temos que analisar as tabelas e seguir a lógica daquilo que precisamos. A lógica é fundamental na informática para se poder trabalhar de uma forma rápida e eficaz. Para ficarem com uma ideia de contruir um mapa de stocks que tenham os seguintes campos: código do artigo, nome do material, Unidade básica do stock, quantidade de stock, consumos desde uma determinada data, Vendas (para ter tecido consumo uma tela, neste caso preciso dos tecidos para analisar se o stock é critico ou não), última data de consumo, última data de venda, etc. Abaixo fico o código para devolver um mapa simples compreensão e análise. Este recurso é usado entre o excel e o acess para poder retirar a informação necessária e poder análisar o stock em várias vertentes. Imaginem o acesso a base de dados do software. O limite é mesmo a nossa imaginação.....divirtam-se.

Select
S1.Material,
S1.Nome,
S1.Stock,
S1.Lote,
S1.[Consumo>=2012],
S1.[Vendas>=2012],
S2.UltConsumo
From
(SELECT
S1.Material,
S1.Nome,
S1.Stock,
S1.Lote,
S1.Consumo as [Consumo>=2012],
Sum(S2.[Vendas>=2012]) as [Vendas>=2012]
From
(Select
S1.Material,
S1.Nome,
S1.Stock,
S1.Lote,
S2.Consumo
From
(Select
S2.Material,
S1.Nome,
S1.Lote,
SUM(S1.Stock)-SUM(S2.Reser_Necess) as Stock
from
(
Select
S1.Material,
S2.Nome,
S1.Lote,
round(s1.Stock,0) as Stock
From
(Select
S1.Material,
sum(s1.lote) as Lote,
Sum(S1.Stock) as Stock
From
(Select
S2.Material,
S1.Lote,
S1.Stock
From
(
SELECT
MB52.`Nº do material` as Material_prep,
Count(MB52.lote) as Lote,
Sum(MB52.`Utilização livre`)+Sum(MB52.`Trânsito e TE`)+Sum(MB52.`Em contrqualidade`)+Sum(MB52.Restrito)+Sum(MB52.Bloqueado)-Sum(MB52.Devoluções)+Sum(MB52.`Estoque trânsito`)+Sum(MB52.`Em transferênc`) as Stock
FROM MB52
where left(MB52.`Nº do material`,2) like 'TP'
Group By MB52.`Nº do material`) as S1
Left Join
(
SELECT
TL_TC.Material as Material, TL_TC.`Mat Confi`as Material_Prep
FROM TL_TC TL_TC
Where  TL_TC.`Mat Confi` like 'TP%') as S2
ON s1.Material_Prep=s2.Material_Prep
Where S1.Stock >0
Order By S1.Stock desc
Union
SELECT
MB52.`Nº do material` as Material,
Count(MB52.lote) as Lote,
Sum(MB52.`Utilização livre`)+Sum(MB52.`Trânsito e TE`)+Sum(MB52.`Em contrqualidade`)+Sum(MB52.Restrito)+Sum(MB52.Bloqueado)-Sum(MB52.Devoluções)+Sum(MB52.`Estoque trânsito`)+Sum(MB52.`Em transferênc`) as Stock
FROM MB52
Where Left (MB52.`Nº do material` ,2) Not like 'TP'
group By MB52.`Nº do material`) as S1
Group By S1.Material
Order By Sum(S1.Stock)  desc) S1
Left Join
(SELECT
QTelas.Material as Material,
QTelas.`Texto breve material` as Nome
from Qtelas) as S2
ON s1.Material=s2.material
Group By S1.Material,
S2.Nome,
s1.Lote,
s1.Stock
Order By s1.Stock desc) as S1
left Join
(
Select
S1.Material,
Sum(S1.Reser_Necess) as Reser_Necess
From
(Select
S2.Material,
S1.Reser_Necess
From
(SELECT
Nec_Prod.Material as Material_Prep,
sum (Nec_Prod.NecIndepe)+ sum( Nec_Prod.Reservas) as Reser_Necess
FROM Nec_Prod Nec_Prod
WHERE Left(Nec_Prod.Material ,2) like 'TP'
Group By Nec_Prod.Material
Order By sum (Nec_Prod.NecIndepe)+ sum( Nec_Prod.Reservas) desc) As S1
Left Join
(
SELECT
TL_TC.Material as Material, TL_TC.`Mat Confi`as Material_Prep
FROM TL_TC TL_TC
Where  TL_TC.`Mat Confi` like 'TP%') as S2
ON s1.Material_Prep=s2.Material_Prep
UNION
SELECT
Nec_Prod.Material as Material,
sum (Nec_Prod.NecIndepe)+ sum( Nec_Prod.Reservas) as Reser_Necess
FROM Nec_Prod Nec_Prod
WHERE Left(Nec_Prod.Material ,2) Not  like 'TP'
Group By Nec_Prod.Material) As S1
Group By S1.Material
Order By Sum(S1.Reser_Necess)  desc) as S2
ON S1.Material=S2.material
WHERE S1.Nome not like '%FIC%' and  S1.Nome not like '%Guia%' and S1.Nome NOT Like '%Desa%' and S1.Nome NOT Like '%Anula%'
Group By S2.Material, S2.Reser_Necess, S1.Stock, S1.Nome, S1.Lote
Having
SUM(S1.Stock)-SUM(S2.Reser_Necess) >0
Order BY SUM(S1.Stock)-SUM(S2.Reser_Necess) desc) as S1
Left Join
(SELECT
iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9) as Material,
Sum(MB51Cons.`Qtd  UM registro`*'-1') as Consumo
FROM MB51Cons
Where Year(MB51Cons.Dtlçto) >='2012' and MB51Cons.Material NOT IN(
SELECT
iif(left(MB51Cons.Material,2)='TP','TL','')+''+ Right(MB51Cons.Material,9)as Material
FROM MB51Cons
Where  Year(MB51Cons.Dtlçto) >='2012' and Left(MB51Cons.Material,2)='TP'
GROUP BY MB51Cons.Material
Having Sum(MB51Cons.`Qtd  UM registro`*'-1')>0)
Group By iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9)
Order by Sum(MB51Cons.`Qtd  UM registro`*'-1') desc) as S2
ON S1.material= S2.Material
Order By S1.Stock desc) as S1
Left Join
(Select
S1.Material,
S2.[Vendas>=2012]
From
(Select
s1.Material,
s1.MatConf
from
(SELECT
TL_TC.Material as Material,
TL_TC.`Mat Confi`as MatConf
FROM mb52 left join TL_TC on mb52.`Nº do material`=TL_TC.Material
where len([mat Confi])='11'
union
SELECT
iif(left(Tp_TC.Material,2)='EL', 'EL', 'TL')+''+ Right(Tp_TC.Material,9) as Material,
Tp_TC.`Mat Confi` as MatConf
FROM mb52 left join Tp_TC  on mb52.`Nº do material`=Tp_TC.Material
where len([mat Confi])='11') as s1
where s1.material  in (
select
iif(Left(BITelas.Material,2)='El','El','TL')+''+Right(BITelas.Material,9)
from
BItelas
Group by iif(Left(BITelas.Material,2)='El','El','TL')+''+Right(BITelas.Material,9)
Having Sum(BITelas.`QTD Stock Total`)>0)) As S1
Left Join
(SELECT
`201210-Vendas`.Material as Material,
Sum(`201210-Vendas`.`BW: QTD UMB`) as [Vendas>=2012]
FROM  `D:\Users\marco.azevedo\Documents\Bases Projecto Stocks\Análise ao Stock\CloudPT\01-Tecidos\Estrutura do Ficheiro\DataBaseTecidos.accdb`.`201210-Vendas` `201210-Vendas`

Where Year(`201210-Vendas`.`Data Fatura`) >='2012' And `201210-Vendas`.`Canal distribuição` in ('01', '02')
Group By `201210-Vendas`.Material
Having Sum(`201210-Vendas`.`BW: QTD UMB`)  >0) as S2
ON S1.MatConf=S2.Material
Order By S2.[Vendas>=2012] desc) as S2
ON S1.Material=S2.Material
Group By S1.Material,
S1.Nome,
S1.Stock,
S1.Consumo, S1.Lote
Order By S1.Stock desc) as S1
Left Join
(Select
S1.Material as Material,
S1.UltConsumo
From
(SELECT
iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9) as Material,
Max(MB51cons.Dtlçto) As UltConsumo,
Sum(MB51Cons.`Qtd  UM registro`*'-1') as Consumo
FROM MB51Cons
Where Year(MB51Cons.Dtlçto) >='2011' and MB51Cons.Material NOT IN(
SELECT
iif(left(MB51Cons.Material,2)='TP','TL','')+''+ Right(MB51Cons.Material,9)as Material
FROM MB51Cons
Where  Year(MB51Cons.Dtlçto) >='2011' and Left(MB51Cons.Material,2)='TP'
GROUP BY MB51Cons.Material
Having Sum(MB51Cons.`Qtd  UM registro`*'-1')>0)
Group By iif(left(MB51Cons.Material,2)='TP', 'TL','TL')+''+Right(MB51Cons.Material,9)
Order by Sum(MB51Cons.`Qtd  UM registro`*'-1') desc) as S1) as S2
ON S1.Material=S2.Material
Order by  S1.Stock desc

quinta-feira, 17 de março de 2016

Controlo de gestão / Valiação de contas

Hoje apresento um video sobre como controlar todo o processo dos ativos, pessoal e de uma forma muito rápida os lançamentos contabilisticos por fornecedor no primavera software. Qualquer Contabilistica Certificado precisa de controlar todo o processo para não ter surpresas no final do mês ou no encerramento de contas. Controlar é certificar que os utilizadores lançam custos nas contas corretas, certificar que toda a parametrização esteja correta. Para isso, é necessário dominar cada vez mais as novas tecnologias, tais como, acess, excel, vba, sql e o softwarehouse que a empresa esteja a utilizar. É necessário primeiro compreender o negócio, conversar com o pessoal chave dentro do processo para depois criar os procedimentos e começar a validar tudo o que se faz numa unidade industrial. Nem tudo são rosas, quando não nos dão oportunidades para espreitar as base de dados do softwarehouse da empresa. Neste caso temos que ser nós a criar o essencial em bases de dados no acess para depois analisar e criticar alguns dados. Só assim poderemos melhorar o nosso trabalho e aperfeiçoar todo o processo contabilistico na vertente da contabilidade analitica.

Aqui deixo um video sobre as potencialidades do excel e da simplicidade de validar alguma rúbricas chave numa empresa.

Espero que gostem.


Video: https://youtu.be/shokspAg4rs