Na geração do XML da NF-e com o pcn o código era assim:
procedure TNFeW.GerarEntrega;
begin
if trim(NFe.Entrega.xLgr) <> '' then
begin
Gerador.wGrupo('entrega', 'G01');
Gerador.wCampoCNPJCPF('G02', 'G02a', NFe.Entrega.CNPJCPF, True, False);
Gerador.wCampo(tcStr, 'G02b', 'xNome ', 02, 60, 0, NFe.Entrega.xNome, DSC_XNOME);
Gerador.wCampo(tcStr, 'G03', 'xLgr ', 02, 60, 1, NFe.Entrega.xLgr, DSC_XLGR);
Gerador.wCampo(tcStr, 'G04', 'nro ', 01, 60, 1, NFe.Entrega.nro, DSC_NRO);
Gerador.wCampo(tcStr, 'G05', 'xCpl ', 01, 60, 0, NFe.Entrega.xCpl, DSC_XCPL);
Gerador.wCampo(tcStr, 'G06', 'xBairro', 01, 60, 1, NFe.Entrega.xBairro, DSC_XBAIRRO);
Gerador.wCampo(tcInt, 'G07', 'cMun ', 01, 07, 1, NFe.Entrega.cMun, DSC_CMUN);
if not ValidarMunicipio(NFe.Entrega.cMun) then
Gerador.wAlerta('F07', 'cMun', DSC_CMUN, ERR_MSG_INVALIDO);
Gerador.wCampo(tcStr, 'G08', 'xMun ', 02, 60, 1, NFe.Entrega.xMun, DSC_XMUN);
Gerador.wCampo(tcStr, 'G09', 'UF ', 02, 02, 1, NFe.Entrega.UF, DSC_UF);
if not ValidarUF(NFe.Entrega.UF) then
Gerador.wAlerta('G09', 'UF', DSC_UF, ERR_MSG_INVALIDO);
Gerador.wCampo(tcInt, 'G10', 'CEP ', 08, 08, 0, NFe.Entrega.CEP, DSC_CEP);
Gerador.wCampo(tcInt, 'G11', 'cPais', 02, 04, 0, NFe.Entrega.cPais, DSC_CPAIS);
if NFe.Entrega.cPais > 0 then
if ValidarCodigoPais(NFe.Entrega.cPais) <> 1 then
Gerador.wAlerta('G11', 'cPais', DSC_CPAIS, ERR_MSG_INVALIDO);
Gerador.wCampo(tcStr, 'G12', 'xPais', 02, 60, 0, NFe.Entrega.xPais, DSC_XPAIS);
Gerador.wCampo(tcStr, 'G13', 'fone ', 06, 14, 0, OnlyNumber(NFe.Entrega.fone), DSC_FONE);
Gerador.wCampo(tcStr, 'G14', 'email', 01, 60, 0, NFe.Entrega.Email, DSC_EMAIL);
if NFe.Entrega.IE = 'ISENTO' then
Gerador.wCampo(tcStr, 'G15', 'IE', 00, 14, 1, NFe.Entrega.IE, DSC_IE)
else
Gerador.wCampo(tcStr, 'G15', 'IE', 02, 14, 0, OnlyNumber(NFe.Entrega.IE), DSC_IE);
Gerador.wGrupo('/entrega');
end;
end;
E agora fora do pcn está assim:
function TNFeXmlWriter.GerarEntrega: TACBrXmlNode;
var
cMun: integer;
xMun: string;
xUF: string;
begin
Result := nil;
if trim(NFe.Entrega.xLgr) <> '' then
begin
AjustarMunicipioUF(xUF, xMun, cMun, NFe.Entrega.cPais,
NFe.Entrega.UF, NFe.Entrega.xMun, NFe.Entrega.cMun);
Result := FDocument.CreateElement('entrega');
if NFe.Entrega.CNPJCPF <> '' then
Result.AppendChild(AddNodeCNPJCPF('G02', 'G02a',
NFe.Entrega.CNPJCPF, True, False));
Result.AppendChild(AddNode(tcStr, 'G02b', 'xNome', 02, 60, 0,
NFe.Entrega.xNome, DSC_XNOME));
Result.AppendChild(AddNode(tcStr, 'G03', 'xLgr', 02, 60, 1,
NFe.Entrega.xLgr, DSC_XLGR));
Result.AppendChild(AddNode(tcStr, 'G04', 'nro', 01, 60, 1,
ExecutarAjusteTagNro(Opcoes.FAjustarTagNro, NFe.Entrega.nro), DSC_NRO));
Result.AppendChild(AddNode(tcStr, 'G05', 'xCpl', 01, 60, 0,
NFe.Entrega.xCpl, DSC_XCPL));
Result.AppendChild(AddNode(tcStr, 'G06', 'xBairro', 01, 60, 1,
NFe.Entrega.xBairro, DSC_XBAIRRO));
Result.AppendChild(AddNode(tcInt, 'G07', 'cMun', 01, 07, 1, cMun, DSC_CMUN));
if not ValidarMunicipio(NFe.Entrega.cMun) then
wAlerta('F07', 'cMun', DSC_CMUN, ERR_MSG_INVALIDO);
Result.AppendChild(AddNode(tcStr, 'G08', 'xMun', 02, 60, 1, xMun, DSC_XMUN));
Result.AppendChild(AddNode(tcStr, 'G09', 'UF', 02, 02, 1, xUF, DSC_UF));
if not ValidarUF(NFe.Entrega.UF) then
wAlerta('G09', 'UF', DSC_UF, ERR_MSG_INVALIDO);
Result.AppendChild(AddNode(tcInt, 'G10', 'CEP', 08, 08, 0,
NFe.Entrega.CEP, DSC_CEP));
Result.AppendChild(AddNode(tcInt, 'G11', 'cPais', 02, 04, 0,
NFe.Entrega.cPais, DSC_CPAIS));
if not ValidarCodigoPais(NFe.Entrega.cPais) = -1 then
wAlerta('G11', 'cPais', DSC_CPAIS, ERR_MSG_INVALIDO);
Result.AppendChild(AddNode(tcStr, 'G12', 'xPais', 02, 60, 0,
NFe.Entrega.xPais, DSC_XPAIS));
Result.AppendChild(AddNode(tcStr, 'G13', 'fone', 06, 14, 0,
OnlyNumber(NFe.Entrega.fone), DSC_FONE));
Result.AppendChild(AddNode(tcStr, 'G14', 'email', 01, 60, 0,
NFe.Entrega.Email, DSC_EMAIL));
Result.AppendChild(AddNode(tcStr, 'G15', 'IE', 02, 14, 0,
OnlyNumber(NFe.Entrega.IE), DSC_IE));
end;
end;
A situação ocorre que se não tiver sido informado Entrega.CNPJCPF o ACBr não gera mais a tag com "<CNPJ />", por exemplo. Antes era possível enviar a NF-e sem informar o CNPJ ou CPF.