Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 05/13/2012 in all areas

  1. Boa noite pessoal... Esta mensagem é para todos em geral, e para ninguém em particular. Andamos todos stressados, e é compreensível. Não tem sido um ano fácil para ninguém, seja pela pandemia em si, pelo stress do confinamento, pela situação económica que o país atravessa, que todos nós, de uma forma ou de outra, atravessamos. Falo por mim, não tem sido fácil conjugar a vida familiar, que necessariamente tem de ter outras preocupações, especialmente havendo filhos em idade escolar, com uma vida profissional com os altos e baixos que nós conhecemos. A AT, como de costume, mete os pés pelas mãos. Tem boas ideias, do ponto de vista da administração (outras nem tanto), mas depois na hora de implementar, são falhas atrás de falhas. Avanços e recuos, sem pés nem cabeça, avanços a meio de uma pandemia, para depois recuar porque estamos a meio de uma pandemia... Incertezas e caprichos, como se do lado de cá estivessem autómatos que cumprem ordens sem pestanejar, sem ter de dar apoio familiar, sem ter vida social, sem no fundo poder viver. Enfim, é o que todos sabemos. Neste cenário, o Portugal@Programar, com todos os seus muitos defeitos, tem sido uma espécie de porto seguro para boa parte dos envolvidos. Programadores, vendedores, certificadores da AT, utilizadores, etc., todos temos passado por aqui. A informação presente nestes tópicos relacionados com a AT, se fosse compilada, dava provavelmente o manual técnico mais completo que existe para esta área. Todos nós bebemos daqui, praticamente todos terão contribuído também. Por tudo isto, as regras do fórum nem sempre são aplicadas rigidamente nestes tópicos. O volume de mensagens em dadas alturas é tal que quase era preciso um moderador só para isto, algo que é impossível acontecer pelos motivos óbvios. Também é verdade que geralmente não é preciso grande rigidez, os membros tendem a auto-moderar-se na maior parte dos casos. Alguns de nós já falámos tanto uns com os outros que parece que nos conhecemos há anos. Qualquer dia tenho de começar a deixar aqui os convites para a festa de natal. Este à-vontade gera por vezes uma maior despreocupação com as palavras usadas. Afinal, 'somos todos amigos'. Ainda assim, é natural que por vezes hajam informações contraditórias - pois se nem a AT se entende - e é também natural que hajam desentendimentos entre os membros. O que não pode nunca, e aqui quero ser bem claro, NUNCA haver, é falta de respeito entre os membros. Somos todos crescidinhos aqui. Tanto quanto sei, os miúdos da escola vêm ao P@P, mas noutros tópicos mais adequados à sua idade. Não deve haver nenhum nestes tópicos da AT, era capaz de apostar. Neste sentido, apelo ao bom senso de todos para controlarem as suas palavras quando se dirigem a outros membros. Tudo o que não precisamos é fechar os tópicos por falta de condições de bom convívio cá dentro, ou que membros valiosos* deixem de cá vir por não se sentirem bem a navegar na 'confusão causada por desentendimentos' que em nada contribuem para o objetivo dos tópicos. Se houver desentendimentos, que os vai haver, esgrimam os vossos argumentos em mensagem privada, deixando nos tópicos a informação que interesse a todos. * Todos os membros são valiosos, obviamente, mas a partilha de informação é o objetivo dos tópicos, pelo que partilhar informação bem corroborada é sempre preferível, e dá uma mais valia tanto ao tópico como ao membro em si. Desculpem o testamento, mas volta e meia faz-se necessário dar uma perspetiva rumo à convivência saudável. Espero que todos entendam, e que a interiorização destas palavras faça cada um ponderar as suas próprias quando estiverem quase a clicar no botão 'Enviar'. Obrigado a todos pelos contributos que têm dado à comunidade ao longo destes anos, e acima de tudo, obrigado pela compreensão, que certamente terão.
    22 points
  2. Conforme demos a entender há algum tempo atrás, o P@P decidiu mudar o software que suporta o fórum. Depois de um longo período de testes, esta mudança foi efectuada! Esta mudança coincide também com uma mudança de domínio principal do P@P, que passa agora a ser www.portugal-a-programar.pt! Depois de vários anos a usar o SMF, o P@P passa agora a usar o IPBoard, que para além do fórum, também inclui o blog, e uma nova plataforma de downloads, que esperamos que venha a ser bastante útil aos utilizadores da nossa comunidade, promovendo a partilha de recursos. Para além de várias melhorias ao nível de administração e moderação, o novo software trará também algumas melhorias para os utilizadores, das quais destacamos: Tema para dispositivos móveis Sistema de tags bastante funcional Integração com redes sociais Melhor sistema de pesquisa e de visualização de novos conteúdos Sistema de notificações bastante mais funcional Novos funcionalidades ao nível de mensagens privadas Sistema de avaliação de tópicos e de mensagens Temos consciência que nem todos utilizadores vão gostar da mudança, e que muito irão estranhar esta nova plataforma, mas acreditamos que a longo prazo a generalidade dos utilizadores irá reconhecer as vantagens desta nova opção. Sublinhamos também que uma mudança destas é um processo complexo, sujeito a erros. Apesar de todos os cuidados na preparação desta migração, é natural que notem alguns problemas, sobretudo nestes primeiros dias, até porque há ainda algumas arestas a limar nos próximos dia/semanas. Adicionalmente, os utilizadores devem rever as suas configurações, através do Painel de Controlo, de modo a garantir que tiram partido de todas as funcionalidades oferecidas pelo IPBoard, ou para corrigir alguma configuração que não tenha sido correctamente migrada. Da parte do staff, tentaremos resolver os problemas encontrados o mais rapidamente possível.
    16 points
  3. Ao contrário do passado com as guias de transporte e faturas, quem precisar de exemplo e implementação da Fatura Eletrónica XML em UBL que diga. Com validador incluído.
    10 points
  4. a comunicação das séries foi adiada para o próximo ano, qrcode mantem-se em janeiro. - ATCUD a 01/01/2022 - Comunicação das séries a 01/07/2021 https://info.portaldasfinancas.gov.pt/pt/informacao_fiscal/legislacao/Despachos_SEAF/Documents/Despacho_SEAAF_412_2020_XXII.pdf
    8 points
  5. OK malta, ainda pensei que isto ia lá depois de esfumarem um pouco, mas estou a ver que não... Daqui a tempos, alguém, quem sabe um de vocês, vai precisar pesquisar uma cena qualquer no tópico, e o que vai ver é lixo, com fartura. O meu ponto de vista é: O @brunotoira indicou num tópico onde anda malta a precisar que poderia partilhar a solução. Não disse em que termos, remetendo mais explicações para uma comunicação privada. A questão se o deveria fazer ou não no tópico é interessante, sem dúvida, e não totalmente definida. Por um lado, não disse especificamente que está a vender o código, pelo que não é uma venda. Por outro, indicou que desta vez não vai simplesmente colocar o código público, o que para bom entendedor, meia palavra basta. Qualquer membro pode concordar ou discordar desta posição. Se concordar, e lhe interessar, fala com ele. Se não concordar, está à vontade para denunciar a mensagem para ser alvo de análise posterior pelo staff do forum O que não pode, garantidamente, é começar uma troca de galhardetes sem ponta de sentido, ainda mais depois de eu avisar aqui em letra bem visível que qualquer assunto relacionado a isso seria para ser tratado por PM. Andamos todos a brincar? Somos crianças agora, num recreio onde só se pode jogar se todos jogarem pelas nossas regras? Que eu saiba, aqui não há crianças. Seria bom que todos se lembrassem disso. Quantas mais páginas vamos encher com lixo num tópico que trata de um assunto que claramente interessa a todos os que cá andam? Qualquer um daqui está à vontade para fazer o código que quiser, e partilhar ou não esse código. E se partilhar, as condições em que o faz são também suas. Se é preferível do ponto de vista da comunidade que o código seja partilhado gratuitamente? Claro. Eu próprio já o fiz várias vezes como disse o @CrominhO, e também já adaptei para mim código feito por outros, inclusivamente do @brunotoira. É por isso que isto se chama Comunidade. Mas exigir isso é que não podemos fazer. Acham que ele, ou qualquer outro, deve partilhar de borla? Escrevam-lhe em privado e tentem convencê-lo disso, com boa educação e, sim, bom senso. Se ele recusar, está no seu direito. E se não partilhar, não significa que não possa ajudar pontualmente uma ou outra dúvida que alguém exponha no tópico, como de resto é costume e já tem feito. Vamos por favor acabar com as birras, que já todos temos idade para isso.
    8 points
  6. Sabem o que vos digo, já comuniquei com eles pela(s) Empresa(s), super simpáticos, mas nem um Sim nem um Não, foi um NIN. Por enquanto é grátis e depois logo se vê. Já comuniquei a título pessoal, enquanto cidadão, com uma Empresa publica com conhecimento do MP. De resto, não acredito que tenha sido por minha causa, mas ironicamente pouco depois já tinham no site a dizer que o valor iria sair em despacho. Resta-nos, se estiverem de acordo (metam Like para se perceber), fazer um Email, mas curto e simples, enviarmos todos à eSPAP. Porque juntos somos mais fortes. Eles não sabem se estão a falar com uma SH de software Vertical ou horizontal, e isso faz toda a diferença. Do Género; Isto é só um exemplo, sujeito a todas as vossas alterações e ás nosssas questões, tem é de ser sucinto. Tenho para mim, que se eles receberem 5 Emails iguais, de empresas de desenvolvimento diferentes, irão olhar para as coisas de outra maneira, tal como a AT. Se receberem 10, tanto melhor, mais atenção irão dar. Muito mais do que a ASSOFT Sendo que 10 Emails, dado o numero de softwares, pessoas, aqui representados no P@P não é muito. E escusamos de andar "à pesca" a pensar o que vai ser ou deixar de ser. Digam se pretendem, e como pretendem. Eu envio por duas empresas.
    7 points
  7. Titulo do Projecto: Social Unlocker Última Versão: 1.6 Site Oficial: http://www.rafaelalmeida.pt/socialunlocker/ Líder do Projecto: cmd Descrição do Projecto: O objectivo do plugin é desbloquear o conteúdo em que somos "obrigados" a dar Like só para poder ver o mesmo. De momento está disponível para Google Chrome e Firefox, a ser lançado para Safari, Internet Explorer e possivelmente Opera. Download código-fonte: GitHub
    7 points
  8. Bom dia a todos, Tal como já alguns sabem,à uns dias fui a Lisboa e tive oportunidade de "apanhar" os inspectores bem dispostos, super-simpáticos e extremamente educados, sem levantar grandes problemas ao programa que levava a certificar. É de louvar a simpatia que me transmitiram, e como me senti muito "à vontade", fez-se tudo num instante. Houve tempo para tudo, inclusivé para falar deste Portugal-a-Programar. Ambos de inspectores mandaram um abraço aqui para o pessoal do fórum, que apesar de não estarem atentos ao que se fala aqui, dizem que vão ver se têm tempo para vir cá dar uma vista de olhos aos tópicos. Fiquei impressionado com os Softwares que internamente desenvolvem para detectar de imediato os problemas do saf-t. Pedi muito uma cópia para mim... ficou meio "dou ou não dou"... Foi feito em Perl, e se ficasse lá mais meia horita talvez mo fornecessem... Já vi muitos analisadores SAF-T, mas como aquele, nunca. É simplesmente GENIAL. Tive oportunidade de lhe questionar sobre a encriptação da chaveprivada, eu expliquei-lhe como estou a fazer, e foi-me logo dito que não há hipotese de recuperar a chave, mesmo abrindo no edit, ou UltraEdit ou PSPad etc. Já agora, para todos: o que estou a fazer é dividir a chaveprivada em segmentos de 10 caracteres, e atribuo a variaveis: var1 var2 var3 var4 var5 var6 etc... O texto que atribuo à variavel, é por ordem trocada, e ao precisar da chaveprivada correcta, é só colocar as variaveis pela ordem correcta, supomos que seja var2 var6 var4 var3 var1 var5. Além disso, ao entrar no programa, faço um randomize que me dá um numero de 1 a 10. Depois crio um caracter aleatoriamente, e coloco-o na String da ChavePrivada, com o caractér criado, na posição aleatória. (isto por cada variavel) e ao precisar da chaveprivada correcta, faço o inverso. Isto torna o sistema praticamente impossível de descodificar, pois dificilmente se consegue saber qual é a ordem correcta das variaveis, bem como o caractér que está lá a mais.. Quem diz variaveis de 10, pode usar variaveis com 5 o que torna ainda mais dificil. Falamos de muitos pormenores, que prefiro não falar para ja, e no fim lá me disseram, o programa está óptimo, não mexa mais nisso deixe estar isso assim :) E pronto, foi mais uma viagem aos nossos amigos.
    7 points
  9. Conforme demos a entender há algum tempo atrás, o P@P decidiu mudar o software que suporta o fórum. Depois de um longo período de testes, esta mudança foi efectuada! Esta mudança coincide também com uma mudança de domínio principal do P@P, que passa agora a ser www.portugal-a-programar.pt! Depois de vários anos a usar o SMF, o P@P passa agora a usar o IPBoard, que para além do fórum, também inclui o blog, e uma nova plataforma de downloads, que esperamos que venha a ser bastante útil aos utilizadores da nossa comunidade, promovendo a partilha de recursos. Para além de várias melhorias ao nível de administração e moderação, o novo software trará também algumas melhorias para os utilizadores, das quais destacamos: Tema para dispositivos móveis Sistema de tags bastante funcional Integração com redes sociais Melhor sistema de pesquisa e de visualização de novos conteúdos Sistema de notificações bastante mais funcional Novos funcionalidades ao nível de mensagens privadas Sistema de avaliação de tópicos e de mensagens Temos consciência que nem todos utilizadores vão gostar da mudança, e que muito irão estranhar esta nova plataforma, mas acreditamos que a longo prazo a generalidade dos utilizadores irá reconhecer as vantagens desta nova opção. Sublinhamos também que uma mudança destas é um processo complexo, sujeito a erros. Apesar de todos os cuidados na preparação desta migração, é natural que notem alguns problemas, sobretudo nestes primeiros dias, até porque há ainda algumas arestas a limar nos próximos dia/semanas. Adicionalmente, os utilizadores devem rever as suas configurações, através do Painel de Controlo, de modo a garantir que tiram partido de todas as funcionalidades oferecidas pelo IPBoard, ou para corrigir alguma configuração que não tenha sido correctamente migrada. Da parte do staff, tentaremos resolver os problemas encontrados o mais rapidamente possível.
    7 points
  10. Das propostas de alteração ao Orçamento de Estado 2021 que tinha colocado ha alguns dias... parece que a do PCP foi "aprovada em comissão". Proposta 1406C Aprovado(a) em Comissão EMPRESAS DEIXAM DE ESTAR OBRIGADAS A PÔR O CÓDIGO QR NAS FATURAS Ainda falta aprovarem a proposta do PS, para QRCODE nos primeiros meses de 2021. Penso que estando aprovado o Orçamento de Estado, a AT deverá dizer algo sobre isto?
    6 points
  11. Não sei se já tinha sido referido, mas já foi publicada a primeira FAQ acerca do QRCode.
    6 points
  12. Mais usadas, Swift/ObjectiveC para iOS e Java para Android. Mas existem muitas alternativas, dependendo do tipo de aplicação que pretendes desenvolver, mercado onde vais colocar as aplicações, etc. Como exemplo: Xamarin, desenvolves em C# e o Xamarin Studio trata de compilar para o formato correcto necessário para iOS, Android ou Windows Phone; Corona, usa Lua, tem um runtime próprio que é incluído com a tua APP para fazer a interpretação, vocacionada para jogos, mas podes usar para outras coisas. Cordova, usa HTML, JS e CSS, com possibilidade de usar alguns plugins nativos, é basicamente um browser em fullscreen; desenvolvimento muito mais rápido, mas ter boa performance e usabilidade exige mais cuidado Nativo: Visual Studio, Android Studio (Java), XCode (Swift), se quiseres desenvolver a "mesma" aplicação para duas plataformas diferentes tens de ter dois projectos/códigos diferentes. Pessoalmente prefiro as opções nativas, uso Swift para iOS e Java para Android, apesar de usar o Xamarin, não o uso para aplicações móveis. Em qualquer dos casos, desenvolver para iOS obriga a teres um Mac/OSX e uma conta de iOS Developer válida (subscrição anual), mesmo as versões multiplataforma usam as ferramentas nativas para fazerem as conversões necessárias. A questão do mercado de trabalho é subjectiva, Java é bastante usado. Java para Android é um pouco diferente (mais no tipo de bibliotecas e ferramentas) e o mercado de aplicações para Android é enorme. A minha experiência sempre foi que esse mercado, mesmo muito grande, não dá rendimento que justifique o investimento se estiver a desenvolver aplicações para utilizadores (ser eu a vender as APP). Com a utilização de in-app purchages e publicidade dá alguns trocos mas para é preciso uma utilização muito elevada para render alguma coisa. Por outro lado o mercado iOS é bem mais rentável. Em qualquer um dos dois onde tive mais sucesso foi em aplicações para empresas, em que a empresa vende ou oferece a aplicação, ou precisa dela para uso interno/suporte a modelo de negócio, e paga pelo desenvolvimento e nesse caso não tens de te preocupar com o quanto a APP vende. Neste caso, muitas vezes a tecnologia depende do cliente, fiz muitas aplicações com HTML/JS/CSS porque para o cliente era suficiente e para mim a velocidade de desenvolvimento resultava em lucro maior. Outros clientes exigiam nativo, mas pagavam para isso :).
    6 points
  13. O valor do trabalho é aquele que as pessoas estão dispostas a pagar por ele. Se temos um trabalho que precisa de uma pessoa, e há 10 pessoas disponíveis para o fazer, é pouco relevante se é necessário uma licenciatura para o fazer. Um dos erros do nosso país foi achar que era dando uma licenciatura a toda a gente que se punha as pessoas a ganhar mais. Na verdade, isso faz é com que a oferta de trabalho qualificado aumente, pondo toda a gente a ganhar menos (e baixando o preço dos produtos pelo meio, o que é benéfico para o consumidor). Parece-me normal que as pessoas comecem a trabalhar por salários mais baixos, pois tal tem tendência a aumentar o trabalho (pago) disponível (redução do custo/aumento da procura). Chamam exploradores ao empresários, mas ainda não ouvi chamarem exploradores aos consumidores, quando compram produtos a preços ridiculamente baixos. Uma pessoa que acha que produz mais do que o que recebe, resolvia o problema trabalhando por sua conta (e obviamente assumindo os riscos da actividade). É claro que ou fica a trabalhar no mercado paralelo, ou está lixado com as burocracias e impostos. E diria que este é o principal problema do nosso país. Falta quem crie emprego, quer devido à burocracia, quer devido aos impostos, quer devido aos incentivos (subsídios) para que não se produza, quer devido à cultura de que os empresários são exploradores.
    6 points
  14. Olá boa tarde, Disponibilizei uma aplicação funcional no GitHub. Nota: esta aplicação deverá ser "vista" como ponto de partida.
    5 points
  15. Caros, Decidi enviar este post para aqueles que estão a programar em C# e estão a obter o erro: "The underlying connection was closed: An unexpected error occurred on a send." Este problema é derivado do certificado PFX está a ser enviado corretamente ou algum problema na ligação SSL. Como já foi dito anteriormente, dizia-se que era necessário ativar o TSL 1.1 ou TSL 1.2. Mas após várias horas de depuração, cheguei a conclusão que isso não é necessário, o servidor da AT tem auto negociação e aceita todas as versões de TSL. Foi dito também que em algumas situações é necessário instalar o certificado PFX no Windows. Igualmente, após várias horas de depuração, cheguei a conclusão que isso também não é necessário. Para resolver estes problemas, precisam de reparar que o ficheiro PFX não possui somente 1 certificado mas sim uma cadeia de certificados! Então, ao invés de utilizarem: X509Certificate2 cert = new X509Certificate2(); cert.Import(CaminhoCertificado, SenhaCertificado, X509KeyStorageFlags.DefaultKeySet); request.ClientCertificates.Add(cert); Devem utilizar: X509Certificate2Collection certCollection = new X509Certificate2Collection(); certCollection.Import(CaminhoCertificado, SenhaCertificado, X509KeyStorageFlags.DefaultKeySet); request.ClientCertificates = certCollection; Esta simples alteração resolveu todos os problemas de comunicação com a AT.
    5 points
  16. Boas pessoal, não sei se já tinham visto esta publicação da AT... Como a mim passou despercebida esta publicação na AT, resolvi partilhar aqui para os despistados como eu! 😉 https://info.portaldasfinancas.gov.pt/pt/apoio_contribuinte/Faturacao/Comunicacao_Series_ATCUD/Paginas/default.aspx Boas férias!
    5 points
  17. Já resolvi todos os meus problemas com esta primeira integração com a AT (deixo os meus comentários para que futuros programadores não tenham de passar pelo mesmo): - Fiz testes em ambiente real (anulando posteriormente os documentos), pelo que li em muitos comentários deste post já longo, este é o modo operandis, pois o ambiente de testes é tudo menos um ambiente, que embora até consiga funcionar de vez em quando para alguns dos serviços, não funciona para muitos outros; - Borrifei-me para a v2 que altera da data encriptada para a data em aberto com a adição de uma nova chave encriptada Password Digest que é uma compilação de todas as outras: Tentei durante imensas horas mas falhou sempre. Visivelmente a Password Digest era pequena. Pelo que li por aqui, também ninguém conseguiu mas ao contrário de mim, também ninguém deu feedback final (se eu pensa-se assim, continuava-mos na mesma corrente). Portanto retire a v2, Password Digest e passei a enviar a data encriptada, conforme os exemplos da v1; - Por fim, com o projeto de consola de testes a integrar corretamente, em produção e uma vez que estou a usar Visual Studio, liguei-me ao wsdl e gerei tudo com o assistente de ligação aos webservices soap, portanto acabou-se o esparguete do xml e tenho o intelissense com classes como faço para outros webservices. O problema seria na autenticação. Para tal usei uma instância da classe OperationContextScope antes do pedido, para me meter pelo meio e injetar o xml de segurança; - Para certificados, adicionei os 2 ao projeto como embeded resources não dependendo do file system, pois o X509Certificate2 do .NET, tem um overload que permite ler de byte array. Quando os certificados renovarem, é mudar 2 ficheiros no projeto e virá logo com a atualização seguinte, pois são regulares, sem ter de alterar nada na máquina de destino.
    5 points
  18. (clica para download) Nesta edição continuaremos também a premiar os autores dos três melhores artigos, dado o sucesso nas edições anteriores. E os leitores devem dar a sua opinião para que possamos premiar correctamente. Para isso vote em http://tiny.cc/ProgramarED38_V Assim nesta edição trazemos até si, como artigo de capa, um artigo de Introdução à Programação em Compute Unified Device Architecture (CUDA) de Patricio Domingues. Nesta 38ª edição pode ainda encontrar os seguintes artigos: Accionamento de Led e Arduino Através de Interface Gráfica em Processing (Nuno Santos) PostgreSQL como alternativa de SGBD (Ricardo Trindade) Custo Efetivo de uma Solução na Nuvem em Ambiente Windows Azure (Edgar Santos) Rápido e bem? A programação web tem! (Sérgio Laranjeira) Introdução à Programação em CUDA (Patrício Domingues) Visual (NOT) Basic - Organismos! Do zero ao mercado (2/2) (Sérgio Ribeiro) Enigmas de C#: Foreach (Paulo Morgado) Core Dump: Core Dump [8] - Fora de Horas (Fernando Martins) Review do livro Introdução ao Design de Interfaces (Sérgio Alves) Review do livro Exercícios em Java – Algoritmia e Programação Estruturada (Carlos José Dias) Viagem da Informação (Rita Peres) “Camaleão! De que cor?” (Sara Santos) Verifica regularmente os ficheiros Javascript do seu site? (David Sopas) Entrevista a Tiago Andrade e Silva Projecto em Destaque na Comunidade Portugal-a-Programar: Taggeo
    5 points
  19. Partilho abaixo o código completo para comunicar com os serviços Saphety para quem precisar. A documentação é publica por isso não deve haver problema e com certeza muito pessoal agradece. Visto que existem vários brokers, para já estou a desenvolver para 2, saphety e espap, eu optei por criar uma interface com o essencial e derivar a partir dai para qualquer broker. No entanto quem quiser pode retirar a interface e usar apenas a classe. using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Text; using System.Threading.Tasks; using Microsoft.VisualBasic; public class SaphetyAS2 : AS2Interface { private string _token; public string Token { get { return _token; } } private string _responseText; public string ResponseText { get { return _responseText; } } private string _requestID; public string RequestID { get { return _requestID; } } private string _requestStatus; public string RequestStatus { get { return _requestStatus; } } private string _errors; public string Errors { get { return _requestStatus; } } private string server_base_adress = "dcn-solution.saphety.com/Dcn.Sandbox.WebApi"; // Saphety Invoice Network - Production Environment // Const server_base_adress = "dcn-solution.saphety.com/Dcn.Business.WebApi" private string TokenUri = "https://" + server_base_adress + "/api/Account/getToken"; private string SendFileUri = "https://" + server_base_adress + "/api/CountryFormatAsyncRequest/processDocument/{IssuerNIF}/{DocumentType}/PT"; private string GetStatusByRequestIDUri = "https://" + server_base_adress + "/api/CountryFormatAsyncRequest/{RequestId}"; private string GetStatusByDocumentKeyUri = "https://" + server_base_adress + "/api/OutboundFinancialDocument/documentFormats/{0}"; public HttpStatusCode GetToken(string username, string password) { HttpWebRequest http = (HttpWebRequest)WebRequest.Create(new Uri(TokenUri)); http.Method = "POST"; http.AllowAutoRedirect = true; http.KeepAlive = true; http.PreAuthenticate = false; http.SendChunked = false; Credentials cred = new Credentials() { UserName = username, Password = password }; string content = JsonConvert.SerializeObject(cred); string contentType = "application/json"; http.ContentType = contentType; http.ContentLength = content.Length; SendWebRequest(http, content); var resp = HandleWebResponse(http); if (resp == System.Net.HttpStatusCode.OK) { var json_response = JObject.Parse(_responseText); if (Convert.ToBoolean(json_response("IsValid")) == true) _token = json_response("Data"); } return resp; } public HttpStatusCode SendFileCIUSPT(string filename, string token, string DocType, string IssuerNIF) { string Content; if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException("filename"); try { using (StreamReader xmlfilereader = new StreamReader(filename)) { Content = xmlfilereader.ReadToEnd(); } } catch (Exception ex) { Interaction.MsgBox("Ocorreu o seguinte erro a ler o ficheiro " + filename + Constants.vbNewLine + ex.Message); throw new ArgumentNullException("filename"); } HttpWebRequest http = (HttpWebRequest)WebRequest.Create(new Uri(SendFileUri.Replace("{IssuerNIF}", IssuerNIF).Replace("{DocumentType}", DocType))); http.Method = "POST"; http.UserAgent = "ENIGMA AGENT"; http.Headers.Add("Authorization", "Bearer " + token); http.ContentType = "application/xml"; http.ContentLength = Content.Length; SendWebRequest(http, Content); var resp = HandleWebResponse(http); if (resp == System.Net.HttpStatusCode.OK) _requestID = _responseText; return resp; } public HttpStatusCode GetStatusByRequestID(string ID, string token, string sender) { HttpWebRequest http = (HttpWebRequest)WebRequest.Create(new Uri(GetStatusByRequestIDUri.Replace("{RequestId}", ID))); http.Method = "GET"; http.UserAgent = "ENIGMA AGENT"; http.Headers.Add("Authorization", "Bearer " + token); // SendWebRequest(http, "") var resp = HandleWebResponse(http); if (resp == System.Net.HttpStatusCode.OK) { var json_response = JObject.Parse(_responseText); if (Convert.ToBoolean(json_response("IsValid")) == true) _requestStatus = json_response("Data")("AsyncStatus"); } return resp; } public HttpStatusCode GetStatusByDocumentKey(string ID, string token, string requester, string sender, string type, DateTime data) { } private HttpStatusCode HandleWebResponse(HttpWebRequest http) { try { HttpWebResponse response = (HttpWebResponse)http.GetResponse(); using (var reader = new System.IO.StreamReader(response.GetResponseStream(), true)) { _responseText = reader.ReadToEnd(); } response.Close(); return response.StatusCode; } catch (Exception ex) { Interaction.MsgBox("O servidor devolveu um erro: " + Constants.vbNewLine + ex.Message); } } private void SendWebRequest(HttpWebRequest http, byte[] fileData) { Stream oRequestStream = http.GetRequestStream(); oRequestStream.Write(fileData, 0, fileData.Length); oRequestStream.Flush(); oRequestStream.Close(); } private void SendWebRequest(HttpWebRequest http, string data) { StreamWriter oRequestStream = new StreamWriter(http.GetRequestStream(), Encoding.ASCII); oRequestStream.Write(data); oRequestStream.Close(); } }
    5 points
  20. É simples - se desenvolveres o código, vai ser adiado em 30 de Dezembro. Agora, se não desenvolveres, entra em serviço em 1 de Janeiro de 2021. É sempre assim, não sei porque tens duvidas. Falando a sério, pode dar para os dois lados.
    5 points
  21. Realmente não podemos olhar para isto só do ponto de vista do programador, em que a maior parte das empresas que desenvolvem aplicações de faturação já terão desenvolvido aquilo que é necessário à impressão do QR Code. Convém pensar nos outros pontos de vista, dos clientes que têm que trocar impressoras e equipamentos móveis numa altura em que têm quebras de faturação muito significativas e sem saber se daqui por seis meses manterão os seus negócios, da implementação que obrigará a que técnicos se tenham que deslocar fisicamente aos estabelecimentos dos clientes num cenário de pandemia e limitações na sua mobilidade, da logística nos trasnportes que com os picos de entregas de compras online dificultarão a entrega de equipamentos (impressoras, terminais, ...) atempadamente, entre muitos outros. Esperemos que todos nós continuemos a ter muitos clientes a usarem as nossas soluções quando efetivamente estas alterações entrarem em vigor, sendo que até ao momento não é conhecido que a obrigatoriedade do QR Code seja adiada.
    5 points
  22. Bem antes demais, acho estranho, pessoal andar aqui a questionar a interpretação da maioria, e a falar em comunicação Social há pelo menos 2 dias, e não ser capaz de em meia hora fazer um telefonema a AT a questionar se a interpretação deles está Correcta. Eu hoje, apesar de ter quase a certeza que interpretação que estava a fazer do despacho era a mais correcta, liguei para a AT e confirmei. Como sempre, fui super bem atendido e fizeram o possível para me esclarecer. Se bem se recordam, isto já aconteceu no passado em Relação ao Webservice e não só. Copy & Paste de certificados, horas sem fim a discutir, e no fim, ninguém tinha ligado ou sequer comunicado à AT 😐 parece que há pessoas que têm medo de Falar com a AT. Concordo com tudo o que disseste Americo, tanto que meti Like, no entanto ambos sabemos que o Sistema não funciona assim. A AT não precisa de certo que eu a defenda como já fiz no passado, mas por vezes a ideia que passa é que a AT ou os seus funcionários são culpados de tudo. Ora que culpa tem a AT se um secretário de estado, por força da aprovação de um OE ou de captação de fundos Europeus, lança um despacho sem passar "cavaco" a ninguém? sem saber as implicações ou o tempo qu leva a desenvolver algo do género como meteram no Despacho?? lol 😅 O Legislador é que antes de legislar, deveria assegurar no minimo todas as implicações antes de o fazerem. Com a agravante, como ficou visível aqui no P@P, do Legislador, chegar a mandar "bocas" para a Comunicação Social primeiro, para pressionar os Parceiros ou whatever, e só depois questiona ou manda executar a AT. Tenho ideia, e livre de falsos moralismos, que neste momento, se trabalhasse na AT em determinados departamentos, demitia-me 😐 ... A AT não só tem de tentar executar aquilo que lhes foi imposto há 5 dias atrás, como ainda tem de responder a todas as questões colocadas por nós, e por outros contribuintes que ouvem na Comunicação Social antes e decidem tirar duvidas de algo que eles nem sabem. IMHO 🙂
    5 points
  23. Nada disso, também concordo que a OCC tem feito bastante na área do software. Só tem o defeito de nos fazer concorrência direta e desleal.
    5 points
  24. uses DelphiZXingQRCode; Procedure GravarDocumento ou ImprimirDocumento; var CodigoQR:String; ... ... ... begin Ao gravar documento ou antes de imprimir: //obter código unico //ainda estou a aguardar informação adicional sobre o pedido do ATCUD CodigoQR:=copy(AnsiReverseString(IntToStr(IBDOCS.fieldbyname('ID').Asinteger*4)),1,4); CodigoQR:=CodigoQR+IBDOCS.fieldbyname('SERIE').AsString; CodigoQR:=CodigoQR+copy(IntToStr(NumeroDocumento*2),5,9); //criar os campos para gerar o QRCode. //A NIF do emitente * //B NIF do adquirente * //C País do adquirente * //D Tipo de documento * //E Estado do documento * //F Data do documento * //G Identificação única do documento * //H ATCUD * //I1 Espaço fiscal * //I2 Base tributável isenta de IVA * //I3 Base tributável de IVA à taxa reduzida * //I4 Total de IVA à taxa reduzida * //I5 Base tributável de IVA à taxa intermédia * //I6 Total de IVA à taxa intermédia * //I7 Base tributável de IVA à taxa normal * //I8 Total de IVA à taxa normal * //J1 Espaço fiscal * //J2 Base tributável isenta * //J3 Base tributável deIVA à taxa reduzida * //J4 Total de IVA à taxa reduzida * //J5 Base tributável de IVA à taxa intermédia * //.. //... //... //.... //..... //etc.... //N Total de impostos * //O Total do documento com impostos * //Q 4 carateres do Hash * //R Nº do certificado * StringCodigo:='A:NIFEMISSOR*'; StringCodigo:=StringCodigo+'B:'+IBDocs.FieldByName('NRCONTRIBUINTE').AsString+'*'; StringCodigo:=StringCodigo+'C:PT*'; if TIPODOCUMENTO='FACTURA SIMPLIFICADA' then StringCodigo:=StringCodigo+'D:FS*'; if TIPODOCUMENTO='NOTA DE CREDITO' then StringCodigo:=StringCodigo+'D:NC*'; if TIPODOCUMENTO='RECIBO' then StringCodigo:=StringCodigo+'D:RE*'; //ETC... StringCodigo:=StringCodigo+'E:N*'; StringCodigo:=StringCodigo+'F:'+FORMATDATETIME('YYYYMMDD',IBDocs.FieldByName('DATADOC').AsDateTime)+'*'; StringCodigo:=StringCodigo+'G:'+IBDOCS.fieldbyname('INICIAISDOC').AsString + ' ' + IBDOCS.FIELDBYNAME('SERIE').AsString + '/' + IBDOCS.fieldbyname('NDOC').asstring+'*'; StringCodigo:=StringCodigo+'H:'+IBDocs.FieldByName('CODLOJA').AsString +'-'+IBDocs.FieldByName('NDOC').AsString+'*'; StringCodigo:=StringCodigo+'I1:PT*'; ibquery1.close; ibquery1.SQL.clear; ibquery1.SQL.add( 'select ROUND(TOTAISIVA1,2), ROUND(TOTAISIVA2,2), ROUND(TOTAISIVA3,2), ROUND(TOTAISIVA4,2) FROM DOCS WHERE tipodoc=:TIPODOC AND ndoc=:NDOC'); ibquery1.parambyname('TIPODOC').AsString := TIPODOCUMENTO; ibquery1.parambyname('NDOC').AsInteger := NumeroDocumento; ibquery1.open; while NOT ibquery1.eof do begin if ibquery1.FieldByName('IVA').AsInteger=6 then begin StringCodigo:=StringCodigo+'I3:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I4:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; if ibquery1.FieldByName('IVA').AsInteger=13 then begin StringCodigo:=StringCodigo+'I5:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I6:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; if ibquery1.FieldByName('IVA').AsInteger=23 then begin StringCodigo:=StringCodigo+'I7:'+FloatToStr(ibquery1.FieldByName('TOTALSEMIVA').AsFloat)+'*'; StringCodigo:=StringCodigo+'I8:'+FloatToStr(ibquery1.FieldByName('TOTALIVA').AsFloat)+'*'; end; ibquery1.Next; end; StringCodigo:=StringCodigo+'N:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALIVA').AsFloat,2))+'*'; StringCodigo:=StringCodigo+'O:'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2))+'*'; StringCodigo:=StringCodigo+'Q:'+copy(IBDocs.FieldByName('PRINTHASH').AsString,1,4)+'*'; //CODIGO HASH StringCodigo:=StringCodigo+'R:'+CodigoCertificado+'*'; // VOSSO NUMERO DE CERTIFICADO StringCodigo:=StringCodigo+'S:NU;'+FloatToStr(RoundNExtend(IBDOCS.FieldByName('TOTALGERAL').AsFloat,2)); StringCodigo:=StringReplace(StringCodigo,',','.',[rfReplaceAll]); UpdateQRCode(StringCodigo,CodigoQR); //Isto vai-vos criar o BMP com o QRCode. //Depois só têm que grava-lo numa BD, e no CrystalReports, adicionar o campo dessa BD. +/- ISTO UPDATE DOCS SET IMAGEMQRCODE=FILESTREAM(C:\PASTATEMPORARIA\QRCODE\XXXXXXXXX.BMP Procedure TDataModule1.UpdateQRCode(Texto,Codigo:String); var QRCode: TDelphiZXingQRCode; //Gratuito é só ir buscar á net. Row, Column: Integer; Scale: Double; QRCodeBitmap: TBitmap; ImageQR:TImage; begin try ImageQR:=TImage.Create(self); QRCodeBitmap := TBitmap.Create; QRCode := TDelphiZXingQRCode.Create; QRCode.Data := Texto; QRCode.Encoding := TQRCodeEncoding(0); QRCode.QuietZone := 1; QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns); for Row := 0 to QRCode.Rows - 1 do begin for Column := 0 to QRCode.Columns - 1 do begin if (QRCode.IsBlack[Row, Column]) then begin QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack; end else begin QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite; end; end; end; ImageQR.Canvas.Brush.Color := clWhite; ImageQR.Canvas.FillRect(Rect(0, 0, ImageQR.Width, ImageQR.Height)); if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then begin if (ImageQR.Width < ImageQR.Height) then begin Scale := ImageQR.Width / QRCodeBitmap.Width; end else begin Scale := ImageQR.Height / QRCodeBitmap.Height; end; ImageQR.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap); end; ImageQR.Picture.SaveToFile('C:\PASTATEMPORARIA\QRCode\'+Codigo+'.bmp'); QRCode.Free; QRCodeBitmap.Free; except end; end; Delphi Se precisarem para outras linguagens de programação, mandem msg.
    5 points
  25. Foi hoje publicada a Portaria 126/2019 que vem alterar o formato do ficheiro de inventários que é obrigatório comunicar anualmente à AT. A grande alteração passa pela obrigatoriedade de indicar o "valor da existência final relativa ao período a que reporta (valor total relativo à quantidade indicada)" (campo ClosingStockValue). Isto entra em vigor a 1 de Janeiro de 2020 mas já tem de ser usado para comunicar os inventários de 2019.
    5 points
  26. Entrei isto na net Gostava de saber a vossa opinião https://www.espap.gov.pt/Documents/servicos/sp_fin/v1.6.7_Manual_Fornecedores_1.6_Doc_Eletronicos.pdf Se alguem souber do schema xsd... xD
    5 points
  27. Voltamos a misturar assuntos! FACTURA ELECTRÓNICA continua a ter a mesma definição! Tem de ser AUTENTICADA e o recebimento tem de ser assegurado (bem como o arquivo). Existe legislação própria para o efeito. Aqui está em debate a FACTURA electrónica da ADMINISTRAÇÃO PÚBLICA! Vou tentar responder a isto de forma clara: Como podem verificar, é uma ESPIRAL de decretos leis, e este resumo que fiz esclarece perfeitamente o que é uma FACTURA ELECTRÓNICA de acordo com a legislação em vigor, e CONTINUARÁ A SER, até que as leis sejam revogadas / alteradas.
    5 points
  28. Em relação ao Número de Série penso que não é bem como foi aqui referido anteriormente: o grupo 4.1.4.19.12. Número de série do produto (ProductSerialNumber) não é obrigatório (não tem o asterisco). Agora, existindo este grupo, então é obrigatório que exista o 4.1.4.19.12.1. * Número de série (SerialNumber), o que é compreensível. Por aqui não vem nenhum mal ao mundo: não havendo números de série não colocamos o 4.1.4.19.12. Havendo números de série, temos o 4.1.4.19.12 e, dentro deste, colocamos tantos 4.1.4.19.12.1. quantos forem necessários.
    5 points
  29. Boas, Vou abrir este tópico só para ir deixando algumas dicas/pregos/workarounds que fui encontrando para que nao tenham de passar pelo mesmo pesadelo que eu. Caso algum destes problemas so me esteja a acontecer a mim, avisem sff ^^ 1º - Se quiserem mostrar imagens não usem o TImage!! Quem quiser saber mais disto posso depois deixar mais exactamente o porque, mas basicamente, as TImage são muito pesadas. Se criarem umas 10 dinamicamente, ou mudarem a visibilidade de uma maiorzita, já notam a pendurar alguns segundos. Solução: Usar o TRectangle e usar a imagem na propriedade Fill. Não tem comparaçao... até voa ^^ 2º - Minimizar o uso de forms! Não é que não possam... mas em termos de desempenho e coerencia entre versoes android/windows, muitos dos casos mais simples de utilização de N forms podem ser minimizados através do uso de um TabControl, em que cada página seria como o novo form. Dado que as apps p/android nao terão necessidade obrigatoria de muitos forms, nao me parece muito desconfortavel. Mais uma vez, não existe nenhuma limitação sobre isto, é apenas uma sugestão minha! 3º - Usar e controlar o botão de retroceder do Android (tipicamente o do lado esquerdo ) Este é uma dica e um prego num só ^^. Para apanharem o botão de retroceder do android basta fazerem como normalmente se faria para qualquer tecla normal mas usando a constante VKHardwareBack (if Key = vkHardwareBack then). Até aqui nada de especial, o problema é que mesmo que apanhem a tecla e façam codigo vosso, o programa vai fechar! Aqui não sei se vem do Android ou do Delphi mas por defeito, qualquer aplicaçao fecha sempre que carregam nesta tecla. A solução é apanhar a tecla normalmente, mas caso nao queiramos fechar o programa temos que enganar o programa e dizer que afinal nao foi essa tecla que foi pressionada com um Key := 0; Tendo como exemplo o ponto 2, em que temos uma TabControl com 3 paginas e queremos que estando na pagina 2, a aplicaçao abra a pagina 1 quando o utilizador carregue no retroceder, será preciso este código: procedure TFrm.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if Key = vkHardwareBack then begin //Prego para nao sair do programa Key := 0; // Do whatever you want to do here if TabPrincipal.ActiveTab=TabLvlSel then TabPrincipal.ActiveTab:=TabIntro; end; end; (Esta informação vem na documentação oficial da embarcadero, mas é para reforçar a ideia, porque senao acontece como a mim e nunca mais se lembram do Key:=0; e depois la se vao umas horas a procurar porque raio a app fecha sempre que se carrega no back -.-) 4º - Alterações em controlos do form só na main thread! Isto já é dado adquirido em muitas linguagens por isso pode ser uma falsa questão. De qualquer modo, como nunca tive problemas com isto em aplicações para Windows, é algo que não dava importância) De qualquer modo, neste caso o melhor é usar uma class propria derivada da Thread onde se coloque o codigo a correr pela thread numa funçao e a alteraçoes dos controlos do form noutra, para que se possa usar o Syncronize(); TGui=Class(TThread); var frm:TForm; procedure ChangeGUI(); protected procedure Execute(); end; procedure TThread.ChangeGUI(); begin frm.label1.text:='bu!'; end; procedure TThread.Execute(); begin //Do work //Do some more... Syncronize(ChangeGUI()); // etc... end; 5º - Não se assustem com o tamanho do APK! Mal façam a primeira aplicação vão reparar que o apk tem cerca de 20mb, caso nao tenham posto nada de especial. Isto é realmente muito abusado em relação ao Java mas calma! Quando chegar o momento em que queiram distribuir a vossa aplicaçao é altura de criar o signed APK, que não é feito através do build normal mas sim do publish (Ver nos links em baixo), isto vai fazer com que o tamanho do apk final seja significativamente mais reduzido... No meu teste fiquei com 5mb penso eu, mas 2mb eram em imagens e outros resources. Links Uteis http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Mobile_Application_Development (Ver este link com atenção para publicar a aplicação na Google Play e para criar o apk final) http://docwiki.embarcadero.com/RADStudio/XE5/en/Mobile_Code_Snippets http://www.fmxexpress.com/ (Este tem tudo o que precisam saber para aplicações em Android)
    5 points
  30. Titulo do Projecto: PROGRAMAR Downloader for Linux Última Versão Estável: 2.1.1 Licença: GNU GPL 3.0 Líder do Projecto: thoga31 Membros Actuais do Projecto: thoga31 Demo do Modo Interactivo (2.0.0): vídeo Demo das novidades da versão 2.1.0: vídeo Descrição do Projecto: Reparei que já temos mais do que uma aplicação relacionada com a Revista PROGRAMAR, mas nenhuma delas se destina a outra plataforma que não o Windows. Nessa medida, decidi fazer uma aplicação simples e minimalista para distribuições GNU/Linux. O programa permite: Verificar qual é a última edição da Revista. Fazer o download de todas as edições, apenas da última, ou então um download selectivo de determinadas edições. Modular o output através dos modificadores -v (verbose) e -q (quiet, não recomendado). Trabalhar em Modo Interactivo com opção de download. Obter informações acerca de uma dada edição com o Modo Informativo. Exemplos de uso: COMANDO DESCRIÇÃO revista --last Mostra qual é a última edição. revista --download last Faz o download da última edição. --get e --download são equivalentes. revista --get all Faz o download de todas as edições. revista --get range 20 27 -v Faz o download da 20ª edição até à 27ª, inclusive. revista --get set 5 10 13 36 47 Faz o download selectivo das 5ª, 10ª, 13ª e 36ª edições. Não fará a da 47ª pois neste momento, só há a 43ª O programa descarta automaticamente edições não válidas. revista --interact Entra no Modo Interactivo (ver screenshots). revista --info last Informações acerca da última edição (Modo Informativo). revista --info 34 Informações da 34ª edição. revista --help Ajuda do programa. revista --about Acerca do programa. Dirijam-se, na shell, para o directório onde querem guardar as edições e executem o programa. Ele detecta automaticamente a localização onde estão, e lá guardará os downloads. Caso algum ficheiro já exista, o seu download não é executado, mas isto não interrompe o programa - ele continua a executar os restantes downloads que estão na stack de espera. Caso um download tenha menos de 1KB, o ficheiro resultante é eliminado. Nos meus tempos livres irei desenvolver mais a aplicação. Acerca do programa: Programado em Object Pascal. Compilado com Free Pascal Compiler versão 2.6.4, no Ubuntu 14.04 LTS x64. Download: Bitbucket Centro de Downloads: http://www.portugal-a-programar.pt/files/file/95-programar-downloader-for-linux/
    5 points
  31. Como aqui só se fala de tristezas. A todos um Santo Natal e Bom Ano 2015. Obrigado a todos aqueles que me ajudaram
    5 points
  32. Para quem possa interessar, fica aqui um exemplo de questionário que anda a circular relativo as inspeções no âmbito da faturação:
    5 points
  33. Eles estão-se nas tintas para nós e para o que nós achamos lamentável... Quero que eles se f... Cosam! Amanhã vou de férias, coisa que não faço há anos... São só 4 dias, mas acho que o escravo merece. Quando voltar, logo se vê. Ainda que eles se estejam a marimbar para isso, também temos família a quem dar atenção, filhos com quem queremos estar, cérebros a precisar de descanso... Tudo o que eles vêem em nós são gajos que ficam todos contentes com cada alteração, por ser mais uma que nos vai deixar ricos! Quanto a vocês não sei, mas eu, nem com três trabalhos consigo ficar rico... A única coisa que consigo ficar por estes dias é farto... Pronto, está dito...
    5 points
  34. Entre não pagar a taxa e não receberes nada e pagar a taxa e mesmo assim não receberes nada, qual preferes?
    5 points
  35. Eu tenho que desabafar isto: Existem poucas coisa de que me orgulho em ser Português. Mas este fórum é um orgulho. Aqui somos todos concorrentes e ajudamo-nos todos uns aos outros. Bem hajam ao(s) seu(s) criador(es) e a todos os que aqui colaboram.
    5 points
  36. Quiseram verificar se deixava anular documentos e em que condições - se for ultimo e mesma data, ok segundas vias, alterar nome de cliente e imprimir depois segunda via de documento (tem que sair com nome anterior) documentos com valor menor que 1 euro - querem sempre ver este caso múltiplos tipos de iva mesmo documento também é uma obrigatória deles. notas de credito e debito com referencia obrigatória a fatura - no documento e no saft nota de credito se deixa fazer (não pode) com valor superior a fatura no caso de morada de entrega alternativa se a exporta para o saft Não deixar faturar com data anterior ao ultimo documento emitido Se a vossa app não faz algo - ex, fac. simplificada - digam, eles não insistem Comigo foi o caso - não deixo faturar sem nif. Ai não ? E os seu clientes ? Não se queixam. Então está bem. Mostrar que não deixa. Toneladas de controles evitados só com essa. e os 'clássicos' controle de series, nif's, nome de utilizador e backups Vantagem - se quiserem mais tarde acrescentar novos tipos de documentos - é só enviar os pdf's e safts para o vosso querido certificador via email, não é necessário nova certificação, basta que ele diga que estão bem antes de implementarem nos clientes. O que apanhei sabia bastante de programação, é malta que sabe do que fala, tenham isso em atenção. Deixam corrigir 'coisinhas' na hora. Comigo foi, faça lá isso enquanto verifico o seu saft. O analizador deles - que não dão a ninguém, lol - apanha tudo e mais alguma coisa. E durante a certificação ouvir na sala ao lado - corrija isso e volte cá amanha - olha o susto que um tipo leva. Para quem for de comboio Sair em oriente metro (descer as escadas) - linha vermelha até saldanha sair para duque d'avila estão mesmo a porta, é só atravessar a rua e já está com 3 restaurantes / snack's mesmo em frente conselho - levem algo para ler, que eu apanhei uma seca de 1 hora até ser chamado - bendita tablet que tinha um livro em pdf para estar entretido
    5 points
  37. Sim, mas aí nem falámos, pois não era o caso... Então vamos lá... Fizeram uma série de perguntas sobre o programa, se é opensource, se tenho os direitos de autor, essa coisada toda. Depois, passámos à análise dos documentos que enviei. Daqui se ressalvou que: - Documentos que não sejam assinados, também não levam menção nenhuma do tipo "Processado por computador". Eu estava a por, é para tirar. - Facturas manuais ou de reintegração não devem ter mencionadas essas características. Ex.: Em vez de Factura Manual, deve chamar-se apenas Factura. - Facturas manuais não devem apresentar hora no documento, pois a hora não será a do documento original, e sim do manual. Deve mostrar-se apenas a data, que será a do doc. manual. - Facturas manuais: InvoiceDate deve ser o do documento manual, e não o do dia actual - Confirma-se de uma vez por todas a história fo Factura/Recibo e seu código: É mesmo FR - Facturas sempre em duplicado, a não ser FS - Documentos internos, em circunstância alguma devem ter na descrição a palavra "Factura" - Eu tinha uma "Factura de Fornecedor", para dar entrada das compras, fizeram-me prometer que mudava aquilo sem falta, pois pode ser considerado documento falso. - Uns ajustes no report de Contagem de Stock, nomeadamente não aparecer o resumo de IVA (mas porque raio é que eu o tinha lá?) - Tenho um documento do tipo GT chamado Devolução a Fornecedor. Muda-se o nome para Guia de Transporte, podendo meter por baixo, se quiser, Devolução a Fornecedor. - Carga/Descarga: Estou a escrever só estas palavras, mas deve ser escrito mesmo Local de Carga e Local de Descarga. - Hash mais acima, como já tinha referido - Nas Notas de Crédito, a referência ao documento de origem deve incluir a descrição (eu estava a por apenas Tipo Serie/Numero) - Gostaram do meu controle de reposição da base de dados baseado no número de documentos, mas disseram para incluir também um controle idêntico baseado em CheckSum. - Casas decimais: Internamente, quantas mais melhor, para minimizar erros de arredondamento. Preços unitários pode ser configurável, preços finais sempre com 2 casas. Recomendaram-me ainda que lesse o Art. 5º do DL 198/90, mais as alterações feitas a este no OE 2014. - Ainda não faço ideia do que é, mas entretanto vou ver. Depois passámos ao programa propriamente dito... A análise incidiu principalmente em: - Anulações: Anulações só podem ser feitas se tiver o documento original em mão - Notas de Crédito - Parciais e totais (Total de quantidades creditadas nunca superior às do documento original) - Preços não podem ser alterados (ou pelo menos os meus não deixo alterar, e disseram-me que estava bem) - Data de Caixa (que não pode andar muito longe da data de sistema - no meu caso só permito no máximo 1 dia de diferença). - Descrição de artigos não alterável - NIF não alterável - Entidades: Se derem para anular (é o meu caso), não podem desaparecer completamente, muito menos os documentos passados a essa entidade. - Cópias de segurança: Métodos de controle e salvaguarda da informação - Gestor de DB: Nunca pode estar instalado na máquina de produção (Ex. HeidiSQL) - Configuração do programa: Estiveram a ver que tipo de configurações o programa deixa fazer - Permissões de utilizadores: Que tipo de permissões se podem activar e desactivar para cada utilizador - Controle de número de impressões - 2ª Via a partir da segunda impressão - Documentos pendentes de um dia para o outro - Insistiram neste ponto - no meu caso não é possível manter nada pendente nem quando sai e volta a entrar na aplicação - qualquer documento tem de ser finalizado - Recibos; Normais e RIC - Normais não podem levar a tag TAX, os RIC têm de ter uma linha por cada taxa, bem como a tag TAX - Gaveta: Abertura de gaveta sempre com documento de suporte (deduzo que não seja obrigatória a sua impressão, desde que ele seja gerado) - Taxas de IVA: A taxa Isenta deve ser uma só. As isenções serão atribuídas ao artigo que use taxa 0%, e não à taxa em si E pronto, acho que não me esqueço de nada! Ah, esqueci sim... Dois pontos que causaram por aqui algum debate: - Tipo de documento na impressão: Tem de aparecer - Hash na mudança de período: Primeiro estavam-me a falar que o hash estava mal, pois não estava a usar do do documento anterior (de dezembro). Eu disse que até tinha a por, mas por causa do OC50001/2013 que mete lá o famoso "OU", tinha tirado essa parte. Concordaram com isso, e fica assim mesmo. Aparentemente, antes não era assim, e este ofício é que trouxe essa novidade.
    5 points
  38. E está feito... Aveiro, aqui vou eu. Meia dúzia de pormenores para ajustar, e um "mantenha o programa assim que está bom" na hora da despedida... 2 senhores, de trato cordial e bem disposto, que estiveram a analisar tudo o que tinham na checklist, mais o que se foram lembrando durante o decorrer da entrevista. Ainda me perdoaram a fenomenal gafe de estar a imprimir para pdf mas gerar extensão html (é no que dá fazer alterações de última hora e testar pela metade). Mais tarde faço um relato mais pormenorizado!
    5 points
  39. Agora que está tudo mais calmo... Na realidade, as tags dos elementos html, head e body podem ser omitidas salvo algumas excepções (consultem a especificação oficial da W3C para saberem quais). No entanto, e agora dirijo-me a ti, alex9099, omitir essas tags é (como já disseram) uma má prática. Quando omites informação, o browser dá o seu melhor para tentar construir a página da forma que ele acha que tu queres, mas nem sempre acerta. Com HTML5 estes comportamentos estão mais definidos, mas não deixa de ser má ideia omitir essas tags. Vou mais adiante, ao ponto de dizer que é pouco profissional omitir essas tags (mas também fica bem saber que podem ser omitidas). Repara ainda que ao omitires as tags mencionadas, tens que ter em mente todos os casos nos quais elas não podem ser omitidas (sim, porque há excepções!) e saber essas excepções todas é bem pior que simplesmente incluir as tags em todos os documentos, não concordas? De resto, vi que és um rapaz novo que está metido nas tecnologias ligadas à Web: parabéns pela iniciativa! Agora resta-te estar a par de como se fazem as coisas actualmente.
    5 points
  40. Ainda em relação ao mail/carta para o pessoal da AT e afins, e apesar de não estar metido nesta alhada de softwares de facturação, deixo a minha sugestão. Em vez de cada um enviar um mail em nome próprio e ou da empresa, escrevam um mail/carta aberta assinada por todos os membros aqui que têm estado a ter dificuldades por causa dos motivos que já apresentaram. E digo "carta aberta" no sentido de a fazerem chegar à comunicação social, de forma a que o país fique a saber que há dezenas, centenas de programadores neste país que estão a bater com a cabeça na parede à conta das famosas leis e despachos e whatever escritos em Código Ambiguoum. Façam ouvir a vossa voz, o pensamento "não adianta de nada" é um dos grandes alimentos desta gente que está lá a decidir as coisas ao pequeno-almoço, pensando "ah, aqueles gajos desenrascam-se".
    5 points
  41. Uma LUZINHA? Queres dizer... NÓS... os beta-testers e escravos do sistema! Foram muitas dezenas de emails de recomendações enviados, problemas reportados, sugestões... Não era dificil de prever que as coisas não iriam correr da melhor forma. Também foi fácil de prever que as coimas teriam de ficar suspensas até nova ordem.. Sistemas desta "envergadura" necessitam de uma grande análise prévia, e de feedback, tanto das empresas como das software houses. Deveria ter sido criada uma plataforma colaborativa para contacto directo entre a AT e os produtores de software, bem como com as empresas, onde as dúvidas, problemas, sugestões, pudessem ser abertas e comentadas, até serem resolvidas ou abandonadas. Aliás, tal como DITO AQUI (e passo a citar): http://info.portaldasfinancas.gov.pt/NR/rdonlyres/07A23F83-95A0-43F3-8988-F88A74484C6C/0/Comunicado.pdf Gostava de saber QUAIS foram as empresas (e software houses???) que foram as PRIVELIGIADAS nesse PROCESSO de COLABORAÇÃO! Onde está a transparência do sistema?? :-\
    5 points
  42. Não sei o que diz a lei portuguesa em relação ao direito de resposta, nada? Para mim é mais uma questão de ética. Ser um artigo de opinião não torna o direito de resposta desadequado, ates pelo contráio. São os artigos de opinião que são mais susceptíveis de gerar situação de recurso ao direito de resposta. Dito isto, pedir direito de resposta a uma review feita a um livro, e com a extensão de uma página, na qual o autor aponta alguns aspectos negativos segundo o seu ponto de vista... é ser mais papista que o papa. Se cada vez que se dá uma opinião sobre o trabalho de alguem, se andasse a dar direito de resposta, então a imprensa escrita desapareceria num ápice. Para tudo há um limite do razoável. Parece-me que uma review destas não é nenhum ataque pessoal nem sequer nenhuma tentativa de bota-abaixo. O tom em que erros ortográficos e uma ou outra incorrecções são apontadas é completamente desproporcionado, e acaba por dar origem a uma situação ridícula porque a resposta tem ela própria erros ortográficos. A conclusão que eu tiro é que a autora do livro se quis distanciar do autor da review tentando deixar claro que se trata de uma pessoa que está no ensino superior e que por isso está em posse de recursos tecnicos superiores aos do autor da review. Da minha perspectiva, a única coisa que conseguiu apenas criar uma situação embaraçosa para si própria. Se supostamente o desnível tecnico que tenta passar por debaixo da sua resposta é tão grande, então por que motivo dá importância sequer à crítica ao ponto de lhe responder tão formalmente? A revista programar teve origem neste fórum, o qual frequento desde 2005, daqui a mais há uma década. É um projecto que já durou mais do que muitos cursos superiores que já começaram, e acabaram, depois de de 2005. Pode haver aqui no portugal-a-programar alguma falta de rigor tecnico, o que acaba por se reflectir na revista. Mas uma coisa posso eu afirmar com toda a convicção: a forma como o portugal-a-programar aceita e aprende com a crítica é incomparavelmente mais profissional do que aquela que é de esperar da maior parte das pessoas ligadas ao ensino superior.
    5 points
  43. pegas no player que tens (que é em flash), fazes um embrulho muito bonito, e envias para Jaula dos ursos Jardim Zoológico de Lisboa Estrada de Benfica, 158-160 1549-004 Lisboa depois vais a net e pesquisas por : "html5 audio player" sacas um player muito bonito mas agora que não use flash colocas no teu site toda a gente fica feliz, mesmo as pessoas que visitam o teu site porque não necessitam do flash !!
    5 points
  44. Olhando para os teus tópicos, vejo que só num caso não tens respostas. Por outro lado, parece que as tuas mensagens estão restritas aos teus tópicos. Será que andas a descriminar os outros, não respondendo aos seus tópicos? Pois, não custa nada vir cá acusar os outros de não responderem aos nossos tópicos. Mas tendo em conta que a maior parte dos teus tópicos foram respondidos, mesmo quando a maior parte está fora das áreas essenciais do fórum (electrónica e hardware), espero ver-te por cá também a responder às questões dos outros. Já agora, olhando para os tópicos notei uma coisa "desagradável", o facto de muitas vezes não responderes aos utilizadores que te tentaram ajudar.
    5 points
  45. O Portal de Downloads da comunidade Portugal-a-Programar destina-se a promover a partilha de conteúdos relativos à programação e áreas similares, que podem incluir materiais usados por estudantes nos seus ciclos de estudos (e.g., apontamentos, exercícios, testes), ou outros materiais desenvolvidos pelos utilizadores que podem ser úteis a outros utilizadores (e.g., tutoriais, scripts, bibliotecas, aplicações). Tem por objectivo criar um repositório de conteúdos, que permite a sua melhor organização e catalogação, facilitando assim o trabalho de pesquisa dos utilizadores. Qualquer utilizador registado pode submeter conteúdos, desde que sejam da vossa autoria, ou que o autor tenha decidido dispobilizá-los publicamente. É possível submeter ficheiros directamente, ou indicar um link para um ficheiro externo. (Caso seja o autor dos ficheiros, é preferível enviar directamente o ficheiro, para evitar links quebrados. Caso não seja o autor, pode indicar o link onde o autor disponibiliza os conteúdos. Por favor não use links para sites como Rapidshare e afins.) Para submeter ficheiros, devem escolher uma categoria apropriada, seleccionar os ficheiros a enviar (ou indicar os links para os ficheiros), e fornecer a seguinte informação: Nome do Ficheiro (obrigatório) Deve permitir aos utilizadores ter uma ideia do conteúdo dos ficheiros, nomeadamente do tema a que dizem respeito (e.g., Exercícios de Java, Slides sobre Algoritmos de Ordenação, Apontamentos de Teoria de Números, Exercícios de Criptografia). Se forem materiais de uma cadeira, também têm que identificar pelo menos a instituição de ensino, e opcionalmente a cadeira, curso (podem usar acrónimos, para o nome não ficar demasiado grande). Versão do Ficheiro (opcional) Identifica a versão do ficheiro. No caso de bibliotecas/código pode ser a versão (e.g. 1.0, 2.1), e no caso de ficheiros como tutoriais, exercícios e afins, que não tenham versão, pode ser a data (e.g. 2011/12). Tags do Ficheiro (obrigatório) Palavras-chava que descrevem os conteúdos submetidos (e.g., c, pascal, bases de dados, algoritmos de ordenação). Change Log (opcional) Registo de alterações introduzidas numa nova versão. Descrição (obrigatório) Devem dar os detalhes dos conteúdos aqui. Deve conter, pelo menos, um pequeno parágrafo com um resumo dos conteúdos. Caso o conteúdo a submeter disponha de índice, também é conveniente colocá-lo aqui. Adicionalmente, nos casos de materiais de uma cadeira, também devem indicar a cadeira, curso e instituição. Caso estejam a submeter conteúdos que não são da vossa autoria, é também conveniente que indiquem o autor. Licença (opcional) Licença dos conteúdos. Se os conteúdos forem da vossa autoria, indiquem a licença que quiserem. Se não forem, devem respeitar a licença que o autor escolheu (se não a souberem, deixem em branco). Submetido pelo Autor (obrigatório) Indica se o utilizador que submeteu o ficheiro é o autor dos conteúdos. Website (opcional) Pode ser um website sobre os conteúdos (ou onde estes também possam ser descarregados), ou o website do autor, por exemplo. Sempre que possível, comprima os ficheiros antes de os enviar. Em particular no caso de submeter mais do que um ficheiro, deve juntá-los num único arquivo comprimido. Desta forma permite que se poupe espaço e largura de banda. (Caso não o faça, o staff reserva-se no direito de comprimir os ficheiros, sempre que tal pareça adequado.) Os ficheiros estão sujeitos a moderação, e só ficarão disponíveis publicamente depois de revistos pelo staff. Esta área está sujeita as regras do P@P, que promovem o respeito pelos direitos de autor. Contudo, nem sempre será possível obter informação precisa/correcta sobre os direitos de autor dos conteúdos. Assim, caso encontre no nosso portal conteúdos seus que não autoriza a que sejam disponibilizados, por favor use a link "Denunciar Ficheiro" para notificar o staff de tal situação. A moderação destina-se também a garantir que os conteúdos correspondem à descrição (embora tal não seja possível garantir totalmente para ficheiros externos), ou que a descrição fornece um nível de informação adequado, e também para normalizar a informação disponibilizada. Depois de o ficheiro ser submetido, será criado automaticamente um tópico no fórum, onde os conteúdos poderão ser discutidos. Na página do ficheiro irá existir um link para o tópico. (Caso já exista um tópico no fórum a abordar o conteúdo, por favor notifique o staff de tal situação, para evitar a duplicação de discussões.) O link "Denunciar Ficheiro" pode também ser usado para denunciar links quebrados, ou ficheiros que representem riscos para utilizadores (e.g., malware). O staff procurará analisar as denúncias o mais rapidamente possível. (Estas normas serão revistas regularmente, de modo a se adaptarem ao comportamento dos utilizadores. Recomenda-se a leitura regular das mesmas.)
    5 points
  46. Eu tenho sobre parte. Não sobre tudo. Mas isto é uma coisa que nos ultrapassa, não se trata só, de resto como até agora, de umas pessoas que estão sentadas e decidem sem conhecimento de causa, e de com isso fazerem-nos andar à pesca e fazer os clientes andarem a registar-se e a pagar em cada Broker, o que é surreal. Aqui vai mais longe. A ser verdade o que falamos e o que penso sobre a situação, exijo enquanto cidadão Português, saber porque raio um Município paga meio milhão para implementação de um sistema de um Broker, obrigando todos os fornecedores a trabalhar com esse broker, quando na eSPAP é gratuito. Just that... Isto merecia uma participação ao Tribunal de contas. Pensava eu que o País era pobre, afinal sou só eu, o País é muita rico, para cada Municipio por exemplo, ter o seu Broker e gastar milhares quando há uma solução gratuita, só pode ser um País rico EDIT: https://www.espap.gov.pt/spfin/Paginas/spfin.aspx#maintab5 "A eSPap coordena a implementação da Fatura Eletrónica na Administração Pública (FE-AP). Com o Decreto-Lei n.º 123/2018, de 28 de dezembro, (ver linguagem clara) foi atribuída à eSPap a competência para emitir requisitos técnicos e funcionais que suportem a implementação da faturação eletrónica, desenvolver instrumentos de apoio às entidades abrangidas e fornecer a solução para receção e processamento de faturas eletrónicas. O valor a pagar pela solução será aprovado por despacho do membro do Governo responsável pela área das finanças" Tirado hoje. Mais claro que isto é impossível. À eSPAP, além de coordenar a implementação, compete desenvolver instrumentos e fornecer a solução para a receção e processamento de facturas electronicas. O valor a pagar pela solução, será aprovado por despacho. E agora os Brokers? e as centenas de milhares e milhares que já foram gastos??? 😐
    4 points
  47. Atenção que a AT, nesta nova versão do SAF-T, passou a utilizar a versão 1.1. do schema XML (xsd `vc:minVersion="1.1"`). até aqui usava a versão 1.0. A versão 1.1. tem novas funcionalidades, entre elas as ASSERTions. O grande problema é que, tanto quanto sei, é uma versão que embora já exista há bastante tempo, tem pouco suporte. O .NET não suporta. O Java acho que já suporta. Podem ainda tentar com o Xerces. https://www.w3.org/TR/xmlschema11-1/
    4 points
  48. Partindo do princípio que a finalidade que se está a divulgar é impossível de cumprir na prática, por tudo o que já aqui se disse e mais umas quantas de que ninguém se terá lembrado, e que assenta numa base injusta e completamente alheia à realidade, e que te taxa um direito que já tinhas apenas porque existe a possibilidade de usares esse direito... Tendo em conta isso tudo mais o facto que os artistas não inscritos na SPA (mas artistas ainda assim) nunca verão a cor desse dinheiro... Olha que és bem capaz de ser "o único"... Como dizia no sábado um colega meu, qualquer dia quem tenha um pedaço de terra será multado por plantar canabis... Interessa pouco se plantou ou não! Tem a oportunidade de o fazer, logo, paga...
    4 points
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.