Here is another code dump, this time for importing Receipts into AccPac.
public void ImportReceipts(IEnumerable<ReceiptLine> receipts, string bankCode, DateTime receiptDate, string batchDescription) { using (HuView ARBTA = Connection.GetView("AR0041")) using (HuView ARTCR = Connection.GetView("AR0042")) using (HuView ARTCP = Connection.GetView("AR0044")) using (HuView ARTCU = Connection.GetView("AR0045")) using (HuView ARTCN = Connection.GetView("AR0043")) using (HuView ARPOOP = Connection.GetView("AR0061")) using (HuView ARTCRO = Connection.GetView("AR0406")) using (HuView ARTCC = Connection.GetView("AR0170")) { ARBTA.Compose(ARTCR); ARTCR.Compose(ARBTA, ARTCN, ARTCP, ARTCRO, ARTCC); ARTCP.Compose(ARTCR, ARTCU, ARPOOP); ARTCU.Compose(ARTCP); ARTCN.Compose(ARTCR); ARPOOP.Compose(ARBTA, ARTCR, ARTCN, ARTCP, ARTCU); ARTCRO.Compose(ARTCR); ARTCC.Compose(ARTCR); using (HuView ARPYPT = Connection.GetView("AR0049")) { ARBTA.RecordClear(); ARBTA["CODEPYMTYP"] = "CA"; // Batch Type ARTCR["CODEPYMTYP"] = "CA"; // Batch Type ARTCN["CODEPAYM"] = "CA"; // Batch Type ARTCP["CODEPAYM"] = "CA"; // Batch Type ARTCU["CODEPAYM"] = "CA"; // Batch Type ARPOOP["PAYMTYPE"] = "CA"; // Batch Type ARPOOP.Cancel(); ARBTA["CODEPYMTYP"] = "CA"; // Batch Type ARBTA["CNTBTCH"] = "0"; // Batch Number ARBTA.RecordCreate(1); ARBTA["BATCHDESC"] = batchDescription; ARBTA["IDBANK"] = bankCode; ARBTA["PROCESSCMD"] = "2"; // Process Command ARBTA.Process(); ARBTA.Update(); foreach (IGrouping<string, ReceiptLine> receiptLine in receipts.GroupBy(line => line.FleetID)) { ARTCR.RecordCreate(2); ARTCR["IDCUST"] = receiptLine.Key; // Customer Number ARTCP.Cancel(); ARTCR["PROCESSCMD"] = "0"; // Process Command Code ARTCR.Process(); ARTCR["DATERMIT"] = receiptDate; ARTCP.RecordClear(); foreach (ReceiptLine line in receiptLine) { ARTCP.RecordCreate(0); ARTCP["IDINVC"] = line.Invoice + "-" + line.Store.PadLeft(4, '0'); ; // Document Number ARTCP["AMTPAYM"] = line.EntityCredit * -1; ARTCP["AMTERNDISC"] = line.Discount + line.ProcessingFee; ARTCP.Insert(); } ARTCP["CNTLINE"] = "-1"; // Line Number ARTCP.Read(); decimal unapplied = (decimal)ARTCR["REMUNAPL"]; ARTCR["AMTRMIT"] = unapplied* -1; // Bank Receipt Amount ARTCP["CNTLINE"] = "-1"; // Line Number ARTCP["CNTLINE"] = "-1"; // Line Number ARTCP.Read(); ARTCR.Insert(); } } } }
ARBTA is the receipt batch, we are creating one of these
ARTCR is the Receipt view, we are creating one per customer, multiple lines will be in a single invoice if they share the same customer
ARTCP is the Receipt Detail view, there is one per line here
After the line items are added we set AMTRMIT to the unapplied amount multiplied by negative one. This sets the receipt amount to match what we have set in the detail lines.