New home
This blog has a new home. Please update bookmarks and feeds to https://asfernandes.github.io
This blog has a new home. Please update bookmarks and feeds to https://asfernandes.github.io
Na Nota Técnica 2014/002 da Nota Fiscal Eletrônica, o governo brasileiro do PT, por falta do que fazer com o intuito de evoluir o sistema, substituiu o web service de consulta de NF-e emitidas por terceiros pelo web service de distribuição de documentos fiscais.
Definiram que a partir de 06/10/2014 o novo web service já estaria funcionando no ambiente de produção, enquanto o antigo seria desativado em 02/02/2015. Estava tentando há duas semanas usar o novo web service e ele ainda não funcionava. Hoje consegui.
O web service retornou resposta, mas é claro, resposta errada que não é validada pelo próprio schema distribuído por eles. Como uso Java com JAXB, após desativar a validação da resposta, o conteúdo do arquivo não estava sendo "desserializado" corretamente.
Eles criaram uma tag DocZip que armazena um XML compactado com GZIP no formato BASE-64 e declararam o conteúdo da tag como se tivesse um documento XML. É óbvio que algo em BASE-64 não é um XML válido.
Como o governo incompetente não testa o que faz, tive que corrigir o schema e estou disponibilizando para que outros também não percam tempo. Mesmo sem saber escrever schemas XML, cheguei nessa dúvida que me ajudou a fazer a correção.
Link para o arquivo retDistDFeInt_v1.00.xsd corrigido
Link para o diff/patch contra o arquivo XSD original
Edit:
Se tem uma coisa pior que incompetência que acontece com muita frequência na Receita Federal do PT ultimamente é a sacanagem. Após escrever esse artigo, mandei a mesma informação através do Fale Conosco, e antes mesmo de obter resposta (geralmente é um robô que responde algo sem sentido), desconfiei de uma coisa e fui verificar.
A Receita Federal, na tentativa de esconder seus erros, costuma lançar correções de arquivos e disponibilizá-los com o mesmo número de versão. E não é que aconteceu exatamente isso agora?
Tenho o arquivo PL_NFeDistDFe_100.zip com data de 07/01/2015 que tinha o problema. O arquivo presente nesta página nesse momento tem o mesmo nome e diz que foi atualizado em 19/09/2014, porém ele já está corrigido!
Sometimes C++ still surprises me. Consider this code:
namespace ns1
{
class C1
{
};
void f1(const C1&)
{
}
}
int main()
{
ns1::C1 c1;
f1(c1);
return 0;
}
If you think it's wrong and causes a compiler error, you're wrong.
The function "f1" is not in the scope of "main", but its argument has a type of the same namespace, causing the function to be located.
This rule is called Argument-dependent name lookup (or Koenig lookup) and it is also very necessary in relation to operators.
Na parte de expressões SQL, o Firebird 2.5 acrescenta melhorias e novidades. A função agregada LIST (presente desde a versão 2.1) agora aceita qualquer expressão em seu segundo parâmetro, onde o desenvolvedor pode especificar a string de separação dos elementos retornados. Até a versão 2.1.3 era possível apenas o uso de strings constantes nesse parâmetro. Nota: a versão 2.1.4 também deve ser liberada com esta novidade. A listagem 10 mostra a utilidade deste parâmetro, principalmente no desenvolvimento de relatórios, agrupando várias mensagens referentes a um documento em um mesmo registro e mostrando cada mensagem em uma linha.
Listagem 10. Usando a função LIST com expressões no segundo parâmetro.
Operador
|
Descrição
|
X{2}
|
Duas ocorrências de X.
|
X{2,}
|
Duas ou mais ocorrências de X.
|
X{4,6}
|
De quatro a seis ocorrências de X.
|
X?
|
Zero ou uma ocorrência de X.
|
X*
|
Zero ou mais ocorrências de X.
|
X+
|
Uma ou mais ocorrências de X.
|
X|Y
|
X ou Y.
|
_
|
Qualquer caractere - como no LIKE.
|
%
|
Qualquer sequência de caracteres - como no LIKE.
|
(X)
|
Agrupa X para ser tratado pelo operador subsequente.
|
[XYZ]
|
Qualquer caractere igual a X, Y ou Z.
|
[^XYZ]
|
Qualquer caractere diferente de X, Y ou Z.
|
[X-Z]
|
Qualquer caractere entre X e Z.
|
[[:CLASSE:]]
|
Qualquer caractere de uma certa classe, conforme tabela 2.
|
Classe
|
Descrição
|
ALPHA
|
Qualquer caractere entre A e Z.
|
UPPER
|
Qualquer caractere maiúsculo.
|
LOWER
|
Qualquer caractere minúsculo.
|
DIGIT
|
Dígitos de 0 a 9.
|
SPACE
|
Espaço: caractere (ASCII_CHAR) 32.
|
WHITESPACE
|
Todo tipo de espaço: caracteres 9, 10, 11, 12, 13 e 32.
|
Além do comando CREATE COLLATION, mostrado na seção anterior, o Firebird 2.5 acrescenta comandos DDL que aliviam limitações anteriores e outros comandos totalmente novos. Duas limitações existentes nas versões anteriores eram relacionadas à impossibilidade de alteração de colunas COMPUTED BY e views. Era preciso eliminar estes objetos e recriá-los com as alterações. O problema é que o Firebird não permite que um objeto seja eliminado quando este está sendo usado por outro objeto. Algumas ferramentas (como o Flamerobin, por exemplo) geram scripts para eliminar e recriar objetos durante a alteração de um objeto que não era permitida, porém esta não é a solução ideal.