Función VirtualXML_Pagos20AddPagoDoctoRelacionado VirtualXML
Agrega información del CFDI de ingreso que es pagado en un comprobante fiscal digital versión 4.0 de tipo "P"ago.

Esta función se debe utilizar después de llamar a la función VirtualXML_Pagos20AddPago(). Un CFDI de pago puede contener información de uno o varios CFDI de ingresos, aplicados sobre un solo pago, no obstante, un CFDI de pagos puede contener varios pagos que a su vez amparen uno o mas CFDIs pagados total o parcialmente.

Por cada documento que se relacione se debe hacer una llamada a esta función.

Namespace:
 VirtualXML®
Aplicación: CFDI ver. 4.0
Sintaxis

public static void VirtualXML_Pagos20AddPagoDoctoRelacionado(
int p,
string idDocumento,
string Serie,
string Folio,
string MonedadDR,
string EquivalenciaDR,
string NumParcialidad,
string ImpSaldoAnt,
string ImpPagado,
string ImpSaldoInsoluto,
string ObjetoImpDR

)

Parametros

p
Tipo: System  Int32
Identificador en memoria devuelto por la función VirtualXML_New()

IdDocumento
Tipo: System  String
Atributo requerido para expresar el identificador del documento relacionado con el pago. Este dato puede ser un Folio Fiscal de la Factura Electrónica o bien el número de operación de un documento digital.

Serie
Tipo: System  String
Atributo opcional para precisar la serie del comprobante para control interno del contribuyente, acepta una cadena de caracteres.

Folio
Tipo: System  String
Atributo opcional para precisar el folio del comprobante para control interno del contribuyente, acepta una cadena de caracteres.

MonedaDR
Tipo: System  String
Atributo requerido para identificar la clave de la moneda utilizada en los importes del documento relacionado, cuando se usa moneda nacional o el documento relacionado no especifica la moneda se registra MXN. Los importes registrados en los atributos “ImpSaldoAnt”, “ImpPagado” e “ImpSaldoInsoluto” de éste nodo, deben corresponder a esta moneda. Conforme con la especificación ISO 4217.

EquivalenciaDR
Tipo: System  String
Atributo condicional para expresar el tipo de cambio conforme con la moneda registrada en el documento relacionado. Es requerido cuando la moneda del documento relacionado es distinta de la moneda de pago. Se debe registrar el número de unidades de la moneda señalada en el documento relacionado que equivalen a una unidad de la moneda del pago. Por ejemplo: El documento relacionado se registra en USD El pago se realiza por 100 EUR. Este atributo se registra como 1.114700 USD/EUR. El importe pagado equivale a 100 EUR * 1.114700 USD/EUR = 111.47 USD.
NumParcialidad
Tipo: System  String
Atributo condicional para expresar el número de parcialidad que corresponde al pago. Es requerido cuando MetodoDePagoDR contiene: “PPD” Pago en parcialidades o diferido.
ImpSaldoAnt
Tipo: System  String
Atributo condicional para expresar el monto del saldo insoluto de la parcialidad anterior. Es requerido cuando MetodoDePagoDR contiene: “PPD” Pago en parcialidades o diferido.En el caso de que sea la primer parcialidad este campo debe contener el importe total del documento relacionado.

ImpPagado
Tipo: System  String
Atributo condicional para expresar el importe pagado para el documento relacionado. Es obligatorio cuando exista más de un documento relacionado o cuando existe un documento relacionado y el TipoCambioDR tiene un valor.
ImpSaldoInsoluto
Tipo: System  String
Atributo condicional para expresar la diferencia entre el importe del saldo anterior y el monto del pago. Es requerido cuando MetodoDePagoDR contiene: “PPD” Pago en parcialidades o diferido.
ObjetoImpDR
Tipo: System  String
Atributo requerido para expresar si el pago del documento relacionado es objeto o no de impuesto. Revise el catálogo c_ObjetoImp publicado por el SAT para conocer los valores posibles de este parámetro. 
Ejemplo:

private void GeneraDocto(String version)
{
// Creamos un comprobante 
    int hXml = VirtualXML_New("4.0");

// Llenado del documento
VirtualXML_SetComprobanteInfo_cfdi40( hXml, "P", "001", "%cb_date", "", "", "0", "","XXX", "", "0", "P", "01", "26015", "");

    // Datos del emisor 

    // Datos del receptor 

    // Concepto, un comprobante de pago solo lleva un concepto fijo:
VirtualXML_AddConcepto_cfdi40( hXml, "84111506", "", "1", "ACT", "", "Pago", "0", "0", "01");

    // Asignamos el complemento de pagos:
    VirtualXML_SetPagos20( hXml, "1510.48", "1416.09", "", "14160.83", "2265.73", "", "", "", "", "", "13500.00" );

// Agregamos un pago
VirtualXML_Pagos20AddPago( hXml, "2023-04-03T12:00:00", "03", "MXN", "1", "13500.00", "8007246075018235463812615001", "BSM970519DU8", "", "002180065145757870", "CFA950629CAA", "002180065145895321", "", "", "", "" );

// Agregamos un documento relacionado

VirtualXML_Pagos20AddPagoDoctoRelacionado( hXml, "FF93C8BE-AF7B-4FC5-8854-6DAE18CFB5B4", "D", "10150", "MXN", "1", "1", "22189.67", "13500.00", "8689.67", "02" );
// Agregamos Impuestos RETENIDOS del documento relacionado
// Agregamos Impuestos TRASLADADOS del documento relacionado

// Agregamos otro documento relacionado
// Agregamos Impuestos trasladados del documento relacionado
// Agregamos Impuestos retenidos del documento relacionado

// Agregamos un documento relacionado mas

// Agregamos Impuestos trasladados del documento relacionado
// Agregamos Impuestos retenidos del documento relacionado

// Seguimos agregando tantos documentos relacionados como incluya el pago, desglosando los impuestos para cada documento

// Finalmente agregamos el total de impuestos del pago, que es la suma de todos los impuestos, trasladados y retenidos, de los Documentos Relacionados
// Estos importes se reflejaran también en la funcion VirtualXML_SetPagos20()

// Agregamos Impuestos RETENIDOS del Pago
// Agregamos Impuestos TRASLADADOS del pago

// Procesamiento del documento
    // .... 

    // Lectura de resultados 
    // .... 

    // Liberacion de memoria
VirtualXML_Free(hXml);
}
Veáse También

VirtualXML_SetPagos20()
                                  VirtualXML_Pagos20AddPago()
                                  VirtualXML_Pagos20AddPagoDoctoRelacionadoRetencionDR()
                                  VirtualXML_Pagos20AddPagoDoctoRelacionadoTrasladoDR()
                                  VirtualXML_Pagos20AddPagoImpuestosPRetencionP()
                                  VirtualXML_Pagos20AddPagoImpuestosPTrasladoP()