-- 已核实生成凭证路径:来源单据类型 ARAP01 → GL_SrcVoucherInfo → GL_Doc。 -- “未审”的总账凭证也可能已经生成,不能用单据已审核/已核销替代本关联。 -- SQL Server 2008 R2 语法;主键游标分页,时间水位尚未启用。 SELECT TOP (:batch_size) h.ID AS id, h.code AS code, h.voucherDate, h.auditedDate, h.createdTime, h.SaleOrderCode, h.SaleOrderID, h.idpartner, h.idperson, h.IdSettleStyle, h.idvouchertype, h.isReceiveFlag, h.cancelState, h.voucherstate, h.amount, h.paymentAmount, ISNULL(accounting.accounting_voucher_count, 0) AS accounting_voucher_count, ISNULL(accounting.valid_accounting_voucher_count, 0) AS valid_accounting_voucher_count, accounting.accounting_voucher_id, accounting_doc.code AS accounting_voucher_code, CAST(NULL AS datetime) AS source_updated_at, h.ts AS source_rowversion FROM dbo.ARAP_ReceivePayment AS h LEFT JOIN ( SELECT src.srcvoucherid, COUNT(*) AS accounting_voucher_count, SUM(CASE WHEN doc.id IS NOT NULL AND doc.isinvalidate = 0 AND make_state.Code = 'Ringht' THEN 1 ELSE 0 END) AS valid_accounting_voucher_count, MIN(CASE WHEN doc.id IS NOT NULL AND doc.isinvalidate = 0 AND make_state.Code = 'Ringht' THEN doc.id ELSE NULL END) AS accounting_voucher_id FROM dbo.GL_SrcVoucherInfo AS src INNER JOIN dbo.SM_VoucherType AS source_type ON source_type.ID = src.idSrcVoucherType LEFT JOIN dbo.GL_Doc AS doc ON doc.id = src.idDocDTO LEFT JOIN dbo.eap_EnumItem AS make_state ON make_state.ID = doc.makeErrorState WHERE source_type.Code = 'ARAP01' GROUP BY src.srcvoucherid ) AS accounting ON accounting.srcvoucherid = h.ID LEFT JOIN dbo.GL_Doc AS accounting_doc ON accounting_doc.id = accounting.accounting_voucher_id WHERE h.id > :after_id ORDER BY h.id;