From 86eb6c07cf3d0f75782377454194fad1e5f160d2 Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期三, 26 六月 2024 08:51:19 +0800
Subject: [PATCH] add ptr

---
 jrj/project/business/GDN3.list.cpp  |  718 ++++++++
 jrj/xframe/wobject/xaserverarg.hpp  |   71 
 jrj/ext-jrj/ext-jrj.vcxproj         |    6 
 jrj/project/business/GDN3.maint.cpp | 4228 +++++++++++++++++++++++++++++++++++++++++++++++++
 jrj/xframe/kobject/kxml.hpp         |   16 
 jrj/ext-jrj/ext-jrj.vcxproj.filters |    6 
 6 files changed, 4,979 insertions(+), 66 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 301e3e0..503e38a 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -224,6 +224,12 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\EnquiryEx3.list.cpp" />
+    <ClCompile Include="..\project\business\GDN3.list.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\GDN3.maint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\project\business\Product.list.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters
index a789be6..aeb0c76 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj.filters
+++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -311,5 +311,11 @@
     <ClCompile Include="..\project\business\EnquiryEx3.list.cpp">
       <Filter>project\business</Filter>
     </ClCompile>
+    <ClCompile Include="..\project\business\GDN3.list.cpp">
+      <Filter>project\business</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\GDN3.maint.cpp">
+      <Filter>project\business</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/jrj/project/business/GDN3.list.cpp b/jrj/project/business/GDN3.list.cpp
new file mode 100644
index 0000000..6ed85f3
--- /dev/null
+++ b/jrj/project/business/GDN3.list.cpp
@@ -0,0 +1,718 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+class __declspec(dllexport) GDN3list : public listwin
+{
+public:
+	GDN3list(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
+public:
+	static GDN3list* CreateInstance(void* implPtr, void* hWnd)
+	{
+		GDN3list* pWin = new GDN3list(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+public:
+	xstring m_sType; //树选中的类型
+	xstring m_sTypeTxt; //树选中的数据
+	xstring urlTree;
+	xstring myDataUrl;
+	xstring searchStr;
+	xstring rows;
+	bool readed;
+
+	int changeddlb;
+	xcombobox ddlb_1;
+	xcombobox cbx_datashow;
+
+	xtreeview tv_folder;
+	xdwgrid   dw_goods;
+	xdwgrid   dw_source;
+	xdwtable dw_profit;
+	xdwgrid dw_custom;
+
+	//process tree
+//查找当前树项的顶级目录
+	int LookupTopFolder(HTREEVIEW hItem)
+	{
+		int hRoot = tv_folder.GetRootItem();
+		while (tv_folder.GetParentItem(hItem)) hItem = tv_folder.GetParentItem(hItem);
+		return hItem;
+	}
+
+
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, int param)
+	{
+		//重置工具条
+		int row = dw_list.GetRow();
+		if (row < 1) return 1;
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		xstring id = GetEntityIDName(1);
+		trace(L"\rn---" + id);
+		xstring entity = ele.selectSingleNode(id).text();
+		//trace(entity);
+		SetAgent(L"list", entity);
+
+		return 1;
+	}
+
+	int ExpandCatChildFolder(HTREEVIEW hItem, KXMLDOMElement ele, int image)
+	{
+		KXMLDOMNodeList nlist = ele.SelectNodes(L"item");
+		int len = nlist.length;
+		if (len > 0) tv_folder.SetItemChild(hItem, 1);
+		for (int i = 0; i < len; i++)
+		{
+			KXMLDOMElement e = nlist.item(i);
+			xstring name = e.getAttribute(L"name");
+			int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), image);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		return 1;
+	}
+
+	int ExpandFolderItem(HTREEVIEW hItem, xstring no)
+	{
+		//xml x = ViewObject::RetrieveData(urlTree,L"no",no);
+		xml x = xml::Make();
+		xaserverarg arg = xaserverarg::Make();
+		arg.AddArg(L"no", no);
+		xaserver::ExecXQuery(GetServerUrl(), L"[customerfolder.gdn.sql.xq]", arg.GetString(), x);
+
+		if (!x) return 0;
+
+		KXMLDOMNodeList nlist = x.GetXmlDoc().SelectNodes(L"/data/item");
+		int len = nlist.length;
+		for (int i = 0; i < len; i++)
+		{
+			KXMLDOMElement e = nlist.item(i);
+			xstring name = e.getAttribute(L"name");
+			int h = tv_folder.InsertChildItem(hItem, name, trust(e as int), 35);
+			ExpandCatChildFolder(h, e, 35);
+		}
+		x.Free();
+		return 1;
+	}
+
+	//树展开
+	int OnTreeExpanding(ref TNotifyEvent evt, int p)
+	{
+		ref NMTREEVIEW nmtv = evt.pnmh;
+		HTREEVIEW hItem = nmtv.itemNew.hItem;
+		int hTopItem = LookupTopFolder(hItem);
+		xstring name = tv_folder.GetItemLabel(hTopItem);
+		int child = tv_folder.GetChildItem(hItem);
+
+		KXMLDOMElement e = tv_folder.GetItemData(hItem);
+		if (!child)ExpandFolderItem(hItem, e.getAttribute(L"no"));
+
+		return 1;
+	}
+
+	int  ExpandChildFolder(HTREEVIEW hItem, KXMLDOMElement pElement)
+	{
+		KXMLDOMNodeList nlist = pElement.SelectNodes(L"Item");
+		int len = nlist.length;
+		for (int i = 0; i < len; i++)
+		{
+			KXMLDOMElement e = nlist.item(i);
+			xstring name = e.getAttribute(L"name");
+			xstring sImage = e.getAttribute(L"image");
+			int image = 15;
+			//if(sImage) image = sImage.toInt();
+			int h = tv_folder.InsertChildItem(tv_folder.GetId(), hItem, name, trust(e as int), image);
+			tv_folder.SetItemChild(h, 1);
+			ExpandChildFolder(h, e);
+		}
+		return 1;
+	}
+
+	int  InitialFolder()
+	{
+		KXMLDOMElement xframeElement = GetElement();
+		KXMLDOMElement e = xframeElement.selectSingleNode(L"//xtree[@name='tv_folder']/initial");
+		if (e)ExpandChildFolder(0, e);
+		return 1;
+	}
+
+	int OnTreeSelChanged(ref TNotifyEvent evt, int p)
+	{
+		if (changeddlb) return 1;
+		return OnPreRetrieve();
+
+		return 1;
+	}
+
+	int ViewUpdate(int pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = this.dw_list.GetRow();
+			this.dw_list.DeleteRow(DelRow);
+
+		}
+		else if (updateItem == L"setstate")
+		{
+			int row = this.dw_list.GetRow();
+			if (row < 1) return 1;
+			KXMLDOMElement ele = this.dw_list.GetRowElement(row);
+			xstring id = GetEntityIDName(1);
+			xstring entity = ele.selectSingleNode(id).text();
+			SetAgent(L"list", entity);
+			if (arg.GetArgString(L"state") != L"")
+				//this.dw_list.SetItemString(row, L"ApprovalStatus", arg.GetArgString(L"state"));
+				dw_list.SetItemString(row, L"ApplyStatus", arg.GetArgString(L"state"));
+			if (arg.GetArgString(L"billstatus") != L"")
+			{
+				xstring billstatus = arg.GetArgString(L"billstatus");
+				xstring statusName = GetBillStatusName(billstatus);
+				dw_list.SetItemString(row, L"ApprovalStatus", billstatus);
+				dw_list.SetItemDisplayString(row, L"ApprovalStatus", statusName);
+			}
+
+			this.dw_list.Redraw();
+		}
+
+		return 1;
+	}
+
+	bool IsEmptyQueryStr(xstring queryStr)
+	{
+		if (queryStr == L"") return true;
+		if (queryStr == L"<items join='and'/>") return true;
+		if (queryStr == L"<items join=\"and\"/>") return true;
+		return false;
+	}
+
+	//检索
+	int OnPreRetrieveEx()
+	{
+
+		if (readed) return 1;
+		HTREEVIEW hItem = tv_folder.GetSelectedItem();
+		if (hItem <= 0)
+		{
+			hItem = tv_folder.GetRootItem();
+			if (hItem <= 0)  return 1;
+		}
+		int 	hCursor = xutil::SetCursorWait();
+		KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
+		xstring no = e1.getAttribute(L"no");
+		//xml x = 0;
+		//x = ViewObject::RetrieveData(myDataUrl,L"no",no,L"QueryTxt", m_QueryTxt,L"rows",rows);
+		xstring DeptName = publiccode::GetUser().deptname;
+		xaserverarg arg = xaserverarg::Make();
+		arg.AddArg(L"no", no);
+		arg.AddArg(L"QueryTxt", m_QueryTxt);
+		arg.AddArg(L"rows", rows);
+		trace(no + L"***" + m_QueryTxt + L"***" + rows);
+		/*if(DeptName==L"跟单部"){
+			dw_list.DwRetrieve(GetServerUrl(),L"[list.creator.gdn.sql.xq]",arg.GetString());
+		}else{
+			dw_list.DwRetrieve(GetServerUrl(),L"[list.folder.gdn.sql.xq]",arg.GetString());
+		}*/
+		dw_list.DwRetrieve(GetServerUrl(), L"[list.folder.gdn.sql.xq]", arg.GetString());
+		arg.Free();
+		dw_list.SetReadOnly(true);
+		dw_list.SetRowSort(L"ETD", false);
+
+		if (dw_list.GetRowCount() >= 1) RetrieveDetail(1);
+
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+
+	int OnPreRetrieve()
+	{
+		HTREEVIEW hItem = tv_folder.GetSelectedItem();
+		if (hItem <= 0) return 1;
+
+		int hCursor = xutil::SetCursorWait();
+		KXMLDOMElement e1 = cast(tv_folder.GetItemData(hItem) as KXMLDOMElement);
+		xstring no = e1.getAttribute(L"no");
+		xml x = 0;
+		trace(L"\r\n" + no + L"\r\n" + m_QueryTxt);
+		x = ViewObject::RetrieveData(myDataUrl, L"no", no, L"QueryTxt", m_QueryTxt, L"rows", rows);
+		if (x)
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		else
+		{
+			dw_list.ResetEx();
+			dw_list.Redraw();
+		}
+		dw_list.SetReadOnly(true);
+		dw_list.SetRowSort(L"ETD", false);
+
+		if (dw_list.GetRowCount() >= 1) RetrieveDetail(1);
+
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+
+	int RetrieveDetail(int row)
+	{
+		xstring EntityID = dw_list.GetGuid(row);
+		xstring InvoiceNo = dw_list.GetItemString(row, L"InvoiceNo");
+		dw_goods.DwRetrieve(GetServerUrl(), L"[gdnline.gdn.sql.xq]", L"EntityID", EntityID);
+		dw_goods.SetReadOnly(true);
+
+		//dw_source.DwRetrieve(GetServerUrl(),L"[source.gdn.sql.xq]",L"EntityID",  EntityID );
+
+
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN/source/maintex1", L"GDNID", EntityID);
+		if (x)
+			dw_source.Retrieve(x);
+		else
+			dw_source.Reset();
+		dw_source.Redraw();
+		dw_source.SetReadOnly(true);
+
+		xml x1 = ViewObject::RetrieveData(L"/sale/data/Custom3/maint/custom/data", L"invno", InvoiceNo);
+		if (x1)
+			dw_custom.Retrieve(x1);
+		else
+			dw_custom.Reset();
+		dw_custom.Redraw();
+		dw_custom.SetReadOnly(true);
+
+		dw_profit.DwRetrieve(GetServerUrl(), L"[profit.dgn.sql.xq]", L"EntityID", EntityID);
+		dw_profit.SetReadOnly(true);
+
+		return 1;
+	}
+
+	int OnRowChanged(ref TNotifyEvent evt, int p)
+	{
+
+		//fixed one event only one process
+		listwin::OnRowChanged(evt, p);
+
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		int 	hCursor = xutil::SetCursorWait();
+		RetrieveDetail(row);
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+
+	/*
+int PreOnCmdDispatch(xstring comdid)
+{
+	//返回0——不在执行以下代码;返回其他——执行以下代码。
+	if(comdid==L"action:bill.merge")
+	{
+		OpenWindow(L"dev:xpage[Merge.GDN.vx]");
+		return 0;
+	}
+	else if(comdid==L"action:bill.check.ask")
+	{
+		int row = dw_list.GetRow();
+		xstring ApprovalStatus = dw_list.GetItemString(row,L"ApprovalStatus");
+		if(ApprovalStatus == L"9"){
+			alert(L"合并票不允许提交审批!");
+			return 0;
+		}
+		xstring InvoiceNo = dw_list.GetItemString(row,L"InvoiceNo");
+		xml x = ViewObject::RetrieveData(L"/sale/data/Gdn/checksource",L"invno",InvoiceNo);
+		if(!x) return 1;
+
+		if(x.GetXmlDoc().selectSingleNode(L"error"))
+		{
+			alert(x.GetXmlDoc().selectSingleNode(L"error").text);
+			return 0;
+		}
+
+	}
+	else if(comdid==L"action:bill.new")
+	{
+			xstring s = publiccode::GetUser().id;
+
+			xml supplier_x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/entity/FindBySaleType",L"id", s);
+			if(supplier_x)
+			{
+				if(supplier_x.GetXmlDoc().text != L"业务员")
+					{
+					alert(L"当前角色不是业务员不能新增单子,请重新选择角色");
+					return 0;
+				}
+			}
+	}
+	return 1;
+}
+*/
+
+	int OnSearch()
+	{
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"text", searchStr);
+		OpenWindow(L"dev:xpage[search.dialog.vx]", cast(arg as int));
+		xstring str = arg.GetArgString(L"text");
+		if (str != searchStr)
+		{
+			searchStr = str;
+			dw_list.Filter(L"*", searchStr);
+			return 1;
+		}
+		return 1;
+	}
+
+	int PreOnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"action:bill.refresh")
+		{
+			changeddlb = 1;
+			int RItem = tv_folder.GetRootItem();
+			while (tv_folder.GetChildItem(RItem))
+				tv_folder.DeleteItem(tv_folder.GetChildItem(RItem));
+			ExpandFolderItem(RItem, L"Category:Customer");
+			tv_folder.ExpandItem(RItem);
+			tv_folder.ItemFocus(RItem);
+			changeddlb = 0;
+			return OnPreRetrieve();
+		}
+		else if (comdid == L"action:bill.merge")
+		{
+			OpenWindow(L"dev:xpage[Merge.GDN.vx]");
+			return 0;
+		}
+		else if (comdid == L"xmSaveAs")
+			return dw_list.SaveAs(L"");
+		else if (comdid == L"xmSearch")
+			return OnSearch();
+		else if (comdid.find(L"bill.print") > 0)
+		{
+			xstring EntityIDS = dw_list.GetGuid(dw_list.GetRow());
+			xml xs = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudge", L"GDNID", EntityIDS);
+			xstring Results1 = xs.GetXmlDoc().text();
+			if (Results1 != L"")
+			{
+				alert(Results1);
+				return 0;
+			}
+
+			OnPrintOne();
+			OnPrint();
+			return 1;
+		}
+		else if (comdid == L"action:bill.new")
+		{
+			if (publiccode::GetUser().name != L"admin")
+			{
+				xstring s = publiccode::GetUser().id;
+				xml supplier_x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/entity/FindBySaleType", L"id", s);
+				if (supplier_x)
+				{
+					if (supplier_x.GetXmlDoc().text != L"跟单")
+					{
+						alert(L"当前角色不是跟单员不能新增单子,请重新选择角色");
+						return 0;
+					}
+				}
+			}
+		}
+		else if (comdid == L"action:bill.GDNDelay")
+		{
+			xstring EntityIDEx = dw_list.GetGuid(dw_list.GetRow());
+			xaserverarg argEx = new xaserverarg;
+			argEx.setNativePointer(argEx.CreateInstance());
+			trace(EntityIDEx);
+			argEx.AddArg(L"GDNID", EntityIDEx);
+			OpenWindow(L"dev:xpage[GDNDelay.vx]", cast(argEx as int));
+			return 1;
+		}
+		else if (comdid == L"action:bill.check.ask")
+		{
+			int row = dw_list.GetRow();
+			xstring ApprovalStatus = dw_list.GetItemString(row, L"ApprovalStatus");
+			if (ApprovalStatus == L"9") {
+				alert(L"合并票不允许提交审批!");
+				return 0;
+			}
+
+			xstring EntityID = dw_list.GetGuid(dw_list.GetRow());
+			xml xx = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudge", L"GDNID", EntityID);
+			xstring Results = xx.GetXmlDoc().text();
+			if (Results != L"")
+			{
+				alert(Results);
+				return 0;
+			}
+
+			xml xx2 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeEx", L"GDNID", EntityID);
+			xstring Results2 = xx2.GetXmlDoc().text();
+			if (Results2 != L"")
+			{
+				alert(Results2);
+				return 0;
+			}
+
+			xml xx3 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeExS", L"GDNID", EntityID);
+			xstring Results3 = xx3.GetXmlDoc().text();
+			if (Results3 != L"")
+			{
+				alert(Results3);
+				return 0;
+			}
+
+			xml xx4 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeAmount", L"GDNID", EntityID);
+			xstring Results4 = xx4.GetXmlDoc().text();
+			if (Results4 != L"")
+			{
+				alert(Results4);
+				return 0;
+			}
+
+			/*xml xx5= ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNCost",L"GDNID",EntityID);
+			xstring Results5=xx5.GetXmlDoc().text();
+			if(Results5 !=L"")
+			{
+				alert(Results5);
+				return 0;
+			}*/
+
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			trace(EntityID);
+			arg.AddArg(L"GDNID", EntityID);
+			OpenWindow(L"dev:xpage[GDNDelay.vx]", cast(arg as int));
+
+		}
+		else if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
+
+		return 1;
+	}
+
+	int OnSourceRemark()
+	{
+		xstring name = L"出运明细单";
+		xml x = ViewObject::RetrieveData(L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+		KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+		KXMLDOMNode t = items.item(0);
+		xstring Content = L"";
+		if (t.selectSingleNode(L"Content"))
+		{
+			Content = t.selectSingleNode(L"Content").text();
+		}
+		xaserverarg arg1 = new xaserverarg;
+		arg1.setNativePointer(arg1.CreateInstance());
+		arg1.AddArg(L"value", Content);
+		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1.getNativePointer());
+
+		return 1;
+	}
+
+	int OnPrint()
+	{
+		int row = dw_list.GetRow();
+		xstring GDNID = dw_list.GetGuid(row);
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN/CheckCDLine", L"GDNID", GDNID);
+		xstring  r = x.GetXmlDoc().text();
+		int r1 = r.toInt();
+		if (x)
+		{
+			if (r1 > 0)
+			{
+				alert(L"报关数量和报关金额与出运数量和金额不一致\r\n部分报关数量和金额需要核对!");
+			}
+		}
+		//alert(GDNID);
+		return 1;
+	}
+
+	int OnPrintOne()
+	{
+		int row = dw_list.GetRow();
+		xstring GDNID = dw_list.GetGuid(row);
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN/CheckGW", L"GDNID", GDNID);
+		xstring  r = x.GetXmlDoc().text();
+		int r1 = r.toInt();
+		if (x)
+		{
+			if (r1 > 0)
+			{
+				alert(L"毛重总量或净总重量不一致,需要核对!");
+			}
+		}
+		//alert(GDNID);
+		return 1;
+	}
+
+
+	//xcombobox下拉
+	int OnSelectDdlb(ref TNotifyEvent evt, int p)
+	{
+		changeddlb = 1;
+		int wid = ddlb_1.GetId();
+		int CB_GETCURSEL = 0x0147;
+		int nIndex = win32::SendMessage(wid, CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = ddlb_1.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + (nIndex + 1).toString() + L"]");
+		xstring no = e2.selectSingleNode(L"@element").text();
+
+		HTREEVIEW hItem = tv_folder.GetRootItem();
+		while (tv_folder.GetChildItem(hItem))
+			tv_folder.DeleteItem(tv_folder.GetChildItem(hItem));
+
+		ExpandFolderItem(hItem, no);
+
+		changeddlb = 0;
+		return 1;
+	}
+
+	int OnSelectDataShowDdlb(ref TNotifyEvent evt, int p)
+	{
+		int wid = cbx_datashow.GetId();
+		int CB_GETCURSEL = 0x0147;
+		int nIndex = win32::SendMessage(wid, CB_GETCURSEL, 0, 0);
+		KXMLDOMElement e = cbx_datashow.GetElement();
+		KXMLDOMElement e2 = e.selectSingleNode(L"item[" + (nIndex + 1).toString() + L"]");
+		rows = e2.selectSingleNode(L"@rows").text();
+		OnPreRetrieve();
+
+		return 1;
+	}
+
+
+	int AttachEvent()
+	{
+		AttachEvent(L"tv_folder", L"TVN_SELCHANGED", OnTreeSelChanged); //树选择
+		//AttachEvent(L"tv_folder", L"TVN_ITEMEXPANDING",OnTreeExpanding); //树展开
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", OnRowChanged);
+		AttachEvent(L"cbx_1", L"CBN_SELCHANGE", OnSelectDdlb);
+		AttachEvent(L"cbx_datashow", L"CBN_SELCHANGE", OnSelectDataShowDdlb);
+		return 1;
+	}
+
+	virtual xstring GetTemplateUrl()
+	{
+		return "/sale/view/GDN/template/GDN/ListEx";
+	}
+	int onload()
+	{
+		listwin::onload();
+		dw_list.SetColumnState(L"CurrencyNo", false);
+
+		ddlb_1 = GetControl(L"cbx_1");
+		cbx_datashow = GetControl(L"cbx_datashow");
+		dw_goods = GetControl(L"dw_goods");
+		//dw_goods.openUrl(L"/sale/view/GDN/template/GDNItem1");
+		dw_goods.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.EX.tpl/GDNItem]");
+		dw_goods.SetColumnState(L"ItemID", false);
+		dw_goods.SetColumnState(L"LineType", false);
+		dw_goods.SetColumnState(L"LineNo", false);
+		dw_goods.SetColumnState(L"Assortment", false);
+		dw_goods.SetColumnState(L"SOLineNo", false);
+		dw_goods.SetColumnState(L"SKUNo", false);
+		dw_goods.SetColumnState(L"POCreatorID", false);
+		dw_goods.SetColumnState(L"BuyAmount", false);
+		dw_goods.SetColumnState(L"CostRate", false);
+		dw_goods.SetColumnState(L"CommissionRate", false);
+		dw_goods.SetColumnState(L"DiscountRate", false);
+		dw_goods.SetColumnState(L"Remark", false);
+		dw_goods.SetColumnState(L"DiscountRate", false);
+		dw_goods.SetColumnState(L"SOLineID", false);
+		dw_goods.SetColumnState(L"PONo", false);
+
+		dw_source = GetControl(L"dw_source");
+		//dw_source.openUrl(L"/sale/view/GDN/template/item/sourcing");
+		dw_source.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.EX.tpl/SourcingItem]");
+
+		dw_source.SetColumnState(L"POID", false);
+		dw_source.SetColumnState(L"InvoiceNo", false);
+		dw_source.SetColumnState(L"ETD", false);
+		dw_source.SetColumnState(L"SOLineID", false);
+		dw_source.SetColumnState(L"ItemID", false);
+		dw_source.SetColumnState(L"POItemID", false);
+		dw_source.SetColumnState(L"GDNLineID", false);
+		dw_source.SetColumnState(L"Amount", false);
+
+		dw_profit = GetControl(L"dw_profit");
+		//dw_profit.openUrl(L"/sale/view/GDN/template/Profit");
+		dw_profit.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.EX.tpl/Profit]");
+		dw_profit.SetColHeaderHeight(0);
+		dw_profit.SetRowSelectorWidth(0);
+		dw_profit.SetHScrollState(false);
+
+
+		dw_custom = GetControl(L"dw_custom");
+		dw_custom.openUrl(L"/sale/view/Custom3/template/maint");
+		dw_custom.SetColumnState(L"ClassifyID", false);
+		dw_custom.SetColumnState(L"AmountEx", false);
+		//dw_custom.SetReadOnlyColumn(L"CustName",true);
+		dw_custom.SetColumnState(L"LineNo", false);
+
+		rows = L"500";
+		myDataUrl = L"/sale/data/GDN3/folder/list";
+		urlTree = L"/sale/data/GDN3/folder";
+		tv_folder = GetControl(L"tv_folder");
+		//tv_folder.SetLineAtRoot(true);
+		InitialFolder();
+		return 1;
+	}
+
+	int onloaded()
+	{
+
+		HTREEVIEW hItem = tv_folder.GetRootItem();
+		ExpandFolderItem(hItem, L"Category:Customer");
+		tv_folder.ExpandItem(hItem);
+		tv_folder.ItemFocus(hItem);
+
+		listwin::onloaded();
+		searchStr = L"";
+		readed = true;
+
+
+
+		//attach my control event
+		AttachEvent();
+
+		readed = false;
+
+		return 1;
+	}
+
+	int ProcessUsedArg(xaserverarg arg)
+	{
+		xstring action = arg.GetArgString(L"Action");
+		//trace(L"\r\n*******************action:"+action+L"\r\n");
+		if (action == L"bill.open") {
+			int row = dw_list.GetRow();
+			xstring ApprovalStatus = dw_list.GetItemString(row, L"ApprovalStatus");
+			if (ApprovalStatus == L"9")
+			{
+				arg.AddArg(L"ReadOnly", L"true");
+				arg.AddArg(L"ReadOnlyEx", L"true");
+			}
+		}
+		else {
+			arg.AddArg(L"ReadOnly", L"false");
+		}
+
+		HTREEVIEW hItem = tv_folder.GetCaretItem();
+		if (hItem <= 0) return 1;
+		KXMLDOMElement e = tv_folder.GetItemData(hItem);
+		xstring  no = e.getAttribute(L"no");
+		if (no.find(L"Customer:") >= 0)
+		{
+			arg.AddArg(L"CustomerID", e.getAttribute(L"id"));
+			xstring name = e.getAttribute(L"name");
+			if (name.find(L"(L") >= 0) name = name.left(name.find(L"(L"));
+			arg.AddArg(L"CustomerName", name);
+		}
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/GDN3.maint.cpp b/jrj/project/business/GDN3.maint.cpp
new file mode 100644
index 0000000..c8af0b1
--- /dev/null
+++ b/jrj/project/business/GDN3.maint.cpp
@@ -0,0 +1,4228 @@
+#include <wobject/xstring.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <xcontrol/ximageview.hpp>
+
+#include "vbusiness/vframe/maint.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+#include "viewobject/saleorder.view.hpp"
+#include "viewobject/quote.view.hpp"
+
+class __declspec(dllexport) GDN3MaintWin : public maint
+{
+public:
+	GDN3MaintWin(void* implPtr, HWND hWnd) :maint(implPtr, hWnd) {}
+public:
+	static GDN3MaintWin* CreateInstance(void* implPtr, void* hWnd)
+	{
+		GDN3MaintWin* pWin = new GDN3MaintWin(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+public:
+	xdwtable dw_base;
+	xdwgrid	 dw_item;
+	xdwgrid	 dw_custom;
+	xdwtable dw_profit;
+	xdwgrid   dw_source;
+	xdwgrid   dw_cdelement;
+	xdwgrid	 dw_invoiceItem;
+	xdwgrid	 dw_customex;
+	xdwgrid 	 dw_billnote;
+	xdwgrid 	 dw_doclist;
+	xdwgrid 	 dw_fcl;
+
+	xstring	 InvoiceNo;
+	xstring     InvoiceID;
+	bool		readonly;
+	bool		 haveUpdate;
+	xnode	 m_agentNode;	//Agent Condition
+	xstring     tabname;
+	bool		datareading;
+	bool		readonlyEx;
+	xstring searchStr;
+	//xstring ApprovalStatus;
+	//xdwgrid	 dw_element;
+
+	int SetAgent(xstring scene, xstring EntityName, xstring EntityID)
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		KXMLDOMElement xframeElement = GetElement();
+		KXMLDOMNode agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+
+		xml x;
+		
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"scene", scene, L"xs:xstring");
+		arg.AddArg(L"EntityID", EntityID, L"xs:xstring");
+		arg.AddArg(L"EntityName", EntityName, L"xs:xstring");
+		url::get(L"/workflow/query/datarole/" + EntityName, arg.GetString(), x);
+
+		xstring sNodes;
+		sNodes = L"datarole/actions/action[contains(@scene,'" + scene + L"')]";
+		KXMLDOMNodeList nlist = x.GetXmlDoc().SelectNodes(sNodes);
+		int  index;
+		int  nlen = nlist.length;
+		KXMLDOMElement ele;
+
+		xstring tools = L"<vbox class=''>";
+		if (scene == L"list") tools += L"<xspace height='12'/>";
+
+		haveUpdate = false;
+		for (index = 0; index < nlen; index++)
+		{
+			ele = nlist.item(index);
+			xstring name = ele.selectSingleNode(L"@id").text;//.getAttribute(L"id");
+			xstring label = ele.selectSingleNode(L"@caption").text;//ele.getAttribute(L"caption");
+			xstring image;
+			xstring src = L"";
+			if (ele.selectSingleNode(L"@image"))
+				image = ele.selectSingleNode(L"@image").text;
+			else
+				image = L"0 22";
+
+			if (ele.selectSingleNode(L"@src"))
+				src = ele.selectSingleNode(L"@src").text;
+
+			xstring tool;
+			if (name.find(L"bill.update") >= 0) haveUpdate = true;
+			if (src != L"")
+				tool = L"<xtoolbutton src='" + src + L"'  caption='" + label + L"' name='action:" + name + L"' height='23' style='background-color:none #ceecce  none #ffffff'/>";
+			else
+				tool = L"<xtoolbutton image='" + image + L"'  caption='" + label + L"' name='action:" + name + L"' height='23'  style='background-color:none #ceecce none #ffffff'/>";
+			tools += tool;
+		}
+		if (agent)
+		{
+			nlist = agent.SelectNodes(L".//xtoolbutton");
+			nlen = nlist.length;
+			for (index = 0; index < nlen; index++)
+			{
+				ele = nlist.item(index);
+				xstring tmp = ele.xml;
+				tools += tmp;
+			}
+		}
+		tools += L"</vbox>";
+		SetAgentNodeContent(anode, tools);
+
+		return 1;
+	}
+
+	int OnMakeGdnLineEx()
+	{
+		int cnt = dw_invoiceItem.GetRowCount();
+		for (int k = 1; k <= cnt; k++) dw_invoiceItem.DeleteRow(1);
+
+		for (int row = 1; row <= dw_item.GetRowCount(); ++row)
+		{
+			dw_invoiceItem.InsertRow(0);
+			dw_invoiceItem.SetItemString(row, L"ClassifyID", dw_item.GetItemString(row, L"ClassifyID"));
+			dw_invoiceItem.SetItemDisplayString(row, L"ClassifyID", dw_item.GetItemDisplayString(row, L"ClassifyID"));
+
+			dw_invoiceItem.SetItemString(row, L"Quantity", dw_item.GetItemString(row, L"Quantity"));
+			dw_invoiceItem.SetItemString(row, L"Packages", dw_item.GetItemString(row, L"Packages"));
+			dw_invoiceItem.SetItemString(row, L"Amount", dw_item.GetItemString(row, L"Amount"));
+			dw_invoiceItem.SetItemString(row, L"UnitPrice", dw_item.GetItemString(row, L"UnitPrice"));
+
+			dw_invoiceItem.SetItemString(row, L"ContainerNo", dw_item.GetItemString(row, L"ContainerNo"));
+			dw_invoiceItem.SetItemString(row, L"GoodsNo", dw_item.GetItemString(row, L"GoodsNo"));
+			dw_invoiceItem.SetItemString(row, L"CustomerItemNo", dw_item.GetItemString(row, L"CustomerItemNo"));
+			dw_invoiceItem.SetItemString(row, L"PONo", dw_item.GetItemString(row, L"PONo"));
+			dw_invoiceItem.SetItemString(row, L"EName", dw_item.GetItemString(row, L"EName"));
+			dw_invoiceItem.SetItemString(row, L"Mark", dw_item.GetItemString(row, L"Mark"));
+			dw_invoiceItem.SetItemString(row, L"GroupNo", dw_item.GetItemString(row, L"GroupNo"));
+
+			dw_invoiceItem.SetItemString(row, L"UnitPrice", dw_item.GetItemString(row, L"UnitPrice"));
+			dw_invoiceItem.SetItemString(row, L"CurrencyCode", dw_base.GetItemString(1, L"CurrencyCode"));
+			dw_invoiceItem.SetItemString(row, L"PackingRate", dw_item.GetItemString(row, L"PackingRate"));
+			dw_invoiceItem.SetItemString(row, L"VolumeDesc", dw_item.GetItemString(row, L"VolumeDesc"));
+			dw_invoiceItem.SetItemString(row, L"VolumePerPkg", dw_item.GetItemString(row, L"VolumePerPkg"));
+			dw_invoiceItem.SetItemString(row, L"Volume", dw_item.GetItemString(row, L"Volume"));
+			dw_invoiceItem.SetItemString(row, L"NWPerPkg", dw_item.GetItemString(row, L"NWPerPkg"));
+			dw_invoiceItem.SetItemString(row, L"NW", dw_item.GetItemString(row, L"NW"));
+			dw_invoiceItem.SetItemString(row, L"GWPerPkg", dw_item.GetItemString(row, L"GWPerPkg"));
+			dw_invoiceItem.SetItemString(row, L"GW", dw_item.GetItemString(row, L"GW"));
+			dw_invoiceItem.SetItemString(row, L"PackageL", dw_item.GetItemString(row, L"PackageL"));
+			dw_invoiceItem.SetItemString(row, L"PackageW", dw_item.GetItemString(row, L"PackageW"));
+			dw_invoiceItem.SetItemString(row, L"PackageH", dw_item.GetItemString(row, L"PackageH"));
+
+			xstring voldesc = dw_item.GetItemString(row, L"PackageL") + L"*" +
+				dw_item.GetItemString(row, L"PackageW") + L"*" +
+				dw_item.GetItemString(row, L"PackageH");
+			dw_invoiceItem.SetItemString(row, L"VolumeDesc", voldesc);
+
+			dw_invoiceItem.SetItemString(row, L"InnerQty", dw_item.GetItemString(row, L"InnerQty"));
+			dw_invoiceItem.SetItemString(row, L"CommissionRate", dw_item.GetItemString(row, L"CommissionRate"));
+			dw_invoiceItem.SetItemString(row, L"DiscountRate", dw_item.GetItemString(row, L"DiscountRate"));
+
+			dw_invoiceItem.SetItemString(row, L"ItemID", dw_item.GetItemString(row, L"ItemID"));
+			dw_invoiceItem.SetItemString(row, L"LineType", dw_item.GetItemString(row, L"LineType"));
+			dw_invoiceItem.SetItemString(row, L"LineNo", dw_item.GetItemString(row, L"LineNo"));
+			dw_invoiceItem.SetItemString(row, L"Assortment", dw_item.GetItemString(row, L"Assortment"));
+			dw_invoiceItem.SetItemString(row, L"GDNID", dw_item.GetItemString(row, L"GDNID"));
+			dw_invoiceItem.SetItemString(row, L"SOLineID", dw_item.GetItemString(row, L"SOLineID"));
+
+			dw_invoiceItem.SetItemString(row, L"UOMCode", dw_item.GetItemString(row, L"UOMCode"));
+			dw_invoiceItem.SetItemDisplayString(row, L"UOMCode", dw_item.GetItemDisplayString(row, L"UOMCode"));
+
+			dw_invoiceItem.SetItemString(row, L"KOPCode", dw_item.GetItemString(row, L"KOPCode"));
+			dw_invoiceItem.SetItemDisplayString(row, L"KOPCode", dw_item.GetItemDisplayString(row, L"KOPCode"));
+
+			KXMLDOMElement e = dw_item.GetRowElement(row);
+			dw_invoiceItem.SetItemString(row, L"GDNLineID", e.getAttribute(L"guid"));
+		}
+
+		return 1;
+	}
+
+	xstring  GetEntityData(int pr)
+	{
+		dw_base.AcceptText();
+		dw_source.AcceptText();
+		dw_item.AcceptText();
+		dw_custom.AcceptText();
+
+		xml xbase = new xml;
+		xbase.setNativePointer(xml::CreateInstance());
+		dw_base.DwUpdateAllTo(xbase.GetXmlDoc());
+
+		KXMLDOMElement ebase = xbase.GetXmlDoc().documentElement;
+
+		xml xitem = new xml;
+		xitem.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xitemdoc = xitem.GetXmlDoc();
+		dw_item.DwUpdateAllToEx(xitemdoc);
+		if (xitem.GetXml() != L"")
+		{
+			KXMLDOMElement eitem = xitemdoc.documentElement;
+			if (eitem) ebase.appendChild(eitem);
+		}
+
+		xml xsource = new xml;
+		xsource.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xsourcedoc = xsource.GetXmlDoc();
+		dw_source.DwUpdateAllToEx(xsourcedoc);
+
+
+		if (xsource.GetXml() != L"")
+		{
+			KXMLDOMElement eitem1 = xitemdoc.documentElement;
+			if (eitem1) ebase.appendChild(eitem1);
+		}
+
+		xml xcustom = new xml;
+		xcustom.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xcustomdoc = xcustom.GetXmlDoc();
+		dw_source.DwUpdateAllToEx(xcustomdoc);
+		if (xcustom.GetXml() != L"")
+		{
+			KXMLDOMElement eitem2 = xitemdoc.documentElement;
+			if (eitem2) ebase.appendChild(eitem1);
+		}
+
+		return ebase.xml;
+	}
+
+
+	int SetAgentEx()
+	{
+		SetAgent(L"maint", L"GDN3", InvoiceID);
+		if (readonlyEx && tabname == L"cdelement")
+			SwitchLayer(L"agent_" + tabname, L"agentareaframe");
+		else if (haveUpdate && !readonly)
+			SwitchLayer(L"agent_" + tabname, L"agentareaframe");
+
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, int param)
+	{
+		//重置工具条
+		SetAgentEx();
+		return 1;
+	}
+
+	xstring GetEntityID(int /*param*/ pr)
+	{
+		return InvoiceID;
+	}
+
+	xstring GetEntityName(int /*param*/ pr)
+	{
+		return "GDN3";
+	}
+
+	xstring GetGuid()
+	{
+		return publiccode::GetGuid();
+	}
+
+	int SetCustomerHabit(xstring CustomerID)
+	{
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN/habit/customer", L"CustomerID", CustomerID);
+		if (x)
+		{
+			KXMLDOMNodeList nodes = x.GetXmlDoc().selectNodes(L"GDN/*");
+			int len = nodes.length;
+			for (int i = 0; i < len; i++)
+			{
+				KXMLDOMElement e = nodes.item(i);
+				dw_base.SetItemString(1, e.tagName, e.text);
+				if (e.selectSingleNode(L"@_displaystring"))
+					dw_base.SetItemDisplayString(1, e.tagName, e.selectSingleNode(L"@_displaystring").text);
+			}
+		}
+		return 1;
+	}
+
+	int PoTotal(int row)
+	{
+		double Quantity_s = 0.0;
+		double Amount_s = 0.0;
+		double Vol_s = 0.0;
+		double Price = 0.0;
+		if (row < 1 or row > dw_item.GetRowCount()) return 1;
+
+		KXMLDOMElement  e = dw_item.GetRowElement(row);
+		xstring GDNLineID = e.getAttribute(L"guid");
+		double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+		double SAmount = dw_item.GetItemDouble(row, L"Amount");
+		for (int k = 1; k <= dw_source.GetRowCount(); ++k)
+		{
+			xstring POGDNLineID = dw_source.GetItemString(k, L"GDNLineID");
+			if (GDNLineID == POGDNLineID) {
+
+				double Amount = dw_source.GetItemDouble(k, L"BuyAmount");
+				Amount_s += Amount;
+			}
+		}
+		dw_item.SetItemDouble(row, L"BuyAmount", Amount_s);
+		Price = Amount_s / Quantity;
+		Vol_s = Amount_s / SAmount;
+		dw_item.SetItemDouble(row, L"BuyUnitPrice", Price);
+		dw_item.SetItemDouble(row, L"CostRate", Vol_s);
+
+		return 1;
+	}
+
+	int PoTotal()
+	{
+		double Quantity_s = 0.0;
+		double Amount_s = 0.0;
+		double Vol_s = 0.0;
+		double Price = 0.0;
+		double	PackUnitPrice_s = 0.0;
+		for (int row = 1; row <= dw_item.GetRowCount(); ++row)
+		{
+			for (int k = 1; k <= dw_source.GetRowCount(); ++k) {
+				//double UnitPrice = dw_source.GetItemDouble(row,L"UnitPrice");
+				KXMLDOMElement  e = dw_item.GetRowElement(row);
+				xstring GDNLineID = e.getAttribute(L"guid");
+				double Amount = dw_source.GetItemDouble(k, L"BuyAmount");
+				double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+				double SAmount = dw_item.GetItemDouble(row, L"Amount");
+				double PackUnitPrice = dw_item.GetItemDouble(row, L"PackUnitPrice");
+				//xstring = dw_item.GetItemString(row,L"GDNLineID");
+				xstring POGDNLineID = dw_source.GetItemString(k, L"GDNLineID");
+				if (GDNLineID == POGDNLineID) {
+					Amount_s += Amount;
+					dw_item.SetItemDouble(row, L"BuyAmount", Amount_s);
+					Price = Amount_s / Quantity;
+					Vol_s = Amount_s / SAmount;
+					dw_item.SetItemDouble(row, L"BuyUnitPrice", Price);
+					dw_item.SetItemDouble(row, L"CostRate", Vol_s);
+				}
+			}
+			Amount_s = 0.0;
+		}
+		return 1;
+	}
+
+	int calcTotal()
+	{
+		double Quantity_s = 0.0;
+		int Packages_s = 0.0;
+		double GW_s = 0.0;
+		double NW_s = 0.0;
+		double Amount_s = 0.0;
+		double Vol_s = 0.0;
+		double Price = 0.0;
+		double Cost_s = 0.0;
+		double ResearchCommissionRate_s = 0.0;
+		double MiddlemanAmountRate_s = 0.0;
+
+		for (int row = 1; row <= dw_item.GetRowCount(); row++)
+		{
+			double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+			int Packages = dw_item.GetItemDouble(row, L"Packages").toInt();
+			double GW = dw_item.GetItemDouble(row, L"GW");
+			double NW = dw_item.GetItemDouble(row, L"NW");
+			double Vol = dw_item.GetItemDouble(row, L"Volume");
+			double ResearchCommissionRate = dw_item.GetItemDouble(row, L"ResearchCommissionRate");
+			double MiddlemanAmountRate = dw_item.GetItemDouble(row, L"MiddlemanAmountRate");
+
+			double UnitPrice = dw_item.GetItemDouble(row, L"UnitPrice");
+			double Amount = dw_item.GetItemDouble(row, L"Amount");
+			double Cost = dw_item.GetItemDouble(row, L"Cost");
+			Quantity_s += Quantity;
+			Packages_s += Packages;
+			GW_s += GW;
+			NW_s += NW;
+			Amount_s += Amount;
+			Vol_s += Vol.round(2);
+			Cost_s += Cost;
+			ResearchCommissionRate_s += ResearchCommissionRate;
+			MiddlemanAmountRate_s += MiddlemanAmountRate;
+		}
+		dw_base.SetItemDouble(1, L"Quantity", Quantity_s);
+		dw_base.SetItemDouble(1, L"GW", GW_s);
+		dw_base.SetItemDouble(1, L"NW", NW_s);
+		dw_base.SetItemString(1, L"Packages", Packages_s.toString());
+		dw_base.SetItemDouble(1, L"Volume", Vol_s.round(2));
+		dw_base.ItemChangeTo(1, L"Amount", Amount_s.toString());
+
+		dw_base.SetItemDouble(1, L"PrivateCommissionAmount", ResearchCommissionRate_s + MiddlemanAmountRate_s);
+
+		//dw_base.SetItemDouble(1,L"Cost",Cost_s);
+		//dw_base.SetItemDouble(1,L"DraftAmount",Amount_s);
+		return 1;
+	}
+
+
+	//overroad
+	bool NeedNotifyUpdate()
+	{
+		if (readonly && !readonlyEx) return false;
+		if (!haveUpdate) return false;
+		return true;
+	}
+
+	//overroad
+	int DoUpdate(bool showSuccess)
+	{
+		if (readonly && !readonlyEx)
+		{
+			alert(L"当前状态不能保存!");
+			return 1;
+		}
+
+		dw_base.AcceptText();
+		dw_source.AcceptText();
+		dw_profit.AcceptText();
+		dw_invoiceItem.AcceptText();
+		dw_fcl.AcceptText();
+		dw_cdelement.AcceptText();
+		xstring InvoiceNo1 = dw_base.GetItemString(1, L"InvoiceNo");
+		if (InvoiceNo1 == L"")
+		{
+			alert(L"请输入外运编号");
+			return 0;
+		}
+		else if (InvoiceID == L"") {
+			xml check_x = ViewObject::RetrieveData(L"/sale/data/GDN/source/FindByInvoiceNo", L"InvoiceNo", InvoiceNo1);
+			if (check_x)
+			{
+				xstring cnt = check_x.GetXmlDoc().documentElement.getAttribute(L"count");
+				if (cnt != L"0") {
+					alert(L"外运编号已存在,请重新填写!");
+					return 0;
+				}
+			}
+		}
+
+		if (dw_base.GetItemString(1, L"CompanyID") == L"")
+		{
+			alert(L"请输入经营单位");
+			return 0;
+		}
+
+		if (dw_base.GetItemString(1, L"ETD") == L"")
+		{
+			alert(L"请输入预配船期");
+			return 0;
+		}
+
+		if (dw_base.GetItemString(1, L"OperationTips") == L"")
+		{
+			alert(L"请输入操作提示");
+			return 0;
+		}
+
+		/*if(dw_base.GetItemString(1,L"PriceTerm")==L"")
+		{
+			alert(L"请输入价格条款");
+			return 0;
+		}
+		if(dw_base.GetItemString(1,L"PaymentTerm")==L"")
+		{
+			alert(L"请输入汇款方式");
+			return 0;
+		}
+		if(dw_base.GetItemString(1,L"Country") == L"")
+		{
+			alert(L"请选择贸易国别");
+			return 0;
+		}
+		if(dw_base.GetItemString(1,L"TradeType") == L"")
+		{
+			alert(L"请选择贸易方式");
+			return 0;
+		}
+		if(dw_base.GetItemString(1,L"POL") == L"")
+		{
+			alert(L"请选择出口口岸");
+			return 0;
+		}
+		if(dw_base.GetItemString(1,L"POD") == L"")
+		{
+			alert(L"请选择目的港");
+			return 0;
+		}
+		if(dw_base.GetItemString(1,L"TransportMode") == L"")
+		{
+			alert(L"请选择运输方式");
+			return 0;
+		}*/
+		/*
+		if(dw_base.GetItemString(1,L"Mark") == L"")
+		{
+			alert(L"请输入唛头(无唛头,请填“N/M”)L");
+			return 0;
+		}*/
+
+		/*
+		if(dw_base.GetItemString(1,L"FinalCountry") == L"")
+		{
+			alert(L"请选择运抵国");
+			return 0;
+		}*/
+
+		//if(dw_base.GetItemString(1,L"GoodsSource") == L"")
+		//{
+		//	alert(L"请选择货物产地(货物产地:开票工厂金额最大的工厂所属地)L");
+		//	return 0;
+	//	}
+
+		//calcTotal();
+
+		xstring str = L"";
+		dw_base.AcceptText();
+		xml xbase = new xml;
+		xbase.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xbasedoc = xbase.GetXmlDoc();
+		dw_base.DwUpdateAllTo(xbasedoc);
+
+		xaserverarg arg = GDNView::MakeArg();
+		//if(dw_billnote.DeletedCount()+dw_billnote.ModifiedCount() > 0)
+		//{
+		xml xbillnote = new xml;
+		xbillnote.setNativePointer(xml::CreateInstance());
+		dw_billnote.DwUpdateAllToEx(xbillnote.GetXmlDoc());
+
+		KXMLDOMElement docinfo = xbillnote.GetXmlDoc().selectSingleNode(L"GDN/DocInfo");
+		docinfo.SetAttribute(L"update.modify", L"1");
+		xbase.GetXmlDoc().documentElement.appendChild(docinfo);
+		xbase.GetXmlDoc().documentElement.SetAttribute(L"update.modify", L"1");
+		//}
+		arg.AddArg(L"content", xbase.GetXml());
+		if (url::get(L"/sale/data/Gdn3/update/base", arg.GetString(), xbase) != 1)
+		{
+			xstring error = xbase.GetXmlDoc().text;
+			alert(L"err:" + error);
+			alert(L"基本信息保存失败!");
+			return -1;
+		}
+		str = xbase.GetXmlDoc().documentElement.getAttribute(L"text");
+		if (str == L"false")
+		{
+			alert(L"基本信息保存失败!");
+			return -1;
+		}
+		dw_base.ResetUpdateStatus();
+
+		dw_profit.AcceptText();
+		xml xprofit = new xml;
+		xprofit.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xprofitdoc = xprofit.GetXmlDoc();
+		dw_profit.DwUpdateAllTo(xprofitdoc);
+		xaserverarg arg3 = GDNView::MakeArg();
+		arg3.AddArg(L"content", xprofit.GetXml());
+		if (url::get(L"/sale/data/Gdn/update/profit", arg3.GetString(), xprofit) != 1)
+		{
+			xstring error4 = xprofit.GetXmlDoc().text;
+		}
+		else
+		{
+			str = xprofit.GetXmlDoc().documentElement.getAttribute(L"text");
+			if (str == L"false")
+			{
+				alert(L"盈亏信息保存失败!");
+				return -1;
+			}
+			dw_profit.ResetUpdateStatus();
+		}
+
+		dw_item.AcceptText();
+
+		int k;
+		for (k = 1; k <= dw_item.GetRowCount(); k++)
+		{
+			if (dw_item.GetItemString(k, L"SeqNo") == L"")
+			{
+				dw_item.SetItemString(k, L"SeqNo", k.toString());
+			}
+		}
+
+		xml xitem = new xml;
+		xitem.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xitemdoc = xitem.GetXmlDoc();
+		dw_item.DwUpdateAllToEx(xitemdoc);
+		//dw_base.DwUpdateAllTo(xitemdoc);
+		xaserverarg arg1 = GDNView::MakeArg();
+		arg1.AddArg(L"content", xitem.GetXml());
+
+		if (url::get(L"/sale/data/Gdn/update/item", arg1.GetString(), xitem) != 1)
+		{
+			xstring error1 = xitem.GetXmlDoc().text;
+		}
+		else
+		{
+			str = xitem.GetXmlDoc().documentElement.getAttribute(L"text");
+			if (str == L"false")
+			{
+				alert(L"商品信息保存失败!");
+				return -1;
+			}
+			//alert(error1);
+			dw_item.ResetUpdateStatus();
+		}
+		dw_source.AcceptText();
+		xml x;
+		x.setNativePointer(x.CreateInstance());
+		dw_source.DwUpdateAllToEx(x.GetXmlDoc());
+		xaserverarg arg2 = GDNView::MakeArg();
+		arg2.AddArg(L"content", x.GetXml());
+
+		if (url::get(L"/sale/data/Gdn/update/sourceex", arg2.GetString(), x) != 1)
+		{
+			xstring error3 = x.GetXmlDoc().text;
+		}
+		else
+		{
+			str = x.GetXmlDoc().documentElement.getAttribute(L"text");
+			if (str == L"false")
+			{
+				alert(L"货源信息保存失败!");
+				return -1;
+			}
+			dw_source.ResetUpdateStatus();
+		}
+
+		dw_custom.AcceptText();
+		for (k = 1; k <= dw_custom.GetRowCount(); k++)
+		{
+			if (dw_custom.GetItemString(k, L"LineNo") == L"")
+			{
+				dw_custom.SetItemString(k, L"LineNo", k.toString());
+			}
+		}
+		xml xcustom = new xml;
+		xcustom.setNativePointer(xcustom.CreateInstance());
+		dw_custom.DwUpdateAllToEx(xcustom.GetXmlDoc());
+		if (xcustom.GetXml() != L"")
+		{
+			xcustom = CustomView::UpdateCustomItem(dw_base.GetItemString(1, L"InvoiceNo"), xcustom.GetXml());
+			if (!xcustom)
+			{
+				xstring error5 = xcustom.GetXmlDoc().text;
+			}
+			else
+			{
+				str = xcustom.GetXmlDoc().documentElement.getAttribute(L"text");
+				if (str == L"false")
+				{
+					alert(L"报关信息保存失败!");
+					return -1;
+				}
+				dw_custom.ResetUpdateStatus();
+			}
+		}
+		if (dw_invoiceItem.GetRowCount() > 0)
+		{
+			dw_invoiceItem.AcceptText();
+			xml x1 = new xml;
+			x1.setNativePointer(x1.CreateInstance());
+			dw_invoiceItem.DwUpdateAllToEx(x1.GetXmlDoc());
+			xaserverarg arg4 = GDNView::MakeArg();
+			arg4.AddArg(L"content", x1.GetXml());
+			if (url::get(L"/sale/data/Gdn/update/itemex", arg4.GetString(), x1) != 1)
+				if (!x1)
+				{
+					alert(L"议付信息保存失败!");
+					return -1;
+				}
+			str = x1.GetXmlDoc().documentElement.getAttribute(L"text");
+			if (str == L"false")
+			{
+				alert(L"议付信息保存失败!");
+				return -1;
+			}
+			dw_invoiceItem.ResetUpdateStatus();
+		}
+		dw_fcl.AcceptText();
+		xml xfcl = new xml;
+		xfcl.setNativePointer(xfcl.CreateInstance());
+		dw_fcl.DwUpdateAllToEx(xfcl.GetXmlDoc());
+		xaserverarg arg8 = GDNView::MakeArg();
+		arg8.AddArg(L"content", xfcl.GetXml());
+
+		if (url::get(L"/sale/data/Gdn/update/container", arg8.GetString(), xfcl) != 1)
+		{
+			xstring error8 = xfcl.GetXmlDoc().text;
+		}
+		else
+		{
+			str = xfcl.GetXmlDoc().documentElement.getAttribute(L"text");
+			if (str == L"false")
+			{
+				alert(L"分箱信息保存失败!");
+				return -1;
+			}
+			dw_fcl.ResetUpdateStatus();
+		}
+		dw_cdelement.AcceptText();
+		xml xcdelement = new xml;
+		xcdelement.setNativePointer(xcdelement.CreateInstance());
+		dw_cdelement.DwUpdateAllToEx(xcdelement.GetXmlDoc());
+		if (xcdelement.GetXml() != L"")
+		{
+			xcdelement = CustomView::UpdateCustomElement(dw_base.GetItemString(1, L"InvoiceNo"), xcdelement.GetXml());
+			if (!xcdelement)
+			{
+				xstring error6 = xcdelement.GetXmlDoc().text;
+				alert(L"err:" + error6);
+				alert(L"申报要素信息保存失败!");
+				//return -1;
+			}
+			else
+			{
+				str = xcdelement.GetXmlDoc().documentElement.getAttribute(L"text");
+				if (str == L"false")
+				{
+					alert(L"申报要素信息保存失败!");
+					return -1;
+				}
+				dw_cdelement.ResetUpdateStatus();
+			}
+		}
+
+
+
+		if (showSuccess)
+			alert(L"保存成功!");
+		if (InvoiceID == L"")
+		{
+			InvoiceID = dw_base.GetGuid(1);
+			InvoiceNo = dw_base.GetItemString(1, L"InvoiceNo");
+		}
+		return 1;
+	}
+
+
+
+	bool validClassfyID()
+	{
+		if (dw_custom.GetRow() < 1) return true;
+		int i = 0;
+		xstring classfyid;
+		for (i = 1; i <= dw_item.GetRowCount(); i++)
+		{
+			classfyid = dw_item.GetItemString(i, L"ClassifyID");
+			if (dw_custom.LookUpRow(L"ClassifyID", classfyid) == 0)
+			{
+				alert(L"出货商品第" + i.toString() + L"行海关代码[" +
+					dw_item.GetItemDisplayString(i, L"ClassifyID") + L"]与报关商品不一致");
+				return false;
+			}
+
+		}
+
+		for (i = 1; i <= dw_custom.GetRowCount(); i++)
+		{
+			classfyid = dw_custom.GetItemString(i, L"ClassifyID");
+			if (dw_item.LookUpRow(L"ClassifyID", classfyid) == 0)
+			{
+				alert(L"报关商品第" + i.toString() + L"行海关代码[" +
+					dw_item.GetItemDisplayString(i, L"ClassifyID") + L"]与出货商品不一致");
+				return false;
+			}
+
+			xml xx3 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNClassifyID", L"InvoiceNo", classfyid);
+			trace(classfyid);
+			xstring Results3 = xx3.GetXmlDoc().text;
+			if (Results3 != L"")
+			{
+				alert(Results3);
+				return false;
+			}
+
+			/*
+			if(dw_custom.GetItemString(i,L"ItemGoodsSource")==L"")
+			{
+				alert(L"报关商品第"+i.toString()+L"行货源地为空,无法保存");
+				return false;
+			}
+			*/
+			if (dw_custom.GetItemString(i, L"UOMCode") == L"")
+			{
+				alert(L"开票单位为空!");
+				return false;
+			}
+
+		}
+
+		/*
+		xstring No = dw_base.GetItemString(1,L"InvoiceNo");
+		if(No != L"")
+		{
+			xml x = ViewObject::RetrieveData(L"/sale/data/GDN/GDNClassifyID",L"InvoiceNo", No);
+			if(x.GetXmlDoc().selectSingleNode(L"data/item/ClassifyID"))
+			if(x.GetXmlDoc().selectSingleNode(L"data/item/CDquantity"))
+			xstring ClassifyIDOne=L"";
+			xstring CDquantityOne=L"";
+			ClassifyIDOne = x.GetXmlDoc().selectSingleNode(L"data/item/ClassifyID").text;
+			CDquantityOne= x.GetXmlDoc().selectSingleNode(L"data/item/CDquantity").text;
+			double CDquantityTwo=CDquantityOne.toInt();
+		}
+		double ttl=0.0;
+		for(i=1;i<=dw_item.GetRowCount();i++)
+		{
+			classfyid = dw_item.GetItemString(i,L"ClassifyID");
+				if(classfyid == ClassifyIDOne)
+				{
+					if(dw_item.GetItemString(i,L"CDQuantity")==L""||dw_item.GetItemString(i,L"CDQuantity")==L"0.00")
+					{
+						alert(L"出运产品第"+i.toString()+L":报关数量为空!");
+						return false;
+					}
+					if(dw_item.GetItemString(i,L"CDAmount")==L""||dw_item.GetItemString(i,L"CDAmount")==L"0.00")
+					{
+						alert(L"出运产品第"+i.toString()+L":报关总价为空!");
+						return false;
+					}
+					double CDQuantity = dw_item.GetItemDouble(i,L"CDQuantity");
+					ttl += CDQuantity;
+				}
+		}
+		if(ttl != CDquantityTwo)
+		{
+			alert(L"报关数量不一致!");
+			return false;
+		}*/
+		return true;
+	}
+
+	bool CheckGW()
+	{
+		int i = 0;
+		double GWS = 0.0;
+		double NWS = 0.0;
+		for (int k = 1; k <= dw_item.GetRowCount(); k++)
+		{
+			double GW = dw_custom.GetItemDouble(k, L"GW");
+			double NW = dw_custom.GetItemDouble(k, L"NW");
+			GWS += (GW).round(2);
+			NWS += (NW).round(2);
+	}
+
+		double GW1 = dw_base.GetItemDouble(1, L"GW");
+		double NW1 = dw_base.GetItemDouble(1, L"NW");
+		if ((NWS).round(2) != (NW1).round(2) || (GWS).round(2) != (GW1).round(2))
+		{
+			alert(L"毛重总量或净总重量不一致,需要核对!");
+			return 0;
+		}
+		return true;
+}
+
+
+	bool LegalQtyCDLine()
+	{
+		xstring ApprovalStatus = dw_base.GetItemString(1, L"ApprovalStatus");
+		trace(L"#######" + ApprovalStatus + L"#######");
+		double NW = 0.0;
+		double NWS = 0.0;
+		if (ApprovalStatus != L"9")
+		{
+			int i = 0;
+			for (int k = 1; k <= dw_custom.GetRowCount(); k++)
+			{
+				xstring LegalUOMCode = dw_custom.GetItemString(k, L"LegalUOMCode");
+				if (LegalUOMCode == L"千克")
+				{
+					xstring ClassifyID = dw_custom.GetItemString(k, L"ClassifyID");
+					xstring ClassifyName = dw_custom.GetItemString(k, L"CustName");
+					xstring GroupNo = dw_custom.GetItemString(k, L"GroupNo");
+					if (GroupNo != L"") ClassifyName += ClassifyName + L"(L" + GroupNo + L")L";
+
+					double LegalQty = dw_custom.GetItemDouble(k, L"LegalQty");
+
+					for (i = 1; i <= dw_item.GetRowCount(); i++)
+					{
+						if (ClassifyID != dw_item.GetItemString(i, L"ClassifyID"))	continue;
+						if (GroupNo != dw_item.GetItemString(i, L"GroupNo"))	continue;
+
+
+						NW = dw_item.GetItemDouble(i, L"NW");
+
+						NWS += NW;
+
+					}
+					trace(L"*****" + NWS.toString() + L"*****" + LegalQty.toString() + L"*****");
+					NWS = NWS - LegalQty;
+
+					if (NWS < 0.0) NWS = 0.0 - NWS;
+					if (NWS >= 1.0)
+					{
+						alert(L"[" + ClassifyName + L"]对应的报关数量不一致!");
+						return 0;
+					}
+				}
+			}
+		}
+		return true;
+	}
+
+
+	bool CheckCDLine()
+	{
+		xstring ApprovalStatus = dw_base.GetItemString(1, L"ApprovalStatus");
+		trace(L"#######" + ApprovalStatus + L"#######");
+		//alert(ApprovalStatus);
+		if (ApprovalStatus != L"9")
+		{
+			int i = 0;
+			for (int k = 1; k <= dw_custom.GetRowCount(); k++)
+			{
+				xstring ClassifyID = dw_custom.GetItemString(k, L"ClassifyID");
+				xstring ClassifyName = dw_custom.GetItemString(k, L"CustName");
+				xstring GroupNo = dw_custom.GetItemString(k, L"GroupNo");
+				if (GroupNo != L"") ClassifyName += ClassifyName + L"(L" + GroupNo + L")L";
+				double VQuantity = dw_custom.GetItemDouble(k, L"Quantity");
+				double VAmount = dw_custom.GetItemDouble(k, L"Amount");
+				double qty = 0.0;
+				double amt = 0.0;
+				double qttl = 0.0;
+				double attl = 0.0;
+				for (i = 1; i <= dw_item.GetRowCount(); i++)
+				{
+					if (ClassifyID != dw_item.GetItemString(i, L"ClassifyID"))	continue;
+					if (GroupNo != dw_item.GetItemString(i, L"GroupNo"))	continue;
+
+					if (dw_item.GetItemDouble(i, L"CDQuantity") == 0.0)
+						qty = dw_item.GetItemDouble(i, L"Quantity");
+					else
+						qty = dw_item.GetItemDouble(i, L"CDQuantity");
+					if (dw_item.GetItemDouble(i, L"CDAmount") == 0.0)
+						amt = dw_item.GetItemDouble(i, L"Amount");
+					else
+						amt = dw_item.GetItemDouble(i, L"CDAmount");
+					qttl += qty;
+					attl += amt;
+				}
+
+				qttl = qttl - VQuantity;
+				attl = attl - VAmount;
+
+				//alert(L"Quantity: "+VQuantity.toString()+L"Amount: "+VAmount.toString()+L" QTTL:"+qttl.toString()+L" ATTL:"+ attl.toString());
+
+				if (qttl < 0.0) qttl = 0.0 - qttl;
+				if (attl < 0.0) attl = 0.0 - attl;
+				if (qttl >= 1.0 || attl >= 1.0)
+				{
+					alert(L"[" + ClassifyName + L"]对应商品请填写开票数量和报关金额\r\n不填写表示开票数量和报关金额与出运数量和金额一致!");
+					return 0;
+				}
+			}
+		}
+		return true;
+	}
+
+	bool validProfit()
+	{
+		double amt = dw_profit.GetItemString(1, L"ProfitAmountEx");
+		if (amt < 0.0)
+		{
+			if (dw_profit.GetItemString(1, L"Note") == L"")
+			{
+				alert(L"利润为负,请在盈亏备注中写明原因!");
+				return false;
+			}
+		}
+		return true;
+	}
+
+	int OnSave()
+	{
+		if (!validClassfyID()) return 1;
+		if (!validProfit()) return 1;
+		if (!CheckCDLine()) return 1;
+		if (!LegalQtyCDLine()) return 1;
+
+
+		DoUpdate(true);
+
+		return 1;
+	}
+
+	int ClearSourcingItem(int nRow)
+	{
+		if (nRow < 1 or nRow > dw_item.GetRowCount()) return 1;
+		xstring GDNLineID = dw_item.GetGuid(nRow);
+		for (int i = dw_source.GetRowCount(); i >= 1; i--)
+		{
+			if (dw_source.GetItemString(i, L"GDNLineID") == GDNLineID)
+				dw_source.DeleteRow(i);
+		}
+		return 1;
+	}
+
+	int RefreshSourcingItem(int nRow, bool clear = true)
+	{
+
+		if (nRow < 1 or nRow > dw_item.GetRowCount()) return 1;
+		xstring GDNLineID = dw_item.GetGuid(nRow);
+		if (clear) ClearSourcingItem(nRow);
+		double ExchangeCostEx = dw_profit.GetItemDouble(1, L"ExchangeCostEx");
+		xml x = xml::Make();
+		x.LoadXml(L"<data/>");
+		KXMLDOMElement e = dw_item.GetRowElement(nRow);
+		KXMLDOMNode n = e.cloneNode(-1);
+		x.GetXmlDoc().documentElement.appendChild(n);
+		n.Release();
+		xstring val = x.GetXml();
+		trace(L"=======L" + val + L"=======L");
+		x.Free();
+
+		xml source = ViewObject::RetrieveData(L"/sale/data/PurchaseOrder/gdn/sourcing/refreshitemex", L"content", val);
+		if (source)
+		{
+			KXMLDOMNodeList items = source.GetXmlDoc().selectNodes(L"data/Item");
+			//trace(L"=======L"+source.GetXml()+L"=======L"); 
+			int len = items.length;
+			int row = 0;
+			for (int i = 0; i < len; i++)
+			{
+				row = dw_source.InsertRow(0);
+				KXMLDOMNode t = items.item(i);
+				//dw_source.SetItemDouble(row,L"Swapthecost",ExchangeCostEx);
+				if (t.selectSingleNode(L"PONo"))dw_source.SetItemString(row, L"PONo", t.selectSingleNode(L"PONo").text);
+				if (t.selectSingleNode(L"POItemID"))dw_source.SetItemString(row, L"POItemID", t.selectSingleNode(L"POItemID").text);
+				if (t.selectSingleNode(L"SOLineID"))dw_source.SetItemString(row, L"SOLineID", t.selectSingleNode(L"SOLineID").text);
+				if (t.selectSingleNode(L"GDNLineID"))dw_source.SetItemString(row, L"GDNLineID", t.selectSingleNode(L"GDNLineID").text);
+
+				if (t.selectSingleNode(L"GDNID"))dw_source.SetItemString(row, L"GDNID", t.selectSingleNode(L"GDNID").text);
+
+				if (t.selectSingleNode(L"GoodsNo"))dw_source.SetItemString(row, L"GoodsNo", t.selectSingleNode(L"GoodsNo").text);
+				if (t.selectSingleNode(L"GDNQuantity"))dw_source.SetItemString(row, L"GDNQuantity", t.selectSingleNode(L"GDNQuantity").text);
+				if (t.selectSingleNode(L"BuyQuantity"))dw_source.SetItemString(row, L"BuyQuantity", t.selectSingleNode(L"BuyQuantity").text);
+				if (t.selectSingleNode(L"CName"))dw_source.SetItemString(row, L"CName", t.selectSingleNode(L"CName").text);
+				if (t.selectSingleNode(L"CustomerItemNo"))dw_source.SetItemString(row, L"CustomerItemNo", t.selectSingleNode(L"CustomerItemNo").text);
+				if (t.selectSingleNode(L"BOMPart"))dw_source.SetItemString(row, L"BOMPart", t.selectSingleNode(L"BOMPart").text);
+				if (t.selectSingleNode(L"ItemID"))dw_source.SetItemString(row, L"ItemID", t.selectSingleNode(L"ItemID").text);
+				if (t.selectSingleNode(L"BuyUnitPrice"))dw_source.SetItemString(row, L"BuyUnitPrice", t.selectSingleNode(L"BuyUnitPrice").text);
+				if (t.selectSingleNode(L"BuyAmount"))dw_source.SetItemString(row, L"BuyAmount", t.selectSingleNode(L"BuyAmount").text);
+				if (t.selectSingleNode(L"SupplierID"))dw_source.SetItemString(row, L"SupplierID", t.selectSingleNode(L"SupplierID").text);
+				if (t.selectSingleNode(L"SupplierID/@_displaystring"))dw_source.SetItemDisplayString(row, L"SupplierID", t.selectSingleNode(L"SupplierID/@_displaystring").text);
+				if (t.selectSingleNode(L"HasVATInvoice"))dw_source.SetItemString(row, L"HasVATInvoice", t.selectSingleNode(L"HasVATInvoice").text);
+				//trace(L"\r\nHasVATInvoice:"+dw_source.GetItemDisplayString(row,L"HasVATInvoice"));
+				if (dw_source.GetItemString(row, L"HasVATInvoice") == L"Y")
+				{
+					if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+					if (t.selectSingleNode(L"VATRefundRate"))dw_source.SetItemString(row, L"VATRefundRate", t.selectSingleNode(L"VATRefundRate").text);
+				}
+
+				if (t.selectSingleNode(L"Amount"))dw_source.SetItemString(row, L"Amount", t.selectSingleNode(L"Amount").text);
+				if (t.selectSingleNode(L"POCreatorID"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID").text);
+				if (t.selectSingleNode(L"POCreatorID/@_displaystring"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID/@_displaystring").text);
+				if (t.selectSingleNode(L"Swapthecost"))dw_source.SetItemString(row, L"Swapthecost", t.selectSingleNode(L"Swapthecost").text);
+				if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+				if (t.selectSingleNode(L"PurcharName"))dw_source.SetItemString(row, L"PurcharID", t.selectSingleNode(L"PurcharName").text);
+				if (t.selectSingleNode(L"PurcharID"))dw_source.SetItemString(row, L"PurcharID", t.selectSingleNode(L"PurcharID").text);
+
+				if (t.selectSingleNode(L"PackUnitPrice"))dw_source.SetItemString(row, L"PackUnitPrice", t.selectSingleNode(L"PackUnitPrice").text);
+
+			}
+
+			PoTotal(nRow);
+			if (clear)
+			{
+				evalPurcharCost();
+				evalTotalCost();
+				evalProfitAmountEx();
+				dw_profit.Redraw();
+			}
+		}
+
+		return 1;
+	}
+
+	int RefreshSourcingItem1(int nRow, bool clear = true)
+	{
+		if (nRow < 1 or nRow > dw_item.GetRowCount()) return 1;
+		xstring GDNLineID = dw_item.GetGuid(nRow);
+		if (clear) ClearSourcingItem(nRow);
+		double ExchangeCostEx = dw_profit.GetItemDouble(1, L"ExchangeCostEx");
+		xml x = xml::Make();
+		x.LoadXml(L"<data/>");
+		KXMLDOMElement e = dw_item.GetRowElement(nRow);
+		KXMLDOMNode n = e.cloneNode(-1);
+		x.GetXmlDoc().documentElement.appendChild(n);
+		n.Release();
+		xstring val = x.GetXml();
+		trace(L"123=======L" + val + L"=======123");
+		x.Free();
+
+		xml source = ViewObject::RetrieveData(L"/sale/data/PurchaseOrder/gdn/sourcing/refreshitemexOne", L"content", val);
+		if (source)
+		{
+			KXMLDOMNodeList items = source.GetXmlDoc().selectNodes(L"data/Item");
+			int len = items.length;
+			int row = 0;
+			for (int i = 0; i < len; i++)
+			{
+				row = dw_source.InsertRow(0);
+				KXMLDOMNode t = items.item(i);
+				//dw_source.SetItemDouble(row,L"Swapthecost",ExchangeCostEx);
+				if (t.selectSingleNode(L"PONo"))dw_source.SetItemString(row, L"PONo", t.selectSingleNode(L"PONo").text);
+				if (t.selectSingleNode(L"POItemID"))dw_source.SetItemString(row, L"POItemID", t.selectSingleNode(L"POItemID").text);
+				if (t.selectSingleNode(L"SOLineID"))dw_source.SetItemString(row, L"SOLineID", t.selectSingleNode(L"SOLineID").text);
+				if (t.selectSingleNode(L"GDNLineID"))dw_source.SetItemString(row, L"GDNLineID", t.selectSingleNode(L"GDNLineID").text);
+
+				if (t.selectSingleNode(L"GDNID"))dw_source.SetItemString(row, L"GDNID", t.selectSingleNode(L"GDNID").text);
+
+				if (t.selectSingleNode(L"GoodsNo"))dw_source.SetItemString(row, L"GoodsNo", t.selectSingleNode(L"GoodsNo").text);
+				if (t.selectSingleNode(L"GDNQuantity"))dw_source.SetItemString(row, L"GDNQuantity", t.selectSingleNode(L"GDNQuantity").text);
+				if (t.selectSingleNode(L"BuyQuantity"))dw_source.SetItemString(row, L"BuyQuantity", t.selectSingleNode(L"BuyQuantity").text);
+				if (t.selectSingleNode(L"CName"))dw_source.SetItemString(row, L"CName", t.selectSingleNode(L"CName").text);
+				if (t.selectSingleNode(L"CustomerItemNo"))dw_source.SetItemString(row, L"CustomerItemNo", t.selectSingleNode(L"CustomerItemNo").text);
+				if (t.selectSingleNode(L"BOMPart"))dw_source.SetItemString(row, L"BOMPart", t.selectSingleNode(L"BOMPart").text);
+				if (t.selectSingleNode(L"ItemID"))dw_source.SetItemString(row, L"ItemID", t.selectSingleNode(L"ItemID").text);
+				if (t.selectSingleNode(L"BuyUnitPrice"))dw_source.SetItemString(row, L"BuyUnitPrice", t.selectSingleNode(L"BuyUnitPrice").text);
+				if (t.selectSingleNode(L"BuyAmount"))dw_source.SetItemString(row, L"BuyAmount", t.selectSingleNode(L"BuyAmount").text);
+				if (t.selectSingleNode(L"SupplierID"))dw_source.SetItemString(row, L"SupplierID", t.selectSingleNode(L"SupplierID").text);
+				if (t.selectSingleNode(L"SupplierID/@_displaystring"))dw_source.SetItemDisplayString(row, L"SupplierID", t.selectSingleNode(L"SupplierID/@_displaystring").text);
+				if (t.selectSingleNode(L"HasVATInvoice"))dw_source.SetItemDisplayString(row, L"HasVATInvoice", t.selectSingleNode(L"HasVATInvoice").text);
+				if (t.selectSingleNode(L"HasVATInvoice"))dw_source.SetItemString(row, L"HasVATInvoice", t.selectSingleNode(L"HasVATInvoice").text);
+				//	if(t.selectSingleNode(L"HSCode"))dw_source.SetItemString(row,L"HSCode",t.selectSingleNode(L"HSCode").text);
+
+				if (dw_source.GetItemString(row, L"HasVATInvoice") == L"Y")
+				{
+					if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+					if (t.selectSingleNode(L"VATRefundRate"))dw_source.SetItemString(row, L"VATRefundRate", t.selectSingleNode(L"VATRefundRate").text);
+				}
+
+				if (t.selectSingleNode(L"Amount"))dw_source.SetItemString(row, L"Amount", t.selectSingleNode(L"Amount").text);
+				if (t.selectSingleNode(L"POCreatorID"))dw_source.SetItemString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID").text);
+				if (t.selectSingleNode(L"POCreatorID/@_displaystring"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID/@_displaystring").text);
+				if (t.selectSingleNode(L"Swapthecost"))dw_source.SetItemString(row, L"Swapthecost", t.selectSingleNode(L"Swapthecost").text);
+				if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+				if (t.selectSingleNode(L"PurcharName"))dw_source.SetItemDisplayString(row, L"PurcharID", t.selectSingleNode(L"PurcharName").text);
+				if (t.selectSingleNode(L"PurcharID"))dw_source.SetItemString(row, L"PurcharID", t.selectSingleNode(L"PurcharID").text);
+
+				if (t.selectSingleNode(L"PackUnitPrice"))dw_source.SetItemString(row, L"PackUnitPrice", t.selectSingleNode(L"PackUnitPrice").text);
+			}
+
+			PoTotal(nRow);
+			if (clear)
+			{
+				evalPurcharCost();
+				evalTotalCost();
+				evalProfitAmountEx();
+				dw_profit.Redraw();
+			}
+		}
+
+		return 1;
+	}
+
+	int RefreshSourcingAllEx()
+	{
+
+		while (dw_source.GetRowCount() > 0) dw_source.DeleteRow(1);
+
+		dw_item.AcceptText();
+		xml xitem = new xml;
+		xitem.setNativePointer(xml::CreateInstance());
+		KXMLDOMDocument xitemdoc = xitem.GetXmlDoc();
+		dw_item.DwUpdateAllToEx(xitemdoc);
+		trace(L"****" + xitem.GetXml() + L"****");
+
+		xml x = ViewObject::RetrieveData(L"/sale/data/PurchaseOrder/gdn/sourcing/refreshitemexOne", L"content", xitem.GetXml());
+		trace(x.GetXml());
+		if (x)
+		{
+			KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+			int len = items.length;
+			int row = 0;
+			for (int i = 0; i < len; i++)
+			{
+				row = dw_source.InsertRow(0);
+				KXMLDOMNode t = items.item(i);
+
+				if (t.selectSingleNode(L"PONo"))dw_source.SetItemString(row, L"PONo", t.selectSingleNode(L"PONo").text);
+				if (t.selectSingleNode(L"POItemID"))dw_source.SetItemString(row, L"POItemID", t.selectSingleNode(L"POItemID").text);
+				if (t.selectSingleNode(L"SOLineID"))dw_source.SetItemString(row, L"SOLineID", t.selectSingleNode(L"SOLineID").text);
+				if (t.selectSingleNode(L"GDNLineID"))dw_source.SetItemString(row, L"GDNLineID", t.selectSingleNode(L"GDNLineID").text);
+
+				if (t.selectSingleNode(L"GDNID"))dw_source.SetItemString(row, L"GDNID", t.selectSingleNode(L"GDNID").text);
+
+				if (t.selectSingleNode(L"GoodsNo"))dw_source.SetItemString(row, L"GoodsNo", t.selectSingleNode(L"GoodsNo").text);
+				if (t.selectSingleNode(L"GDNQuantity"))dw_source.SetItemString(row, L"GDNQuantity", t.selectSingleNode(L"GDNQuantity").text);
+				if (t.selectSingleNode(L"BuyQuantity"))dw_source.SetItemString(row, L"BuyQuantity", t.selectSingleNode(L"BuyQuantity").text);
+				if (t.selectSingleNode(L"CName"))dw_source.SetItemString(row, L"CName", t.selectSingleNode(L"CName").text);
+				if (t.selectSingleNode(L"CustomerItemNo"))dw_source.SetItemString(row, L"CustomerItemNo", t.selectSingleNode(L"CustomerItemNo").text);
+				if (t.selectSingleNode(L"BOMPart"))dw_source.SetItemString(row, L"BOMPart", t.selectSingleNode(L"BOMPart").text);
+				if (t.selectSingleNode(L"ItemID"))dw_source.SetItemString(row, L"ItemID", t.selectSingleNode(L"ItemID").text);
+				if (t.selectSingleNode(L"BuyUnitPrice"))dw_source.SetItemString(row, L"BuyUnitPrice", t.selectSingleNode(L"BuyUnitPrice").text);
+
+				if (t.selectSingleNode(L"BuyAmount"))dw_source.SetItemString(row, L"BuyAmount", t.selectSingleNode(L"BuyAmount").text);
+
+				if (t.selectSingleNode(L"SupplierID"))dw_source.SetItemString(row, L"SupplierID", t.selectSingleNode(L"SupplierID").text);
+				if (t.selectSingleNode(L"SupplierID/@_displaystring"))dw_source.SetItemDisplayString(row, L"SupplierID", t.selectSingleNode(L"SupplierID/@_displaystring").text);
+				if (t.selectSingleNode(L"HasVATInvoice"))dw_source.SetItemDisplayString(row, L"HasVATInvoice", t.selectSingleNode(L"HasVATInvoice").text);
+				if (t.selectSingleNode(L"Amount"))dw_source.SetItemDisplayString(row, L"Amount", t.selectSingleNode(L"Amount").text);
+				if (t.selectSingleNode(L"POCreatorID"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID").text);
+				if (t.selectSingleNode(L"POCreatorID/@_displaystring"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID/@_displaystring").text);
+				if (t.selectSingleNode(L"Swapthecost"))dw_source.SetItemDisplayString(row, L"Swapthecost", t.selectSingleNode(L"Swapthecost").text);
+				if (t.selectSingleNode(L"PurcharName"))dw_source.SetItemDisplayString(row, L"PurcharID", t.selectSingleNode(L"PurcharName").text);
+				if (t.selectSingleNode(L"PurcharID"))dw_source.SetItemString(row, L"PurcharID", t.selectSingleNode(L"PurcharID").text);
+				if (t.selectSingleNode(L"PackUnitPrice"))dw_source.SetItemString(row, L"PackUnitPrice", t.selectSingleNode(L"PackUnitPrice").text);
+				//	if(t.selectSingleNode(L"HSCode"))dw_source.SetItemString(row,L"HSCode",t.selectSingleNode(L"HSCode").text); 
+				if (dw_source.GetItemDisplayString(row, L"HasVATInvoice") == L"Y")
+				{
+					if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+					if (t.selectSingleNode(L"VATRefundRate"))dw_source.SetItemString(row, L"VATRefundRate", t.selectSingleNode(L"VATRefundRate").text);
+				}
+			}
+			evalPurcharCost();
+			evalTotalCost();
+
+			dw_profit.Redraw();
+
+			PoTotal();
+
+			x.Free();
+			evalProfitAmountEx();
+		}
+
+		return 1;
+	}
+
+	int RefreshSourcingAll()
+	{
+		while (dw_source.GetRowCount() > 0) dw_source.DeleteRow(dw_source.GetRowCount());
+
+		xstring No = dw_base.GetItemString(1, L"InvoiceNo");
+		for (int k = 1; k <= dw_item.GetRowCount(); k++)
+		{
+			KXMLDOMElement  e = dw_item.GetRowElement(k);
+			xstring gdnLineID = e.getAttribute(L"guid");
+			xml x = ViewObject::RetrieveData(L"/sale/data/PurchaseOrder/gdn/sourcing/refreshitem", L"InvoiceNo", No, L"GDNLineID", gdnLineID);
+			if (x)
+			{
+				KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+				int len = items.length;
+				int row = 0;
+				for (int i = 0; i < len; i++)
+				{
+					row = dw_source.InsertRow(0);
+					KXMLDOMNode t = items.item(i);
+
+					if (t.selectSingleNode(L"PONo"))dw_source.SetItemString(row, L"PONo", t.selectSingleNode(L"PONo").text);
+					if (t.selectSingleNode(L"POItemID"))dw_source.SetItemString(row, L"POItemID", t.selectSingleNode(L"POItemID").text);
+					if (t.selectSingleNode(L"SOLineID"))dw_source.SetItemString(row, L"SOLineID", t.selectSingleNode(L"SOLineID").text);
+					if (t.selectSingleNode(L"GDNLineID"))dw_source.SetItemString(row, L"GDNLineID", t.selectSingleNode(L"GDNLineID").text);
+
+					if (t.selectSingleNode(L"GDNID"))dw_source.SetItemString(row, L"GDNID", t.selectSingleNode(L"GDNID").text);
+
+					if (t.selectSingleNode(L"GoodsNo"))dw_source.SetItemString(row, L"GoodsNo", t.selectSingleNode(L"GoodsNo").text);
+					if (t.selectSingleNode(L"GDNQuantity"))dw_source.SetItemString(row, L"GDNQuantity", t.selectSingleNode(L"GDNQuantity").text);
+					if (t.selectSingleNode(L"BuyQuantity"))dw_source.SetItemString(row, L"BuyQuantity", t.selectSingleNode(L"BuyQuantity").text);
+					if (t.selectSingleNode(L"CName"))dw_source.SetItemString(row, L"CName", t.selectSingleNode(L"CName").text);
+					if (t.selectSingleNode(L"CustomerItemNo"))dw_source.SetItemString(row, L"CustomerItemNo", t.selectSingleNode(L"CustomerItemNo").text);
+					if (t.selectSingleNode(L"BOMPart"))dw_source.SetItemString(row, L"BOMPart", t.selectSingleNode(L"BOMPart").text);
+					if (t.selectSingleNode(L"ItemID"))dw_source.SetItemString(row, L"ItemID", t.selectSingleNode(L"ItemID").text);
+					if (t.selectSingleNode(L"BuyUnitPrice"))dw_source.SetItemString(row, L"BuyUnitPrice", t.selectSingleNode(L"BuyUnitPrice").text);
+					if (t.selectSingleNode(L"BuyAmount"))dw_source.SetItemString(row, L"BuyAmount", t.selectSingleNode(L"BuyAmount").text);
+					if (t.selectSingleNode(L"SupplierID"))dw_source.SetItemString(row, L"SupplierID", t.selectSingleNode(L"SupplierID").text);
+					if (t.selectSingleNode(L"SupplierID/@_displaystring"))dw_source.SetItemDisplayString(row, L"SupplierID", t.selectSingleNode(L"SupplierID/@_displaystring").text);
+					if (t.selectSingleNode(L"HasVATInvoice"))dw_source.SetItemDisplayString(row, L"HasVATInvoice", t.selectSingleNode(L"HasVATInvoice").text);
+					if (dw_source.GetItemDisplayString(row, L"HasVATInvoice") == L"Y")
+					{
+						if (t.selectSingleNode(L"VATRefundRate"))dw_source.SetItemString(row, L"VATRefundRate", t.selectSingleNode(L"VATRefundRate").text);
+						if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+					}
+					if (t.selectSingleNode(L"Amount"))dw_source.SetItemDisplayString(row, L"Amount", t.selectSingleNode(L"Amount").text);
+					if (t.selectSingleNode(L"POCreatorID"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID").text);
+					if (t.selectSingleNode(L"POCreatorID/@_displaystring"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID/@_displaystring").text);
+					if (t.selectSingleNode(L"Swapthecost"))dw_source.SetItemDisplayString(row, L"Swapthecost", t.selectSingleNode(L"Swapthecost").text);
+				}
+			}
+			evalTotalCost();
+			evalProfitAmountEx();
+			dw_profit.Redraw();
+		}
+
+		return 1;
+	}
+
+	//event
+	int OnDWClick(ref TNotifyEvent evt, int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		xstring value = hdr.data;
+		xstring colname = hdr.colname;
+
+		return 1;
+	}
+
+	int OnProfitItemChanged(ref TNotifyEvent evt, int p)
+	{
+		int HCursor = xutil::SetCursorWait();
+		ref DWNMHDR hdr = cast(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		xstring col = hdr.colname;
+		xstring data = hdr.data;
+
+		if (col == L"DrawbackIntrest" ||
+			col == L"DrawbackIntrest" ||
+			col == L"CustomFee" ||
+			col == L"InspectionFee" ||
+			col == L"PaperCardCopyFee" ||
+			col == L"TransportationFee" ||
+			col == L"StorageFee" ||
+			col == L"PortIncidentalFee" ||
+			col == L"BankFee" ||
+			col == L"RiskPrepareFee" ||
+			col == L"AllocatedFee" ||
+			col == L"ManagementFee" ||
+			col == L"RiskFundAmount" ||
+			col == L"FundsIntrestFee" ||
+			col == L"AgentAmount" ||
+			col == L"AgentTax" ||
+			col == L"OtherFee")
+		{
+			evalTotalCost();
+			evalProfitAmountEx();
+			dw_profit.Redraw();
+		}
+
+		xutil::RestoreCursor(HCursor);
+
+		return 1;
+	}
+
+	int OnCustomItemChanged(ref TNotifyEvent evt, int p)
+	{
+		int HCursor = xutil::SetCursorWait();
+		ref DWNMHDR hdr = cast(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		xstring col = hdr.colname;
+		xstring data = hdr.data;
+		if (col == L"AdjustParam")
+		{
+			double rate = 1.0;
+			if (data != L"") rate = data.toDouble();
+			double amt = dw_custom.GetItemDouble(row, L"AmountEx");
+			dw_custom.SetItemDouble(row, L"Amount", amt * rate);
+			double quantity = dw_custom.GetItemDouble(row, L"Quantity");
+			double price = amt * rate / quantity;
+			dw_custom.SetItemDouble(row, L"UnitPrice", price);
+			dw_custom.Redraw();
+		}
+		if (col == L"UnitPrice" || col == L"Quantity")
+		{
+			double UnitPrice = dw_custom.GetItemDouble(row, L"UnitPrice");
+			double Quantity = dw_custom.GetItemDouble(row, L"Quantity");
+			double Amount = UnitPrice * Quantity;
+			dw_custom.SetItemDouble(row, L"Amount", Amount);
+			dw_custom.Redraw();
+		}
+		return 1;
+	}
+
+	int CalcDraftAmount()
+	{
+
+		double amt = dw_base.GetItemDouble(1, L"Amount");//4646
+		double camt = dw_base.GetItemDouble(1, L"CommissionAmount");//46
+		amt = amt - camt;
+		double damt = dw_base.GetItemDouble(1, L"DiscountAmount");//46
+		amt = amt - damt;
+		double exterm = dw_base.GetItemDouble(1, L"Cost");//46
+		xstring moreless = dw_base.GetItemString(1, L"CostMoreLess");//-1
+		if (dw_base.GetItemString(1, L"Cost") != L"")
+		{
+			if (moreless == L"-1")
+				amt = amt - exterm;
+			else
+				amt = amt + exterm;
+		}
+		dw_base.SetItemDouble(1, L"DraftAmount", amt);
+		return 1;
+	}
+
+	int OnBaseItemChanged(ref TNotifyEvent evt, int p)
+	{
+
+		int HCursor = xutil::SetCursorWait();
+		ref DWNMHDR hdr = cast(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		xstring col = hdr.colname;
+		xstring data = hdr.data;
+
+		if (col == L"CustomerID")
+		{
+			SetCustomerHabit(data);
+			return 1;
+		}
+		if (col == L"InvoiceNo")
+		{
+			dw_profit.SetItemString(1, L"InvoiceNo", data);
+			dw_base.Redraw();
+		}
+		else if (col == L"Amount")
+		{
+			double amt = dw_base.GetItemDouble(1, L"Amount");
+			if (dw_base.GetItemString(1, L"CommissionRate") != L"")
+			{
+				double commrate1 = dw_base.GetItemDouble(1, L"CommissionRate");
+				dw_base.SetItemDouble(1, L"CommissionAmount", amt * commrate1 / 100.0);
+			}
+			if (dw_base.GetItemString(1, L"PrivateCommissionRate") != L"")
+			{
+				double fcommrate1 = dw_base.GetItemDouble(1, L"PrivateCommissionRate");
+				dw_base.SetItemDouble(1, L"PrivateCommissionAmount", amt * fcommrate1 / 100.0);
+			}
+			if (dw_base.GetItemString(1, L"DiscountRate") != L"")
+			{
+				double drate1 = dw_base.GetItemDouble(1, L"DiscountRate");
+				dw_base.SetItemDouble(1, L"DiscountAmount", amt * drate1 / 100.0);
+			}
+			CalcDraftAmount();
+			CalcProfit();
+
+			dw_base.Redraw();
+		}
+
+		if (col == L"Cost" || col == L"CostMoreLess")
+		{
+			CalcDraftAmount();
+			CalcProfit();
+			dw_base.Redraw();
+		}
+
+		if (col == L"CommissionAmount" || col == L"PrivateCommissionAmount" || col == L"DiscountAmount")
+		{
+			CalcDraftAmount();
+			CalcProfit();
+
+			dw_base.Redraw();
+		}
+		if (col == L"GoodsSource")
+		{
+
+			xstring s = dw_base.GetItemString(1, L"GoodsSource");
+			xml supplier_x = ViewObject::RetrieveData(L"/sale/data/expense3/view/FindByOriginName", L"OriginName", s);
+			if (supplier_x)
+			{
+				KXMLDOMNode o = supplier_x.GetXmlDoc().selectSingleNode(L"Item");
+				xstring GoodsSource = o.selectSingleNode(L"OriginName").text;
+				xstring OriginID = o.selectSingleNode(L"OriginID").text;
+				xstring sname = OriginID + L" " + s;
+				xstring name = o.selectSingleNode(L"name").text;
+				if (sname == name) {
+					dw_base.SetItemDisplayString(1, L"GoodsSource", name);
+					dw_base.SetItemString(1, L"GoodsSource", name);
+				}
+			}
+			else if (!supplier_x) {
+				dw_base.SetItemDisplayString(1, L"GoodsSource", L"");
+				dw_base.SetItemString(1, L"GoodsSource", L"");
+
+			}
+			dw_base.Redraw();
+		}
+		if (col == L"CommissionRate")
+		{
+			if (data == L"")
+			{
+				dw_base.SetItemString(1, L"CommissionAmount", L"");
+			}
+			else
+			{
+				double commrate = data.toDouble();
+				dw_base.SetItemDouble(1, L"CommissionAmount",
+					dw_base.GetItemDouble(1, L"Amount") * commrate / 100.0);
+			}
+			CalcDraftAmount();
+			CalcProfit();
+			dw_base.Redraw();
+		}
+		if (col == L"DiscountRate")
+		{
+			if (data == L"")
+			{
+				dw_base.SetItemString(1, L"DiscountAmount", L"");
+			}
+			else
+			{
+				double DiscountRate = data.toDouble();
+				dw_base.SetItemDouble(1, L"DiscountAmount",
+					dw_base.GetItemDouble(1, L"Amount") * DiscountRate / 100.0);
+			}
+			CalcDraftAmount();
+			CalcProfit();
+			dw_base.Redraw();
+		}
+		else if (col == L"PrivateCommissionRate")
+		{
+			if (data == L"")
+			{
+				dw_base.SetItemString(1, L"PrivateCommissionAmount", L"");
+			}
+			else
+			{
+				double fcommrate = data.toDouble();
+				dw_base.SetItemDouble(1, L"PrivateCommissionAmount",
+					dw_base.GetItemDouble(1, L"Amount") * fcommrate / 100.0);
+			}
+			CalcProfit();
+			dw_base.Redraw();
+		}
+		else if (col == L"PaymentTerm")
+		{
+			if (data.find(L"L/C") >= 0)
+			{
+				dw_base.SetColumnProp(L"LCNo", L"cellprotect", L"0");
+				dw_base.SetColumnProp(L"LCSignDate", L"cellprotect", L"0");
+				dw_base.SetColumnProp(L"LCSigner", L"cellprotect", L"0");
+				dw_base.SetColumnProp(L"LCReceiveDate", L"cellprotect", L"0");
+				dw_base.SetColumnProp(L"LCBank", L"cellprotect", L"0");
+				dw_base.Redraw();
+			}
+			else
+			{
+				dw_base.SetColumnProp(L"LCNo", L"cellprotect", L"1");
+				dw_base.SetColumnProp(L"LCSignDate", L"cellprotect", L"1");
+				dw_base.SetColumnProp(L"LCSigner", L"cellprotect", L"1");
+				dw_base.SetColumnProp(L"LCReceiveDate", L"cellprotect", L"1");
+				dw_base.SetColumnProp(L"LCBank", L"cellprotect", L"1");
+				dw_base.Redraw();
+			}
+		}
+		else if (col == L"ETD")
+		{
+			xstring ETD = dw_base.GetItemString(1, L"ETD");
+			xstring exchangeRate = L"";
+			if (ETD != L"")
+			{
+				trace(ETD);
+				xml x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/paramEx", L"ETD", ETD);
+				if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+					exchangeRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+				if (exchangeRate != L"")
+				{
+					dw_profit.SetItemString(1, L"ExchangeRate", exchangeRate);
+				}
+				else
+				{
+					xml xp = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"cryrate");
+					if (xp.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+						exchangeRate = xp.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+					dw_profit.SetItemString(1, L"ExchangeRate", exchangeRate);
+
+				}
+				evalManagementFee();
+				evalRiskFundAmount();
+			}
+
+			dw_profit.Redraw();
+		}
+		return 1;
+	}
+
+	double CalcVolumePkg(int row)
+	{
+		xstring ll = dw_item.GetItemString(row, L"PackageL");
+		xstring lw = dw_item.GetItemString(row, L"PackageW");
+		xstring lh = dw_item.GetItemString(row, L"PackageH");
+		double pl = dw_item.GetItemDouble(row, L"PackageL");
+		double pw = dw_item.GetItemDouble(row, L"PackageW");
+		double ph = dw_item.GetItemDouble(row, L"PackageH");
+		if (ll != L"" || lh != L"" || lw != L"")
+		{
+			if (lh == L"") ph = 1.0;
+			if (lw == L"") pw = 1.0;
+			if (ll == L"") pl = 1.0;
+			return  pl * ph * pw / 1000000.0;
+		}
+		else
+			return 0.0;
+	}
+
+	int OnSetRetax(int row)
+	{
+		if (row < 1) return 1;
+
+		xstring ClassifyID = dw_item.GetItemString(row, L"ClassifyID");
+		xstring refundRate = L"*";
+		trace(L"\r\n--------" + ClassifyID + L"-----------");
+		xml x = ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyinfo", L"ClassifyID", ClassifyID);
+		if (x)
+		{
+			KXMLDOMNode o = x.GetXmlDoc().selectSingleNode(L"data/Item");
+			if (o)
+			{
+				refundRate = o.selectSingleNode(L"VATRefundRate").text;
+			}
+		}
+		if (refundRate != L"*")
+		{
+			xstring GDNLineID = dw_item.GetGuid(row);
+			for (int i = dw_source.GetRowCount(); i >= 1; i--)
+			{
+				if (dw_source.GetItemString(i, L"GDNLineID") == GDNLineID)
+				{
+					if (dw_source.GetItemString(i, L"HasVATInvoice") == L"Y")
+					{
+						dw_source.SetItemString(i, L"VATRefundRate", refundRate);
+						dw_source.ItemChangeTo(i, L"VATRefundRate", refundRate);
+					}
+				}
+			}
+		}
+		return 1;
+	}
+
+	int SetCDUnitPrice(int row, xstring col, xstring data)
+	{
+		if (data == L"")
+		{
+			dw_item.SetItemDisplayString(row, col, L"");
+			dw_item.SetItemString(row, L"CDUnitPrice", L"");
+			dw_item.SetItemDisplayString(row, L"CDUnitPrice", L"");
+		}
+		else
+		{
+			double d3 = dw_item.GetItemDouble(row, L"CDAmount");
+			double d4 = dw_item.GetItemDouble(row, L"CDQuantity");
+			double d6 = 0.0;
+			if (d4 == 0.0) dw_item.GetItemDouble(row, L"Quantity");
+			if (d4 != 0.0)
+			{
+				double d5 = d3 / d4;
+				d5 = d5.round(4);
+				if (d3 <= 0.0 && d4 <= 0.0)
+				{
+					//trace(L"--------1111-----------");
+					dw_item.SetItemDouble(row, L"CDUnitPrice", d6);
+				}
+				else
+				{
+					dw_item.SetItemDouble(row, L"CDUnitPrice", d5);
+				}
+				dw_item.Redraw();
+			}
+		}
+		return 1;
+	}
+
+	int OnItemChanged(ref TNotifyEvent evt, int p)
+	{
+		//if(datareading) return 0;
+		int HCursor = xutil::SetCursorWait();
+		ref DWNMHDR hdr = cast(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		xstring col = hdr.colname;
+		xstring data = hdr.data;
+
+		if (col == L"ClassifyID")
+		{
+			OnSetRetax(row);
+			CalcProfit();
+			return 1;
+		}
+		if (col == L"Quantity" || col == L"PackingRate")
+		{
+			//件数
+			double dqty = dw_item.GetItemDouble(row, L"Quantity");
+			xstring spackingrate = dw_item.GetItemString(row, L"PackingRate");
+			int ipack = caclPacking(dqty, spackingrate);
+			dw_item.ItemChangeTo(row, L"Packages", ipack.toString());
+			if (col == L"Quantity")
+			{
+				if (!datareading)
+				{
+					calcTotal();
+					RefreshSourcingItem1(row);
+					CalcProfit();
+					//RefreshSourcingAllEx();
+				}
+			}
+			dw_item.Redraw();
+		}
+		if (col == L"Packages")
+		{
+			double packages = dw_item.GetItemDouble(row, L"Packages");
+			double nwpkg = dw_item.GetItemDouble(row, L"NWPerPkg");
+			double gwpkg = dw_item.GetItemDouble(row, L"GWPerPkg");
+			double UnitCommPrice = dw_item.GetItemDouble(row, L"UnitCommPrice");
+			double Quantity2 = dw_item.GetItemDouble(row, L"Quantity");
+			double MiddlemanAmount = dw_item.GetItemDouble(row, L"MiddlemanAmount");
+
+			double nw = nwpkg * packages;
+			double gw = gwpkg * packages;
+			double rw = UnitCommPrice * Quantity2;
+			double MiddlemanAmountRate = MiddlemanAmount * Quantity2;
+
+			double pv2 = CalcVolumePkg(row);
+			dw_item.SetItemDouble(row, L"VolumePerPkg", pv2);
+			double ctns2 = dw_item.GetItemDouble(row, L"Packages");
+			double svol2 = pv2 * ctns2;
+			dw_item.SetItemDouble(row, L"Volume", svol2.round(2));
+
+			dw_item.SetItemDouble(row, L"NW", nw);
+			dw_item.SetItemDouble(row, L"GW", gw);
+			dw_item.SetItemDouble(row, L"ResearchCommissionRate", rw);
+			dw_item.SetItemDouble(row, L"MiddlemanAmountRate", MiddlemanAmountRate);
+			dw_item.Redraw();
+			calcTotal();
+
+		}
+		if (col == L"NWPerPkg" || col == L"MiddlemanAmount" || col == L"GWPerPkg" || col == L"MiddlemanAmountRate" || col == L"ResearchCommissionRate" || col == L"Quantity" || col == L"UnitCommPrice")
+		{
+			double packages1 = dw_item.GetItemDouble(row, L"Packages");
+			double UnitCommPrice1 = dw_item.GetItemDouble(row, L"UnitCommPrice");
+			double nwpkg1 = dw_item.GetItemDouble(row, L"NWPerPkg");
+			double gwpkg1 = dw_item.GetItemDouble(row, L"GWPerPkg");
+			double Quantity1 = dw_item.GetItemDouble(row, L"Quantity");
+			double MiddlemanAmount1 = dw_item.GetItemDouble(row, L"MiddlemanAmount");
+
+			double nw1 = nwpkg1 * packages1;
+			double gw1 = gwpkg1 * packages1;
+			double rw1 = UnitCommPrice1 * Quantity1;
+			double MiddlemanAmountRate1 = MiddlemanAmount1 * Quantity1;
+
+			dw_item.SetItemDouble(row, L"NW", nw1);
+			dw_item.SetItemDouble(row, L"GW", gw1);
+			dw_item.SetItemDouble(row, L"ResearchCommissionRate", rw1);
+			dw_item.SetItemDouble(row, L"MiddlemanAmountRate", MiddlemanAmountRate1);
+
+			double NWS = 0.0;
+			double GWS = 0.0;
+			double RWS = 0.0;
+			double MAS = 0.0;
+			for (int i = 1; i <= dw_item.GetRowCount(); ++i)
+			{
+				double NW = dw_item.GetItemDouble(i, L"NW");
+				NWS += NW;
+				double GW = dw_item.GetItemDouble(i, L"GW");
+				GWS += GW;
+				double RW = dw_item.GetItemDouble(i, L"ResearchCommissionRate");
+				RWS += RW;
+				double MA = dw_item.GetItemDouble(i, L"MiddlemanAmountRate");
+				MAS += MA;
+			}
+			dw_base.SetItemDouble(1, L"NW", NWS);
+			dw_base.SetItemDouble(1, L"GW", GWS);
+			dw_base.SetItemDouble(1, L"ResearchCommissionRate", RWS);
+
+			dw_item.Redraw();
+		}
+		if (col == L"PackageL" || col == L"PackageW" || col == L"PackageH")
+		{
+			double pv = CalcVolumePkg(row);
+			dw_item.SetItemDouble(row, L"VolumePerPkg", pv);
+			double ctns = dw_item.GetItemDouble(row, L"Packages");
+			double svol = pv * ctns;
+			//trace(svol.toString() +L"******"+svol.round(2));
+
+			dw_item.SetItemDouble(row, L"Volume", svol.round(2));
+			double Volumes = 0.0;
+			for (int roww = 1; roww <= dw_item.GetRowCount(); ++roww)
+			{
+				double Volume = dw_item.GetItemDouble(roww, L"Volume");
+				Volumes += Volume.round(2);
+			}
+			dw_base.SetItemDouble(1, L"Volume", Volumes.round(2));
+			dw_item.Redraw();
+		}
+		if (col == L"VolumePerPkg")
+		{
+			double pv1 = CalcVolumePkg(row);
+			double ctns1 = dw_item.GetItemDouble(row, L"Packages");
+			double svol1 = pv1 * ctns1;
+			dw_item.SetItemDouble(row, L"Volume", svol1);
+			dw_item.Redraw();
+		}
+		if (col == L"Quantity" || col == L"UnitPrice")
+		{
+			if (!datareading)
+			{
+				double d1 = dw_item.GetItemDouble(row, L"Quantity");
+				double d2 = dw_item.GetItemDouble(row, L"UnitPrice");
+				double d = d1 * d2;
+				d = d.round(2);
+				dw_item.SetItemDouble(row, L"Amount", d);
+
+				calcTotal();
+				CalcProfit();
+			}
+		}
+		if (col == L"CDAmount" || col == L"CDQuantity")
+		{
+			SetCDUnitPrice(row, col, data);
+		}
+
+		xutil::RestoreCursor(HCursor);
+
+		return 1;
+	}
+
+
+	int GDNSourcePoTotal()
+	{
+		double Amount_s = 0.0;
+		double  Vol_s = 0.0;
+		double  Vol_A = 2.0;
+		for (int row = 1; row <= dw_source.GetRowCount(); ++row)
+		{
+			for (int k = 1; k <= dw_item.GetRowCount(); ++k) {
+				//double UnitPrice = dw_source.GetItemDouble(row,L"UnitPrice");
+				KXMLDOMElement  e = dw_item.GetRowElement(k);
+				xstring GDNLineID = e.getAttribute(L"guid");
+				double GDNSourceAmount = dw_source.GetItemDouble(row, L"BuyAmount");
+				double GDNItemAmount = dw_item.GetItemDouble(k, L"Amount");
+				xstring POGDNLineID = dw_source.GetItemString(row, L"GDNLineID");
+				if (GDNLineID == POGDNLineID) {
+					Amount_s += GDNSourceAmount;
+				}
+
+			}
+			Vol_s = Amount_s / GDNItemAmount;
+			dw_source.SetItemDouble(row, L"Swapthecost", Vol_s);
+		}
+		return 1;
+	}
+
+	int OnItemChangedEx(ref TNotifyEvent evt, int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		xstring colname = hdr.colname;
+		xstring value = hdr.data;
+
+		if (colname == L"VATRefundRate")
+		{
+			//double price1      = dw_source.GetItemDouble(hdr.row,L"BuyUnitPrice");
+			//double quantity1 = dw_source.GetItemDouble(hdr.row,L"BuyQuantity");
+			double amount1 = dw_source.GetItemDouble(hdr.row, L"BuyAmount");
+			double VATRefundRate = dw_source.GetItemDouble(hdr.row, L"VATRefundRate");
+			//dw_source.SetItemDouble(hdr.row,L"RefundAmount", price1 * quantity1 / 1.13 * VATRefundRate/100);
+			dw_source.SetItemDouble(hdr.row, L"RefundAmount", amount1 / 1.13 * VATRefundRate / 100);
+			evalDrawbackEx();
+			evalTotalCost();
+			evalProfitAmountEx();
+		}
+
+		if (colname == L"BuyUnitPrice" || colname == L"BuyQuantity" || colname == L"PackUnitPrice") //读取最近订单信息
+		{
+			double price = dw_source.GetItemDouble(hdr.row, L"BuyUnitPrice");
+			double quantity = dw_source.GetItemDouble(hdr.row, L"BuyQuantity");
+			double Amount = dw_source.GetItemDouble(hdr.row, L"Amount");
+			double PackUnitPrice = dw_source.GetItemDouble(hdr.row, L"PackUnitPrice");
+			dw_source.SetItemDouble(hdr.row, L"BuyAmount", price * quantity + PackUnitPrice);
+		}
+		if (colname == L"BuyUnitPrice" || colname == L"BuyQuantity" || colname == L"PackUnitPrice" || colname == L"BuyAmount")
+		{
+			if (dw_source.GetItemString(hdr.row, L"VATRefundRate") != L"")
+			{
+				double amount2 = dw_source.GetItemDouble(hdr.row, L"BuyAmount");
+				double VATRefundRate2 = dw_source.GetItemDouble(hdr.row, L"VATRefundRate");
+				dw_source.SetItemDouble(hdr.row, L"RefundAmount", amount2 / 1.13 * VATRefundRate2 / 100);
+			}
+			CalcProfit();
+		}
+		return 1;
+	}
+
+
+	int OnAskDataBase(ref TNotifyEvent evt, int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+
+		xstring x = hdr.colname;
+		if (x == L"userSalespersonID")
+		{
+			xstring sSalespersonID = dw_base.GetItemString(1, L"SalespersonID");
+			hdr.data = sSalespersonID;
+		}
+		return 1;
+	}
+
+	int OnBillNoteDoubleClicked(ref TNotifyEvent evt, int p)
+	{
+		ref DWNMHDR  hdr = evt.pnmh;
+		xstring colname = hdr.colname;
+		int row = hdr.row;
+		if (colname == L"Content")
+		{
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			xstring str = dw_billnote.GetItemString(row, colname);
+			arg.AddArg(L"value", str);
+			openUrl(L"/sale/view/view.dlg/xpage/memo/edit/new", arg.getNativePointer());
+			xstring comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"xmOK")
+			{
+				xstring value = arg.GetArgString(L"value");
+				dw_billnote.SetItemString(row, colname, value);
+				dw_billnote.Redraw();
+			}
+		}
+		return 1;
+	}
+
+	int OnPrint()
+	{
+		CheckCDLine();
+		CheckGW();
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"EntityName", L"GDN3", L"");
+		arg.AddArg(L"EntityID", InvoiceID, L"");
+		arg.AddArg(L"EntityNo", dw_base.GetItemString(1, L"InvoiceNo"), L"");
+		int p = arg.ptr_native_;
+		openUrl(L"/sale/view/view.base/xpage/Template/PrintViewEx", p);
+		return 1;
+	}
+
+	int OnMakeSumPack()
+	{
+		double Quantity_s = 0.0;
+		int Packages_s = 0.0;
+		double GW_s = 0.0;
+		double NW_s = 0.0;
+		double Amount_s = 0.0;
+		double Vol_s = 0.0;
+
+		for (int row = 1; row <= dw_item.GetRowCount(); ++row)
+		{
+			double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+			int Packages = dw_item.GetItemDouble(row, L"Packages").toInt();
+			double GW = dw_item.GetItemDouble(row, L"GW");
+			double NW = dw_item.GetItemDouble(row, L"NW");
+			double Amount = dw_item.GetItemDouble(row, L"Amount");
+			double Vol = dw_item.GetItemDouble(row, L"Volume");
+
+			Quantity_s += Quantity;
+			Packages_s += Packages;
+			GW_s += GW;
+			NW_s += NW;
+			Amount_s += Amount;
+			Vol_s += Vol;
+		}
+
+		return 1;
+	}
+
+	int OnMakeContainer()
+	{
+		int cnt = dw_fcl.GetRowCount();
+		for (int k = 1; k <= cnt; k++)
+		{
+			dw_fcl.SetItemDouble(k, L"Quantity", 0.0);
+			dw_fcl.SetItemDouble(k, L"GW", 0.0);
+			dw_fcl.SetItemDouble(k, L"NW", 0.0);
+			dw_fcl.SetItemString(k, L"Packages", L"0");
+			dw_fcl.SetItemDouble(k, L"Volume", 0.0);
+			dw_fcl.SetItemString(k, L"UseFlag", L"0");
+			dw_fcl.SetItemDouble(k, L"Amount", 0.0);
+		}
+
+		for (int row = 1; row <= dw_item.GetRowCount(); ++row)
+		{
+			xstring ContainerNo = dw_item.GetItemString(row, L"ContainerNo");
+			double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+			int Packages = dw_item.GetItemInt(row, L"Packages");
+			double GW = dw_item.GetItemDouble(row, L"GW");
+			double NW = dw_item.GetItemDouble(row, L"NW");
+			double Amount = dw_item.GetItemDouble(row, L"Amount");
+			double Vol = dw_item.GetItemDouble(row, L"Volume");
+
+			int i = 1;
+			for (i = 1; i <= dw_fcl.GetRowCount(); i++)
+			{
+				if (dw_fcl.GetItemString(i, L"ContainerNo") == ContainerNo)break;
+			}
+			if (i > dw_fcl.GetRowCount())
+			{
+				dw_fcl.InsertRow(0);
+				i = dw_fcl.GetRowCount();
+
+				dw_fcl.SetItemString(i, L"ContainerNo", ContainerNo);
+				dw_fcl.SetItemString(i, L"GDNID", dw_base.GetGuid(1));
+			}
+
+			dw_fcl.SetItemString(i, L"UseFlag", L"1");
+
+			double val;
+			val = dw_fcl.GetItemDouble(i, L"Amount");
+			val += Amount;
+			dw_fcl.SetItemDouble(i, L"Amount", val);
+
+			val = dw_fcl.GetItemDouble(i, L"Quantity");
+			val += Quantity;
+			dw_fcl.SetItemDouble(i, L"Quantity", val);
+
+			val = dw_fcl.GetItemDouble(i, L"GW");
+			val += GW;
+			dw_fcl.SetItemDouble(i, L"GW", val);
+
+			val = dw_fcl.GetItemDouble(i, L"NW");
+			val += NW;
+			dw_fcl.SetItemDouble(i, L"NW", val);
+
+			int nval = dw_fcl.GetItemDouble(i, L"Packages");
+			nval += Packages;
+			dw_fcl.SetItemInt(i, L"Packages", nval);
+
+			val = dw_fcl.GetItemDouble(i, L"Volume");
+			val += Vol;
+			dw_fcl.SetItemDouble(i, L"Volume", val);
+
+		}
+		dw_fcl.Redraw();
+
+		for (int m = cnt; m >= 1; m--)
+		{
+			if (dw_fcl.GetItemString(m, L"UseFlag") == L"0")
+				dw_fcl.DeleteRow(m);
+		}
+
+		return 1;
+	}
+
+	int OnMakeCustom()
+	{
+		int HCursor = xutil::SetCursorWait();
+		dw_custom.AcceptText();
+		int cnt = dw_custom.GetRowCount();
+		bool cdelement = false;
+		for (int k = 1; k <= cnt; k++)
+		{
+			dw_custom.SetItemString(k, L"Quantity", L"");
+			dw_custom.SetItemString(k, L"Packages", L"");
+			dw_custom.SetItemString(k, L"GW", L"");
+			dw_custom.SetItemString(k, L"NW", L"");
+			dw_custom.SetItemString(k, L"Amount", L"");
+			dw_custom.SetItemString(k, L"AmountEx", L"");
+			dw_custom.SetItemString(k, L"VATRate", L"");
+			dw_custom.SetItemString(k, L"VATRefundRate", L"");
+			dw_custom.SetItemString(k, L"Volume", L"");
+			dw_custom.SetItemString(k, L"UnitPrice", L"");
+			dw_custom.SetItemString(k, L"UOMCode", L"");
+			dw_custom.SetItemString(k, L"KOPCode", L"");
+			dw_custom.SetItemString(k, L"UseFlag", L"0");
+			dw_custom.SetItemString(k, L"AmountEx", L"");
+			dw_custom.SetItemString(k, L"CurrencyCode", L"");
+			dw_custom.SetItemString(k, L"LineNo", L"");
+		}
+
+		xstring CurrencyCode = dw_base.GetItemString(1, L"CurrencyCode");
+		for (int row = 1; row <= dw_item.GetRowCount(); ++row)
+		{
+			xstring ClassifyID = dw_item.GetItemString(row, L"ClassifyID");
+			xstring name = dw_item.GetItemDisplayString(row, L"ClassifyID");
+			double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+			xstring GroupNo = dw_item.GetItemString(row, L"GroupNo");
+			int Packages = dw_item.GetItemInt(row, L"Packages");
+			double GW = dw_item.GetItemDouble(row, L"GW");
+			double NW = dw_item.GetItemDouble(row, L"NW");
+			double Amount = dw_item.GetItemDouble(row, L"Amount");
+			xstring VATRate = dw_item.GetItemString(row, L"VATRate");
+			xstring VATRefundRate = dw_item.GetItemString(row, L"VATRefundRate");
+			double Vol = dw_item.GetItemDouble(row, L"Volume");
+			xstring UnitPrice = dw_item.GetItemString(row, L"UnitPrice");
+			xstring UOMCode = dw_item.GetItemString(row, L"UOMCode");
+			xstring KOPCode = dw_item.GetItemString(row, L"KOPCode");
+
+			int i = 1;
+			bool bAdd = false;
+			for (i = 1; i <= dw_custom.GetRowCount(); i++)
+			{
+				if (dw_custom.GetItemString(i, L"ClassifyID") == ClassifyID && dw_custom.GetItemString(i, L"GroupNo") == GroupNo)
+					break;
+			}
+			if (i > dw_custom.GetRowCount())
+			{
+				dw_custom.InsertRow(0);
+				i = dw_custom.GetRowCount();
+				dw_custom.SetItemString(i, L"ClassifyID", ClassifyID);
+				bAdd = true;
+			}
+			dw_custom.SetItemString(i, L"UseFlag", L"1");
+			dw_custom.SetItemString(i, L"CustName", name);
+			dw_custom.SetItemString(i, L"GroupNo", GroupNo);
+
+			double val = 0;
+			double samt = 0;
+			val = dw_custom.GetItemDouble(i, L"Amount");
+			val += Amount;
+			samt = val;
+			dw_custom.SetItemDouble(i, L"Amount", val);
+			dw_custom.SetItemDouble(i, L"AmountEx", val);
+			dw_custom.SetItemString(i, L"VATRates", VATRate);
+			dw_custom.SetItemString(i, L"VATRefundRate", VATRefundRate);
+			dw_custom.SetItemString(i, L"UOMCode", UOMCode);
+			dw_custom.SetItemString(i, L"KOPCode", KOPCode);
+			dw_custom.SetItemDisplayString(i, L"UOMCode", dw_item.GetItemDisplayString(row, L"UOMCode"));
+			dw_custom.SetItemDisplayString(i, L"KOPCode", dw_item.GetItemDisplayString(row, L"KOPCode"));
+			dw_custom.SetItemString(i, L"CurrencyCode", CurrencyCode);
+
+
+
+			val = dw_custom.GetItemDouble(i, L"Quantity");
+			val += Quantity.round(3);
+			double sqty = 0;
+			sqty = val;
+			dw_custom.SetItemDouble(i, L"Quantity", val);
+
+			val = dw_custom.GetItemDouble(i, L"GW");
+			val += GW.round(3);
+			dw_custom.SetItemDouble(i, L"GW", val);
+
+			val = dw_custom.GetItemDouble(i, L"NW");
+			val += NW.round(3);
+			dw_custom.SetItemDouble(i, L"NW", val);
+
+			int nval = dw_custom.GetItemDouble(i, L"Packages");
+			nval += Packages;
+			dw_custom.SetItemInt(i, L"Packages", nval);
+
+			val = dw_custom.GetItemDouble(i, L"Volume");
+			val += Vol;
+			dw_custom.SetItemDouble(i, L"Volume", val);
+
+			double price = samt / sqty;
+			dw_custom.SetItemDouble(i, L"UnitPrice", price);
+
+
+			xml x = ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyinfo", L"ClassifyID", ClassifyID);
+
+			if (x)
+			{
+				KXMLDOMNode o = x.GetXmlDoc().selectSingleNode(L"data/Item");
+				if (o)
+				{
+					if (o.selectSingleNode(L"VATRates"))
+					{
+						xstring str1 = o.selectSingleNode(L"VATRates").text;
+						if (str1.find(L",L") >= 0) str1 = str1.left(str1.find(L",L"));
+						dw_custom.SetItemString(i, L"VATRates", str1);
+					}
+					if (o.selectSingleNode(L"CustEName"))
+					{
+						dw_custom.SetItemString(i, L"CustEName", o.selectSingleNode(L"CustEName").text);
+					}
+					if (o.selectSingleNode(L"SupervisionRuler"))
+					{
+						dw_custom.SetItemString(i, L"SupervisionRuler", o.selectSingleNode(L"SupervisionRuler").text);
+					}
+					if (o.selectSingleNode(L"VATRefundRate"))
+					{
+						dw_custom.SetItemString(i, L"VATRefundRate", o.selectSingleNode(L"VATRefundRate").text);
+					}
+					if (o.selectSingleNode(L"HSCode"))
+					{
+						xstring hscode = o.selectSingleNode(L"HSCode").text;
+						if (dw_custom.GetItemString(i, L"CustName").find(L"[") >= 0)
+						{
+							xstring str = dw_custom.GetItemString(i, L"CustName");
+
+							str = str.left(str.find(L"["));
+							dw_custom.SetItemString(i, L"CustName", str);
+						}
+						dw_custom.SetItemString(i, L"HSCode", hscode);
+					}
+					if (o.selectSingleNode(L"UOM"))
+					{
+						dw_custom.SetItemString(i, L"LegalUOMCode", o.selectSingleNode(L"UOM").text);
+						dw_customex.SetItemString(i, L"LegalUOMCode", o.selectSingleNode(L"UOM").text);
+						xstring uom = o.selectSingleNode(L"UOM").text;
+						if (uom == L"千克")
+						{
+							dw_custom.SetItemString(i, L"LegalQty", dw_custom.GetItemString(i, L"NW"));
+						}
+						else
+						{
+							dw_custom.SetItemString(i, L"LegalQty", dw_custom.GetItemString(i, L"Quantity"));
+						}
+					}
+				}
+			}
+			/*
+			xml x= ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyinfo",L"ClassifyID",ClassifyID);
+			if(x)
+			{
+				KXMLDOMNode o = x.GetXmlDoc().selectSingleNode(L"data/Item");
+				if(o)
+				{
+					if(o.selectSingleNode(L"VATRates"))
+					{
+						xstring str1 = o.selectSingleNode(L"VATRates").text;
+						if(str1.find(L",L")) str1 = str1.left(str1.find(L",L"));
+						dw_custom.SetItemString(i,L"VATRates",str1);
+					}
+					if(o.selectSingleNode(L"CustEName"))
+					{
+						dw_custom.SetItemString(i,L"CustEName",o.selectSingleNode(L"CustEName").text);
+					}dw_base.SetItemString(1,L"Amount")
+					if(o.selectSingleNode(L"VATRefundRate"))
+					{
+						dw_custom.SetItemString(i,L"VATRefundRate",o.selectSingleNode(L"VATRefundRate").text);
+					}
+					if(o.selectSingleNode(L"SupervisionRuler"))
+					{
+						dw_custom.SetItemString(i,L"SupervisionRuler",o.selectSingleNode(L"SupervisionRuler").text);
+					}
+					if(o.selectSingleNode(L"HSCode"))
+					{
+						xstring hscode = o.selectSingleNode(L"HSCode").text;
+						if(dw_custom.GetItemString(i,L"CustName").find(L"["+hscode)>=0)
+						{
+							xstring str = dw_custom.GetItemString(i,L"CustName");
+							str = str.left(str.find(L"[" + hscode));
+							dw_custom.SetItemString(i,L"CustName",str);
+						}
+						dw_custom.SetItemString(i,L"HSCode",hscode);
+					}
+					if(o.selectSingleNode(L"UOM"))
+					{
+						dw_custom.SetItemString(i,L"LegalUOMCode",o.selectSingleNode(L"UOM").text);
+						dw_customex.SetItemString(i,L"LegalUOMCode",o.selectSingleNode(L"UOM").text);
+						xstring uom = o.selectSingleNode(L"UOM").text;
+						if(uom==L"千克")
+						{
+							dw_custom.SetItemString(i,L"LegalQty",dw_custom.GetItemString(i,L"NW"));
+						}
+						else
+						{
+							dw_custom.SetItemString(i,L"LegalQty",dw_custom.GetItemString(i,L"Quantity"));
+						}
+					}
+				}
+			}*/
+			if (bAdd)
+			{
+				AddCDElement(i);
+				cdelement = true;
+			}
+		}
+		for (int m = cnt; m >= 1; m--)
+		{
+			if (dw_custom.GetItemString(m, L"UseFlag") == L"0")
+			{
+				if (dw_custom.GetItemString(i, L"ClassifyID") != L"")
+					DeleteCDElement(dw_custom.GetItemString(i, L"ClassifyID"));
+				dw_custom.DeleteRow(m);
+			}
+		}
+		xutil::RestoreCursor(HCursor);
+		dw_custom.Redraw();
+		if (cdelement)alert(L"请更新报关要素!");
+
+		return 1;
+	}
+
+	int AddCDElement(int cdrow)
+	{
+		xstring ClassifyID = dw_custom.GetItemString(cdrow, L"ClassifyID");
+		xml x = ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyelement", L"ClassifyID", ClassifyID);
+		if (x)
+		{
+			KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"/GDN/CDElement");
+			int lens = items.length;
+			for (int k = 0; k < lens; k++)
+			{
+				int row = dw_cdelement.InsertRow(0);
+				KXMLDOMElement e = items.item(k);
+
+				KXMLDOMElement e1 = dw_custom.GetRowElement(cdrow);
+				xstring CDLineID = e1.getAttribute(L"guid");
+				if (CDLineID == L"")
+				{
+					e1.SetAttribute(L"guid", ViewObject::GetGuid());
+					CDLineID = e1.getAttribute(L"guid");
+				}
+				dw_cdelement.SetItemString(row, L"CDLineID", CDLineID);
+				dw_cdelement.SetItemString(row, L"GDNID", dw_base.GetGuid(1));
+				if (e.selectSingleNode(L"HSCode")) dw_cdelement.SetItemString(row, L"HSCode", e.selectSingleNode(L"HSCode").text);
+				if (e.selectSingleNode(L"SeqNo")) dw_cdelement.SetItemString(row, L"SeqNo", e.selectSingleNode(L"SeqNo").text);
+				if (e.selectSingleNode(L"EleName")) dw_cdelement.SetItemString(row, L"EleName", e.selectSingleNode(L"EleName").text);
+				if (e.selectSingleNode(L"EleContent")) dw_cdelement.SetItemString(row, L"EleContent", e.selectSingleNode(L"EleContent").text);
+				if (e.selectSingleNode(L"CustomName")) dw_cdelement.SetItemString(row, L"CustomName", e.selectSingleNode(L"CustomName").text);
+				if (e.selectSingleNode(L"ClassifyID")) dw_cdelement.SetItemString(row, L"ClassifyID", e.selectSingleNode(L"ClassifyID").text);
+				/*if(e.selectSingleNode(L"EleName"))
+				{
+					if(e.selectSingleNode(L"EleName").text==L"品牌类型")
+					{
+						if(dw_base.GetItemString(1,L"POL")==L"NINGBO")
+						{
+							dw_cdelement.SetItemString(row,L"EleContent",L"境内自主品牌");
+						}else
+						{
+							dw_cdelement.SetItemString(row,L"EleContent",L"无品牌");
+						}
+					}
+					else if(e.selectSingleNode(L"EleName").text==L"出口享惠情况")
+					{i
+						xstring country = dw_base.GetItemString(1,L"FinalCountry");
+						if(country==L"")
+						{
+							dw_cdelement.SetItemString(row,L"EleContent",L"不享受");
+						}
+						else if(L"601,127,322,129,415,337,133,107,119,122,103,434,106,331,134,136,105,132,609,111,112,141,412,143".find(country)>=0)
+						{
+							dw_cdelement.SetItemString(row,L"EleContent",L"享受");
+						}else
+						{
+							dw_cdelement.SetItemString(row,L"EleContent",L"不享受");
+						}
+					}
+				}*/
+			}
+		}
+		return 1;
+	}
+
+	int DeleteCDElement(xstring ClassifyID)
+	{
+		for (int m = dw_cdelement.GetRowCount(); m >= 1; m--)
+		{
+			if (dw_cdelement.GetItemString(m, L"ClassifyID") == ClassifyID)dw_cdelement.DeleteRow(m);
+		}
+		return 1;
+	}
+
+	//生成
+	int OnMakeCustom1()
+	{
+		if (dw_cdelement.GetRowCount() > 0)
+		{
+			if (win32::MessageBox(GetHWND(), L"更新报关信息会使报关要素无效,是否继续?", L"提示", 1) == 2)
+				return 1;
+		}
+		int cnt = dw_custom.GetRowCount();
+		for (int k = 1; k <= cnt; k++) dw_custom.DeleteRow(1);
+
+		cnt = dw_customex.GetRowCount();
+		for (int m = 1; m <= cnt; m++) dw_customex.DeleteRow(1);
+
+		xstring CurrencyCode = dw_base.GetItemString(1, L"CurrencyCode");
+
+		for (int row = 1; row <= dw_item.GetRowCount(); ++row)
+		{
+			xstring ClassifyID = dw_item.GetItemString(row, L"ClassifyID");
+			xstring GroupNo = dw_item.GetItemString(row, L"GroupNo");
+			xstring name = dw_item.GetItemDisplayString(row, L"ClassifyID");
+			double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+			int Packages = dw_item.GetItemInt(row, L"Packages");
+			double GW = dw_item.GetItemDouble(row, L"GW");
+			double NW = dw_item.GetItemDouble(row, L"NW");
+			double Amount = dw_item.GetItemDouble(row, L"Amount");
+			xstring VATRate = dw_item.GetItemString(row, L"VATRate");
+			xstring VATRefundRate = dw_item.GetItemString(row, L"VATRefundRate");
+			double Vol = dw_item.GetItemDouble(row, L"Volume");
+			xstring UnitPrice = dw_item.GetItemString(row, L"UnitPrice");
+			xstring UOMCode = dw_item.GetItemString(row, L"UOMCode");
+			xstring KOPCode = dw_item.GetItemString(row, L"KOPCode");
+
+
+			int i = 1;
+			for (i = 1; i <= dw_custom.GetRowCount(); i++)
+			{
+				if (dw_custom.GetItemString(i, L"ClassifyID") == ClassifyID && dw_custom.GetItemString(i, L"GroupNo") == GroupNo)
+					break;
+			}
+			if (i > dw_custom.GetRowCount())
+			{
+				dw_custom.InsertRow(0);
+				dw_customex.InsertRow(0);
+				i = dw_custom.GetRowCount();
+			}
+
+			dw_custom.SetItemString(i, L"ClassifyID", ClassifyID);
+			dw_customex.SetItemString(i, L"ClassifyID", ClassifyID);
+			dw_custom.SetItemString(i, L"CustName", name);
+			dw_customex.SetItemString(i, L"CustName", name);
+			dw_custom.SetItemString(i, L"GroupNo", GroupNo);
+
+			double val = 0;
+			double samt = 0;
+			val = dw_custom.GetItemDouble(i, L"Amount");
+			val += Amount;
+			samt = val;
+			dw_custom.SetItemDouble(i, L"Amount", val);
+			dw_custom.SetItemDouble(i, L"AmountEx", val);
+			dw_custom.SetItemString(i, L"VATRate", VATRate);
+			dw_custom.SetItemString(i, L"VATRefundRate", VATRefundRate);
+			dw_custom.SetItemString(i, L"UOMCode", UOMCode);
+			dw_custom.SetItemString(i, L"KOPCode", KOPCode);
+			dw_custom.SetItemDisplayString(i, L"UOMCode",
+				dw_item.GetItemDisplayString(row, L"UOMCode"));
+			dw_custom.SetItemDisplayString(i, L"KOPCode",
+				dw_item.GetItemDisplayString(row, L"KOPCode"));
+			dw_custom.SetItemString(i, L"CurrencyCode", CurrencyCode);
+
+			dw_customex.SetItemDouble(i, L"Amount", val);
+			dw_customex.SetItemDouble(i, L"AmountEx", val);
+			dw_customex.SetItemString(i, L"VATRate", VATRate);
+			dw_customex.SetItemString(i, L"VATRefundRate", VATRefundRate);
+			dw_customex.SetItemString(i, L"UOMCode", UOMCode);
+			dw_customex.SetItemString(i, L"KOPCode", KOPCode);
+			dw_customex.SetItemDisplayString(i, L"UOMCode",
+				dw_item.GetItemDisplayString(row, L"UOMCode"));
+			dw_customex.SetItemDisplayString(i, L"KOPCode",
+				dw_item.GetItemDisplayString(row, L"KOPCode"));
+			dw_customex.SetItemString(i, L"CurrencyCode", CurrencyCode);
+
+			val = dw_custom.GetItemDouble(i, L"Quantity");
+			val += Quantity;
+			double sqty = 0;
+			sqty = val;
+			dw_custom.SetItemDouble(i, L"Quantity", val);
+			dw_customex.SetItemDouble(i, L"Quantity", val);
+
+			val = dw_custom.GetItemDouble(i, L"GW");
+			val += GW;
+			dw_custom.SetItemDouble(i, L"GW", val);
+			dw_customex.SetItemDouble(i, L"GW", val);
+
+			val = dw_custom.GetItemDouble(i, L"NW");
+			val += NW;
+			dw_custom.SetItemDouble(i, L"NW", val);
+			dw_customex.SetItemDouble(i, L"NW", val);
+
+			int nval = dw_custom.GetItemDouble(i, L"Packages");
+			nval += Packages;
+			dw_custom.SetItemInt(i, L"Packages", nval);
+			dw_customex.SetItemInt(i, L"Packages", nval);
+
+			val = dw_custom.GetItemDouble(i, L"Volume");
+			val += Vol;
+			dw_custom.SetItemDouble(i, L"Volume", val);
+			dw_customex.SetItemDouble(i, L"Volume", val);
+
+			double price = samt / sqty;
+			dw_custom.SetItemDouble(i, L"UnitPrice", price);
+			dw_customex.SetItemDouble(i, L"UnitPrice", price);
+			xml x = ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyinfoex", L"ClassifyID", ClassifyID);
+			if (x)
+			{
+				KXMLDOMNode o = x.GetXmlDoc().selectSingleNode(L"data/Item");
+				if (o)
+				{
+					if (o.selectSingleNode(L"VATRates"))
+					{
+						xstring str1 = o.selectSingleNode(L"VATRates").text;
+						if (str1.find(L",L")) str1 = str1.left(str1.find(L",L"));
+						dw_custom.SetItemString(i, L"VATRates", str1);
+						dw_customex.SetItemString(i, L"VATRates", str1);
+					}
+					if (o.selectSingleNode(L"CustEName"))
+					{
+						dw_custom.SetItemString(i, L"CustEName", o.selectSingleNode(L"CustEName").text);
+						dw_customex.SetItemString(i, L"CustEName", o.selectSingleNode(L"CustEName").text);
+					}
+					if (o.selectSingleNode(L"SupervisionRuler"))
+					{
+						dw_custom.SetItemString(i, L"SupervisionRuler", o.selectSingleNode(L"SupervisionRuler").text);
+					}
+					if (o.selectSingleNode(L"VATRefundRate"))
+					{
+						dw_custom.SetItemString(i, L"VATRefundRate", o.selectSingleNode(L"VATRefundRate").text);
+						dw_customex.SetItemString(i, L"VATRefundRate", o.selectSingleNode(L"VATRefundRate").text);
+					}
+					if (o.selectSingleNode(L"HSCode"))
+					{
+						xstring hscode = o.selectSingleNode(L"HSCode").text;
+						if (dw_custom.GetItemString(i, L"CustName").find(L"[" + hscode) >= 0)
+						{
+							xstring str = dw_custom.GetItemString(i, L"CustName");
+
+							str = str.left(str.find(L"[" + hscode));
+							dw_custom.SetItemString(i, L"CustName", str);
+							dw_customex.SetItemString(i, L"CustName", str);
+						}
+						dw_custom.SetItemString(i, L"HSCode", hscode);
+						dw_customex.SetItemString(i, L"HSCode", hscode);
+					}
+					if (o.selectSingleNode(L"UOM"))
+					{
+						dw_custom.SetItemString(i, L"LegalUOMCode", o.selectSingleNode(L"UOM").text);
+						dw_customex.SetItemString(i, L"LegalUOMCode", o.selectSingleNode(L"UOM").text);
+						xstring uom = o.selectSingleNode(L"UOM").text;
+						if (uom == L"千克")
+						{
+							dw_custom.SetItemString(i, L"LegalQty", dw_custom.GetItemString(i, L"NW"));
+							dw_customex.SetItemString(i, L"LegalQty", dw_custom.GetItemString(i, L"NW"));
+						}
+						else
+						{
+							dw_custom.SetItemString(i, L"LegalQty", dw_custom.GetItemString(i, L"Quantity"));
+							dw_customex.SetItemString(i, L"LegalQty", dw_custom.GetItemString(i, L"Quantity"));
+						}
+					}
+				}
+			}
+		}
+
+		alert(L"报关数据已刷新,请更新报关要素!");
+
+
+
+		return 1;
+	}
+
+	int OnAddSourcingItem()
+	{
+		xaserverarg arg = GDNView::MakeArg();
+		arg.AddArg(L"InvoiceNo", dw_base.GetItemString(1, L"InvoiceNo"));
+		int p = arg;
+		OpenWindow(L"dev:xpage[select.item.po.vx]", p);
+		xstring str = arg.GetArgString(L"items");
+		if (str != L"")
+		{
+			xml x;
+			
+			x.LoadXml(str);
+			KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+			int len = items.length;
+			int row = 0;
+			for (int i = 0; i < len; i++)
+			{
+				if (i == 0 && dw_source.GetRowCount() > 0 && dw_source.GetItemString(dw_source.GetRowCount(), L"GoodsNo") == L"")
+				{
+					row = dw_source.GetRowCount();
+				}
+				else
+				{
+					row = dw_source.InsertRow(0);
+				}
+				KXMLDOMNode t = items.item(i);
+
+				if (t.selectSingleNode(L"PONo"))dw_source.SetItemString(row, L"PONo", t.selectSingleNode(L"PONo").text);
+				if (t.selectSingleNode(L"POItemID"))dw_source.SetItemString(row, L"POItemID", t.selectSingleNode(L"POItemID").text);
+				if (t.selectSingleNode(L"SOLineID"))dw_source.SetItemString(row, L"SOLineID", t.selectSingleNode(L"SOLineID").text);
+				if (t.selectSingleNode(L"GDNLineID"))dw_source.SetItemString(row, L"GDNLineID", t.selectSingleNode(L"GDNLineID").text);
+
+				if (t.selectSingleNode(L"GDNID"))dw_source.SetItemString(row, L"GDNID", t.selectSingleNode(L"GDNID").text);
+
+				if (t.selectSingleNode(L"GoodsNo"))dw_source.SetItemString(row, L"GoodsNo", t.selectSingleNode(L"GoodsNo").text);
+				if (t.selectSingleNode(L"GDNQuantity"))dw_source.SetItemString(row, L"GDNQuantity", t.selectSingleNode(L"GDNQuantity").text);
+				if (t.selectSingleNode(L"BuyQuantity"))dw_source.SetItemString(row, L"BuyQuantity", t.selectSingleNode(L"BuyQuantity").text);
+				if (t.selectSingleNode(L"CName"))dw_source.SetItemString(row, L"CName", t.selectSingleNode(L"CName").text);
+				if (t.selectSingleNode(L"CustomerItemNo"))dw_source.SetItemString(row, L"CustomerItemNo", t.selectSingleNode(L"CustomerItemNo").text);
+				if (t.selectSingleNode(L"BOMPart"))dw_source.SetItemString(row, L"BOMPart", t.selectSingleNode(L"BOMPart").text);
+				if (t.selectSingleNode(L"ItemID"))dw_source.SetItemString(row, L"ItemID", t.selectSingleNode(L"ItemID").text);
+				if (t.selectSingleNode(L"BuyUnitPrice"))dw_source.SetItemString(row, L"BuyUnitPrice", t.selectSingleNode(L"BuyUnitPrice").text);
+				if (t.selectSingleNode(L"BuyAmount"))dw_source.SetItemString(row, L"BuyAmount", t.selectSingleNode(L"BuyAmount").text);
+				if (t.selectSingleNode(L"SupplierID"))dw_source.SetItemString(row, L"SupplierID", t.selectSingleNode(L"POSupplierID").text);
+				if (t.selectSingleNode(L"SupplierID/@_displaystring"))dw_source.SetItemDisplayString(row, L"SupplierID", t.selectSingleNode(L"SupplierID/@_displaystring").text);
+				if (t.selectSingleNode(L"HasVATInvoice"))dw_source.SetItemDisplayString(row, L"HasVATInvoice", t.selectSingleNode(L"HasVATInvoice").text);
+				if (t.selectSingleNode(L"VATRefundRate"))dw_source.SetItemDisplayString(row, L"VATRefundRate", t.selectSingleNode(L"VATRefundRate").text);
+				if (t.selectSingleNode(L"Amount"))dw_source.SetItemDisplayString(row, L"Amount", t.selectSingleNode(L"Amount").text);
+				if (t.selectSingleNode(L"POCreatorID"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID").text);
+				if (t.selectSingleNode(L"POCreatorID/@_displaystring"))dw_source.SetItemDisplayString(row, L"POCreatorID", t.selectSingleNode(L"POCreatorID/@_displaystring").text);
+				if (t.selectSingleNode(L"Swapthecost"))dw_source.SetItemDisplayString(row, L"Swapthecost", t.selectSingleNode(L"Swapthecost").text);
+				if (t.selectSingleNode(L"RefundAmount"))dw_source.SetItemDisplayString(row, L"RefundAmount", t.selectSingleNode(L"RefundAmount").text);
+				//if(t.selectSingleNode(L"HSCode"))dw_source.SetItemDisplayString(row,L"HSCode",t.selectSingleNode(L"HSCode").text);
+			}
+			CalcProfit();
+		}
+		return 1;
+	}
+
+	int OnDeleteSourceingItem()
+	{
+		dw_source.DeleteRow(0);
+		evalPurcharCost();
+		evalTotalCost();
+		CalcProfit();
+		return 1;
+	}
+
+	int OnAddGDNItems(xstring str)
+	{
+
+		if (str != L"")
+		{
+			trace(str);
+			xml x;
+			
+			x.LoadXml(str);
+			KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+			int len = items.length;
+			int row = 0;
+			xstring SONos = dw_base.GetItemString(1, L"SONos");
+			xstring OrderNos = dw_base.GetItemString(1, L"OrderNos");
+			xstring OperationTipss = dw_base.GetItemString(1, L"OperationTips");
+			xstring FrontMarkss = dw_base.GetItemString(1, L"Mark");
+
+			datareading = true;
+			double costs = 0.0;
+			double PrivateCommissionAmount = 0.0;
+			double PrivateCommissionAmountEx = 0.0;
+			for (int i = 0; i < len; i++)
+			{
+				if (i == 0 && dw_item.GetRowCount() > 0 && dw_item.GetItemString(dw_item.GetRowCount(), L"GoodsNo") == L"")
+				{
+					row = dw_item.GetRowCount();
+				}
+				else
+				{
+					row = dw_item.InsertRow(0);
+				}
+				KXMLDOMNode t = items.item(i);
+				dw_item.SetItemString(row, L"SeqNo", (row * 10).toString());
+				dw_item.SetItemString(row, L"GDNID", dw_base.GetGuid(1));
+				double cost = t.selectSingleNode(L"Cost").text.toDouble();
+
+				if (t.selectSingleNode(L"SONo"))
+				{
+					xstring SONo = t.selectSingleNode(L"SONo").text;
+					if (SONos == L"")
+					{
+						SONos = SONo;
+						costs = cost;
+					}
+					else if (SONos.find(SONo) < 0)
+					{
+						SONos += L",L" + SONo;
+						costs += cost;
+					}
+				}
+
+				if (t.selectSingleNode(L"CustomerPONo"))
+				{
+					xstring CustomerPONo = t.selectSingleNode(L"CustomerPONo").text;
+					if (OrderNos == L"")
+						OrderNos = CustomerPONo;
+					else if (OrderNos.find(CustomerPONo) < 0) OrderNos += L",L" + CustomerPONo;
+				}
+
+				if (t.selectSingleNode(L"OperationTips"))
+				{
+					xstring OperationTips = t.selectSingleNode(L"OperationTips").text;
+					if (OperationTipss == L"")
+						OperationTipss = OperationTips;
+					else if (OperationTipss.find(OperationTips) < 0) OperationTipss += L"\r\n" + OperationTips;
+				}
+
+				if (t.selectSingleNode(L"FrontMarks"))
+				{
+					xstring FrontMarks = t.selectSingleNode(L"FrontMarks").text;
+					if (FrontMarkss == L"")
+						FrontMarkss = FrontMarks;
+					else if (FrontMarkss.find(FrontMarks) < 0) FrontMarkss += L"\r\n" + FrontMarks;
+				}
+
+				//int cost = t.selectSingleNode(L"Cost").text.toDouble();
+				//dw_base.SetItemString(1,L"Cost",t.selectSingleNode(L"Cost").text);
+				if (t.selectSingleNode(L"SalespersonID/@_displaystring"))dw_base.SetItemDisplayString(1, L"SalespersonID", t.selectSingleNode(L"SalespersonID/@_displaystring").text);
+				if (t.selectSingleNode(L"SalespersonID"))dw_base.SetItemString(1, L"SalespersonID", t.selectSingleNode(L"SalespersonID").text);
+				if (t.selectSingleNode(L"CustomerID"))dw_base.SetItemString(1, L"CustomerID", t.selectSingleNode(L"CustomerID").text);
+				if (t.selectSingleNode(L"CustomerID/@_displaystring"))dw_base.SetItemDisplayString(1, L"CustomerID", t.selectSingleNode(L"CustomerID/@_displaystring").text);
+
+				//trace(L"*****************");
+				if (t.selectSingleNode(L"LCNo"))dw_base.SetItemString(1, L"LCNo", t.selectSingleNode(L"LCNo").text);
+				if (t.selectSingleNode(L"LCSignDate"))dw_base.SetItemString(1, L"LCSignDate", t.selectSingleNode(L"LCSignDate").text);
+				if (t.selectSingleNode(L"LCReceiveDate"))dw_base.SetItemString(1, L"LCReceiveDate", t.selectSingleNode(L"LCReceiveDate").text);
+				if (t.selectSingleNode(L"DraftPayer"))dw_base.SetItemString(1, L"DraftPayer", t.selectSingleNode(L"DraftPayer").text);
+				if (t.selectSingleNode(L"NegotiatingBank"))dw_base.SetItemString(1, L"NegotiatingBank", t.selectSingleNode(L"NegotiatingBank").text);
+				if (t.selectSingleNode(L"DraftTerm"))dw_base.SetItemString(1, L"DraftTerm", t.selectSingleNode(L"DraftTerm").text);
+				if (t.selectSingleNode(L"CustomerDesc"))dw_base.SetItemString(1, L"CustomerDesc", t.selectSingleNode(L"CustomerDesc").text);
+				if (t.selectSingleNode(L"LCSigner"))dw_base.SetItemString(1, L"LCSigner", t.selectSingleNode(L"LCSigner").text);
+				if (t.selectSingleNode(L"Consignee"))dw_base.SetItemString(1, L"Consignee", t.selectSingleNode(L"Consignee").text);
+				if (t.selectSingleNode(L"NotifyParty"))dw_base.SetItemString(1, L"NotifyParty", t.selectSingleNode(L"NotifyParty").text);
+				if (t.selectSingleNode(L"Country"))dw_base.SetItemString(1, L"Country", t.selectSingleNode(L"Country").text);
+				if (t.selectSingleNode(L"CountryName"))dw_base.SetItemDisplayString(1, L"Country", t.selectSingleNode(L"CountryName").text);
+				if (t.selectSingleNode(L"TradeType"))dw_base.SetItemString(1, L"TradeType", t.selectSingleNode(L"TradeType").text);
+				if (t.selectSingleNode(L"TradeTypeName"))dw_base.SetItemDisplayString(1, L"TradeType", t.selectSingleNode(L"TradeTypeName").text);
+				if (t.selectSingleNode(L"TransportMode"))dw_base.SetItemString(1, L"TransportMode", t.selectSingleNode(L"TransportMode").text);
+				if (t.selectSingleNode(L"TransportModeName"))dw_base.SetItemDisplayString(1, L"TransportMode", t.selectSingleNode(L"TransportModeName").text);
+				if (t.selectSingleNode(L"POL"))dw_base.SetItemString(1, L"POL", t.selectSingleNode(L"POL").text);
+				if (t.selectSingleNode(L"PriceTerm"))dw_base.SetItemString(1, L"PriceTerm", t.selectSingleNode(L"PriceTerm").text);
+				if (t.selectSingleNode(L"PaymentTerm"))dw_base.SetItemString(1, L"PaymentTerm", t.selectSingleNode(L"PaymentTerm").text);
+				if (t.selectSingleNode(L"PaymentTermMore"))dw_base.SetItemString(1, L"PaymentTermMore", t.selectSingleNode(L"PaymentTermMore").text);
+
+
+				if (t.selectSingleNode(L"SOLineID"))dw_item.SetItemString(row, L"SOLineID", t.selectSingleNode(L"SOLineID").text);
+				if (t.selectSingleNode(L"GoodsNo"))dw_item.SetItemString(row, L"GoodsNo", t.selectSingleNode(L"GoodsNo").text);
+				if (t.selectSingleNode(L"EName"))dw_item.SetItemString(row, L"EName", t.selectSingleNode(L"EName").text);
+				if (t.selectSingleNode(L"CustomerItemNo"))dw_item.SetItemString(row, L"CustomerItemNo", t.selectSingleNode(L"CustomerItemNo").text);
+				if (t.selectSingleNode(L"ItemID"))dw_item.SetItemString(row, L"ItemID", t.selectSingleNode(L"ItemID").text);
+				if (t.selectSingleNode(L"UnitPrice"))dw_item.SetItemString(row, L"UnitPrice", t.selectSingleNode(L"UnitPrice").text);
+				if (t.selectSingleNode(L"GDNLineID"))dw_item.SetItemString(row, L"GDNLineID", t.selectSingleNode(L"GDNLineID").text);
+
+				if (t.selectSingleNode(L"SONo"))dw_item.SetItemString(row, L"SONo", t.selectSingleNode(L"SONo").text);
+
+				if (t.selectSingleNode(L"SOLineNo"))dw_item.SetItemString(row, L"SOLineNo", t.selectSingleNode(L"SOLineNo").text);
+				if (t.selectSingleNode(L"CustomerPONo"))dw_item.SetItemString(row, L"PONo", t.selectSingleNode(L"CustomerPONo").text);
+				if (t.selectSingleNode(L"GroupNo"))dw_item.SetItemString(row, L"PONo", t.selectSingleNode(L"GroupNo").text);
+
+				if (t.selectSingleNode(L"SKUNo"))dw_item.SetItemString(row, L"SKUNo", t.selectSingleNode(L"SKUNo").text);
+				if (t.selectSingleNode(L"Packing"))dw_item.SetItemString(row, L"Packing", t.selectSingleNode(L"Packing").text);
+				if (t.selectSingleNode(L"InnerQty"))dw_item.SetItemString(row, L"InnerQty", t.selectSingleNode(L"InnerQty").text);
+				if (t.selectSingleNode(L"PackingRate"))dw_item.SetItemString(row, L"PackingRate", t.selectSingleNode(L"PackingRate").text);
+				if (t.selectSingleNode(L"Brand"))dw_item.SetItemString(row, L"Brand", t.selectSingleNode(L"Brand").text);
+				if (t.selectSingleNode(L"UOMCode"))dw_item.SetItemString(row, L"UOMCode", t.selectSingleNode(L"UOMCode").text);
+				if (t.selectSingleNode(L"UOMCode/@_displaystring"))dw_item.SetItemDisplayString(row, L"UOMCode", t.selectSingleNode(L"UOMCode/@_displaystring").text);
+
+				if (t.selectSingleNode(L"KOPCode"))dw_item.SetItemString(row, L"KOPCode", t.selectSingleNode(L"KOPCode").text);
+				if (t.selectSingleNode(L"KOPCode/@_displaystring"))dw_item.SetItemDisplayString(row, L"KOPCode", t.selectSingleNode(L"KOPCode/@_displaystring").text);
+				if (t.selectSingleNode(L"PackageL"))dw_item.SetItemString(row, L"PackageL", t.selectSingleNode(L"PackageL").text);
+				if (t.selectSingleNode(L"PackageW"))dw_item.SetItemString(row, L"PackageW", t.selectSingleNode(L"PackageW").text);
+				if (t.selectSingleNode(L"PackageH"))dw_item.SetItemString(row, L"PackageH", t.selectSingleNode(L"PackageH").text);
+				if (t.selectSingleNode(L"GWPerPkg"))dw_item.SetItemString(row, L"GWPerPkg", t.selectSingleNode(L"GWPerPkg").text);
+				if (t.selectSingleNode(L"NWPerPkg"))dw_item.SetItemString(row, L"NWPerPkg", t.selectSingleNode(L"NWPerPkg").text);
+				if (t.selectSingleNode(L"ClassifyID"))dw_item.SetItemString(row, L"ClassifyID", t.selectSingleNode(L"ClassifyID").text);
+				if (t.selectSingleNode(L"ClassifyID/@_displaystring"))dw_item.SetItemDisplayString(row, L"ClassifyID", t.selectSingleNode(L"ClassifyID/@_displaystring").text);
+				if (t.selectSingleNode(L"Remarks"))dw_item.SetItemString(row, L"Remarks", t.selectSingleNode(L"Remarks").text);
+
+				if (t.selectSingleNode(L"UnitCommPrice"))dw_item.SetItemString(row, L"UnitCommPrice", t.selectSingleNode(L"UnitCommPrice").text);
+				if (t.selectSingleNode(L"MiddlemanAmount"))dw_item.SetItemString(row, L"MiddlemanAmount", t.selectSingleNode(L"MiddlemanAmount").text);
+				if (t.selectSingleNode(L"ShipQuantity"))
+					dw_item.ItemChangeTo(row, L"Quantity", t.selectSingleNode(L"ShipQuantity").text);
+				else
+					if (t.selectSingleNode(L"Quantity"))dw_item.ItemChangeTo(row, L"Quantity", t.selectSingleNode(L"Quantity").text);
+
+				double d1 = dw_item.GetItemDouble(row, L"Quantity");
+				double d2 = dw_item.GetItemDouble(row, L"UnitPrice");
+				double d = d1 * d2;
+				d = d.round(2);
+				dw_item.SetItemDouble(row, L"Amount", d);
+
+				double UnitCommPrice = dw_item.GetItemDouble(row, L"UnitCommPrice");
+				double MiddlemanAmount = dw_item.GetItemDouble(row, L"MiddlemanAmount");
+				double Quantity = dw_item.GetItemDouble(row, L"Quantity");
+				double ResearchCommission = UnitCommPrice * Quantity;
+				double MiddlemanAmountRate = MiddlemanAmount * Quantity;
+				PrivateCommissionAmount += ResearchCommission;
+				PrivateCommissionAmountEx += MiddlemanAmountRate;
+				//if(t.selectSingleNode(L"Amount"))dw_item.SetItemString(row,L"Amount",t.selectSingleNode(L"Amount").text);
+
+
+				RefreshSourcingItem(row, false);
+
+			}
+
+			dw_base.SetItemString(1, L"SONos", SONos);
+			dw_base.SetItemString(1, L"OrderNos", OrderNos);
+			dw_base.SetItemString(1, L"OperationTips", OperationTipss);
+			dw_base.SetItemString(1, L"Mark", FrontMarkss);
+
+			double CostEx = dw_base.GetItemDouble(1, L"Cost");
+			if (CostEx == 0 || CostEx == L"")
+			{
+				if (costs >= 0) {
+					dw_base.SetItemString(1, L"CostMoreLess", L"1");
+					dw_base.SetItemDisplayString(1, L"CostMoreLess", L"PLUS");
+					dw_base.SetItemDouble(1, L"Cost", costs);
+				}
+				else {
+					dw_base.SetItemString(1, L"CostMoreLess", L"-1");
+					dw_base.SetItemDisplayString(1, L"CostMoreLess", L"LESS");
+					dw_base.SetItemDouble(1, L"Cost", costs * -1);
+				}
+			}
+			dw_base.SetItemDouble(1, L"PrivateCommissionAmount", PrivateCommissionAmount + PrivateCommissionAmountEx);
+			datareading = false;
+			calcTotal();
+			evalTotalCost();
+			//RefreshSourcingAllEx();
+			CalcProfit();
+		}
+		return 1;
+	}
+
+	int OnAddGDNItem()
+	{
+		//trace(L"12313");
+		xaserverarg arg = GDNView::MakeArg();
+		arg.AddArg(L"CustomerID", dw_base.GetItemString(1, L"CustomerID"));
+		arg.AddArg(L"InvoiceNo", dw_base.GetItemString(1, L"InvoiceNo"));
+		arg.AddArg(L"SONo", dw_base.GetItemString(1, L""));
+		int p = arg;
+		if (dw_base.GetItemString(1, L"CustomerID") == L"")
+		{
+			OpenWindow(L"dev:xpage[SelectItem.New.GDN.vx]", cast(arg as int));
+			if (dw_base.GetItemString(1, L"CustomerID") == L"")
+			{
+				dw_base.SetItemDisplayString(1, L"CustomerID", arg.GetArgString(L"PartyName"));
+				dw_base.ItemChangeTo(1, L"CustomerID", arg.GetArgString(L"PartyID"));
+				dw_profit.ItemChangeTo(1, L"CustomerID", arg.GetArgString(L"PartyID"));
+				dw_profit.SetItemDisplayString(1, L"CustomerID", arg.GetArgString(L"PartyName"));
+			}
+		}
+		else
+		{
+			OpenWindow(L"dev:xpage[select.gdnitem.so.vx]", p);
+		}
+
+		xstring str = arg.GetArgString(L"items");
+		trace(L"*****");
+		return OnAddGDNItems(str);
+	}
+
+	int OnCDElementMatch()
+	{
+		for (int i = 1; i <= dw_custom.GetRowCount(); i++)
+		{
+			xstring ClassifyID = dw_custom.GetItemString(i, L"ClassifyID");
+			KXMLDOMElement e1 = dw_custom.GetRowElement(i);
+			xstring CDLineID = e1.getAttribute(L"guid");
+			if (CDLineID == L"")
+			{
+				e1.SetAttribute(L"guid", ViewObject::GetGuid());
+				CDLineID = e1.getAttribute(L"guid");
+			}
+
+			for (int row = 1; row <= dw_cdelement.GetRowCount(); row++)
+			{
+				if (ClassifyID == dw_cdelement.GetItemString(row, L"ClassifyID"))
+				{
+					dw_cdelement.SetItemString(row, L"CDLineID", CDLineID);
+					dw_cdelement.SetItemString(row, L"GDNID", dw_base.GetGuid(1));
+					dw_cdelement.SetItemString(row, L"HSCode", dw_custom.GetItemString(i, L"HSCode"));
+					dw_cdelement.Redraw();
+				}
+			}
+		}
+		return  1;
+	}
+
+	int OnCDElement()
+	{
+
+		while (dw_cdelement.GetRowCount() > 0) {
+			dw_cdelement.DeleteRow(dw_cdelement.GetRowCount());
+		}
+
+		for (int i = 1; i <= dw_custom.GetRowCount(); i++)
+		{
+			xstring ClassifyID = dw_custom.GetItemString(i, L"ClassifyID");
+			xml x = ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyelement", L"ClassifyID", ClassifyID);
+			if (x)
+			{
+				KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"/GDN/CDElement");
+				int lens = items.length;
+				for (int k = 0; k < lens; k++)
+				{
+					int row = dw_cdelement.InsertRow(0);
+					KXMLDOMElement e = items.item(k);
+
+					KXMLDOMElement e1 = dw_custom.GetRowElement(i);
+					xstring CDLineID = e1.getAttribute(L"guid");
+					if (CDLineID == L"")
+					{
+						e1.SetAttribute(L"guid", ViewObject::GetGuid());
+						CDLineID = e1.getAttribute(L"guid");
+					}
+					dw_cdelement.SetItemString(row, L"CDLineID", CDLineID);
+					dw_cdelement.SetItemString(row, L"GDNID", dw_base.GetGuid(1));
+					if (e.selectSingleNode(L"HSCode")) dw_cdelement.SetItemString(row, L"HSCode", e.selectSingleNode(L"HSCode").text);
+					if (e.selectSingleNode(L"SeqNo")) dw_cdelement.SetItemString(row, L"SeqNo", e.selectSingleNode(L"SeqNo").text);
+					if (e.selectSingleNode(L"EleName")) dw_cdelement.SetItemString(row, L"EleName", e.selectSingleNode(L"EleName").text);
+					if (e.selectSingleNode(L"EleContent")) dw_cdelement.SetItemString(row, L"EleContent", e.selectSingleNode(L"EleContent").text);
+					/*if(e.selectSingleNode(L"EleName"))
+					{
+						if(e.selectSingleNode(L"EleName").text==L"品牌类型")
+						{
+							if(dw_base.GetItemString(1,L"POL")==L"NINGBO")
+							{
+								dw_cdelement.SetItemString(row,L"EleContent",L"境内自主品牌");
+							}else
+							{
+								dw_cdelement.SetItemString(row,L"EleContent",L"无品牌");
+							}
+						}
+						else if(e.selectSingleNode(L"EleName").text==L"出口享惠情况")
+						{
+							xstring country = dw_base.GetItemString(1,L"FinalCountry");
+							if(country==L"")
+							{
+								dw_cdelement.SetItemString(row,L"EleContent",L"不享受");
+							}
+							else if(L"601,127,322,129,415,337,133,107,119,122,103,434,106,331,134,136,105,132,609,111,112,141,412,143".find(country)>=0)
+							{
+								dw_cdelement.SetItemString(row,L"EleContent",L"享受");
+							}else
+							{
+								dw_cdelement.SetItemString(row,L"EleContent",L"不享受");
+							}
+						}
+					}*/
+					if (e.selectSingleNode(L"CustomName")) dw_cdelement.SetItemString(row, L"CustomName", e.selectSingleNode(L"CustomName").text);
+					if (e.selectSingleNode(L"ClassifyID")) dw_cdelement.SetItemString(row, L"ClassifyID", e.selectSingleNode(L"ClassifyID").text);
+				}
+			}
+		}
+
+		return  1;
+	}
+
+	int OnDeleteGDNItem()
+	{
+		if (dw_item.GetRow() < 1) return 1;
+		ClearSourcingItem(dw_item.GetRow());
+		dw_item.DeleteRow(0);
+		calcTotal();
+		evalTotalCost();
+		CalcProfit();
+
+		xstring PONo_s = L"";
+		xstring SONo_s = L"";
+		for (int k = 1; k <= dw_item.GetRowCount(); k++)
+		{
+			xstring SONo = dw_item.GetItemString(k, L"SONo");
+			if (SONo_s == L"")
+			{
+				SONo_s = SONo;
+			}
+			else if (SONo_s.find(SONo) < 0)
+			{
+				SONo_s += L",L" + SONo;
+			}
+			xstring PONo = dw_item.GetItemString(k, L"PONo");
+			if (PONo_s == L"")
+			{
+				PONo_s = PONo;
+			}
+			else if (PONo_s.find(PONo) < 0)
+			{
+				PONo_s += L",L" + PONo;
+			}
+		}
+		dw_base.SetItemString(1, L"OrderNos", PONo_s);
+		dw_base.SetItemString(1, L"SONos", SONo_s);
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"bill.update") > 0)
+		{
+			return OnSave();
+		}
+		if (comdid == L"xmCDElementMatch")
+		{
+			return OnCDElementMatch();
+		}
+		if (comdid == L"xmSaveAs")
+		{
+			int i = dw_item.SaveAs(L"");
+			if (i == 1)
+				alert(L"导出成功");
+			return 1;
+		}
+		if (comdid == L"xmSearch")
+		{
+			xaserverarg arg1 = new xaserverarg;
+			arg1.setNativePointer(arg1.CreateInstance());
+			arg1.AddArg(L"text", searchStr);
+
+			if (tabname == L"sourcing")
+			{
+				OpenWindow(L"dev:xpage[search.dialog.vx]", cast(arg1 as int));
+				xstring str = arg1.GetArgString(L"text");
+				searchStr = str;
+				dw_source.Filter(L"*", searchStr);
+				return 1;
+			}
+			else if (tabname == L"goods")
+			{
+				OpenWindow(L"dev:xpage[search.dialog.vx]", cast(arg1 as int));
+				str = arg1.GetArgString(L"text");
+				searchStr = str;
+				dw_item.Filter(L"*", searchStr);
+				return 1;
+			}
+			return 1;
+		}
+		if (comdid == L"action:bill.SourceRemark") return OnSourceRemark();
+		if (comdid == L"action:bill.GDNDelay")
+		{
+			xstring EntityIDEx = dw_base.GetGuid(1);
+			xaserverarg argEx = new xaserverarg;
+			argEx.setNativePointer(argEx.CreateInstance());
+			trace(EntityIDEx);
+			argEx.AddArg(L"GDNID", EntityIDEx);
+			OpenWindow(L"dev:xpage[GDNDelay.vx]", cast(argEx as int));
+			return 1;
+		}
+		if (comdid == L"action:bill.Volume")
+		{
+			calcTotal();
+			return 1;
+		}
+		if (comdid.find(L"bill.print") > 0)
+		{
+			xstring EntityID1 = dw_base.GetGuid(1);
+			xml x1 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudge", L"GDNID", EntityID1);
+			xstring Results1 = x1.GetXmlDoc().text;
+			if (Results1 != L"")
+			{
+				alert(Results1);
+				return 0;
+			}
+
+			OnPrintOne();
+			OnPrint();
+			return 1;
+		}
+		if (comdid == L"action:bill.check.ask")
+		{
+			xstring ApprovalStatus = dw_base.GetItemString(1, L"ApprovalStatus");
+			if (ApprovalStatus == L"9")
+			{
+				alert(L"合并票不允许提交审批!");
+				return 0;
+			}
+			if (dw_cdelement.GetRowCount() < 1)
+			{
+				alert(L"请生成报关要素!");
+				return 0;
+			}
+			if (dw_source.GetRowCount() < 1)
+			{
+				alert(L"采购货源未生成!");
+				return 0;
+			}
+
+			xstring EntityID = dw_base.GetGuid(1);
+			xml xx = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudge", L"GDNID", EntityID);
+			xstring Results = xx.GetXmlDoc().text;
+			if (Results != L"")
+			{
+				alert(Results);
+				return 0;
+			}
+
+			xml xx1 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeEx", L"GDNID", EntityID);
+			xstring Results2 = xx1.GetXmlDoc().text;
+			if (Results2 != L"")
+			{
+				alert(Results2);
+				return 0;
+			}
+
+			xml xx3 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeExS", L"GDNID", EntityID);
+			xstring Results3 = xx3.GetXmlDoc().text;
+			if (Results3 != L"")
+			{
+				alert(Results3);
+				return 0;
+			}
+
+			xml xx4 = ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNJudgeAmount", L"GDNID", EntityID);
+			xstring Results4 = xx4.GetXmlDoc().text;
+			if (Results4 != L"")
+			{
+				alert(Results4);
+				return 0;
+			}
+
+			/*	xml xx5= ViewObject::RetrieveData(L"/sale/data/GDN/GetGDNCost",L"GDNID",EntityID);
+				xstring Results5=xx5.GetXmlDoc().text;
+				if(Results5 !=L"")
+				{
+					alert(Results5);
+					return 0;
+				}*/
+
+			xaserverarg arg7 = new xaserverarg;
+			arg7.setNativePointer(arg7.CreateInstance());
+			trace(EntityID);
+			arg7.AddArg(L"GDNID", EntityID);
+			OpenWindow(L"dev:xpage[GDNDelay.vx]", cast(arg7 as int));
+
+		}
+		if (comdid.find(L"action:", 0) >= 0)
+		{
+			int ret = ProcessFlowAction(comdid, 1);
+		}
+		if (comdid == L"xmRefreshSourcingAll")
+		{
+			if (dw_base.GetItemString(1, L"InvoiceNo") == L"")
+			{
+				alert(L"请先保存,在刷新货源!");
+				return 1;
+			}
+			return RefreshSourcingAllEx();
+		}
+		if (comdid == L"xmMakeGdnLineEx")
+		{
+			return OnMakeGdnLineEx();
+		}
+		if (comdid == L"xmRefreshSourcingItem")
+		{
+			if (dw_base.GetItemString(1, L"InvoiceNo") == L"")
+			{
+				alert(L"请先保存,在刷新货源!");
+				return 1;
+			}
+			return RefreshSourcingItem1(dw_item.GetRow());
+		}
+
+		if (comdid == L"xmMakeContainer")
+		{
+			return OnMakeContainer();
+		}
+		else if (comdid == L"xmCDElement")
+		{
+			return OnCDElement();
+		}
+		else if (comdid == L"tab_goods")
+		{
+			tabname = L"goods";
+			SetAgentEx();
+			return 1;
+		}
+		else if (comdid == L"tab_sourcing")
+		{
+			tabname = L"sourcing";
+			SetAgentEx();
+			return 1;
+		}
+		else if (comdid == L"tab_profit")
+		{
+			tabname = L"profit";
+			SetAgentEx();
+			return 1;
+		}
+		else if (comdid == L"tab_cdelement")
+		{
+			tabname = L"cdelement";
+			SetAgentEx();
+			return 1;
+		}
+		else if (comdid == L"tab_base")
+		{
+			tabname = L"base";
+			SetAgentEx();
+			return 1;
+		}
+		else if (comdid == L"makeCustom")
+		{
+			OnMakeSumPack();
+			return OnMakeCustom();
+		}
+		else if (comdid == L"xmDeleteRow")
+		{
+			dw_item.DeleteRow(0);
+			return 1;
+		}
+		else if (comdid == L"xmAddItem")
+		{
+			//dw_item.InsertRow(0);
+			PoTotal();//新增时没有作用
+			return OnAddGDNItem();
+		}
+		else if (comdid == L"xmDeleteItem")
+		{
+			//dw_item.DeleteRow(0);
+			return OnDeleteGDNItem();
+		}
+		else if (comdid == L"xmAddSourcingItem")
+		{
+			return OnAddSourcingItem();
+		}
+		if (comdid == L"xmDeleteSourcingItem")
+		{
+			return OnDeleteSourceingItem();
+		}
+		else if (comdid == L"xmSave")
+		{
+			OnSave();
+			return 1;
+		}
+		else if (comdid == L"xmPrint")
+		{
+			OnPrint();
+			return 1;
+		}
+		else if (comdid == L"xmClose")
+		{
+			//CloseWindow();
+			return 1;
+		}
+		else if (comdid == L"xmCalcProfit")
+		{
+			CalcProfit();
+			return 1;
+		}
+		else if (comdid == L"xmGDNSourcePaperCard")
+		{
+			if (dw_base.GetItemString(1, L"InvoiceNo") != L"")
+			{
+				xaserverarg arg2 = new xaserverarg;
+				arg2.setNativePointer(arg2.CreateInstance());
+				arg2.AddArg(L"InvoiceNo", dw_base.GetItemString(1, L"InvoiceNo"));
+				arg2.AddArg(L"HWND", GetHWND().toString());
+				OpenWindow(L"dev:xpage[GDNSourcePaperCard.vx]", cast(arg2 as int));
+			}
+			else
+			{
+				alert(L"请先保存出运信息,在修改纸卡开票!");
+			}
+			return 1;
+		}
+		else if (comdid == L"xmRefreshSource")
+		{
+			xstring invno = dw_base.GetItemString(1, L"InvoiceNo");
+			OnRefreshSource(invno);
+			return 1;
+		}
+		else if (comdid == L"xmMaintBuyPrice")
+		{
+			xaserverarg arg = GDNView::MakeArg();
+			int row = dw_source.GetRow();
+			if (row < 1) return 1;
+			arg.AddArg(L"SupplierID", dw_source.GetItemString(row, L"SupplierID"));
+			arg.AddArg(L"SupplierName", dw_source.GetItemDisplayString(row, L"SupplierID"));
+			arg.AddArg(L"Price", dw_source.GetItemString(row, L"BuyUnitPrice"));
+			OpenWindow(L"dev:xpage[GDNSourcePriceMaint.vx]", cast(arg as int));
+			if (arg.GetArgString(L"result") == L"ok")
+			{
+				if (arg.GetArgString(L"SupplierID") != L"")
+				{
+					dw_source.SetItemString(row, L"SupplierID", arg.GetArgString(L"SupplierID"));
+					dw_source.SetItemDisplayString(row, L"SupplierID", arg.GetArgString(L"SupplierName"));
+				}
+				if (arg.GetArgString(L"Price") != L"" && arg.GetArgString(L"Price") != L"0.00")
+					dw_source.ItemChangeTo(row, L"BuyUnitPrice", arg.GetArgString(L"Price"));
+				dw_source.Redraw();
+			}
+		}
+		return 0;
+	}
+
+	int OnSourceRemark()
+	{
+		xstring name = L"出运明细单";
+		xml x = ViewObject::RetrieveData(L"/sale/data/TradeFinance3/GetSetUpRemarks", L"Type", name);
+		KXMLDOMNodeList items = x.GetXmlDoc().selectNodes(L"data/Item");
+		KXMLDOMNode t = items.item(0);
+		xstring Content = L"";
+		if (t.selectSingleNode(L"Content"))
+		{
+			Content = t.selectSingleNode(L"Content").text;
+		}
+		xaserverarg arg1 = new xaserverarg;
+		arg1.setNativePointer(arg1.CreateInstance());
+		arg1.AddArg(L"value", Content);
+		OpenWindow(L"dev:xpage[memo.edit.new.vx]", arg1.getNativePointer());
+
+		return 1;
+	}
+
+	int OnPrintOne()
+	{
+		xstring GDNID = dw_base.GetGuid(1);
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN/CheckGW", L"GDNID", GDNID);
+		xstring  r = x.GetXmlDoc().text;
+		int r1 = r.toInt();
+		if (x)
+		{
+			if (r1 > 0)
+			{
+				alert(L"毛重总量或净总重量不一致,需要核对!");
+			}
+		}
+
+
+		xml xs = ViewObject::RetrieveData(L"/sale/data/GDN/CheckCDLine", L"GDNID", GDNID);
+		xstring  rs = xs.GetXmlDoc().text;
+		int rs1 = rs.toInt();
+		if (xs)
+		{
+			if (rs1 > 0)
+			{
+				alert(L"报关数量和报关金额与出运数量和金额不一致\r\n部分报关数量和金额需要核对!");
+			}
+		}
+
+		//alert(GDNID);
+		return 1;
+	}
+	//命令处理事件
+	int OnXCommand(ref TXCommandEvent evt, int param)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}
+
+	//风险计提
+	int evalRisk()
+	{
+		xstring CurrencyCode = dw_base.GetItemString(1, L"CurrencyCode");
+		double amt = dw_profit.GetItemDouble(1, L"Amount");
+		xstring exchRate = L"";
+		xstring exchRate2 = L"";
+
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"prepareFeeRate");
+		if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+			exchRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+		double rate = exchRate.toDouble();
+
+		xml x1 = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"cryrate");
+		if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+			exchRate2 = x1.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+		double cryrate = exchRate2.toDouble();
+
+		if (CurrencyCode == L"RMB" || CurrencyCode == L"CNY")
+		{
+			if (exchRate != L"")
+			{
+				amt = amt / cryrate;
+
+			}
+		}
+
+		dw_profit.SetItemDouble(1, L"RiskPrepareFee", amt * rate);
+		return 1;
+	}
+
+	//采购成本
+
+
+	int evalPurcharCost()
+	{
+		double cost = dw_source.GetItemSumDouble(L"BuyAmount");
+		dw_profit.SetItemDouble(1, L"Cost", cost);
+		return 1;
+	}
+
+	//退税
+	int evalDrawback()
+	{
+		//calc Drawback
+		double retax = 0;
+		double tax = 0;
+		double cost = 0;
+		double Drawback = 0;
+		for (int k = 1; k <= dw_item.GetRowCount(); k++)
+		{
+			KXMLDOMElement  e = dw_item.GetRowElement(k);
+			xstring gdnLineID = e.getAttribute(L"guid");
+			xstring ClassifyID = dw_item.GetItemString(k, L"ClassifyID");
+			retax = 16;
+			tax = 16;
+
+			if (ClassifyID != L"")
+			{
+				//trace(L"\r\n" + ClassifyID);
+				xml x = ViewObject::RetrieveData(L"/sale/data/Custom3/custom/classifyinfo", L"ClassifyID", ClassifyID);
+				if (x)
+				{
+					//	trace(L"\r\n" + x.GetXml());
+					KXMLDOMNode o = x.GetXmlDoc().selectSingleNode(L"data/Item");
+					if (o)
+					{
+						KXMLDOMNode n = o.selectSingleNode(L"VATRates");
+						if (n)
+						{
+							tax = n.text.toDouble();
+							n.Release();
+						}
+						n = o.selectSingleNode(L"VATRefundRate");
+						if (n)
+						{
+							retax = n.text.toDouble();
+							n.Release();
+						}
+						o.Release();
+					}
+					x.GetXmlDoc().Release();
+				}
+			}
+
+			cost = 0;
+			for (int m = 1; m <= dw_source.GetRowCount(); m++)
+			{
+				if (dw_source.GetItemString(m, L"GDNLineID") == gdnLineID)
+					cost += dw_source.GetItemDouble(m, L"BuyAmount");
+			}
+			Drawback += cost / (100.0 + tax) * retax;
+		}
+		dw_profit.SetItemDouble(1, L"Drawback", Drawback);
+		return 1;
+	}
+
+	int evalDrawbackEx()
+	{
+		double Drawback = 0.0;
+		for (int m = 1; m <= dw_source.GetRowCount(); m++)
+		{
+			double RefundAmount = dw_source.GetItemDouble(m, L"RefundAmount");
+			Drawback += RefundAmount;
+		}
+		dw_profit.SetItemDouble(1, L"Drawback", Drawback);
+		return 1;
+	}
+
+	int evalManagementFee()
+	{
+		xstring CurrencyCode = dw_base.GetItemString(1, L"CurrencyCode");
+		xstring expRate = L"";
+		xstring exchRate = L"";
+
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"cryrate");
+		if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+			exchRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+
+		x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"mgtFeeRate");
+		if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+			expRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+		//double sale = dw_profit.GetItemDouble(1,L"ExchangeAmountEx");
+
+		xstring ETDEx = dw_base.GetItemString(1, L"ETD");
+		if (ETDEx >= L"2023-01-01")
+		{
+			expRate = L"0.2";
+		}
+
+		double sale = dw_profit.GetItemDouble(1, L"Amount");
+		double ManagementFee = 0;
+		if (CurrencyCode == L"RMB" || CurrencyCode == L"CNY")
+		{
+			if (exchRate != L"")
+			{
+				double r1 = exchRate.toDouble();//汇率
+
+				double r2 = expRate.toDouble(); //公司管理
+
+				ManagementFee = (sale / r1) * r2;
+			}
+		}
+		else
+		{
+			double rate = expRate.toDouble();
+			ManagementFee = sale * rate;
+		}
+		trace(ManagementFee.toString());
+		dw_profit.SetItemDouble(1, L"ManagementFee", ManagementFee);
+		return 1;
+	}
+
+	//风险基金
+	int evalRiskFundAmount()
+	{
+		xstring CurrencyCode = dw_base.GetItemString(1, L"CurrencyCode");
+		xstring expRate = L"";
+		xstring exchRate = L"";
+
+		xml x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"cryrate");
+		if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+			exchRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+
+		x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"RiskFundAmount");
+		if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+			expRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+		//double sale = dw_profit.GetItemDouble(1,L"ExchangeAmountEx");
+
+		xstring ETDEx = dw_base.GetItemString(1, L"ETD");
+		if (ETDEx < "2023-01-01")
+		{
+			//alert(L"1");
+			expRate = L"0.0";
+		}
+
+		double sale = dw_profit.GetItemDouble(1, L"Amount");
+		double RiskFundAmount = 0;
+		if (CurrencyCode == L"RMB" || CurrencyCode == L"CNY")
+		{
+			if (exchRate != L"")
+			{
+				double r1 = exchRate.toDouble();//汇率
+
+				double r2 = expRate.toDouble();
+
+				RiskFundAmount = (sale / r1) * r2;
+			}
+		}
+		else
+		{
+			double rate = expRate.toDouble();
+			RiskFundAmount = sale * rate;
+		}
+		//alert(L"+++L"+ETDEx+L"+++L"+rate.toString()+L"+++L"+sale.toString()+L"+++L"+RiskFundAmount.toString()+L"+++L");
+		dw_profit.SetItemDouble(1, L"RiskFundAmount", RiskFundAmount);
+		return 1;
+	}
+
+	//总成本
+	int evalTotalCost()
+	{
+		double ttl = 0;
+		ttl = dw_profit.GetItemDouble(1, L"Cost");
+
+		ttl -= dw_profit.GetItemDouble(1, L"Drawback");
+		ttl += dw_profit.GetItemDouble(1, L"DrawbackIntrest");
+		ttl += dw_profit.GetItemDouble(1, L"CustomFee");
+		ttl += dw_profit.GetItemDouble(1, L"InspectionFee");
+		ttl += dw_profit.GetItemDouble(1, L"PaperCardCopyFee");
+		ttl += dw_profit.GetItemDouble(1, L"TransportationFee");
+		ttl += dw_profit.GetItemDouble(1, L"StorageFee");
+		ttl += dw_profit.GetItemDouble(1, L"PortIncidentalFee");
+		ttl += dw_profit.GetItemDouble(1, L"RiskPrepareFee");
+		ttl += dw_profit.GetItemDouble(1, L"AllocatedFee");
+		ttl += dw_profit.GetItemDouble(1, L"ManagementFee");
+		ttl += dw_profit.GetItemDouble(1, L"RiskFundAmount");
+		ttl += dw_profit.GetItemDouble(1, L"FundsIntrestFee");
+		ttl -= dw_profit.GetItemDouble(1, L"AgentAmount");
+		ttl += dw_profit.GetItemDouble(1, L"AgentTax");
+		ttl += dw_profit.GetItemDouble(1, L"OtherFee");
+
+		dw_profit.SetItemDouble(1, L"TotalCostEx", ttl);
+
+		return 1;
+	}
+
+	//销售
+	int evalSale()
+	{
+		dw_profit.SetItemString(1, L"Quantity", dw_base.GetItemString(1, L"Quantity"));
+		dw_profit.SetItemString(1, L"Amount", dw_base.GetItemString(1, L"Amount"));
+		dw_profit.SetItemString(1, L"Freight", dw_base.GetItemString(1, L"Freight"));
+		dw_profit.SetItemString(1, L"InsuranceAmount", dw_base.GetItemString(1, L"InsuranceAmount"));
+		//dw_profit.SetItemString(1,L"CommissionAmount",dw_base.GetItemString(1,L"CommissionAmount"));
+
+		double comm1 = dw_base.GetItemDouble(1, L"CommissionAmount");
+		double comm2 = dw_base.GetItemDouble(1, L"PrivateCommissionAmount");
+		double comm3 = dw_base.GetItemDouble(1, L"DiscountAmount");
+		double comm = comm1 + comm2 + comm3;
+		dw_profit.SetItemDouble(1, L"CommissionAmount", comm);
+
+		xstring cost = dw_base.GetItemString(1, L"Cost");
+		if (cost != L"")
+		{
+			xstring lessa = dw_base.GetItemString(1, L"CostMoreLess");
+			double costAmt = cost.toDouble();
+			if (lessa == L"-1") costAmt = 0.0 - costAmt;
+			dw_profit.SetItemDouble(1, L"SaleExternCost", costAmt);
+		}
+		else
+			dw_profit.SetItemDouble(1, L"SaleExternCost", 0.0);
+
+
+		double ttl = 0;
+		ttl = dw_base.GetItemDouble(1, L"Amount");
+		ttl -= dw_base.GetItemDouble(1, L"Freight");
+		ttl -= dw_base.GetItemDouble(1, L"InsuranceAmount");
+		ttl -= dw_base.GetItemDouble(1, L"CommissionAmount");
+		ttl -= dw_base.GetItemDouble(1, L"PrivateCommissionAmount");
+		ttl -= dw_base.GetItemDouble(1, L"DiscountAmount");
+		ttl += dw_profit.GetItemDouble(1, L"SaleExternCost");
+
+
+		xstring CurrencyCode = dw_base.GetItemString(1, L"CurrencyCode");
+		xstring exchangeRate = L"";
+		exchangeRate = dw_profit.GetItemString(1, L"ExchangeRate");
+		if (exchangeRate == L"") {
+			xml x = ViewObject::RetrieveData(L"/sale/data/GDN3/profit/param", L"item", L"cryrate");
+			if (x.GetXmlDoc().selectSingleNode(L"root/item/@value"))
+				exchangeRate = x.GetXmlDoc().selectSingleNode(L"root/item/@value").text;
+			dw_profit.SetItemString(1, L"ExchangeRate", exchangeRate);
+		}
+		if (exchangeRate != L"" || CurrencyCode == L"USD") {
+			//dw_profit.SetItemString(1,L"ExchangeRate",exchangeRate);
+			dw_profit.SetItemDouble(1, L"ExchangeAmountEx", ttl);
+		}
+
+		if (CurrencyCode == L"RMB" || CurrencyCode == L"CNY")
+		{
+			//exchangeRate=L"6.6";
+			dw_profit.SetItemDouble(1, L"ExchangeAmountEx", ttl / exchangeRate.toDouble());
+		}
+
+		return 1;
+	}
+
+	int evalProfitAmount()
+	{
+
+		double sale = dw_profit.GetItemDouble(1, L"ExchangeAmountEx");
+		double exchRate = dw_profit.GetItemDouble(1, L"ExchangeRate");
+		double ttl = dw_profit.GetItemDouble(1, L"TotalCostEx");
+		double drawback = dw_profit.GetItemDouble(1, L"Drawback");
+		if (exchRate != 0)
+		{
+			dw_profit.SetItemDouble(1, L"ProfitAmountEx", sale * exchRate - ttl);
+			dw_base.SetItemDouble(1, L"ProfitAmountEx", sale * exchRate - ttl);
+		}
+		else
+		{
+			dw_profit.SetItemString(1, L"ProfitAmountEx", L"");
+			dw_base.SetItemString(1, L"ProfitAmountEx", L"");
+		}
+		if (sale != 0.0)
+		{
+			double amt1 = ttl;
+			amt1 = amt1 / sale;
+			dw_profit.SetItemDouble(1, L"ExchangeCostEx", amt1);
+		}
+		else
+			dw_profit.SetItemString(1, L"ExchangeCostEx", L"");
+
+		return 1;
+	}
+
+	int evalProfitAmountEx()
+	{
+		double amount = dw_profit.GetItemDouble(1, L"Amount");
+		double cost = dw_profit.GetItemDouble(1, L"Cost");
+
+		double sale = dw_profit.GetItemDouble(1, L"ExchangeAmountEx");
+		double exchRate = dw_profit.GetItemDouble(1, L"ExchangeRate");
+		double ttl = dw_profit.GetItemDouble(1, L"TotalCostEx");
+		double drawback = dw_profit.GetItemDouble(1, L"Drawback");
+		if (exchRate != 0)
+		{
+			dw_profit.SetItemDouble(1, L"ProfitAmountEx", sale * exchRate - ttl);
+			dw_base.SetItemDouble(1, L"ProfitAmountEx", sale * exchRate - ttl);
+		}
+		else
+		{
+			dw_profit.SetItemString(1, L"ProfitAmountEx", L"");
+			dw_base.SetItemString(1, L"ProfitAmountEx", L"");
+		}
+		if (amount != 0.0)
+		{
+			double amt1 = cost;
+			amt1 = amt1 / amount;
+
+			dw_profit.SetItemDouble(1, L"ExchangeCostEx", amt1);
+			for (int m = 1; m <= dw_source.GetRowCount(); m++)
+			{
+				//dw_source.SetItemDouble(m,L"Swapthecost",amt1);
+			}
+		}
+		else
+			dw_profit.SetItemString(1, L"ExchangeCostEx", L"");
+		dw_source.Redraw();
+		return 1;
+	}
+
+	int CalcProfit()
+	{
+		evalSale();
+		evalManagementFee();
+		evalRiskFundAmount();
+		evalRisk();
+		evalPurcharCost();
+		evalDrawbackEx();
+		evalTotalCost();
+		evalProfitAmountEx();
+	}
+
+	int OnItemAskStyle(ref TNotifyEvent evt, int p)
+	{
+		int DMS_CSSSTYLE = 0x8;
+		ref DWASKSTYLENMHDR hdr = trust(evt.pnmh as ref DWASKSTYLENMHDR);
+		int row = hdr.row;
+		int col = hdr.col;
+		xstring colname = hdr.colname;
+
+		int rows = dw_item.GetRowCount();
+		if (row < 1 || row > rows)
+		{
+			return 1;
+		}
+
+		if (colname == L"Packages")
+		{
+			int PackingRate = dw_item.GetItemString(row, L"PackingRate").toInt();
+			int Quantity = dw_item.GetItemString(row, L"Quantity").toInt();
+			if (PackingRate != 0)
+			{
+				if ((Quantity / PackingRate) * PackingRate != Quantity)
+				{
+					hdr.mask = DMS_CSSSTYLE;
+					hdr.cssstyle = L"color:#ff0000";
+				}
+			}
+		}
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", OnSetFocus);
+
+		AttachEvent(L"dw_item", L"DWV_ITEMCHANGED", OnItemChanged);
+		AttachEvent(L"dw_source", L"DWV_ITEMCHANGED", OnItemChangedEx);
+		AttachEvent(L"dw_base", L"DWV_ASKDATA", OnAskDataBase);
+
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", OnBaseItemChanged);
+
+		AttachEvent(L"dw_profit", L"DWV_ITEMCHANGED", OnProfitItemChanged);
+		AttachEvent(L"dw_custom", L"DWV_ITEMCHANGED", OnCustomItemChanged);
+		AttachEvent(L"dw_billnote", L"DWV_DOUBLECLICKED", OnBillNoteDoubleClicked);//行双击	
+		AttachEvent(L"dw_item", L"DWV_ASKSTYLE", OnItemAskStyle);
+
+		AttachCloseWindow();
+
+	}
+
+	int RetrieveUseBuffer(xstring invno)
+	{
+
+		xml x;
+		x = new xml;
+		
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		arg.AddArg(L"EntityID", GetEntityID(1));
+		arg.AddArg(L"invno", invno);
+
+		//int t0 = win32::GetTickCount();
+		//if(url::get(L"/sale/data/Gdn/data/buffer", arg.GetString(),x)!=1)	
+		if (url::get(L"/sale/data/Gdn/data", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+
+		//trace(x.GetXml());
+		//trace(L"\r\n出运数据读取:"+(win32::GetTickCount() - t0).toString());
+
+		KXMLDOMElement ele;
+		KXMLDOMNode node;
+		KXMLDOMDocument xdoc = x.GetXmlDoc();
+		node = xdoc.selectSingleNode(L"data/Item[@subject='Base' or @subject='base']/*");
+
+		dw_base.DwRetrieve(GetServerUrl(), L"[gdnbase.gdn.sql.xq]", L"EntityID", InvoiceID);
+
+		if (node)
+		{
+			ele = node;
+			//node.release();
+			//dw_base.Retrieve(ele);
+			//ele.release();
+
+			dw_billnote.Retrieve(ele);
+			if (dw_billnote.GetRowCount() < 1)
+			{
+				xml x0;
+				x0 = new xml;
+				x0.setNativePointer(xml::CreateInstance());
+				xstring billnote = L"<GDN><DocInfo><data><Item Name='报关发票' Field='Remark'></Item>" +
+					"<Item Name='报关箱单' Field='Remark'></Item>" +
+					"<Item Name='议付发票' Field='Remark'></Item>" +
+					"<Item Name='议付箱单' Field='Remark'></Item>" +
+					"<Item Name='装船通知' Field='Remark'></Item>" +
+					"<Item Name='加拿大海关发票' Field='Remark'></Item>" +
+					"<Item Name='FORMA' Field='Remark'></Item></data></DocInfo></GDN>";
+				x0.LoadXml(billnote);
+				dw_billnote.Retrieve(x0);
+			}
+		}
+		/*node = xdoc.selectSingleNode(L"data/Item[@subject='GDNProfit' or @subject='profit']/*");
+		if(node)
+		{
+			ele = node;
+			//node.release();
+			dw_profit.Retrieve(ele);
+		//	ele.release();
+		}*/
+		dw_profit.DwRetrieve(GetServerUrl(), L"[profit.dgn.sql.xq]", L"EntityID", InvoiceID);
+		dw_item.DwRetrieve(GetServerUrl(), L"[gdnline.gdn.sql.xq]", L"EntityID", InvoiceID);
+		dw_item.SetSelectionMode(1);
+		if (dw_item.GetRowCount() < 1)
+		{
+			xml x2 = xml::Make();
+			x2.LoadXml(L"<GDN/>");
+			dw_item.Retrieve(x2);
+			x2.Free();
+		}
+
+		/*
+		node = xdoc.selectSingleNode(L"data/Item[@subject='GDNLine' or @subject='gdnline']/*");
+		if(node)
+		{
+			ele = node;
+			//node.release();
+			dw_item.Retrieve(ele);
+			ele.release();
+		}*/
+
+		node = xdoc.selectSingleNode(L"data/Item[@subject='GDNLineEx' or @subject='gdnlineex']/*");
+		if (node)
+		{
+			ele = node;
+			//node.release();
+			dw_invoiceItem.Retrieve(ele);
+			ele.release();
+		}
+		//alert(L"123"+InvoiceID);
+		//dw_source.DwRetrieve(GetServerUrl(),L"[source.gdn.sql.xq]", L"EntityID",  InvoiceID);
+		//dw_source.SetSelectionMode(1);
+
+		node = xdoc.selectSingleNode(L"data/Item[@subject='GDNSource' or @subject='source']/*");
+		if (node)
+		{
+			ele = node;
+			//node.release();
+			dw_source.Retrieve(ele);
+			ele.release();
+		}
+		dw_custom.DwRetrieve(GetServerUrl(), L"[cdline.gdn.sql.xq]", L"EntityID", InvoiceID);
+		dw_custom.SetSelectionMode(1);
+		/*
+		node = xdoc.selectSingleNode(L"data/Item[@subject='CDLine' or @subject='cdline']/*");
+		if(node)
+		{
+			ele = node;
+			//node.release();
+			dw_custom.Retrieve(ele);
+			ele.release();
+		}
+		*/
+		node = xdoc.selectSingleNode(L"data/Item[@subject='CDElement' or @subject='cdelement']/*");
+		if (node)
+		{
+			ele = node;
+			//node.release();
+			dw_cdelement.Retrieve(ele);
+			dw_cdelement.SetSelectionMode(1);
+			ele.release();
+		}
+
+		node = xdoc.selectSingleNode(L"data/Item[@subject='Container' or @subject='container']/*");
+		if (node)
+		{
+			ele = node;
+			//node.release();
+			dw_fcl.Retrieve(ele);
+			ele.release();
+		}
+
+		return 1;
+	}
+
+	int OnRefreshSource(xstring invno)
+	{
+		xml x;
+		x = new xml;
+		
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+
+		arg.AddArg(L"invno", invno);
+		if (url::get(L"/sale/data/Gdn/source/maintex", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+
+		dw_source.Retrieve(x);
+		dw_source.SetSelectionMode(1);
+		return 1;
+	}
+	int Retrieve(xstring invno)
+	{
+
+		//return RetrieveUseBuffer(invno);
+
+		xml x;
+		x = new xml;
+		
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+
+		arg.AddArg(L"invno", invno);
+		if (url::get(L"/sale/data/Gdn/source/maintex", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+
+		dw_source.Retrieve(x);
+		dw_source.SetSelectionMode(1);
+		if (url::get(L"/sale/data/Gdn/source/base", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+
+		dw_base.Retrieve(x);
+
+		dw_billnote.Retrieve(x);
+		if (dw_billnote.GetRowCount() < 1)
+		{
+			xstring billnote = L"<GDN><DocInfo><data><Item Name='报关发票' Field='Remark'></Item>" +
+				"<Item Name='报关箱单' Field='Remark'></Item>" +
+				"<Item Name='议付发票' Field='Remark'></Item>" +
+				"<Item Name='议付箱单' Field='Remark'></Item>" +
+				"<Item Name='装船通知' Field='Remark'></Item>" +
+				"<Item Name='加拿大海关发票' Field='Remark'></Item>" +
+				"<Item Name='FORMA' Field='Remark'></Item></data></DocInfo></GDN>";
+			x.LoadXml(billnote);
+			dw_billnote.Retrieve(x);
+		}
+		if (url::get(L"/sale/data/Gdn/source/gdnline", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXml);
+			return -1;
+		}
+		dw_item.Retrieve(x);
+		dw_item.SetSelectionMode(1);
+
+		if (url::get(L"/sale/data/Gdn/source/gdnlineex", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+		dw_invoiceItem.Retrieve(x);
+
+
+		if (url::get(L"/sale/data/Gdn/source/profit", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+		dw_profit.Retrieve(x);
+
+		if (url::get(L"/sale/data/Custom3/maint/custom/data", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+		dw_custom.Retrieve(x);
+		dw_customex.Retrieve(x);
+		dw_custom.SetSelectionMode(1);
+
+		if (url::get(L"/sale/data/Gdn/source/cdelement", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+		dw_cdelement.Retrieve(x);
+		dw_cdelement.SetSelectionMode(1);
+		//dw_cdelement.Retrieve(x);
+
+		if (url::get(L"/sale/data/Gdn/source/container", arg.GetString(), x) != 1)
+		{
+			alert(x.GetXmlDoc().text);
+			return -1;
+		}
+		dw_fcl.Retrieve(x);
+		dw_fcl.SetSelectionMode(1);
+		return 1;
+	}
+
+	//件数
+	int caclPacking(double dQty, xstring sPRate)
+	{
+		if (sPRate == L"" || sPRate == L"0" || sPRate == L" ")
+			return 0;
+		double dPackages;
+		int iFlag;
+		iFlag = sPRate.find(L"/", 1);
+		if (iFlag >= 0)
+		{
+			xstring sBegin = sPRate.mid(0, iFlag);
+			xstring sEnd = sPRate.mid(iFlag + 1, sPRate.length() - iFlag + 2);
+			if (!sBegin || sBegin == L"" || sBegin == L"0" || !sEnd || sEnd == L"" || sEnd == L"0")
+				return 0;
+			dPackages = dQty * sEnd.toDouble() / sBegin.toDouble();
+		}
+		else
+		{
+			dPackages = dQty / sPRate.toDouble();
+		}
+
+		if ((dPackages * 1000).toInt() > dPackages.toInt() * 1000)
+			dPackages = dPackages + 1;
+
+		return dPackages.toInt();
+	}
+
+	xstring GetInvoiceID(xstring InvoiceNo)
+	{
+		xml x = xml::Make();
+		xaserverarg arg = xaserverarg::Make();
+		arg.AddArg(L"InvoiceNo", InvoiceNo);
+		xaserver::ExecXQuery(GetServerUrl(), L"[gdnid.gdn.xq]", arg.GetString(), x);
+		xstring InvoiceID1 = L"";
+		if (x.GetXmlDoc())
+		{
+			InvoiceID1 = x.GetXmlDoc().text;
+		}
+		arg.Free();
+		x.Free();
+		return InvoiceID1;
+	}
+
+	int OnNewInital()
+	{
+		xstring sdate = publiccode::GetCurrentDate();
+		dw_base.SetItemString(1, L"InvoiceDate", sdate);
+		xstring suserid = publiccode::GetUser().id;
+		xstring susername = publiccode::GetUser().name;
+		//dw_base.SetItemString(1,L"SalespersonID",suserid);
+		//dw_base.SetItemDisplayString(1,L"SalespersonID",susername);
+		dw_base.SetItemString(1, L"CompanyID", L"E9E3C542-062C-4957-B8F4-9B92C3E351FC");
+		dw_base.SetItemDisplayString(1, L"CompanyID", L"宁波家尔佳进出口有限公司");
+		dw_base.SetItemString(1, L"CreatorID", suserid);
+		dw_base.SetItemDisplayString(1, L"CreatorID", susername);
+		dw_base.SetItemString(1, L"CreateDate", sdate);
+		dw_base.SetItemString(1, L"TradeMode", L"Z");
+		dw_base.SetItemDisplayString(1, L"TradeMode", L"自营");
+
+		dw_base.SetItemString(1, L"CurrencyCode", L"USD");
+		dw_profit.SetItemString(1, L"CurrencyCode", L"USD");
+		dw_profit.SetItemString(1, L"InvoiceDate", sdate);
+		//dw_base.SetItemString(1,L"SalespersonID",suserid);
+		//dw_base.SetItemDisplayString(1,L"SalespersonID",susername);
+		//dw_profit.SetItemString(1,L"SalespersonID",suserid);
+		//dw_profit.SetItemDisplayString(1,L"SalespersonID",susername);
+		xstring id = publiccode::GetGuid();
+		dw_base.SetGuid(1, id);
+		dw_profit.SetGuid(1, id);
+
+		xml x = ViewObject::MakeXml();
+		xstring billnote = L"<GDN><DocInfo><data><Item Name='报关发票' Field='Remark'></Item>" +
+			"<Item Name='报关箱单' Field='Remark'></Item>" +
+			"<Item Name='议付发票' Field='Remark'></Item>" +
+			"<Item Name='议付箱单' Field='Remark'></Item>" +
+			"<Item Name='装船通知' Field='Remark'></Item>" +
+			"<Item Name='加拿大海关发票' Field='Remark'></Item>" +
+			"<Item Name='FORMA' Field='Remark'></Item></data></DocInfo></GDN>";
+		x.LoadXml(billnote);
+		dw_billnote.Retrieve(x);
+	}
+
+	int onload()
+	{
+
+		xstring  userid = publiccode::GetUser().id;
+		//trace(userid);
+		haveUpdate = true;
+		InvoiceID = L"";
+		tabname = L"base";
+
+		OnAttachEvent();
+
+		dw_base = GetControl(L"dw_base");
+		dw_base.openUrl(L"/sale/view/GDN/template/Base");
+		dw_base.SetColHeaderHeight(0);
+		dw_base.SetRowSelectorWidth(0);
+		dw_base.SetHScrollState(false);
+
+		//dw_base.SetVScrollState(false);
+		//dw_base.SetColumnState(L"GoodsSource",false);
+
+		dw_item = GetControl(L"dw_item");
+		//dw_item.openUrl(L"/sale/view/GDN/template/GDNItem1");
+		dw_item.SetDataObject(GetServerUrl(), L"dev:sheet[GDN.v3.Ex.tpl/GDNItem]");
+
+		xstring  userno = publiccode::GetUser().no;
+
+		//alert(userno);
+		//trace(userno);
+		//trace(userid);
+		//if(userno==L"exp-442"){
+			//dw_item.SetReadOnlyColumn(L"Packages",false);
+		//}
+		dw_item.SetAskStyle(true);
+		dw_item.SetColumnState(L"GroupNo", true);
+		dw_item.SetColumnState(L"ItemID", false);
+		dw_item.SetColumnState(L"LineType", false);
+		dw_item.SetColumnState(L"LineNo", false);
+		dw_item.SetColumnState(L"Assortment", false);
+		dw_item.SetColumnState(L"GDNID", false);
+		dw_item.SetColumnState(L"SOLineID", false);
+		dw_item.SetColumnState(L"GDNLineID", false);
+		dw_item.SetColumnState(L"SOLineNo", false);
+		dw_item.SetColumnState(L"SKUNo", false);
+		dw_item.SetColumnState(L"BuyUnitPrice", false);
+		dw_item.SetColumnState(L"POCreatorID", false);
+		dw_item.SetColumnState(L"BuyAmount", false);
+		dw_item.SetColumnState(L"CostRate", false);
+		dw_item.SetColumnState(L"CommissionRate", false);
+		dw_item.SetColumnState(L"DiscountRate", false);
+		dw_item.SetColumnState(L"Remark", false);
+		//dw_item.SetColumnState(L"UOMCode",false);
+
+
+
+		dw_source = GetControl(L"dw_source");
+		dw_source.openUrl(L"/sale/view/GDN/template/item/sourcing");
+		dw_source.SetColumnState(L"POID", false);
+		dw_source.SetColumnState(L"SOLineID", false);
+		dw_source.SetColumnState(L"ItemID", false);
+		dw_source.SetColumnState(L"POItemID", false);
+		dw_source.SetColumnState(L"GDNLineID", false);
+		dw_source.SetColumnState(L"ETD", false);
+		dw_source.SetColumnState(L"InvoiceNo", false);
+		dw_source.SetColumnState(L"GDNID", false);
+		dw_source.SetColumnState(L"Amount", false);
+		dw_source.SetColumnState(L"GDNSourceAmout", false);
+		dw_source.SetColumnState(L"GDNLineAmout", false);
+
+		//dw_source.SetColumnState(L"Amount",false);
+
+
+		dw_custom = GetControl(L"dw_custom");
+		dw_custom.openUrl(L"/sale/view/Custom3/template/maint");
+		dw_custom.SetColumnState(L"ClassifyID", false);
+		dw_custom.SetColumnState(L"AmountEx", false);
+		//dw_custom.SetReadOnlyColumn(L"CustName",true);
+		dw_custom.SetColumnState(L"LineNo", false);
+
+
+		dw_customex = GetControl(L"dw_customex");
+		dw_customex.openUrl(L"/sale/view/GDN/template/item3");
+
+		dw_invoiceItem = GetControl(L"dw_invoiceex");
+		dw_invoiceItem.openUrl(L"/sale/view/GDN/template/item1");
+
+		dw_fcl = GetControl(L"dw_fcl");
+		dw_fcl.openUrl(L"/sale/view/GDN/template/item2");
+		dw_fcl.SetColumnState(L"GDNID", false);
+		dw_fcl.SetColumnState(L"UseFlag", false);
+		//dw_fcl.InsertRow(0);
+
+		dw_billnote = GetControl(L"dw_billnote");
+		dw_billnote.openUrl(L"/sale/view/GDN/template/billnote");
+
+		dw_profit = GetControl(L"dw_profit");
+		dw_profit.openUrl(L"/sale/view/GDN/template/Profit");
+		dw_profit.SetColHeaderHeight(0);
+		dw_profit.SetRowSelectorWidth(0);
+		dw_profit.SetHScrollState(false);
+
+		dw_cdelement = GetControl(L"dw_cdelement");
+		dw_cdelement.openUrl(L"/sale/view/Custom3/template/element");
+		dw_cdelement.SetColumnState(L"CDLineID", false);
+		dw_cdelement.SetColumnState(L"ClassifyID", false);
+		dw_cdelement.SetColumnState(L"GDNID", false);
+
+		dw_doclist = GetControl(L"dw_doclist");
+		dw_doclist.openUrl(L"/sale/view/GDN/template/doclist");
+
+		InvoiceNo = L"";
+		if (GetParam())
+		{
+			xaserverarg arg_param = new xaserverarg;
+			arg_param.setNativePointer(GetParam());
+
+			InvoiceNo = arg_param.GetArgString(L"InvoiceNo");
+			if (InvoiceNo == L"") InvoiceNo = arg_param.GetArgString(L"EntityNo");
+			if (InvoiceNo == L"")
+			{
+				xstring EntityID = arg_param.GetArgString(L"EntityID");
+				if (EntityID != L"") InvoiceNo = GDNView::GetInvoiceNoByID(EntityID);
+			}
+			InvoiceID = arg_param.GetArgString(L"EntityID");
+			if (InvoiceID == L"" && InvoiceNo != L"")
+			{
+				InvoiceID = GetInvoiceID(InvoiceNo);
+			}
+
+			readonly = false;
+			readonlyEx = false;
+			if (arg_param.GetArgString(L"ReadOnly") == L"true") readonly = true;
+			if (arg_param.GetArgString(L"ReadOnlyEx") == L"true") readonlyEx = true;
+		}
+
+		dw_base.SetEditUpperMode(true);
+		dw_item.SetEditUpperMode(true);
+		dw_custom.SetEditUpperMode(true);
+		dw_profit.SetEditUpperMode(true);
+		dw_source.SetEditUpperMode(true);
+		dw_cdelement.SetEditUpperMode(true);
+		dw_invoiceItem.SetEditUpperMode(true);
+		dw_customex.SetEditUpperMode(true);
+		dw_billnote.SetEditUpperMode(true);
+		dw_doclist.SetEditUpperMode(true);
+		dw_fcl.SetEditUpperMode(true);
+
+		datareading = false;
+		return 1;
+	}
+
+	int onloaded()
+	{
+		if (InvoiceNo != L"")
+		{
+			Retrieve(InvoiceNo);
+			//CalcProfit();//重新计算盈亏
+		}
+		else
+		{
+			OnNewInital();
+			if (GetParam())
+			{
+				xaserverarg arg = new xaserverarg;
+				arg.setNativePointer(GetParam());
+
+				if (arg.GetArgString(L"CustomerID") != L"")
+				{
+					dw_base.ItemChangeTo(1, L"CustomerID", arg.GetArgString(L"CustomerID"));
+					dw_base.SetItemDisplayString(1, L"CustomerID", arg.GetArgString(L"CustomerName"));
+					xstring dwname = L"dw_base";
+					xstring colname = L"CustomerID";
+					xstring value = arg.GetArgString(L"CustomerID");
+					KXMLDOMNodeList nlist = GetElement().selectNodes(L"//*[@name='" + dwname + L"']/trans[@for='" + colname + L"']");
+					ViewObject::TransData(nlist, dw_base, 1, colname, value);
+					trace(L"+++++L");
+				}
+			}
+			OnAddGDNItem();
+		}
+		if (readonly)
+		{
+			dw_base.SetReadOnly(true);
+			dw_item.SetReadOnly(true);
+			if (!readonlyEx)
+			{
+				dw_custom.SetReadOnly(true);
+				dw_cdelement.SetReadOnly(true);
+			}
+			dw_profit.SetReadOnly(true);
+			dw_source.SetReadOnly(true);
+			dw_invoiceItem.SetReadOnly(true);
+			dw_customex.SetReadOnly(true);
+			dw_billnote.SetReadOnly(true);
+			dw_doclist.SetReadOnly(true);
+			dw_fcl.SetReadOnly(true);
+		}
+		dw_base.SetColumnProp(L"VerificationSheet", L"cellprotect", L"1");
+
+		SetAgentEx();
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/xframe/kobject/kxml.hpp b/jrj/xframe/kobject/kxml.hpp
index f152062..966d8ad 100644
--- a/jrj/xframe/kobject/kxml.hpp
+++ b/jrj/xframe/kobject/kxml.hpp
@@ -255,6 +255,22 @@
 	};
 }}
 
+class KXMLDOMElementPtr
+{
+private:
+	KXMLDOMElement* m_pElement;
+public:
+	KXMLDOMElementPtr(LPARAM ele) :m_pElement((KXMLDOMElement* )ele) {}
+	KXMLDOMElementPtr(KXMLDOMElement* pEle) :m_pElement((KXMLDOMElement*)pEle) {}
+	KXMLDOMElementPtr(KXMLDOMElement ele) :m_pElement(new KXMLDOMElement(ele)) {}
+public:
+	KXMLDOMElement* value() { return m_pElement; }
+public:
+	operator KXMLDOMElement* () { return m_pElement; }
+	operator KXMLDOMElement& () { return *m_pElement; }
+	KXMLDOMElement*  operator -> () { return m_pElement; }
+};
+
 using KXMLDOMDocument=Hxsoft::XFrame::KXMLDOMDocument;
 using KXMLDOMNode=Hxsoft::XFrame::KXMLDOMNode;
 using KXMLDOMElement=Hxsoft::XFrame::KXMLDOMElement;
diff --git a/jrj/xframe/wobject/xaserverarg.hpp b/jrj/xframe/wobject/xaserverarg.hpp
index 9445853..0909ca6 100644
--- a/jrj/xframe/wobject/xaserverarg.hpp
+++ b/jrj/xframe/wobject/xaserverarg.hpp
@@ -120,74 +120,13 @@
 	xaserverarg* arg;
 public:
 	xaserverargPtr() :arg(new xaserverarg) {}
+	xaserverargPtr(LPARAM* val) :arg((xaserverarg*)val) {}
+	xaserverargPtr(xaserverarg* val) :arg(val) {}
+	xaserverargPtr(xaserverarg val) :arg(new xaserverarg(val)){}
+public:
+	xaserverarg* value() { return arg; }
 public:
 	operator xaserverarg& () { return *arg; }
 	operator xaserverarg* () { return arg; }
 	xaserverarg* operator ->() { return arg; }
-public:
-	int AddArg(string argname, string val, string typ = NULL) //alias "?AddArg@IXAServerArg@XFrame@Hxsoft@@QAEHPB_W00@Z";
-	{
-		return arg->AddArg(argname, val, typ);
-	}
-
-	int ClearArgs() //alias "?ClearArgs@IXAServerArg@XFrame@Hxsoft@@QAEHXZ"  from "xframe.dll";
-	{
-		return arg->ClearArgs();
-	}
-
-	int RemoveArg(string argname) //alias "?RemoveArg@IXAServerArg@XFrame@Hxsoft@@QAEHPB_W@Z";
-	{
-		return arg->RemoveArg(argname);
-	}
-	/*int SetArg(string argname,double val,string typ=NULL) //alias "?SetArg@IXAServerArg@XFrame@Hxsoft@@QAEHPB_WNO@Z";
-	{
-		return arg->SetArg(argname,val,typ);
-	}
-	int SetArg(string argname,int val,string typ=NULL) //alias "?SetArg@IXAServerArg@XFrame@Hxsoft@@QAEHPB_WHO@Z";
-	{
-		return arg->SetArg(argname,val,typ);
-	}*/
-	int SetArg(string argname, string val, string typ = NULL) //alias "?SetArg@IXAServerArg@XFrame@Hxsoft@@QAEHPB_W00@Z";
-	{
-		return arg->SetArg(argname, val, typ);
-	}
-	string GetString() //alias "?GetString@IXAServerArg@XFrame@Hxsoft@@QAEPB_WXZ"  from "xframe.dll";
-	{
-		return arg->GetString();
-	}
-	static void* CreateInstance() //alias "?CreateInstance@IXAServerArg@XFrame@Hxsoft@@SAPAV123@XZ";
-	{
-		return Hxsoft::XFrame::IXAServerArg::CreateInstance();
-	}
-	static int ReleaseInstance(void* p) //alias "?ReleaseInstance@IXAServerArg@XFrame@Hxsoft@@SAHPAV123@@Z"; 
-	{
-		Hxsoft::XFrame::IXAServerArg::ReleaseInstance((Hxsoft::XFrame::IXAServerArg*)p);
-		return 1;
-	}
-	bool GetArgBool(string argname) //alias "?GetArgBool@IXAServerArg@XFrame@Hxsoft@@QAE_NPA_W@Z";
-	{
-		return arg->GetArgBool((LPTSTR)argname);
-	}
-	double GetArgDouble(string argname) //alias "?GetArgDouble@IXAServerArg@XFrame@Hxsoft@@QAENPA_W@Z";
-	{
-		return arg->GetArgDouble((LPTSTR)argname);
-	}
-	int  GetArgInt(string argname) //alias "?GetArgInt@IXAServerArg@XFrame@Hxsoft@@QAEHPA_W@Z";
-	{
-		return arg->GetArgInt((LPTSTR)argname);
-	}
-	string GetArgString(string argname) //alias "?GetArgString@IXAServerArg@XFrame@Hxsoft@@QAEPA_WPA_W@Z";
-	{
-		return arg->GetArgString((LPTSTR)argname);
-	}
-
-	int SetParam(LPCTSTR pArgName, LPARAM pValue)
-	{
-		return arg->SetParam(pArgName, pValue);
-	}
-
-	LPARAM GetParam(LPCTSTR pArgName)
-	{
-		return arg->GetParam(pArgName);
-	}
 };
\ No newline at end of file

--
Gitblit v1.9.3