Boa tarde,
Estou alterando os fontes da empresa que trabalho para suportar a nf-e 3.10 e um dessas mudanças é quando a nota fiscal é de exportação e quando utiliza determinado CFOP exige o detExport, onde o mesmo pede o nDraw (número do drawback) ao informar este número a validação do ACBr me diz que este número é inválido, porém posso afirmar que não é. Então fui verificar a validação e encontrei este código:
class function DFeUtil.ValidaDrawback(AValue: string): Boolean;
var
ano: Integer;
begin
// AValue = AAAANNNNNND
// Onde: AAAA Ano corrente do registro
// NNNNNN Número sequencial dentro do Ano ( 6 dígitos )
// D Dígito Verificador, Módulo 11, Pesos de 2 a 9
AValue := LimpaNumero(AValue);
ano := StrToInt(Copy(IntToStr(YearOf(Date)), 3, 2));
if length(AValue) = 11 then
AValue := copy(AValue, 3, 9);
if length(AValue) <> 9 then
Result := False
else if not ((StrToInt(copy(Avalue, 1, 2)) >= ano -1) and (StrToInt(copy(Avalue, 1, 2)) <= ano +1)) then
Result := False
else
Result := copy(AValue, 9, 1) = Modulo11(AValue);
end;
E percebir que que tem um erro nesta linha:
Result := copy(AValue, 9, 1) = Modulo11(AValue);
Pois ele compara o ultimo carácter (digito verificador) do nDraw com o módulo 11 do mesmo nDraw, porém que ao calcular o módulo 11 o digito verificador vai junto, então tomei a liberdade de alterar o código e no lugar do código acima coloquei este:
Result := copy(AValue, 9, 1) = Modulo11(copy(AValue, 1, 8));
Quando ele for calcular o módulo 11 não irá calcular com o nDraw completo e sim com o nDraw faltando digito verificador, não sei se isto realmente esta correto, mas com esta alteração a nota foi enviada com sucesso.