oigres Posted March 9, 2012 Report Share Posted March 9, 2012 Olá, Na empresa onde trabalho atribuíram-me esta tarefa mas estou com muitas dificuldades. Consigo fazer umas querys de SQL mas não sou programador, ao programar dentro do PHC (T-SQL, Xbase, ...) tudo me parece difícil! Já agora, algumas dicas que deva seguir para um dia conseguir programar no PHC, gostaria mesmo de atingir esse objectivo! A minha questão: Em PHC Corporate pretendo criar uma regra para alterar a data de vencimento ao gravar o documento, o objectivo é forçar determinado dia do mês mais x dias. Trata-se de uma condição de pagamento agora muito em uso entre as Empresas denominada "Resumo Mensal de Facturas", Basicamente uma factura emitida a dia 5 de Janeiro cuja condição de pagamento seja "RMF 30 dias" (Resumo Mensal de Facturas a 30 dias) só ficará vencida 30 dias após o fim desse mês (02 de Março +-) Existem diferentes condições de pagamento "RMF 45 dias", "RMF 8 dias", etc.. Todas vencem a X dias do fim do mês em que foi emitida a factura. Pensei então em criar esta regra em que ao gravar a factura, verificava qual a condição de pagamento do cliente, e se por exemplo numa factura emitida ao dia 15 de Fevereiro a condição fosse "RMF 30 dias", a regra ia buscar o ultimo dia do mês em que estamos e somava os dias dessa condição de pagamento. O problema está em colocar em prática esta ideia! Preciso mesmo de aprender a programar, não esqueçam das dicas para eu aprender! será que só com cursos?! Deixo o meu ponto da situação, não dá erro, está a alterar a data mas não está a colocar as datas correctamente! Set Date French Set Century On SELECT FT SELECT SUBSTR(ALLTRIM(FT.TPDESC),1,2) AS DIAS FROM FT WITH(BUFFERING = .T.) INTO CURSOR CRSDIAS VFECHA= FT.FDATA VMES=Month(VFECHA)+1 VANIO=Year(VFECHA) VDIAS=val(crsdias.dias) If VMES=13 VMES=1 VANIO=Year(VFECHA)+1 EndIf VDATA_VEN='01/'+Alltrim(Str(VMES,2))+'/'+Alltrim(Str(VANIO,4)) VDATA_VEN=CtoD(VDATA_VEN)+VDIAS SELECT FT REPLACE FT.PDATA WITH VDATA_VEN select ft Obrigados. Link to comment Share on other sites More sharing options...
zichev Posted March 13, 2012 Report Share Posted March 13, 2012 Vê este exemplo: local dias dias=30 text to yourquery additive textmerge noshow select CONVERT(date, GETDATE()+<<dias>>) as data endtext u_sqlexec(yourquery,"crsdata") SELECT FT REPLACE FT.PDATA WITH crsdata.data Quando necessitas da data actual mais uns dias fazes sempre getdate()+30 no caso de mais 30 dias... Agora é só adaptares o código ao que precisas Link to comment Share on other sites More sharing options...
oigres Posted March 14, 2012 Author Report Share Posted March 14, 2012 Ola, desde já agradeço a resposta, testei o código mas não faz o que pretendo. ele conta os X dias desde a data de hoje, e aquilo que se pretende é que conte os X dias a partir do último dia do mês em que estamos. Se puderes ajudar mais agradeço 😄 . Link to comment Share on other sites More sharing options...
zichev Posted March 14, 2012 Report Share Posted March 14, 2012 Para a tua questão tens aqui algo para adaptares DECLARE @mes CHAR(2), @ano CHAR(4) SET @mes = '02' SET @ano = '2012' SELECT DAY(DATEADD(d,-1,DATEADD(M,1,CONVERT(DATETIME,@ano + @mes + '01')))) as data SET @mes = '02' SET @ano = '2011' SELECT DAY(DATEADD(d,-1,DATEADD(M,1,CONVERT(DATETIME,@ano + @mes + '01')))) as data No entanto faz mais sentido que seja 15, 30, 45 dias apartir da data da factura (FDATA) Link to comment Share on other sites More sharing options...
Ricardo Soares Posted March 19, 2012 Report Share Posted March 19, 2012 aqui vai uma pequena dica.. Cria um valor por defeito que faça um return ao campo com esta condição: DATEADD(d, -DAY(GETDATE()),DATEADD(m,2,GETDATE())) 😁 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now