Hi tuba2007,
Thanks for your quick response! Here is a piece of my code
//Open Accpac Session
AccpacCOMAPI.AccpacSession pSession;
AccpacCOMAPI.AccpacDBLink pDBLinkCmpRW;
AccpacCOMAPI.AccpacDBLink pDBLinkSysRW;
pSession = new AccpacCOMAPI.AccpacSessionClass();
pSession.Init("", "AP", "AP2100", VERSION);
pSession.Open(USER, PWD, storeID, DateTime.Now, 0, "");
try
{
if (pSession.IsOpened)
{
//Open DBLink
pDBLinkCmpRW = pSession.OpenDBLink(AccpacCOMAPI.tagDBLinkTypeEnum.DBLINK_COMPANY, AccpacCOMAPI.tagDBLinkFlagsEnum.DBLINK_FLG_READWRITE);
pDBLinkSysRW = pSession.OpenDBLink(AccpacCOMAPI.tagDBLinkTypeEnum.DBLINK_SYSTEM, AccpacCOMAPI.tagDBLinkFlagsEnum.DBLINK_FLG_READWRITE);
//Batch
bool temp;
AccpacCOMAPI.AccpacView APINVOICE1batch;
AccpacCOMAPI.AccpacViewFields APINVOICE1batchFields;
pDBLinkCmpRW.OpenView("AP0020", out APINVOICE1batch);
APINVOICE1batchFields = APINVOICE1batch.Fields;
//Header
AccpacCOMAPI.AccpacView APINVOICE1header;
AccpacCOMAPI.AccpacViewFields APINVOICE1headerFields;
pDBLinkCmpRW.OpenView("AP0021", out APINVOICE1header);
APINVOICE1headerFields = APINVOICE1header.Fields;
//Detail1
AccpacCOMAPI.AccpacView APINVOICE1detail1;
AccpacCOMAPI.AccpacViewFields APINVOICE1detail1Fields;
pDBLinkCmpRW.OpenView("AP0022", out APINVOICE1detail1);
APINVOICE1detail1Fields = APINVOICE1detail1.Fields;
//Detail2
AccpacCOMAPI.AccpacView APINVOICE1detail2;
AccpacCOMAPI.AccpacViewFields APINVOICE1detail2Fields;
pDBLinkCmpRW.OpenView("AP0023", out APINVOICE1detail2);
APINVOICE1detail2Fields = APINVOICE1detail2.Fields;
//Detail3
AccpacCOMAPI.AccpacView APINVOICE1detail3;
AccpacCOMAPI.AccpacViewFields APINVOICE1detail3Fields;
pDBLinkCmpRW.OpenView("AP0402", out APINVOICE1detail3);
APINVOICE1detail3Fields = APINVOICE1detail3.Fields;
//Detail4
AccpacCOMAPI.AccpacView APINVOICE1detail4;
AccpacCOMAPI.AccpacViewFields APINVOICE1detail4Fields;
pDBLinkCmpRW.OpenView("AP0401", out APINVOICE1detail4);
APINVOICE1detail4Fields = APINVOICE1detail4.Fields;
//APINVOICE1batch.Compose Array(APINVOICE1header)
//APINVOICE1header.Compose Array(APINVOICE1batch, APINVOICE1detail1, APINVOICE1detail2, APINVOICE1detail3)
//APINVOICE1detail1.Compose Array(APINVOICE1header, APINVOICE1batch, APINVOICE1detail4)
//APINVOICE1detail2.Compose Array(APINVOICE1header)
//APINVOICE1detail3.Compose Array(APINVOICE1header)
//APINVOICE1detail4.Compose Array(APINVOICE1detail1)
//Compose the views
AccpacCOMAPI.AccpacView[] arrBatchView = new AccpacCOMAPI.AccpacView[1];
arrBatchView[0] = APINVOICE1header;
AccpacCOMAPI.AccpacView[] arrHeaderView = new AccpacCOMAPI.AccpacView[4];
arrHeaderView[0] = APINVOICE1batch;
arrHeaderView[1] = APINVOICE1detail1;
arrHeaderView[2] = APINVOICE1detail2;
arrHeaderView[3] = APINVOICE1detail3;
AccpacCOMAPI.AccpacView[] arrDetailView1 = new AccpacCOMAPI.AccpacView[3];
arrDetailView1[0] = APINVOICE1header;
arrDetailView1[1] = APINVOICE1batch;
arrDetailView1[2] = APINVOICE1detail4;
AccpacCOMAPI.AccpacView[] arrDetailView2 = new AccpacCOMAPI.AccpacView[1];
arrDetailView2[0] = APINVOICE1header;
AccpacCOMAPI.AccpacView[] arrDetailView3 = new AccpacCOMAPI.AccpacView[1];
arrDetailView3[0] = APINVOICE1header;
AccpacCOMAPI.AccpacView[] arrDetailView4 = new AccpacCOMAPI.AccpacView[1];
arrDetailView4[0] = APINVOICE1detail1;
object szBuffer;
szBuffer = arrBatchView;
APINVOICE1batch.Compose(ref szBuffer);
szBuffer = arrHeaderView;
APINVOICE1header.Compose(ref szBuffer);
szBuffer = arrDetailView1;
APINVOICE1detail1.Compose(ref szBuffer);
szBuffer = arrDetailView2;
APINVOICE1detail3.Compose(ref szBuffer);
szBuffer = arrDetailView3;
APINVOICE1detail3.Compose(ref szBuffer);
szBuffer = arrDetailView4;
APINVOICE1detail4.Compose(ref szBuffer);
//Insert data
APINVOICE1batch.Browse("(BTCHSTTS = 1)", true);
temp = APINVOICE1batch.Exists;
//insert a new Batch
if (temp == false)
{
APINVOICE1batch.Init();
APINVOICE1batch.Read();
szBuffer = "DESC ---" + DateTime.Now.ToShortDateString();
APINVOICE1batch.Fields.get_FieldByName("BTCHDESC").PutWithoutVerification(ref szBuffer);
APINVOICE1batch.Update();
szBuffer = "00000";
APINVOICE1header.Fields.get_FieldByName("CNTITEM").PutWithoutVerification(ref szBuffer); // ' Entry Number
APINVOICE1header.Browse("", true);
APINVOICE1header.Fetch();
//Header
string sAcct = "", sInvNum = "", sInvDate = "", sAmt = "", sSubTotal = "", sGST = "", sHST = "";
//string sIDVend = "";
for (int i = 0; i < dtINV.Rows.Count - 1; i++)
{
APINVOICE1header.RecordClear();
APINVOICE1header.RecordGenerate(false);
szBuffer = "Header DESC";
APINVOICE1header.Fields.get_FieldByName("INVCDESC").PutWithoutVerification(ref szBuffer);
APINVOICE1header.Process();
sInvNum = dtINV.Rows.ItemArray[0].ToString();
sAcct = dtINV.Rows.ItemArray[1].ToString();
sInvDate = dtINV.Rows.ItemArray[2].ToString();
sAmt = dtINV.Rows.ItemArray[3].ToString();
sSubTotal = dtINV.Rows.ItemArray[4].ToString();
sGST = dtINV.Rows.ItemArray[5].ToString();
sHST = dtINV.Rows.ItemArray[6].ToString();
//Get Vendor ID
szBuffer = "169100";
APINVOICE1header.Fields.get_FieldByName("IDVEND").Equals(szBuffer);
szBuffer = "7";
APINVOICE1header.Fields.get_FieldByName("PROCESSCMD").PutWithoutVerification(ref szBuffer);
APINVOICE1header.Process();
szBuffer = sInvNum;
APINVOICE1header.Fields.get_FieldByName("IDINVC").Equals(szBuffer);
//First detail line
APINVOICE1detail1.GoBottom();
APINVOICE1detail1.RecordClear();
APINVOICE1detail1.RecordGenerate(false);
szBuffer = "-1";
APINVOICE1detail1.Fields.get_FieldByName("CNTLINE").PutWithoutVerification(ref szBuffer);
APINVOICE1detail1.Fields.get_FieldByName("IDGLACCT").Equals("5530-100");
szBuffer=sSubTotal;
APINVOICE1detail1.Fields.get_FieldByName("AMTDIST").Equals(szBuffer);
APINVOICE1detail1.Insert(); //ERROR OCCUR HERE
//Second detail line
APINVOICE1detail1.RecordClear();
APINVOICE1detail1.RecordGenerate(false);
szBuffer = "-2";
APINVOICE1detail1.Fields.get_FieldByName("CNTLINE").PutWithoutVerification(ref szBuffer);
szBuffer = "G";
APINVOICE1detail1.Fields.get_FieldByName("IDDIST").Equals(szBuffer);
szBuffer = sGST;
APINVOICE1detail1.Fields.get_FieldByName("AMTDIST").Equals(szBuffer);
APINVOICE1detail1.Insert();
//Insert header
szBuffer = sAmt;
APINVOICE1header.Fields.get_FieldByName("AMTGROSTOT").Equals(szBuffer);
APINVOICE1header.Insert();
}//end of loop dtINV
APINVOICE1batch.Update();
}
pSession.Close();
}//pSession Open
}
catch (Exception ex)
{
if (ex.ToString().Length >= 0)
{
string sError = "Error Occured! " + "\n" + ex.ToString() + "\n";
SendEmail(storeID, entryCount, balance, sError);
}
}
My task is to import a list of AP invoices into Accpac (54A) with VS 2008 and SQL 2008 (Developer Edition).
Appreciate your great help!