Aproveitando o tópico, também estou transmitindo NFS-e para o provedor Betha para a prefeitura de criciúma e a forma de envio dos itens deve ser dentro da tag "Discriminacao" e em formato tabulado, conforme a Jacke relatou anteriormente. Desta forma, sugiro que na unit "ACBrNFSeXGravarXml", no método "GerarTabulado", seja tratado para enviar as informações nos campos somente se tiverem valores maiores que zero, para evitar de estourar o limite de 2000 caracteres do campo.
Segue código abaixo que sugiro que seja feito no método:
function TNFSeWClass.GerarTabulado(const xDescricao, xCodigoItem: string;
aQuantidade, aValorUnitario, aValorDeducoes, aValorServico, aBaseCalculo,
aAliquota: Double; aDescontoIncondicionado: Double): string;
begin
Result := '[[Descricao=' + xDescricao + ']' +
'[ItemServico=' + xCodigoItem + ']' +
'[Quantidade=' + FloatToString(aQuantidade, Opcoes.DecimalChar) + ']' +
'[ValorUnitario=' + FloatToString(aValorUnitario, Opcoes.DecimalChar) + ']' +
IfThen(aValorDeducoes > 0, '[Deducoes=' + FloatToString(aValorDeducoes, Opcoes.DecimalChar) + ']', '') +
IfThen(aValorServico > 0, '[ValorServico=' + FloatToString(aValorServico, Opcoes.DecimalChar) + ']', '') +
IfThen(aBaseCalculo > 0, '[ValorBaseCalculo=' + FloatToString(aBaseCalculo, Opcoes.DecimalChar) + ']', '') +
IfThen(aAliquota > 0, '[Aliquota=' + FloatToString(aAliquota, Opcoes.DecimalChar) + ']', '') +
IfThen(aDescontoIncondicionado > 0, '[DescontoIncondicionado=' + FloatToString(aDescontoIncondicionado, Opcoes.DecimalChar) + ']', '') + ']';
end;
Para as informações de "Descricao", "ItemServico", "Quantidade" e "ValorUnitario", não fiz tratamento pois estes campos sempre teriam que ter valor para ser uma informação válida.