Passando um xml para o ACBrNFe, usando LoadFromString, faço uma análise no conteúdo carregado pelo componente desse xml, retornando os valores das propriedades do mesmo.
Fazendo uma verificação, percebi que após ele carregar o xml, na propriedade Det.Imposto.ICMS.CST sempre é carregado o cst00, mesmo não existindo essa tag no xml passado.
Analisando a forma que ele carrega, é usada a função StrToCSTICMS que por sua vez usa a StrToEnumerado, retornando sempre o primeiro valor encontrado em caso de erro ou de não achar nenhum dos passados no array.
Como não tem essa tag no xml, esse valor sempre é o cst00.
Então quando eu mando analisar se o Det.Imposto.ICMS.CST <> cstVazio sempre retorna True.
Notei que existe o cstVazio, mas ele não é referenciado nas funções de conversão, então alterando a assinatura das funções de:
function CSTICMSToStr(const t: TpcnCSTIcms): string;
begin
...
result := EnumeradoToStr(t, ['00', '10' , '20' , '30' , '40' , '41' , '50' , '51' , '60' , '70' , '80' , '81', '90', '10', '90', '41', '90', 'SN'],
[cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51, cst60, cst70, cst80, cst81, cst90, cstPart10 , cstPart90 , cstRep41, cstICMSOutraUF, cstICMSSN]);
end;
function StrToCSTICMS(var ok: boolean; const s: string): TpcnCSTIcms;
begin
result := StrToEnumerado(ok, s, ['00', '10', '20', '30', '40', '41', '50', '51', '60', '70', '80', '81', '90', '91', '92'],
[cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51, cst60, cst70, cst80, cst81, cst90, cstICMSOutraUF, cstICMSSN]);
end;
para
function CSTICMSToStr(const t: TpcnCSTIcms): string;
begin
...
result := EnumeradoToStr(t, ['', '00' , '10' , '20' , '30' , '40' , '41' , '50' , '51' , '60' , '70' , '80' , '81', '90', '10', '90', '41', '90', 'SN'],
[cstVazio, cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51, cst60, cst70, cst80, cst81, cst90, cstPart10 , cstPart90 , cstRep41, cstICMSOutraUF, cstICMSSN]);
end;
function StrToCSTICMS(var ok: boolean; const s: string): TpcnCSTIcms;
begin
result := StrToEnumerado(ok, s, ['', '00', '10', '20', '30', '40', '41', '50', '51', '60', '70', '80', '81', '90', '91', '92'],
[cstVazio, cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51, cst60, cst70, cst80, cst81, cst90, cstICMSOutraUF, cstICMSSN]);
end;
resolve esse problema.
O mesmo acontece com outras propriedades tipadas que usam conversões na leitura, como TpcnMotivoDesoneracaoICMS, pois não existe um valor mdiVazio pra esse tipo.
Minha dúvida é se esse procedimento não vai afetar em algum outro procedimento usado pela classe.
Gostaria de um parecer do pessoal mais experiente, e fica minha sugestão para criar tipos vazios para serem usados nas conversões e caso seja possível, para ser implementado no repositório.
Agradeço os retornos.