From 6a4764ee747fff45d89ef48f98873d6409e4f85e Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期二, 16 七月 2024 17:22:23 +0800
Subject: [PATCH] update

---
 jrj/project/business/BasicCode/SKUItem.categoryselect.cpp |  178 
 jrj/project/business/BasicCode/ForwarderList.cpp          |  255 
 jrj/project/business/BasicCode/AddUomGroup.cpp            |  221 
 jrj/project/business/BasicCode/PaymentTerm.maint.cpp      |  314 
 jrj/project/business/BasicCode/SKUTemplate.cpp            |  824 ++--
 jrj/project/business/BasicCode/TestingCompanyMaint.cpp    |  604 +-
 jrj/project/business/BasicCode/ShipcompanyList.cpp        |   63 
 jrj/project/business/BasicCode/FCL.cpp                    |  679 ++-
 jrj/project/business/BasicCode/BrandInforMaint.cpp        |  190 
 jrj/project/business/BasicCode/QuickCode_Tree.cpp         | 1314 +++---
 jrj/project/business/BasicCode/ForwarderMaint.cpp         |  876 ++--
 jrj/project/business/BasicCode/ExpressList.cpp            |   67 
 jrj/project/business/BasicCode/QuickCode.cpp              | 1310 +++---
 jrj/project/business/BasicCode/CustomerMarketMaint.cpp    |  177 
 jrj/project/business/BasicCode/TestingCompanyList.cpp     |   64 
 jrj/project/business/BasicCode/Simple.Menu.Config.cpp     |  224 
 jrj/project/business/BasicCode/brand.regtype.cpp          |  300 
 jrj/project/business/BasicCode/CartermList.cpp            |  319 
 jrj/project/business/BasicCode/SKUItem.select.cpp         |   56 
 jrj/project/business/BasicCode/ShipcompanyMaint.cpp       |  603 +-
 jrj/project/business/BasicCode/ExpressMaint.cpp           |  646 +-
 jrj/project/business/BasicCode/CustomerMarketList.cpp     |   64 
 jrj/project/business/BasicCode/SKUTemplate.select.cpp     |   56 
 jrj/project/business/BasicCode/BrandInforList.cpp         |   65 
 jrj/project/business/BasicCode/SKUItem.cpp                |  584 +-
 jrj/project/business/BasicCode/PaymentTerm.list.cpp       |  127 
 26 files changed, 5,168 insertions(+), 5,012 deletions(-)

diff --git a/jrj/project/business/BasicCode/AddUomGroup.cpp b/jrj/project/business/BasicCode/AddUomGroup.cpp
index 20fea8e..2327ddd 100644
--- a/jrj/project/business/BasicCode/AddUomGroup.cpp
+++ b/jrj/project/business/BasicCode/AddUomGroup.cpp
@@ -1,122 +1,121 @@
-use "win.vl"
-use "treeview.vm"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xdwtable.vm]"
-use "pref.vl"
-use "dev:vm[xml.vm]"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:vm[control.vm]"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.xpage
-[
-	AddUomGroup is extend win__;
-	about AddUomGroup
-	[
-		control:
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument; 
+class __declspec(dllexport) AddUomGroup : public xwin
+{
+
+public:
+	AddUomGroup(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static AddUomGroup* CreateInstance(void* implPtr, void* hWnd)
+	{
+		AddUomGroup* pWin = new AddUomGroup(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+
+	int SetAgent()
+	{
+		return 1;
+	}
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		int SetAgent();
+
+		//重置工具条
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"cb_cancel")
+			CloseWindow();
+		else if (comdid == L"cb_ok")
+		{
+			control xc = new control;
+			xc.setNativePointer(GetControl(L"Txt"));
+			xstring name = xc.GetText();
+			xaserverarg arg;
+
+			arg = GetArg();
+			arg.AddArg(L"GroupName", name);
+			arg.AddArg(L"return", L"ok");
+			CloseWindow();
+		}
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&AddUomGroup::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&AddUomGroup::OnSetFocus);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+
+		OnAttachEvent();
+
+		return 1;
+	}
+
+
+
+	int onload()
+	{
+		SetArg();
+		OnInitial();
+
 		
-		method:
-		[
 
-			
-			int SetAgent()
+			if (GetWinParam())
 			{
-				return 1;
-			}
-			//焦点激活处理函数
-			int OnSetFocus(ref TEvent evt,int p)
-			{
-				int SetAgent();
+				xaserverarg arg;
 
-				//重置工具条
-				return 1;
-			}
-
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				if (comdid=="cb_cancel")
-					CloseWindow();
-				else if(comdid=="cb_ok")
+				arg = GetArg();
+				xstring note = arg.GetArgString(L"note");
+				if (note == L"修改")
 				{
-					control__ xc = new control__;
-					xc.setNativePointer(this.GetControl("Txt"));				
-					string name = xc.GetText();				
-					xaserverarg__ arg=new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());	
-					arg = GetParam();
-					arg.AddArg("GroupName",name);
-					arg.AddArg("return","ok");
-					CloseWindow();				
+					xstring name = arg.GetArgString(L"GroupName");
+					control xc = new control;
+					xc.setNativePointer(GetControl(L"Txt"));
+					xc.SetText(name);
 				}
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-			}
-			
-			int OnInitial()
-			{
-				SetAgent();
-
-				OnAttachEvent();
-				
-				return 1;
-			}
-			
-
-			
-			int onload()
-			{
-				OnInitial();
-				
-				if(this.GetParam())
+				xstring id = arg.GetArgString(L"m_id");
+				if (id == L"FND_UOM")
 				{
-
-					if (GetParam())
-					{
-						xaserverarg__ arg=new xaserverarg__;
-						arg.setNativePointer(arg.CreateInstance());	
-						arg = GetParam();					
-						string note = arg.GetArgString("note");
-						if(note=="修改")
-						{	
-							string name = arg.GetArgString("GroupName");	
-							control__ xc = new control__;
-							xc.setNativePointer(GetControl("Txt"));
-							xc.SetText(name);							
-						}	
-						string id = arg.GetArgString("m_id");
-						if(id =="FND_UOM")
-						{	
-							win__::SetWindowText(this.GetHWND(),"计量单位");						
-						}
-						else if(id =="FND_CustomerSource")
-						{	
-							win__::SetWindowText(this.GetHWND(),"客户来源");						
-						}
-						else if(id =="FND_AuxiliaryAttribute")
-						{	
-							win__::SetWindowText(this.GetHWND(),"辅助属性");						
-						}						
-					}
+					SetWindowText(GetHWND(), L"计量单位");
 				}
-				
-				return 1;
+				else if (id == L"FND_CustomerSource")
+				{
+					SetWindowText(GetHWND(), L"客户来源");
+				}
+				else if (id == L"FND_AuxiliaryAttribute")
+				{
+					SetWindowText(GetHWND(), L"辅助属性");
+				}
 			}
-		]
 		
-	]
-]
\ No newline at end of file
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/BrandInforList.cpp b/jrj/project/business/BasicCode/BrandInforList.cpp
index 7beda87..48538a7 100644
--- a/jrj/project/business/BasicCode/BrandInforList.cpp
+++ b/jrj/project/business/BasicCode/BrandInforList.cpp
@@ -1,29 +1,38 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-unit vbusiness.entity
-[
-	BrandInforList is extend list;
-	about BrandInforList
-	[
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-		
-		method:
-		[
-			int ViewUpdate(param pr,string updateItem,xaserverarg__  arg)
-			{
-				if(	updateItem=="del"){
-					int DelRow = this.dw_list.GetRow();
-					this.dw_list.DeleteRow(DelRow);
-				}
-				return 1;
-			}		
-			int onload()
-			{
-				list::onload();
-				return -1;
-			}
-					
-		]
-	]
-]
\ No newline at end of file
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) BrandInforList : public xwin
+{
+
+public:
+	BrandInforList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static BrandInforList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		BrandInforList* pWin = new BrandInforList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del") {
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+		}
+		return 1;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/BrandInforMaint.cpp b/jrj/project/business/BasicCode/BrandInforMaint.cpp
index a13f50f..148525a 100644
--- a/jrj/project/business/BasicCode/BrandInforMaint.cpp
+++ b/jrj/project/business/BasicCode/BrandInforMaint.cpp
@@ -1,98 +1,100 @@
-use "system.vl"
-use "win.vl"
-use "maint.vl"
-use "file.vl"
-use "dev:vm[xcell.vm]"
-use "publiccode.vl"
-use "dev:vm[pagecontrol.vm]"
-unit vbusiness.entity
-[
-	BrandInforMaint is extend maint;
-	about BrandInforMaint
-	[
-		field:
-		[
-			msxml::IXMLDOMDocument m_configDoc;
-			string m_userid;
-			string m_username;
-			string ContactID;
-			xdwtable__ dw_base;
-			xcell__ dw_cell;			
-		]
-		
-		method:
-		[
-			int alert(string str)
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) BrandInforMaint : public xframe
+{
+public:
+
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	BrandInforMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static BrandInforMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		BrandInforMaint* pWin = new BrandInforMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"update")
+		{
+
+			dw_base.ResetUpdateStatus();
+			return 1;
+		}
+	}
+	xstring GetEntityData(param pr)
+	{
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		//trace(L"------x");
+		trace(x.xml());
+		return x.xml();
+	}
+	int onload()
+	{
+		maint::onload();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+
+		dw_base.SetColHeaderHeight(0);
+		dw_base.SetRowSelectorWidth(0);
+
+		dw_base.SetScrollState(false);
+
+
+		/*if (!maint::m_EntityID)
+		{
+			//xstring suserid = TApp::GetUserInfo().id;
+			xstring suserid = xaserver::GetUserId();
+			xstring susername = TApp::GetUserInfo().name;
+			xstring sdate = TApp::GetCurDate();
+			dw_base.SetItemString(dw_base.GetRow(),L"CreatorID",suserid);//Party
+			dw_base.SetItemDisplayString(dw_base.GetRow(),L"CreatorID",susername);
+			dw_base.SetItemString(dw_base.GetRow(),L"CreateDate",sdate);
+			xml x;
+
+			xaserverarg arg;
+
+			arg.AddArg(L"id", suserid);
+			if(xaserver::ExecXQuery(L"",L"[OrgInfo.xq]",arg.GetString(),x)!=1)
 			{
-				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
+				trace(x.xml());
+				return nil;
 			}
-			int ViewUpdate(param pr,string updateItem,xaserverarg__  arg)
+			//alert(x.xml());
+			KXMLDOMElement e= x.documentElement();
+			trace(e.xml);
+			if(e.selectSingleNode(L"orgid"))
 			{
-				if(updateItem=="update")
-				{
-				
-					dw_base.ResetUpdateStatus();				
-					return 1;
-				}
-			}					
-			string GetEntityData(param pr)
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc());
-				//trace("------x");
-				trace(x.GetXml());
-				return x.GetXml();
-			}					
-			int onload()
-			{	
-				maint::onload();
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(GetControl("dw_base"));
-				
-				dw_base.SetColHeaderHeight(0);
-				dw_base.SetRowSelectorWidth(0);
-
-				dw_base.SetScrollState(false);
-
-		
-				/*if (!maint::m_EntityID)
-				{					
-					//string suserid = TApp::GetUserInfo().id;
-					string suserid = xaserver__::GetUserId();				
-					string susername = TApp::GetUserInfo().name;
-					string sdate = TApp::GetCurDate();		
-					dw_base.SetItemString(dw_base.GetRow(),"CreatorID",suserid);//Party
-					dw_base.SetItemDisplayString(dw_base.GetRow(),"CreatorID",susername);				
-					dw_base.SetItemString(dw_base.GetRow(),"CreateDate",sdate);
-					xml__ x=new xml__;
-					x.setNativePointer(xml__::CreateInstance());			
-					xaserverarg__ arg=new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());		
-					arg.AddArg("id", suserid);			
-					if(xaserver__::ExecXQuery("","[OrgInfo.xq]",arg.GetString(),x)!=1)
-					{
-						trace(x.GetXml());
-						return nil;
-					}
-					//alert(x.GetXml());
-					msxml::IXMLDOMElement e= x.GetXmlDoc().documentElement;
-					trace(e.xml);
-					if(e.selectSingleNode("orgid"))
-					{	
-						string orgid= e.selectSingleNode("orgid").text;	
-						dw_base.SetItemString(1,"OrgID",orgid);				
-					}	
-
-					if(e.selectSingleNode("orgname"))
-					{	
-						string orgname = e.selectSingleNode("orgname").text;
-						dw_base.SetItemDisplayString(1,"OrgID",orgname);						
-					}				
-				}*/				
+				xstring orgid= e.selectSingleNode(L"orgid").text();
+				dw_base.SetItemString(1,L"OrgID",orgid);
 			}
-		]
-	]
-]
\ No newline at end of file
+
+			if(e.selectSingleNode(L"orgname"))
+			{
+				xstring orgname = e.selectSingleNode(L"orgname").text();
+				dw_base.SetItemDisplayString(1,L"OrgID",orgname);
+			}
+		}*/
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CartermList.cpp b/jrj/project/business/BasicCode/CartermList.cpp
index c09b17a..dc1585c 100644
--- a/jrj/project/business/BasicCode/CartermList.cpp
+++ b/jrj/project/business/BasicCode/CartermList.cpp
@@ -1,165 +1,170 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-use "file.vl"
-unit vbusiness.entity
-[
-	CartermList is extend list;
-	about CartermList
-	[
-		field:
-		[	
-			xdwpages__ dw_pages;
-			xstring m_QueryTxt;
-			msxml::IXMLDOMDocument m_configDoc;
-			static int dw_hWnd;			
-		]
-		
-		method:
-		[
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-			int alert(xstring str)
-			{
-				//win__::MessageBox(this.GetHWND(),str,L"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
-			}		
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-		
-			xstring GetGuid(){
-				return TApp::GetGuid();			
-			}							
-			int OnAddrow()
-			{
-				this.dw_list.InsertRow(0); 
-				int rows = this.dw_list.GetRowCount();
-				this.dw_list.SetRow(rows);					
-				this.dw_list.SetItemString(rows,L"PartyID",GetGuid());	
-				this.dw_list.SetItemString(rows,L"ContactID",GetGuid());						
-				this.dw_list.SetItemString(rows,L"PAStatus",L"1");
-				this.dw_list.SetItemString(rows,L"PStatus",L"1");
-				this.dw_list.SetItemString(rows,L"PCStatus",L"1");					
-				this.dw_list.SetItemString(rows,L"Type",L"7");					
-			}
-			int OnInsertRow()
-			{
-				int row = this.dw_list.GetRow();
-				if(row<1 || row>this.dw_list.GetRowCount()) return 0;
-				this.dw_list.InsertRow(row); 
-				this.dw_list.SetItemString(row,L"PartyID",GetGuid());					
-				this.dw_list.SetItemString(row,L"ContactID",GetGuid());						
-				this.dw_list.SetItemString(row,L"PAStatus",L"1");
-				this.dw_list.SetItemString(row,L"PStatus",L"1");
-				this.dw_list.SetItemString(row,L"PCStatus",L"1");					
-				this.dw_list.SetItemString(row,L"Type",L"7");					
-			}
-			
-			int ViewUpdate(param pr,xstring updateItem,xaserverarg__   arg)
-				{
-					if(	updateItem==L"del")
-					{
-						int DelRow = this.dw_list.GetRow();
-						this.dw_list.DeleteRow(DelRow);
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) CartermList : public xwin
+{
+public:
+	xdwgrid	dw_list;
+	xdwpages dw_pages;
+	xstring m_QueryTxt;
+	KXMLDOMDocument m_configDoc;
+	static int dw_hWnd;
 
-					}
+public:
+	CartermList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static CartermList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		CartermList* pWin = new CartermList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
 
-					return 1;
-				}
-					
-			int OnDeleteRow()
-			{	
-				int rows = this.dw_list.GetRowCount();
-				int row2 = this.dw_list.GetPrevSelectRow(rows);
-				while(row2 > 0){
-					this.dw_list.DeleteRow(row2);
-					row2 = this.dw_list.GetPrevSelectRow(row2 - 1);
-				}
-				this.dw_list.SelectRow(0, false);			
-			}
-			
-			int OnSave()
-			{				
-				/*xstring no = this.dw_list.GetItemString(1,L"CarTermNo");
-				if(no==L""){
-					alert(L"请输入车队编码!");
-					return -1;
-				}	
-				xstring SName = this.dw_list.GetItemString(1,L"Name");
-				if(SName==L""){
-					alert(L"请输入车队名称!");
-					return -1;
-				}
-				xstring ContacterName = this.dw_list.GetItemString(1,L"ContacterName");
-				if(ContacterName==L""){
-					alert(L"请输入联系人名称!");
-					return -1;
-				}	*/										
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				this.dw_list.AcceptText();					
-				this.dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
-				trace(x.GetXml());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg(L"content",x.GetXml());						
-				arg.AddArg(L"dbmap",L"CarTerm.dbmap");		
-				if (getUrl(L"/sale/data/CarTerm/entity/carterm/save",arg.GetString(),x) != 1)
-				{
-					trace(L"error:"+x.GetXml());
-					alert(L"保存失败!");
-					return 0;
-				}						
-				else
-				{	
-					trace(x.GetXml());
-					if(x.GetXmlDoc().selectSingleNode(L"error"))
-					{
-						alert(L"保存出错2!");
-						return 0;
-					}					
-					alert(L"保存成功!");					
-					this.dw_list.ResetUpdateStatus();							
-				}
-				this.dw_list.Redraw();			
-				return 0;
-			}				
-			int OnCmdDispatch(xstring comdid)
+
+	xstring GetGuid() {
+		return TApp::GetGuid();
+	}
+	int OnAddrow()
+	{
+		dw_list.InsertRow(0);
+		int rows = dw_list.GetRowCount();
+		dw_list.SetRow(rows);
+		dw_list.SetItemString(rows, L"PartyID", GetGuid());
+		dw_list.SetItemString(rows, L"ContactID", GetGuid());
+		dw_list.SetItemString(rows, L"PAStatus", L"1");
+		dw_list.SetItemString(rows, L"PStatus", L"1");
+		dw_list.SetItemString(rows, L"PCStatus", L"1");
+		dw_list.SetItemString(rows, L"Type", L"7");
+	}
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<1 || row>dw_list.GetRowCount()) return 0;
+		dw_list.InsertRow(row);
+		dw_list.SetItemString(row, L"PartyID", GetGuid());
+		dw_list.SetItemString(row, L"ContactID", GetGuid());
+		dw_list.SetItemString(row, L"PAStatus", L"1");
+		dw_list.SetItemString(row, L"PStatus", L"1");
+		dw_list.SetItemString(row, L"PCStatus", L"1");
+		dw_list.SetItemString(row, L"Type", L"7");
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		int rows = dw_list.GetRowCount();
+		int row2 = dw_list.GetPrevSelectRow(rows);
+		while (row2 > 0) {
+			dw_list.DeleteRow(row2);
+			row2 = dw_list.GetPrevSelectRow(row2 - 1);
+		}
+		dw_list.SelectRow(0, false);
+	}
+
+	int OnSave()
+	{
+		/*xstring no = dw_list.GetItemString(1,L"CarTermNo");
+		if(no==L""){
+			alert(L"请输入车队编码!");
+			return -1;
+		}
+		xstring SName = dw_list.GetItemString(1,L"Name");
+		if(SName==L""){
+			alert(L"请输入车队名称!");
+			return -1;
+		}
+		xstring ContacterName = dw_list.GetItemString(1,L"ContacterName");
+		if(ContacterName==L""){
+			alert(L"请输入联系人名称!");
+			return -1;
+		}	*/
+		xml x;
+
+		dw_list.AcceptText();
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"CarTerm.dbmap");
+		if (xurl::get(L"/sale/data/CarTerm/entity/carterm/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
 			{
-				if(comdid.find(L"action:bill.row.add",0)>=0) {
-					OnAddrow();
-				}
-				else if(comdid.find(L"bill.row.insert",0)>=0) {
-					OnInsertRow(); 							
-				}
-				else if(comdid.find(L"bill.row.delete",0)>=0) {
-					OnDeleteRow();
-				}
-				else if(comdid.find(L"bill.save",0)>=0) {					
-					trace(1);
-					OnSave();
-				}				
+				alert(L"保存出错2!");
 				return 0;
 			}
+			alert(L"保存成功!");
+			dw_list.ResetUpdateStatus();
+		}
+		dw_list.Redraw();
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			OnSave();
+		}
+		return 0;
+	}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				AttachEvent(L"WM_XCOMMAND",OnXCommand);			
-				return 0;
-			}
-			
-			int onload()
-			{			
-				OnAttachEvent();								
-				list::onload();
-				this.dw_list.SetReadOnly(false);	
-				return -1;
-			}
-					
-		]
-	]
-]
\ No newline at end of file
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&CartermList::OnXCommand);
+		return 1;
+	}
+
+	int onload()
+	{
+		OnAttachEvent();
+		list::onload();
+		dw_list.SetReadOnly(false);
+		return -1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CustomerMarketList.cpp b/jrj/project/business/BasicCode/CustomerMarketList.cpp
index c6843e4..7c3a0fc 100644
--- a/jrj/project/business/BasicCode/CustomerMarketList.cpp
+++ b/jrj/project/business/BasicCode/CustomerMarketList.cpp
@@ -1,29 +1,37 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-unit vbusiness.entity
-[
-	CustomerMarketList is extend list;
-	about CustomerMarketList
-	[
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-		
-		method:
-		[
-			int ViewUpdate(param pr,string updateItem,xaserverarg__  arg)
-			{
-				if(	updateItem=="del"){
-					int DelRow = this.dw_list.GetRow();
-					this.dw_list.DeleteRow(DelRow);
-				}
-				return 1;
-			}		
-			int onload()
-			{
-				list::onload();
-				return -1;
-			}
-					
-		]
-	]
-]
\ No newline at end of file
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) CustomerMarketList : public xwin
+{
+
+public:
+	CustomerMarketList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static CustomerMarketList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		CustomerMarketList* pWin = new CustomerMarketList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del") {
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+		}
+		return 1;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CustomerMarketMaint.cpp b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
index 136986c..1198a1b 100644
--- a/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
+++ b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
@@ -1,89 +1,92 @@
-use "system.vl"
-use "win.vl"
-use "maint.vl"
-use "file.vl"
-use "dev:vm[xcell.vm]"
-unit vbusiness.entity
-[
-	CustomerMarketMaint is extend maint;
-	about CustomerMarketMaint
-	[
-		field:
-		[
-			msxml::IXMLDOMDocument m_configDoc;
-			string m_userid;
-			string m_username;
-			string ContactID;
-			xdwtable__ dw_base;
-			xcell__ dw_cell;			
-		]
-		
-		method:
-		[
-			int alert(string str)
-			{
-				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
-			}
-			int ViewUpdate(param pr,string updateItem,xaserverarg__  arg)
-			{
-				if(updateItem=="update")
-				{
-				
-					dw_base.ResetUpdateStatus();				
-					return 1;
-				}
-			}					
-			string GetEntityData(param pr)
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc());
-				//trace("------x");
-				trace(x.GetXml());
-				return x.GetXml();
-			}					
-			int onload()
-			{	
-				maint::onload();
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));				
-				if (!maint::m_EntityID)
-				{					
-					//string suserid = TApp::GetUserInfo().id;
-					string suserid = xaserver__::GetUserId();				
-					string susername = TApp::GetUserInfo().name;
-					string sdate = TApp::GetCurDate();		
-					dw_base.SetItemString(dw_base.GetRow(),"CreatorID",suserid);//Party
-					dw_base.SetItemDisplayString(dw_base.GetRow(),"CreatorID",susername);				
-					dw_base.SetItemString(dw_base.GetRow(),"CreateDate",sdate);
-					xml__ x=new xml__;
-					x.setNativePointer(xml__::CreateInstance());			
-					xaserverarg__ arg=new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());		
-					arg.AddArg("id", suserid);			
-					if(xaserver__::ExecXQuery("","[OrgInfo.xq]",arg.GetString(),x)!=1)
-					{
-						trace(x.GetXml());
-						return nil;
-					}
-					//alert(x.GetXml());
-					msxml::IXMLDOMElement e= x.GetXmlDoc().documentElement;
-					trace(e.xml);
-					if(e.selectSingleNode("orgid"))
-					{	
-						string orgid= e.selectSingleNode("orgid").text;	
-						dw_base.SetItemString(1,"OrgID",orgid);				
-					}	
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-					if(e.selectSingleNode("orgname"))
-					{	
-						string orgname = e.selectSingleNode("orgname").text;
-						dw_base.SetItemDisplayString(1,"OrgID",orgname);						
-					}				
-				}				
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) CustomerMarketMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	CustomerMarketMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static CustomerMarketMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		CustomerMarketMaint* pWin = new CustomerMarketMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"update")
+		{
+
+			dw_base.ResetUpdateStatus();
+			return 1;
+		}
+	}
+	xstring GetEntityData(param pr)
+	{
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		//trace(L"------x");
+		trace(x.xml());
+		return x.xml();
+	}
+	int onload()
+	{
+		maint::onload();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		if (!maint::m_EntityID)
+		{
+			//xstring suserid = TApp::GetUserInfo().id;
+			xstring suserid = xaserver::GetUserId();
+			xstring susername = TApp::GetUserInfo().name;
+			xstring sdate = TApp::GetCurDate();
+			dw_base.SetItemString(dw_base.GetRow(), L"CreatorID", suserid);//Party
+			dw_base.SetItemDisplayString(dw_base.GetRow(), L"CreatorID", susername);
+			dw_base.SetItemString(dw_base.GetRow(), L"CreateDate", sdate);
+			xml x;
+
+			xaserverarg arg;
+
+			arg.AddArg(L"id", suserid);
+			if (xaserver::ExecXQuery(L"", L"[OrgInfo.xq]", arg.GetString(), x) != 1)
+			{
+				trace(x.xml());
+				return nil;
 			}
-		]
-	]
-]
\ No newline at end of file
+			//alert(x.xml());
+			KXMLDOMElement e = x.documentElement();
+			trace(e.xml());
+			if (e.selectSingleNode(L"orgid"))
+			{
+				xstring orgid = e.selectSingleNode(L"orgid").text();
+				dw_base.SetItemString(1, L"OrgID", orgid);
+			}
+
+			if (e.selectSingleNode(L"orgname"))
+			{
+				xstring orgname = e.selectSingleNode(L"orgname").text();
+				dw_base.SetItemDisplayString(1, L"OrgID", orgname);
+			}
+		}
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExpressList.cpp b/jrj/project/business/BasicCode/ExpressList.cpp
index 047b16d..18d0b52 100644
--- a/jrj/project/business/BasicCode/ExpressList.cpp
+++ b/jrj/project/business/BasicCode/ExpressList.cpp
@@ -1,34 +1,39 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-unit vbusiness.entity
-[
-	ExpressList is extend list;
-	about ExpressList
-	[
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-		
-		method:
-		[
-			int onload()
-			{
-				list::onload();
-				return -1;
-			}
-			
-			int ViewUpdate(param pr,string updateItem,xaserverarg__   arg)
-				{
-					
-					if(	updateItem=="del")
-					{
-						int DelRow = this.dw_list.GetRow();
-						this.dw_list.DeleteRow(DelRow);
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-					}
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ExpressList : public xwin
+{
+public:
+	ExpressList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static ExpressList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ExpressList* pWin = new ExpressList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
 
-					return 1;
-				}
-					
-		]
-	]
-]
\ No newline at end of file
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExpressMaint.cpp b/jrj/project/business/BasicCode/ExpressMaint.cpp
index e0402a7..a58ca65 100644
--- a/jrj/project/business/BasicCode/ExpressMaint.cpp
+++ b/jrj/project/business/BasicCode/ExpressMaint.cpp
@@ -1,342 +1,346 @@
-use "system.vl"
-use "win.vl"
-use "maint.vl"
-use "file.vl"
-use "dev:vm[xcell.vm]"
-unit vbusiness.entity
-[
-	ExpressMaint is extend maint;
-	about ExpressMaint
-	[
-		field:
-		[
-			msxml::IXMLDOMDocument m_configDoc;
-			xdwtable__ dw_base;
-			string m_userid;
-			string m_username;
-			string ContactID;
-			xcell__ dw_cell;				
-		]
-		
-		method:
-		[
-			int alert(string str)
-			{
-				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
-			}			
-			int setCellReadOnly()
-			{		
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));			
-				dw_cell = new xcell__;
-				dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));		
-				string strnew = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
-				dw_cell.SetCellProps(2,2,strnew);			
-				return 0;
-			}			
-		
-		
-			string GetGuid(){
-				return TApp::GetGuid();			
-			}					
-			int OnClear(){
-				if(this.m_EntityID ==""){
-					trace(1);
-					m_userid = TApp::GetUserInfo().id;
-					m_username = TApp::GetUserInfo().name;						
-					dw_base = new xdwtable__;
-					dw_base.setNativePointer(this.GetControl("dw_base"));									
-					dw_base.SetItemString(1,"PartyID",GetGuid());						
-					dw_base.SetItemString(1,"PStatus","1");
-					dw_base.SetItemDisplayString(1,"PStatus","有效");	
-					dw_base.SetItemString(1,"PADStatus","1");
-					dw_base.SetItemString(1,"CreatorID",m_userid);				
-					dw_base.SetItemString(1,"AddressID",GetGuid());
-					dw_base.SetItemString(1,"PADIdentifyAddressFlag","Y");	
-					dw_base.SetItemString(1,"PrimaryFlag","Y");								
-					dw_base.SetItemString(1,"Type","8");					
-					dw_base.SetItemString(1,"EnterName",m_userid);
-					dw_base.SetItemDisplayString(1,"EnterName",m_username);				
-					dw_base.SetItemString(1,"CreateDate",TApp::GetCurDate());			
-					dw_base.SetItemString(1,"PBAStatus","Y");					
-						
-			
-				}
-				return 0;
-			}					
-		
-			int OnSetFocus(ref TNotifyEvent evt,int p)
-			{
-				SetAgent("maint");
-				return 1;
-			}
-			int OnAddrow()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));					
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{	
-					dw.InsertRow(0);
-					int rows = dw.GetRowCount();
-					dw.SetRow(rows);					
-			
-				}				
-				return 1;				
-			}
-			int OnInsertRow()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{
-					int row=dw.GetRow();
-					if(row<1) return 0;					
-					dw.InsertRow(row);
-					dw.SetRow(row);					
-				
-				}
-				return 1;
-			}
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-			int OnDeleteRow()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{
-					int row=dw.GetRow();
-					if(row<1) return 0;
-					/*string del = dw.GetItemString(row,8);
-					if(del!="")
-					{
-						if(m_dels=="")
-						{	
-							m_dels=del;						
-						}		
-						else 
-						{	
-							string temp=m_dels;
-							m_dels=del + "|" + temp;
-						//+= "|"+del;						
-						}	
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-					}*/				
-					dw.DeleteRow(row);	
-					dw.SetRow(row - 1);						
-				}
-					//trace(m_dels);
-				return 1;
-			}
-			string getGoodsNo()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				if (getUrl("/sale/data/LogisticsCode/pref/express/PartyNo",arg.GetString(),x) != 1)
-				{
-					trace(x.GetXml());
-					return "";
-				}			
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					string code = e.text;
-				trace(code);
-					return "E"+code;
-				}
-				return "E1000";
-			}			
-			int OnPreSave()
-			{
-				dw_base.AcceptText();					
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));
-				string ExpressNo = dw_base.GetItemString(1,"ExpressNo",0);
-				if (ExpressNo=="" || ExpressNo== nil) 
-					{
-					dw_base.SetItemString(1,"ExpressNo",getGoodsNo());			
-				}				
-				xdwtable__ dwcon =  new xdwtable__;				
-				dwcon.setNativePointer(dw_base.FindDwTable("item",0));
-				int i;				
-				for(i=1;i<=dwcon.GetRowCount();i++)
-				{
-					string aTemp;				
-					string aName = dwcon.GetItemString(i,"ContacterName",0);
-					if (aName=="" || aName== nil)
-					{
-						aTemp=dwcon.GetItemString(i,"Mobile",0)+dwcon.GetItemString(i,"TEL",0)+dwcon.GetItemString(i,"Fax",0)+dwcon.GetItemString(i,"Email",0)+dwcon.GetItemString(i,"PCRemark",0);	
-						trace(aTemp);
-						if(aTemp !="" && aTemp != nil)
-						{
-							alert("联系人名称必填!");
-							return -1;
-						}
-					}
-					else{
-							string ContactID = dwcon.GetItemString(i,"ContactID",0);
-							if (ContactID=="" || ContactID== nil)					
-							{	
-								dwcon.SetItemString(i,"ContactID",GetGuid());
-								dwcon.SetItemString(i,"PCStatus","1");					
-								//dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));								
-							}	
-						
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ExpressMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xdwtable dw_base;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xcell dw_cell;
+public:
+	ExpressMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ExpressMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ExpressMaint* pWin = new ExpressMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		dw_cell.SetCellProps(2, 2, strnew);
+		return 0;
+	}
 
 
-					}
-				}
-				xdwtable__ dwcon1 =  new xdwtable__;				
-				dwcon1.setNativePointer(dw_base.FindDwTable("PartyBankAccount",0));
-				int j;
-				for (j=1;j <= dwcon1.GetRowCount();j++)
-				{
-					string sPBABankName = dwcon1.GetItemString(j,"Bank");
-					string sPBABankAccountNo = dwcon1.GetItemString(j,"BankNo");
-					if (sPBABankName == nil) sPBABankName = "";
-					if (sPBABankAccountNo == nil) sPBABankAccountNo = "";
-					string sPBAAll = sPBABankName + sPBABankAccountNo;
-					if (sPBAAll != "")
-					{
-						if (sPBABankName == "")
-						{
-							alert("银行名称不能为空");
-							return -1;
-						}
-						if (sPBABankAccountNo == "")
-						{
-							alert("银行账户不能为空");
-							return -1;
-						}				
-					}
-				}							
-				return 1;					
-			}			
-			int OnSave()
+	xstring GetGuid() {
+		return TApp::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			trace(1);
+			m_userid = TApp::GetUserInfo().id;
+			m_username = TApp::GetUserInfo().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"有效");
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
+			dw_base.SetItemString(1, L"Type", L"8");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", TApp::GetCurDate());
+			dw_base.SetItemString(1, L"PBAStatus", L"Y");
+
+
+		}
+		return 0;
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"maint");
+		return 1;
+	}
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
 			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));							
-				string SName = dw_base.GetItemString(1,"Name");
-				if(SName==""){
-					alert("请输入快递公司名称!");
+				if(m_dels==L"")
+				{
+					m_dels=del;
+				}
+				else
+				{
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
+
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		//trace(m_dels);
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/express/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"E" + code;
+		}
+		return L"E1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ExpressNo = dw_base.GetItemString(1, L"ExpressNo");
+		if (ExpressNo == L"")
+		{
+			dw_base.SetItemString(1, L"ExpressNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			if (aName == L"")
+			{
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark");
+				trace(aTemp);
+				if (aTemp != L"")
+				{
+					alert(L"联系人名称必填!");
 					return -1;
 				}
-				int rec =OnPreSave();
-				if (rec== -1)	return -1;							
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc()); 
-				trace(x.GetXml());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("content",x.GetXml());						
-				arg.AddArg("dbmap","Express.dbmap");
-				//arg.AddArg("m_dels",m_dels);				
-				if (getUrl("/sale/data/LogisticsCode/entity/express/save",arg.GetString(),x) != 1)
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"")
 				{
-					trace("error:"+x.GetXml());
-					alert("保存失败!");
-					return 0;
-				}						
-				else
-				{	
-					trace(x.GetXml());
-					if(x.GetXmlDoc().selectSingleNode("error"))
-					{
-						alert("保存出错2!");
-						return 0;				
-					}
-					alert("保存成功!");
-					dw_base.ResetUpdateStatus();
-					setCellReadOnly();						
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"1");
+					//dw_base.SetItemString(1,L"PrimaryContactID",dwcon.GetItemString(1,L"ContactID"));								
 				}
-				dw_base.Redraw();
-				//m_dels="";				
-				return 0;
-			}					
-			int OnCmdDispatch(string comdid)
-			{
-				if(comdid.find("action:bill.row.add",0)>=0) {
-					OnAddrow();
-				}
-				else if(comdid.find("bill.row.insert",0)>=0) {
-					OnInsertRow(); 							
-				}
-				else if(comdid.find("bill.row.delete",0)>=0) {
-					OnDeleteRow();
-				}
-				else if(comdid.find("bill.save",0)>=0) {					
-					trace(1);
-					OnSave();
-				}					
-				return 0;
-			}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
+
+
 			}
-			int OnCellChanged(ref TNotifyEvent evt,int p)
+		}
+		xdwtable dwcon1 = new xdwtable;
+		dwcon1.setNativePointer(dw_base.FindDwTable(L"PartyBankAccount", 0));
+		int j;
+		xstring sPBABankName = L"";
+		xstring sPBABankAccountNo = L"";
+		for (j = 1; j <= dwcon1.GetRowCount(); j++)
+		{
+			xstring sPBABankName = dwcon1.GetItemString(j, L"Bank");
+			xstring sPBABankAccountNo = dwcon1.GetItemString(j, L"BankNo");
+
+			xstring sPBAAll = sPBABankName + sPBABankAccountNo;
+			if (sPBAAll != L"")
 			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				ref DWNMHDR  hdr = evt.pnmh;
-				string colname=hdr.colname;
-				//trace(colname);
-				if(colname=="ExpressNo")
+				if (sPBABankName == L"")
 				{
-					string cspec = dw_base.GetItemString(1,1);
-					trace(cspec);
-					string SpecRule="^\\d*$";
-					xaserverarg__ args = new xaserverarg__;
-					args.setNativePointer(args.CreateInstance());
-					args.AddArg("CSpec",cspec);
-					args.AddArg("SpecRule",SpecRule);
-					xml__  x= new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					getUrl("/sale/data/LogisticsCode/pref/forwarderno/check",args.GetString(),x);			
-					if(x.GetXmlDoc().selectSingleNode("root/spec"))
-					{  
-						alert("请输入数字!");
-						return 0;
-					}
-					
+					alert(L"银行名称不能为空");
+					return -1;
 				}
-				return 1;
-			}			
-			int OnAttachEvent()
+				if (sPBABankAccountNo == L"")
+				{
+					alert(L"银行账户不能为空");
+					return -1;
+				}
+			}
+		}
+		return 1;
+	}
+	int OnSave()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入快递公司名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Express.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);				
+		if (getUrl(L"/sale/data/LogisticsCode/entity/express/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
 			{
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_base","DWV_ITEMCHANGED",OnCellChanged);				
+				alert(L"保存出错2!");
 				return 0;
 			}
-					
-			int onload()
-			{			
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));			
-								
-				OnAttachEvent();								
-				//if(!m_configDoc) return -1;
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			setCellReadOnly();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			OnSave();
+		}
+		return 0;
+	}
 
-				maint::onload();
-				OnClear();				
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		//trace(colname);
+		if (colname == L"ExpressNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
 
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
+				return 0;
 			}
 
-		]
-	]
-]
\ No newline at end of file
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ExpressMaint::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ExpressMaint::OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ExpressMaint::OnCellChanged);
+		return 1;
+	}
+
+	int onload()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+
+		OnAttachEvent();
+		//if(!m_configDoc) return -1;
+
+		maint::onload();
+		OnClear();
+
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/FCL.cpp b/jrj/project/business/BasicCode/FCL.cpp
index 100fe1a..8116240 100644
--- a/jrj/project/business/BasicCode/FCL.cpp
+++ b/jrj/project/business/BasicCode/FCL.cpp
@@ -1,345 +1,354 @@
-use "list.vl"
-use "dev:vm[combobox.vm]"
-use "dev:vm[gridpages.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:vm[xpage.vm]"
-use "dev:vm[xdwtable.vm]"
-use "file.vl"
-unit vbusiness.entity
-[
-	FCL is extend frame;
-	about FCL
-	[
-		field:
-		[		
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-			combobox__ ddlb_1;
-			int	changeddlb;
-			xdwgrid__	dw_list;			
-			int m_PageSize; //每页显示数量
-			int m_PageIndex; //第几页
-			string m_QueryTxt; //查询条件
-			xdwtable__	dw_base;			
-			xnode__	m_agentNode;	//Agent Condition
-			string	m_agentCond;	//Agent Node
-			string m_config;
-			string m_spec;			
-		]
-		
-		method:
-		[
-			int SetAgent()
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) FCL : public xframe
+{
+public:
+	xcombobox ddlb_1;
+	int	changeddlb;
+	xdwgrid	dw_list;
+	int m_PageSize; //每页显示数量
+	int m_PageIndex; //第几页
+	xstring m_QueryTxt; //查询条件
+	xdwtable	dw_base;
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+	xstring m_config;
+	xstring m_spec;
+public:
+	FCL(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static FCL* CreateInstance(void* implPtr, void* hWnd)
+	{
+		FCL* pWin = new FCL(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
 			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				var xframeElement =  GetElement();
-				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
-				if(agent){
-					SetAgentNodeContent (anode,agent.xml);
-				}
-				return 1;
-			}				
-			
-			int OnRetrieve()
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnRetrieve()
+	{
+		xaserverarg arg;
+
+		xdwpages zz = new xdwpages;
+		zz.setNativePointer(GetControl(L"pages"));
+		xml x;
+
+		getUrl(L"/sale/data/FCL/entity/list", arg.GetString(), x);
+		KXMLDOMElement e = x.documentElement();
+		if (e.selectSingleNode(L"@TotalPage"))
+		{
+			xstring s = e.selectSingleNode(L"@TotalPage").text(); //总数量				
+			zz.SetMaxPage(s.toInt());
+		}
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		return 1;
+	}
+	int SetPriceBaseEmpty()
+	{
+		int rows = dw_base.GetColumnCount();
+		int i;
+		for (i = 1; i <= rows; i++)
+		{
+			dw_base.SetItemString(1, i, L"");
+			//dw_base.SetItemDisplayString(1,i,L"");				
+		}
+		dw_base.ResetUpdateStatus();
+		dw_base.Redraw();
+		return 1;
+	}
+	int SetCellEdit(int row, xstring name, xstring value, xstring display)
+	{
+		dw_base.SetItemString(row, name, value);
+		dw_base.Redraw();
+		if (display != L"")
+		{
+			dw_base.SetItemDisplayString(row, name, display);
+		}
+		dw_base.AcceptText();
+		dw_base.ResetUpdateStatus();
+		dw_base.Redraw();
+		return 1;
+	}
+	int OnSetCTGValue(int row)
+	{
+		dw_base.AcceptText();
+		SetPriceBaseEmpty();
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		var list = e.selectNodes(L"*");
+		if (list)
+		{
+			int s = list.length;
+			int i;
+			for (i = 0; i < s; i++)
 			{
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());					
-				xdwpages__ zz = new xdwpages__;
-				zz.setNativePointer(this.GetControl("pages"));				
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				getUrl("/sale/data/FCL/entity/list",arg.GetString(),x);
-				msxml::IXMLDOMElement e=x.GetXmlDoc().documentElement;
-				if(e.selectSingleNode("@TotalPage"))
+				xml x;
+				;
+				KXMLDOMElement xitem = list.item(i);
+				x.loadXML(xitem.xml());
+				//trace(xitem.xml);
+				KXMLDOMElement e1 = x.documentElement();
+				xstring name = e1.tagName();
+				trace(name);
+				trace(e1.text());
+				xstring display;
+				if (e1.selectSingleNode(L"@_displaystring"))
 				{
-					string s=e.selectSingleNode("@TotalPage").text; //总数量				
-					zz.SetMaxPage(s.toInt());
+					display = e1.selectSingleNode(L"@_displaystring").text();
+					SetCellEdit(1, name, e1.text(), L"" + display);
 				}
-				dw_list.Retrieve(x);		
-				dw_list.Redraw();			
-				return 1;
-			}
-			int SetPriceBaseEmpty()
-			{
-				int rows=dw_base.GetColumnCount();
-				int i;
-				for( i=1; i<=rows; i++)
-				{	
-					dw_base.SetItemString(1,i,"");
-					//dw_base.SetItemDisplayString(1,i,"");				
-				}
-				dw_base.ResetUpdateStatus();				
-				dw_base.Redraw();					
-				return 1;
-			}		
-			int SetCellEdit(int row,string name,string value,string display)
-			{			
-				dw_base.SetItemString(row,name,value);
-				dw_base.Redraw();						
-				if(display !="")
-				{	
-					dw_base.SetItemDisplayString(row,name,display);						
-				}
-                dw_base.AcceptText();					
-				dw_base.ResetUpdateStatus();				
-				dw_base.Redraw();		
-				return 1;
-			}
-			int OnSetCTGValue(int row)
-			{
-				dw_base.AcceptText();					
-				SetPriceBaseEmpty();
-				msxml::IXMLDOMElement e = dw_list.GetRowElement(row);		
-				var list = e.SelectNodes("*");
-				if(list)
-				{	
-					int s = list.length;			
-					int i;
-					for(i=0;i<s;i++)
-					{
-						xml__ x = new xml__;
-						x.setNativePointer(xml__ ::CreateInstance());				
-						msxml::IXMLDOMElement xitem = list.item(i);
-						x.LoadXml(xitem.xml);
-						//trace(xitem.xml);
-						msxml::IXMLDOMElement e1=x.GetXmlDoc().documentElement;
-						string name = e1.tagName;
-						trace(name);
-						trace(e1.text);
-						string display;
-						if( e1.selectSingleNode("@_displaystring"))
-						{
-							display= e1.selectSingleNode("@_displaystring").text;
-							SetCellEdit(1,name,e1.text,""+display);								
-						}						
-						else
-							SetCellEdit(1,name,e1.text,"");
-			
-					}
-				}
-				return 1;
-			}					
-			int OnRowClicked(ref TNotifyEvent evt,int p)
-			{	
-				ref DWNMHDR  hdr = evt.pnmh;
-				int row = hdr.row;			
-				OnSetCTGValue(row);
-				return 1;	
-			}
-			int setMaint()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc());
-				int row =dw_list.GetRow();
-				dw_list.SetItemString(row, "PriceInfo", x.GetXml());
-				return 1;
-			}
-			int SetTotalAmount(int row,string name)
-			{
-				if(name=="price20base" || name=="price20BAF"|| name=="price20CAF"|| name=="price20add"|| name=="price20comm"|| name=="price20other")
-				{
-					double price20base = dw_base.GetItemString(row, "price20base").toDouble();
-					double price20BAF = dw_base.GetItemString(row, "price20BAF").toDouble();
-					double price20CAF = dw_base.GetItemString(row, "price20CAF").toDouble();	
-					double price20add = dw_base.GetItemString(row, "price20add").toDouble();	
-					double price20comm = dw_base.GetItemString(row, "price20comm").toDouble();	
-					double price20other = dw_base.GetItemString(row, "price20other").toDouble();
-					double price20=price20base+price20BAF+(price20CAF/100)*price20base+price20add - (price20comm/100)*price20base+price20other;
-					dw_base.SetItemString(1,"price20",price20.toString());				
-				}
-				
-				if(name=="price40base" || name=="price40BAF"|| name=="price40CAF"|| name=="price40add"|| name=="price40comm"|| name=="price40other")
-				{					
-					double price40base = dw_base.GetItemString(row, "price40base").toDouble();
-					double price40BAF = dw_base.GetItemString(row, "price40BAF").toDouble();
-					double price40CAF = dw_base.GetItemString(row, "price40CAF").toDouble();	
-					double price40add = dw_base.GetItemString(row, "price40add").toDouble();	
-					double price40comm = dw_base.GetItemString(row, "price40comm").toDouble();	
-					double price40other = dw_base.GetItemString(row, "price40other").toDouble();
-					double price40=price40base+price40BAF+(price40CAF/100)*price40base+price40add - (price40comm/100)*price40base+price40other;	
-					dw_base.SetItemString(1,"price40",price40.toString());					
-				}
+				else
+					SetCellEdit(1, name, e1.text(), L"");
 
-				if(name=="price40Hbase" || name=="price40HBAF"|| name=="price40HCAF"|| name=="price40Hadd"|| name=="price40Hcomm"|| name=="price40Hother")
-				{					
-					double price40Hbase = dw_base.GetItemString(row, "price40Hbase").toDouble();
-					double price40HBAF = dw_base.GetItemString(row, "price40HBAF").toDouble();
-					double price40HCAF = dw_base.GetItemString(row, "price40HCAF").toDouble();	
-					double price40Hadd = dw_base.GetItemString(row, "price40Hadd").toDouble();	
-					double price40Hcomm = dw_base.GetItemString(row, "price40Hcomm").toDouble();	
-					double price40Hother = dw_base.GetItemString(row, "price40Hother").toDouble();	
-					double price40H=price40Hbase+price40HBAF+(price40HCAF/100)*price40Hbase+price40Hadd - (price40Hcomm/100)*price40Hbase+price40Hother;	
-					dw_base.SetItemString(1,"price40h",price40H.toString());				
-				}
-				return 1;
-			}			
-			int OnPriceBaseChanged(ref TNotifyEvent evt,int p)
-			{
-				trace("123");
-				ref DWNMHDR  hdr = evt.pnmh;
-				string name=hdr.colname;
-				string value = hdr.data;
-				SetTotalAmount(1,name);	
-				string price20=dw_base.GetItemString(1,"price20");
-				string price40=dw_base.GetItemString(1,"price40");
-				string price40h=dw_base.GetItemString(1,"price40h");				
-				dw_list.SetItemString(dw_list.GetRow(),"price20",price20);	
-				dw_list.SetItemString(dw_list.GetRow(),"price40",price40);	
-				dw_list.SetItemString(dw_list.GetRow(),"price40h",price40h);
-				dw_list.Redraw();
-				setMaint();
-				return 1;
 			}
-			int OnListChanged(ref TNotifyEvent evt,int p)
+		}
+		return 1;
+	}
+	int OnRowClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		OnSetCTGValue(row);
+		return 1;
+	}
+	int setMaint()
+	{
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		dw_list.SetItemString(row, L"PriceInfo", x.xml());
+		return 1;
+	}
+	int SetTotalAmount(int row, xstring name)
+	{
+		if (name == L"price20base" || name == L"price20BAF" || name == L"price20CAF" || name == L"price20add" || name == L"price20comm" || name == L"price20other")
+		{
+			double price20base = dw_base.GetItemString(row, L"price20base").toDouble();
+			double price20BAF = dw_base.GetItemString(row, L"price20BAF").toDouble();
+			double price20CAF = dw_base.GetItemString(row, L"price20CAF").toDouble();
+			double price20add = dw_base.GetItemString(row, L"price20add").toDouble();
+			double price20comm = dw_base.GetItemString(row, L"price20comm").toDouble();
+			double price20other = dw_base.GetItemString(row, L"price20other").toDouble();
+			double price20 = price20base + price20BAF + (price20CAF / 100) * price20base + price20add - (price20comm / 100) * price20base + price20other;
+			dw_base.SetItemString(1, L"price20", xstring(price20));
+		}
+
+		if (name == L"price40base" || name == L"price40BAF" || name == L"price40CAF" || name == L"price40add" || name == L"price40comm" || name == L"price40other")
+		{
+			double price40base = dw_base.GetItemString(row, L"price40base").toDouble();
+			double price40BAF = dw_base.GetItemString(row, L"price40BAF").toDouble();
+			double price40CAF = dw_base.GetItemString(row, L"price40CAF").toDouble();
+			double price40add = dw_base.GetItemString(row, L"price40add").toDouble();
+			double price40comm = dw_base.GetItemString(row, L"price40comm").toDouble();
+			double price40other = dw_base.GetItemString(row, L"price40other").toDouble();
+			double price40 = price40base + price40BAF + (price40CAF / 100) * price40base + price40add - (price40comm / 100) * price40base + price40other;
+			dw_base.SetItemString(1, L"price40", xstring(price40));
+		}
+
+		if (name == L"price40Hbase" || name == L"price40HBAF" || name == L"price40HCAF" || name == L"price40Hadd" || name == L"price40Hcomm" || name == L"price40Hother")
+		{
+			double price40Hbase = dw_base.GetItemString(row, L"price40Hbase").toDouble();
+			double price40HBAF = dw_base.GetItemString(row, L"price40HBAF").toDouble();
+			double price40HCAF = dw_base.GetItemString(row, L"price40HCAF").toDouble();
+			double price40Hadd = dw_base.GetItemString(row, L"price40Hadd").toDouble();
+			double price40Hcomm = dw_base.GetItemString(row, L"price40Hcomm").toDouble();
+			double price40Hother = dw_base.GetItemString(row, L"price40Hother").toDouble();
+			double price40H = price40Hbase + price40HBAF + (price40HCAF / 100) * price40Hbase + price40Hadd - (price40Hcomm / 100) * price40Hbase + price40Hother;
+			dw_base.SetItemString(1, L"price40h", xstring(price40H));
+		}
+		return 1;
+	}
+	int OnPriceBaseChanged(TEvent* evt, LPARAM p)
+	{
+		trace(L"123");
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring name = hdr.colname;
+		xstring value = hdr.data;
+		SetTotalAmount(1, name);
+		xstring price20 = dw_base.GetItemString(1, L"price20");
+		xstring price40 = dw_base.GetItemString(1, L"price40");
+		xstring price40h = dw_base.GetItemString(1, L"price40h");
+		dw_list.SetItemString(dw_list.GetRow(), L"price20", price20);
+		dw_list.SetItemString(dw_list.GetRow(), L"price40", price40);
+		dw_list.SetItemString(dw_list.GetRow(), L"price40h", price40h);
+		dw_list.Redraw();
+		setMaint();
+		return 1;
+	}
+	int OnListChanged(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		xstring colname = hdr.colname;
+		xstring value = hdr.data;
+		if (colname == L"port")
+		{
+			xml x;
+
+			xaserverarg arg;
+
+			arg.AddArg(L"code", value);
+			if (getUrl(L"/sale/data/FCL/pref/shipthread", arg.GetString(), x) != 1)
 			{
-				ref DWNMHDR  hdr = evt.pnmh;
-				int row = hdr.row;
-				string colname=hdr.colname;
-				string value = hdr.data;
-				if(colname=="port")
-				{	
-					xml__ x = new xml__;
-					x.setNativePointer(xml__ ::CreateInstance());
-					xaserverarg__ arg = new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());
-					arg.AddArg("code", value);				
-					if (getUrl("/sale/data/FCL/pref/shipthread",arg.GetString(),x) != 1)
-					{
-						trace(x.GetXml());
-					}			
-					msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-					dw_list.SetItemString(row,"shipthread", e.text);
-					dw_list.Redraw();					
-				}	
+				trace(x.xml());
+			}
+			KXMLDOMElement e = x.documentElement();
+			dw_list.SetItemString(row, L"shipthread", e.text());
+			dw_list.Redraw();
+		}
 
 
-				return 1;	
-			}
-			int OnChangePages(ref TNotifyEvent evt,int p)
-			{
-				ref PAGENMHDR h = evt.pnmh;
-				int c = h.cur;
-				int hCursor = xutil__::SetCursorWait();
-				m_pageIndex = c;
-				OnRetrieve();
-				xutil__::RestoreCursor(hCursor);
-				return 1;
-			}
-			int  onSave()
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());		
-				trace(x.GetXml());
-			}
-			int OnDeleteRow()
-			{
-				int row = dw_list.GetRow();
-				if(row<1 || row>dw_list.GetRowCount())
-				{
-					return -1;
-				}				
-					dw_list.DeleteRow(row);									
-	
-			}			
-			int OnAddrow()
-			{
-				int row=dw_list.InsertRow(0);
-				dw_list.SetItemString(row,"modifieddate",TApp::GetCurDate());
-				SetPriceBaseEmpty();				
-				return 1;				
-			}
-			int OnInsertRow()
-			{
-				int row=dw_list.GetRow();
-				if(row<1) return 0;					
-				int newrow=dw_list.InsertRow(row);				
-				dw_list.SetItemString(newrow,"modifieddate",TApp::GetCurDate());
-				SetPriceBaseEmpty();				
-				return 1;				
-			}
-			int OnDeleteRow()
-			{
-				int row = dw_list.GetRow();
-				if(row>0 && row<=dw_list.GetRowCount())
-				{	
-					dw_list.DeleteRow(row);
-					//OnSetCTGValue(row);						
-				}					
-				return 1;				
-			}			
-			int OnCmdDispatch(string comdid)
-			{
-				if(comdid.find("add",0)>=0)
-					OnAddrow();
-				else if(comdid.find("insert",0)>=0) 
-					OnInsertRow();			
-				else if(comdid.find("del",0)>=0) 
-					OnDeleteRow();
-				else if(comdid.find("save",0)>=0) 
-					onSave();				
-				return 1;
-			}
-			int OnSetFocus(ref TNotifyEvent evt,int p){
-				SetAgent();
-				return 1;
-			}
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			int OnItemError(ref TNotifyEvent evt,int p)
-			{
-				ref DWNMHDR  hdr = evt.pnmh;
-				string value=hdr.data;
-				int e = hdr.idFrom;
-				if(e == -1000)
-					alert("【"+value+"】不是有效的数字!");
-				if(e == -1001)
-					alert("【"+value+"】不是有效的数字!");
-				if(e == -1002)
-					alert("【"+value+"】不是有效的日期!");
-				return 1;
-			}				
-			int OnAttachEvent()
-			{
-				AttachEvent("WM_XCOMMAND",OnXCommand);						
-				AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowClicked);				
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("pages","PAGE_CLICK",OnChangePages);	
-				AttachEvent("dw_base","DWV_ITEMCHANGED",OnPriceBaseChanged);
-				AttachEvent("dw_base","DWV_ITEMERROR",OnItemError);
-				AttachEvent("dw_list","DWV_ITEMCHANGED",OnListChanged);				
-			
-			}				
-			int OnInit()
-			{
-				dw_list = new xdwgrid__;						
-				dw_list.setNativePointer(this.GetControl("dw_list"));
-				dw_list.openUrl("/sale/view/FCL/template/FCL/List");				
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(GetControl("dw_base"));
-				dw_base.openUrl("/sale/view/FCL/template/FCL/pricebase");
-				dw_list.SetReadOnlyColumn("shipthread",true);				
-				dw_list.SetReadOnlyColumn("price20",true);
-				dw_list.SetReadOnlyColumn("price40",true);
-				dw_list.SetReadOnlyColumn("price40h",true);				
-				return 1;
-			}
-			
-			int onload()
-			{	
-				m_PageSize=30; //每页显示数量
-				m_PageIndex=1; //第几页
-				m_QueryTxt=""; //查询条件
-				OnInit();				
-				OnAttachEvent();				
-				OnRetrieve();
-				SetAgent();				
-				return 1;
-			}
-		]
-	]
-]
\ No newline at end of file
+		return 1;
+	}
+	int OnChangePages(TEvent* evt, LPARAM p)
+	{
+		PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
+		int c = h.cur;
+		HCURSOR hCursor = xutil::SetCursorWait();
+		m_pageIndex = c;
+		OnRetrieve();
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+	int  onSave()
+	{
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+	}
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<1 || row>dw_list.GetRowCount())
+		{
+			return -1;
+		}
+		dw_list.DeleteRow(row);
+
+	}
+	int OnAddrow()
+	{
+		int row = dw_list.InsertRow(0);
+		dw_list.SetItemString(row, L"modifieddate", TApp::GetCurDate());
+		SetPriceBaseEmpty();
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row < 1) return 0;
+		int newrow = dw_list.InsertRow(row);
+		dw_list.SetItemString(newrow, L"modifieddate", TApp::GetCurDate());
+		SetPriceBaseEmpty();
+		return 1;
+	}
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row > 0 && row <= dw_list.GetRowCount())
+		{
+			dw_list.DeleteRow(row);
+			//OnSetCTGValue(row);						
+		}
+		return 1;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"add", 0) >= 0)
+			OnAddrow();
+		else if (comdid.find(L"insert", 0) >= 0)
+			OnInsertRow();
+		else if (comdid.find(L"del", 0) >= 0)
+			OnDeleteRow();
+		else if (comdid.find(L"save", 0) >= 0)
+			onSave();
+		return 1;
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p) {
+		SetAgent();
+		return 1;
+	}
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnItemError(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring value = hdr.data;
+		int e = hdr.idFrom;
+		if (e == -1000)
+			alert(L"【" + value + L"】不是有效的数字!");
+		if (e == -1001)
+			alert(L"【" + value + L"】不是有效的数字!");
+		if (e == -1002)
+			alert(L"【" + value + L"】不是有效的日期!");
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&FCL::OnXCommand);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&FCL::OnRowClicked);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&FCL::OnSetFocus);
+		AttachEvent(L"pages", L"PAGE_CLICK", (FEvent)&FCL::OnChangePages);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnPriceBaseChanged);
+		AttachEvent(L"dw_base", L"DWV_ITEMERROR", (FEvent)&FCL::OnItemError);
+		AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnListChanged);
+		return 1;
+
+	}
+	int OnInit()
+	{
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"/sale/view/FCL/template/FCL/List");
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_base.openUrl(L"/sale/view/FCL/template/FCL/pricebase");
+		dw_list.SetReadOnlyColumn(L"shipthread", true);
+		dw_list.SetReadOnlyColumn(L"price20", true);
+		dw_list.SetReadOnlyColumn(L"price40", true);
+		dw_list.SetReadOnlyColumn(L"price40h", true);
+		return 1;
+	}
+
+	int onload()
+	{
+		m_PageSize = 30; //每页显示数量
+		m_PageIndex = 1; //第几页
+		m_QueryTxt = L""; //查询条件
+		OnInit();
+		OnAttachEvent();
+		OnRetrieve();
+		SetAgent();
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ForwarderList.cpp b/jrj/project/business/BasicCode/ForwarderList.cpp
index b38d13e..434d63a 100644
--- a/jrj/project/business/BasicCode/ForwarderList.cpp
+++ b/jrj/project/business/BasicCode/ForwarderList.cpp
@@ -1,136 +1,135 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-use "treeview.vm"
-use "dev:vm[gridpages.vm]"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ForwarderList : public xwin
+{
 
 
-unit vbusiness.entity
-[
-	ForwarderList is extend list;
-	about ForwarderList
-	[
-		field:
-		[
-
-			//xdwpages__ dw_pages;
-			string m_QueryTxt;
-			msxml::IXMLDOMDocument m_configDoc;
-			treeview__		tv_1;	
-			string		sType;			
-			static int dw_hWnd;
-			int m_pageIndex;
-			int m_pageNumber;			
-		]
-		
-		method:
-		[
-
-		
-			
-			int SetEntityData(xaserverarg__ arg)
-			{	
+public:
+	//xdwpages dw_pages;
+	xstring m_QueryTxt;
+	KXMLDOMDocument m_configDoc;
+	xtreeview		tv_1;
+	xstring		sType;
+	static int dw_hWnd;
+	int m_pageIndex;
+	int m_pageNumber;
+public:
+	ForwarderList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static ForwarderList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ForwarderList* pWin = new ForwarderList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
 
 
-				arg.AddArg("sType",sType);										
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				getUrl("/sale/data/LogisticsCode/entity/list",arg.GetString(),x);
-				msxml::IXMLDOMElement e=x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					if(list::dw_pages.__nativept && e.selectSingleNode("@TotalPage"))
-					{
-						string s=e.selectSingleNode("@TotalPage").text; //总数量				
-						list::dw_pages.SetMaxPage(s.toInt());
-					}
-				}
-				this.dw_list.Retrieve(x);
-				this.dw_list.Redraw();
-				this.dw_list.SetReadOnly(true);	
-				return 1;
-			}
-			
-					
-			
-					
-			int OnRetrieve()
-			{			
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());		
-				arg.AddArg("pageindex", m_pageIndex.toString()); //第几页
-				arg.AddArg("pagenumber", m_pageNumber.toString()); //每页数量
-				//trace(list::m_QueryTxt);
-				arg.AddArg("QueryTxt", list::m_QueryTxt); //每页数量					
-				return SetEntityData(arg);
-			}
-			int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+	int SetEntityData(xaserverarg arg)
+	{
+
+		arg.AddArg(L"sType", sType);
+		xml x;
+
+		getUrl(L"/sale/data/LogisticsCode/entity/list", arg.GetString(), x);
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			if (list::dw_pages.nativept && e.selectSingleNode(L"@TotalPage"))
 			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int hItem = nmtv.itemNew.hItem;	
-				list::m_QueryTxt = "";
-				int wid = tv_1.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				//c_type=dw_type.GetItemLabel(hitem);
-				//如果是跟节点
-				int roothitem=treeview__::GetRootItem(wid);
-				msxml::IXMLDOMElement e = treeview__::GetItemData(wid,hitem);					
-				string value = e.SelectSingleNode("@data").text;
-				sType= value+"";				
-				OnRetrieve();
-				return 1;	
+				xstring s = e.selectSingleNode(L"@TotalPage").text(); //总数量				
+				list::dw_pages.SetMaxPage(s.toInt());
 			}
-			int OnChangePages(ref TNotifyEvent evt,int p)
-			{
-				ref PAGENMHDR h = evt.pnmh;
-				int c = h.cur;
-				int hCursor = xutil__::SetCursorWait();
-				m_pageIndex = c;
-				OnRetrieve();
-				xutil__::RestoreCursor(hCursor);
-				return 1;
-			}
-			
-			int ViewUpdate(param pr,string updateItem,xaserverarg__   arg)
-				{
-					if(	updateItem=="del")
-					{
-						int DelRow = this.dw_list.GetRow();
-						this.dw_list.DeleteRow(DelRow);
+		}
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		dw_list.SetReadOnly(true);
+		return 1;
+	}
 
-					}
 
-					return 1;
-				}
-			
-			int OnAttachEvent()
-			{
-				//获得树的选择事件
-				AttachEvent("tv_1", "TVN_SELCHANGED",OnTreeSelChanged);		
-				return 0;
-			}
-			
-			int onload()
-			{	
-				list::m_QueryTxt = "";			
-				m_pageIndex = 1;
-				m_pageNumber = 30;			
-				sType="0";		
-				list::onload();	
-				
-				OnAttachEvent();
-				
-				
-				
-				tv_1 =  new treeview__;
-				tv_1.setNativePointer(this.GetControl("tv_1"));
-				int wid = tv_1.GetId();
-				int root = treeview__::GetRootItem(wid);		
-				treeview__::ExpandItem(wid,root);
-				this.dw_list.SetColumnStaus("ForwarderID",false);
-				return 1;
-			}
-					
-		]
-	]
-]
\ No newline at end of file
+
+
+	int OnRetrieve()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"pageindex", xstring(m_pageIndex)); //第几页
+		arg.AddArg(L"pagenumber", xstring(m_pageNumber)); //每页数量
+		//trace(list::m_QueryTxt);
+		arg.AddArg(L"QueryTxt", list::m_QueryTxt); //每页数量					
+		return SetEntityData(arg);
+	}
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		list::m_QueryTxt = L"";
+
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		//c_type=dw_type.GetItemLabel(hitem);
+		//如果是跟节点
+		HTREEITEM roothitem = tv_1.GetRootItem();
+		KXMLDOMElement e = tv_1.GetItemData(hitem);
+		xstring value = e.selectSingleNode(L"@data").text();
+		sType = value + L"";
+		OnRetrieve();
+		return 1;
+	}
+	int OnChangePages(TEvent* evt, LPARAM p)
+	{
+		PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
+		int c = h.cur;
+		HCURSOR hCursor = xutil::SetCursorWait();
+		m_pageIndex = c;
+		OnRetrieve();
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&ForwarderList::OnTreeSelChanged);
+		return 1;
+	}
+
+	int onload()
+	{
+		list::m_QueryTxt = L"";
+		m_pageIndex = 1;
+		m_pageNumber = 30;
+		sType = L"0";
+		list::onload();
+
+		OnAttachEvent();
+
+
+
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+
+		HTREEITEM root = tv_1.GetRootItem();
+		tv_1.ExpandItem(root);
+		dw_list.SetColumnStaus(L"ForwarderID", false);
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ForwarderMaint.cpp b/jrj/project/business/BasicCode/ForwarderMaint.cpp
index d34b7ee..6357734 100644
--- a/jrj/project/business/BasicCode/ForwarderMaint.cpp
+++ b/jrj/project/business/BasicCode/ForwarderMaint.cpp
@@ -1,461 +1,467 @@
-use "system.vl"
-use "win.vl"
-use "maint.vl"
-use "file.vl"
-use "dev:vm[xcell.vm]"
-unit vbusiness.entity
-[
-	ForwarderMaint is extend maint;
-	about ForwarderMaint
-	[
-		field:
-		[
-			msxml::IXMLDOMDocument m_configDoc;
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-			xdwtable__ dw_base;
-			string m_userid;
-			string m_username;
-			string ContactID;
-			xcell__ dw_cell;				
-		]
-		
-		method:
-		[
-			int alert(string str)
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ForwarderMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+
+	xdwtable dw_base;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xcell dw_cell;
+
+public:
+	ForwarderMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ForwarderMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ForwarderMaint* pWin = new ForwarderMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		//dw_cell.SetCellProps(2,2,strnew);			
+		return 0;
+	}
+
+	xstring GetGuid() {
+		return TApp::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			trace(1);
+			m_userid = TApp::GetUserInfo().id;
+			m_username = TApp::GetUserInfo().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"ForwarderID", GetGuid());
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"普通");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PADPrimaryFlag", L"Y");
+			//dw_base.SetItemString(1,L"BankAccountID",GetGuid());				
+			dw_base.SetItemString(1, L"Type", L"5");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", TApp::GetCurDate());
+			/*xdwtable dw =  new xdwtable;
+			dw.setNativePointer(dw_base.GetCurTable());
+			xdwtable dwcon =  new xdwtable;
+			dwcon.setNativePointer(dw.FindDwTable(L"Contacters",0));
+			dwcon.SetItemString(1,L"ContactID",GetGuid());
+			dwcon.SetItemString(1,L"PCStatus",L"1");*/
+			//dw_base.SetItemString(1,L"EBankAccountID",GetGuid());	
+			//dw_base.SetItemString(1,L"CBankAccountID",GetGuid());
+			/*xdwtable dweon =  new xdwtable;
+			dweon.setNativePointer(dw_base.FindDwTable(L"item1",0));
+			xdwtable dwcon =  new xdwtable;
+			dwcon.setNativePointer(dw_base.FindDwTable(L"item2",0));
+			dweon.SetItemString(1,L"EPBAStatus",L"Y");
+			dwcon.SetItemString(1,L"CPBAStatus",L"Y");
+			dweon.SetItemString(1,L"ECurrencyCode",L"USD");
+			dwcon.SetItemString(1,L"CCurrencyCode",L"RMB");*/
+			dw_base.SetItemString(1, L"ForwarderType", L"1");
+			dw_base.SetItemDisplayString(1, L"ForwarderType", L"预付货");
+			//dw_base.SetItemString(1,L"PrimaryContactID",dwcon.GetItemString(1,L"ContactID"));	
+
+		}
+		else
+		{
+			setCellReadOnly();
+		}
+		return 0;
+	}
+
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
 			{
-				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
-			}			
-			int setCellReadOnly()
-			{		
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));			
-				dw_cell = new xcell__;
-				dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));		
-				string strnew = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
-				//dw_cell.SetCellProps(2,2,strnew);			
-				return 0;
-			}		
-			
-			string GetGuid(){
-				return TApp::GetGuid();			
-			}					
-			int OnClear(){
-				if(this.m_EntityID ==""){
-					trace(1);
-					m_userid = TApp::GetUserInfo().id;
-					m_username = TApp::GetUserInfo().name;						
-					dw_base = new xdwtable__;
-					dw_base.setNativePointer(this.GetControl("dw_base"));									
-					dw_base.SetItemString(1,"ForwarderID",GetGuid());		
-					dw_base.SetItemString(1,"PartyID",GetGuid());
-					dw_base.SetItemString(1,"PStatus","1");
-					dw_base.SetItemDisplayString(1,"PStatus","普通");					
-					dw_base.SetItemString(1,"CreatorID",m_userid);
-					dw_base.SetItemString(1,"PADStatus","1");					
-					dw_base.SetItemString(1,"AddressID",GetGuid());
-					dw_base.SetItemString(1,"PADIdentifyAddressFlag","Y");	
-					dw_base.SetItemString(1,"PADPrimaryFlag","Y");							
-					//dw_base.SetItemString(1,"BankAccountID",GetGuid());				
-					dw_base.SetItemString(1,"Type","5");					
-					dw_base.SetItemString(1,"EnterName",m_userid);
-					dw_base.SetItemDisplayString(1,"EnterName",m_username);				
-					dw_base.SetItemString(1,"CreateDate",TApp::GetCurDate());			
-					/*xdwtable__ dw =  new xdwtable__;
-					dw.setNativePointer(dw_base.GetCurTable());
-					xdwtable__ dwcon =  new xdwtable__;				
-					dwcon.setNativePointer(dw.FindDwTable("Contacters",0));
-					dwcon.SetItemString(1,"ContactID",GetGuid());
-					dwcon.SetItemString(1,"PCStatus","1");*/
-					//dw_base.SetItemString(1,"EBankAccountID",GetGuid());	
-					//dw_base.SetItemString(1,"CBankAccountID",GetGuid());
-					/*xdwtable__ dweon =  new xdwtable__;				
-					dweon.setNativePointer(dw_base.FindDwTable("item1",0));
-					xdwtable__ dwcon =  new xdwtable__;				
-					dwcon.setNativePointer(dw_base.FindDwTable("item2",0));							
-					dweon.SetItemString(1,"EPBAStatus","Y");
-					dwcon.SetItemString(1,"CPBAStatus","Y");
-					dweon.SetItemString(1,"ECurrencyCode","USD");
-					dwcon.SetItemString(1,"CCurrencyCode","RMB");*/
-					dw_base.SetItemString(1,"ForwarderType","1");
-					dw_base.SetItemDisplayString(1,"ForwarderType","预付货");					
-					//dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));	
-						
+				if(m_dels==L"")
+				{
+					m_dels=del;
 				}
 				else
 				{
-					setCellReadOnly();			
-				}					
-				return 0;
-			}					
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
 
-			int OnAddrow()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));					
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{	
-					dw.InsertRow(0);
-					int rows = dw.GetRowCount();
-					dw.SetRow(rows);						
-				}				
-				return 1;				
-			}
-			int OnInsertRow()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{
-					int row=dw.GetRow();
-					if(row<1) return 0;					
-					dw.InsertRow(row);
-					dw.SetRow(row);								
-				}
-				return 1;
-			}
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		//trace(m_dels);
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
 
-			int OnDeleteRow()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{
-					int row=dw.GetRow();
-					if(row<1) return 0;
-					/*string del = dw.GetItemString(row,8);
-					if(del!="")
-					{
-						if(m_dels=="")
-						{	
-							m_dels=del;						
-						}		
-						else 
-						{	
-							string temp=m_dels;
-							m_dels=del + "|" + temp;
-						//+= "|"+del;						
-						}	
+		xaserverarg arg;
 
-					}*/				
-					dw.DeleteRow(row);	
-					dw.SetRow(row - 1);						
-				}
-					//trace(m_dels);
-				return 1;
-			}
-			string getGoodsNo()
+		if (getUrl(L"/sale/data/LogisticsCode/pref/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"F" + code;
+		}
+		return L"F1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ForwarderNo = dw_base.GetItemString(1, L"ForwarderNo");
+		if (ForwarderNo == L"")
+		{
+			dw_base.SetItemString(1, L"ForwarderNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			trace(aName);
+			if (aName == L"")
 			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				if (getUrl("/sale/data/LogisticsCode/pref/PartyNo",arg.GetString(),x) != 1)
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark") + dwcon.GetItemString(i, L"fz");
+				trace(aTemp);
+				if (aTemp != L"")
 				{
-					trace(x.GetXml());
-					return "";
-				}			
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					string code = e.text;
-				trace(code);
-					return "F"+code;
-				}
-				return "F1000";
-			}			
-			int OnPreSave()
-			{	
-				dw_base.AcceptText();					
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));
-				string ForwarderNo = dw_base.GetItemString(1,"ForwarderNo",0);
-				if (ForwarderNo=="" || ForwarderNo== nil) 
-					{
-					dw_base.SetItemString(1,"ForwarderNo",getGoodsNo());			
-				}				
-				xdwtable__ dwcon =  new xdwtable__;				
-				dwcon.setNativePointer(dw_base.FindDwTable("item",0));
-				int i;				
-				for(i=1;i<=dwcon.GetRowCount();i++)
-				{
-					string aTemp;				
-					string aName = dwcon.GetItemString(i,"ContacterName",0);
-					trace(aName);
-					if (aName=="" || aName== nil)
-					{
-						aTemp=dwcon.GetItemString(i,"Mobile",0)+dwcon.GetItemString(i,"TEL",0)+dwcon.GetItemString(i,"Fax",0)+dwcon.GetItemString(i,"Email",0)+dwcon.GetItemString(i,"PCRemark",0)+dwcon.GetItemString(i,"fz",0);	
-						trace(aTemp);
-						if(aTemp !="" && aTemp != nil)
-						{
-							alert("联系人名称必填!");
-							return -1;
-						}
-					}
-					else{
-							string ContactID = dwcon.GetItemString(i,"ContactID",0);
-							if (ContactID=="" || ContactID== nil)					
-							{	
-								dwcon.SetItemString(i,"ContactID",GetGuid());
-								dwcon.SetItemString(i,"PCStatus","Y");					
-								dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));								
-							}							
-					}
-				}
-				xdwtable__ dwcon2 =  new xdwtable__;				
-				dwcon2.setNativePointer(dw_base.FindDwTable("item2",0));
-				int k;
-				for (k=1;k <= dwcon2.GetRowCount();k++)
-				{
-					string sPBABankName2 = dwcon2.GetItemString(k,"CBank");
-					string sPBABankAccountNo2 = dwcon2.GetItemString(k,"CBankNo");
-					if (sPBABankName2 == nil) sPBABankName2 = "";
-					if (sPBABankAccountNo2 == nil) sPBABankAccountNo2 = "";
-					string sPBAAll2 = sPBABankName2 + sPBABankAccountNo2;
-						
-					if (sPBAAll2 != "")
-					{
-						if (sPBABankName2 == "")
-						{
-							alert("人民币银行名称不能为空");
-							return -1;
-						}
-						if (sPBABankAccountNo2 == "")
-						{
-							alert("人民币银行账户不能为空");
-							return -1;
-						}
-						dwcon2.SetItemString(k,"CPBAStatus","Y");
-						dwcon2.SetItemString(k,"CCurrencyCode","RMB");
-						dwcon2.SetItemString(k,"CBankAccountID",GetGuid());
-						
-						if(dwcon2.GetItemString(k,"CBankAccountID")!="" && this.m_EntityID =="")
-						{							
-							dw_base.SetItemString(1,"CBkAccountID",dwcon2.GetItemString(k,"CBankAccountID"));
-						}
-					}
-				}
-				xdwtable__  dwcon1 =  new xdwtable__;				
-				dwcon1.setNativePointer(dw_base.FindDwTable("item1",0));
-				int j;
-				for (j=1;j <= dwcon1.GetRowCount();j++)
-				{
-					string sPBABankName1 = dwcon1.GetItemString(j,"EBank");
-					string sPBABankAccountNo1 = dwcon1.GetItemString(j,"EBankNo");
-					if (sPBABankName1 == nil) sPBABankName1 = "";
-					if (sPBABankAccountNo1 == nil) sPBABankAccountNo1 = "";
-					string sPBAAll1 = sPBABankName1 + sPBABankAccountNo1;
-					if (sPBAAll1 != "")
-					{
-						if (sPBABankName1 == "")
-						{
-							alert("美金银行名称不能为空");
-							return -1;
-						}
-						if (sPBABankAccountNo1 == "")
-						{
-							alert("美金银行账户不能为空");
-							return -1;
-						}
-						dwcon1.SetItemString(j,"EPBAStatus","Y");
-						dwcon1.SetItemString(j,"ECurrencyCode","USD");
-						dwcon1.SetItemString(j,"EBankAccountID",GetGuid());
-						if(dwcon1.GetItemString(j,"EBankAccountID")!="" && this.m_EntityID =="")
-						{	
-							dw_base.SetItemString(1,"EBkAccountID",dwcon1.GetItemString(j,"EBankAccountID"));
-						}						
-					}
-				}
-				return 1;					
-			}
-			int OnPostSave()
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xaserverarg__ args = new xaserverarg__;
-				args.setNativePointer(args.CreateInstance());					
-				xml__ x = new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc());
-				//trace(x.GetXml());
-	
-				//主联系人
-				string spGuid;
-				msxml::IXMLDOMElement e;
-				var list = x.GetXmlDoc().selectNodes("//item");
-				int nlen = list.length;
-				int i;
-				for(i=0;	i<nlen;	i++)
-				{
-					e = list.item(i);
-					if (i == 0) spGuid = e.selectSingleNode("@guid").text;
-					string sP = e.selectSingleNode("PPrimaryFlag").text;
-					if (sP == "Y")
-					{	
-						spGuid = e.selectSingleNode("@guid").text;
-						break;
-					}
-				}
-				if (spGuid == "" || spGuid == nil)	
-				{
-					trace("error");
-					return 0;
-				}
-				args.AddArg("contact",spGuid);
-				//trace("<---->");
-				//trace(spGuid);
-				xml__ x1 = new xml__;
-				x1.setNativePointer(x1.CreateInstance());
-				if (getUrl("/sale/data/SupplierSubmit/pref/primarycontact",args.GetString(),x) != 1)
-				{
-					string error = x1.GetXmlDoc().text;
-					trace(error);
-					return 0;
-				}
-				
-				
-				return 1;
-			}						
-			int OnSave()
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));							
-				string SName = dw_base.GetItemString(1,"Name");
-				if(SName==""){
-					alert("请输入货代名称!");
+					alert(L"联系人名称必填!");
 					return -1;
 				}
-				int rec =OnPreSave();
-				if (rec== -1)	return -1;						
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc()); 
-				trace(x.GetXml());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("content",x.GetXml());						
-				arg.AddArg("dbmap","Forwarder.dbmap");
-				//arg.AddArg("m_dels",m_dels);				
-				if (getUrl("/sale/data/LogisticsCode/entity/save",arg.GetString(),x) != 1)
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"")
 				{
-					trace("error:"+x.GetXml());
-					alert("保存失败!");
-					return 0;
-				}						
-				else
-				{	
-					trace(x.GetXml());
-					if(x.GetXmlDoc().selectSingleNode("error"))
-					{
-						alert("保存出错2!");
-						return 0;				
-					}
-					alert("保存成功!");	
-					dw_base.ResetUpdateStatus();
-					OnPostSave();						
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"Y");
+					dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
 				}
-				dw_base.Redraw();
-				//m_dels="";				
-				return 0;
-			}					
-			int OnCmdDispatch(string comdid)
+			}
+		}
+		xdwtable dwcon2 = new xdwtable;
+		dwcon2.setNativePointer(dw_base.FindDwTable(L"item2", 0));
+		int k;
+		xstring sPBABankName2 = L"";
+		xstring sPBABankAccountNo2 = L"";
+		for (k = 1; k <= dwcon2.GetRowCount(); k++)
+		{
+			sPBABankName2 = dwcon2.GetItemString(k, L"CBank");
+			sPBABankAccountNo2 = dwcon2.GetItemString(k, L"CBankNo");
+
+			xstring sPBAAll2 = sPBABankName2 + sPBABankAccountNo2;
+
+			if (sPBAAll2 != L"")
 			{
-				if(comdid.find("action:bill.row.add",0)>=0) {
-					OnAddrow();
+				if (sPBABankName2 == L"")
+				{
+					alert(L"人民币银行名称不能为空");
+					return -1;
 				}
-				else if(comdid.find("bill.row.insert",0)>=0) {
-					OnInsertRow(); 							
+				if (sPBABankAccountNo2 == L"")
+				{
+					alert(L"人民币银行账户不能为空");
+					return -1;
 				}
-				else if(comdid.find("bill.row.delete",0)>=0) {
-					OnDeleteRow();
+				dwcon2.SetItemString(k, L"CPBAStatus", L"Y");
+				dwcon2.SetItemString(k, L"CCurrencyCode", L"RMB");
+				dwcon2.SetItemString(k, L"CBankAccountID", GetGuid());
+
+				if (dwcon2.GetItemString(k, L"CBankAccountID") != L"" && m_EntityID == L"")
+				{
+					dw_base.SetItemString(1, L"CBkAccountID", dwcon2.GetItemString(k, L"CBankAccountID"));
 				}
-				else if(comdid.find("bill.save",0)>=0) {					
-					trace(1);
-					OnSave();
-				}					
+			}
+		}
+		xdwtable  dwcon1 = new xdwtable;
+		dwcon1.setNativePointer(dw_base.FindDwTable(L"item1", 0));
+		int j;
+		xstring sPBABankName1 = L"";
+		xstring sPBABankAccountNo1 = L"";
+		for (j = 1; j <= dwcon1.GetRowCount(); j++)
+		{
+			xstring sPBABankName1 = dwcon1.GetItemString(j, L"EBank");
+			xstring sPBABankAccountNo1 = dwcon1.GetItemString(j, L"EBankNo");
+
+			xstring sPBAAll1 = sPBABankName1 + sPBABankAccountNo1;
+			if (sPBAAll1 != L"")
+			{
+				if (sPBABankName1 == L"")
+				{
+					alert(L"美金银行名称不能为空");
+					return -1;
+				}
+				if (sPBABankAccountNo1 == L"")
+				{
+					alert(L"美金银行账户不能为空");
+					return -1;
+				}
+				dwcon1.SetItemString(j, L"EPBAStatus", L"Y");
+				dwcon1.SetItemString(j, L"ECurrencyCode", L"USD");
+				dwcon1.SetItemString(j, L"EBankAccountID", GetGuid());
+				if (dwcon1.GetItemString(j, L"EBankAccountID") != L"" && m_EntityID == L"")
+				{
+					dw_base.SetItemString(1, L"EBkAccountID", dwcon1.GetItemString(j, L"EBankAccountID"));
+				}
+			}
+		}
+		return 1;
+	}
+	int OnPostSave()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xaserverarg args;
+
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		//trace(x.xml());
+
+		//主联系人
+		xstring spGuid;
+		KXMLDOMElement e;
+		var list = x.selectNodes(L"//item");
+		int nlen = list.length;
+		int i;
+		for (i = 0; i < nlen; i++)
+		{
+			e = list.item(i);
+			if (i == 0) spGuid = e.selectSingleNode(L"@guid").text();
+			xstring sP = e.selectSingleNode(L"PPrimaryFlag").text();
+			if (sP == L"Y")
+			{
+				spGuid = e.selectSingleNode(L"@guid").text();
+				break;
+			}
+		}
+		if (spGuid == L"")
+		{
+			trace(L"error");
+			return 0;
+		}
+		args.AddArg(L"contact", spGuid);
+		//trace(L"<---->");
+		//trace(spGuid);
+		xml x1;
+
+		if (getUrl(L"/sale/data/SupplierSubmit/pref/primarycontact", args.GetString(), x) != 1)
+		{
+			xstring error = x1.text();
+			trace(error);
+			return 0;
+		}
+
+
+		return 1;
+	}
+	int OnSave()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入货代名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Forwarder.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);				
+		if (getUrl(L"/sale/data/LogisticsCode/entity/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			OnPostSave();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		xstring coldata = hdr.data;
+		trace(colname);
+		if (colname == L"ForwarderNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
 				return 0;
 			}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
+		}
+		//只能选一个主联系人
+		else if (colname == L"PPrimaryFlag" && coldata == L"Y")
+		{
+			xdwtable dw_pc;
+			dw_pc = new xdwtable;
+			dw_pc.setNativePointer(dw_base.FindDwTable(L"item"));
+			if (dw_pc)
 			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			int OnCellChanged(ref TNotifyEvent evt,int p)
-			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				ref DWNMHDR  hdr = evt.pnmh;
-				string colname=hdr.colname;
-				string coldata = hdr.data;							
-				trace(colname);
-				if(colname=="ForwarderNo")
+				int i;
+				for (i = 1; i <= dw_pc.GetRowCount(); i++)
 				{
-					string cspec = dw_base.GetItemString(1,1);
-					trace(cspec);
-					string SpecRule="^\\d*$";
-					xaserverarg__ args = new xaserverarg__;
-					args.setNativePointer(args.CreateInstance());
-					args.AddArg("CSpec",cspec);
-					args.AddArg("SpecRule",SpecRule);
-					xml__  x= new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					getUrl("/sale/data/LogisticsCode/pref/forwarderno/check",args.GetString(),x);
-			
-					if(x.GetXmlDoc().selectSingleNode("root/spec"))
-					{  
-						alert("请输入数字!");
-						return 0;
-					}
-					
+					if (i != hdr.row)
+						dw_pc.SetItemString(i, L"PPrimaryFlag", L"N");
 				}
-					//只能选一个主联系人
-				else if (colname == "PPrimaryFlag" && coldata == "Y")
-				{
-					xdwtable__ dw_pc;
-					dw_pc = new xdwtable__;
-					dw_pc.setNativePointer(dw_base.FindDwTable("item"));
-					if (dw_pc)
-					{
-						int i;
-						for (i=1;i <= dw_pc.GetRowCount();i++)
-						{
-							if (i != hdr.row)
-								dw_pc.SetItemString(i,"PPrimaryFlag","N");
-						}
-					}
-				}				
-				return 1;
-			}			
-			int OnAttachEvent()
-			{
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_base","DWV_ITEMCHANGED",OnCellChanged);				
-				return 0;
-			}				
-			int onload()
-			{			
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));			
-								
-				OnAttachEvent();								
-				//if(!m_configDoc) return -1;
-
-				maint::onload();		
-
-				OnClear();						
 			}
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ForwarderMaint::OnXCommand);
+		//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ForwarderMaint::OnCellChanged);
+		return 1;
+	}
+	int onload()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
 
-		]
-	]
-]
\ No newline at end of file
+		OnAttachEvent();
+		//if(!m_configDoc) return -1;
+
+		maint::onload();
+
+		OnClear();
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/PaymentTerm.list.cpp b/jrj/project/business/BasicCode/PaymentTerm.list.cpp
index c52fd7d..17f7f10 100644
--- a/jrj/project/business/BasicCode/PaymentTerm.list.cpp
+++ b/jrj/project/business/BasicCode/PaymentTerm.list.cpp
@@ -1,81 +1,96 @@
-use "list.vd"
-use "xtreeview.vd"
-use "xwin.vd"
-class PaymentTermlist111 : public list
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class  __declspec(dllexport) PaymentTermlist111 : public xwin
 {
-	//xdwgrid	dw_list; 
-	int OnDBClick(ref TNotifyEvent evt,int p)
+public:
+	PaymentTermlist111(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static PaymentTermlist111* CreateInstance(void* implPtr, void* hWnd)
 	{
-		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		PaymentTermlist111* pWin = new PaymentTermlist111(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	//xdwgrid	dw_list; 
+	int OnDBClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
 		int row = hdr.row;
 		//alert(row.toString());
-		msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
-		string id = e.selectSingleNode("TermID").text;
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring id = e.selectSingleNode(L"TermID").text();
 		//alert( id);
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
-		arg.AddArg("EntityID", id);
-		//arg.AddArg("hwnd", this.GetHWND().toString());
-		int p1 = arg.ptr_native_;
-		openUrl("/sale/view/Payment/worknode/Payment/maint",p1);
-		if (arg.GetArgString("ret") == "Ok")
+		xaserverarg arg ;
+		
+		arg.AddArg(L"EntityID", id);
+		//arg.AddArg(L"hwnd", GetHWND().toString());
+		
+		openUrl(L"/sale/view/Payment/worknode/Payment/maint", arg);
+		if (arg.GetArgString(L"ret") == L"Ok")
 		{
-			alert("OK");
+			alert(L"OK");
 			list::onloaded();
 		}				
 		return 1;
 	}	
 	int OnDelete()
 	{
-		int row = this.dw_list.GetRow();
+		int row = dw_list.GetRow();
 		if (row < 1) return 1;				
-		msxml::IXMLDOMElement ele = this.dw_list.GetRowElement(row);
-		string termid = ele.selectSingleNode("TermID").text;
-		xaserverarg arg = new xaserverarg; 
-		arg.setNativePointer(arg.CreateInstance());	
-		arg.AddArg("termId",termid);
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		xstring termid = ele.selectSingleNode(L"TermID").text();
+		xaserverarg arg ; 
+			
+		arg.AddArg(L"termId",termid);
 		//alert(termid);
-		xml x1 = new xml;
-		x1.setNativePointer(x1.CreateInstance());
-		if (url::post("/sale/data/PaymentTerm/entity/delete",arg.GetString(),x1) != 1)
+		xml x1 ;
+	
+		if (xurl::post(L"/sale/data/PaymentTerm/entity/delete",arg.GetString(),x1) != 1)
 		{
-			string error = x1.GetXmlDoc().text;
+			xstring error = x1.text();
 			trace(error);
 		}
 		else
 		{
-			//error = x1.GetXmlDoc().text;
+			//error = x1.text();
 			//alert(error);
-			MessageBox(GetHWND(),"删除成功!","提示",0);
+			MessageBox(GetHWND(),L"删除成功!",L"提示",0);
 			dw_list.DeleteRow(row);
 		}
 	}
 		
 	int OnNew()
 	{
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
-		arg.AddArg("EntityID", "new");
-		int p1 = arg.ptr_native_;
-		//openUrl("/sale/view/Test/worknode/company/maint", arg);
-		openUrl("/sale/view/Payment/worknode/Payment/maint",p1);
+		xaserverarg arg ;
+		
+		arg.AddArg(L"EntityID", L"new");
+		
+		//openUrl(L"/sale/view/Test/worknode/company/maint", arg);
+		openUrl(L"/sale/view/Payment/worknode/Payment/maint", arg);
 		return 0;
 	}
 	int OnOpen()
 	{
-		xaserverarg arg = new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
+		xaserverarg arg ;
+		
 		int row = dw_list.GetRow();
 		if (row < 1) 
 		{
-			xwin::MessageBox(GetHWND(),"请选中要修改的行!","提示",0);
+			MessageBox(GetHWND(),L"请选中要修改的行!",L"提示",0);
 			return -1;
 		}
-		msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
-		string guid = e.selectSingleNode("TermID").text;
-		arg.AddArg("EntityID",guid);
-		int pp = arg.ptr_native_;
-		openUrl("/sale/view/Test2/worknode/company2/maint", pp);
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring guid = e.selectSingleNode(L"TermID").text();
+		arg.AddArg(L"EntityID",guid);
+		
+		openUrl(L"/sale/view/Test2/worknode/company2/maint", arg);
 	
 	}
 	int OnRefresh()
@@ -84,27 +99,27 @@
 		return 0;
 	}
 	//按钮事件
-	int OnCmdDispatch(string comdid)
+	int OnCmdDispatch(xstring comdid)
 	{
 		//alert(comdid);
-		if (comdid == "action:bill.new") return OnNew();
-		else if(comdid == "action:bill.open") return OnOpen();		
-		else if(comdid == "Refresh") return OnRefresh();
-		else if(comdid == "action:bill.delete") return OnDelete();		
+		if (comdid == L"action:bill.new") return OnNew();
+		else if(comdid == L"action:bill.open") return OnOpen();		
+		else if(comdid == L"Refresh") return OnRefresh();
+		else if(comdid == L"action:bill.delete") return OnDelete();		
 		return 0;
 	}	
-	int OnXCommand(ref TXCommandEvent evt,int p)
+	int OnXCommand(TEvent* evt, LPARAM param)
 	{
-		return OnCmdDispatch(evt.pStrID);
-	}	
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
 	//命令发布函数
 	int OnAttachEvent()
 	{
-		AttachEvent("WM_XCOMMAND",OnXCommand);
-		//AttachEvent("WM_SETFOCUS",OnSetFocus);
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&PaymentTermlist111::OnXCommand);
+		//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
 
-		//AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged);
-		AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDBClick);
+		//AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED",OnRowChanged);
+		AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED", (FEvent)&PaymentTermlist111::OnDBClick);
 		return 1;
 	}
 	int onload()
@@ -117,7 +132,7 @@
 	int onloaded()
 	{
 		//OnRetrieve();
-		//alert("12");
+		//alert(L"12");
 		list::onloaded();
 			
 			
diff --git a/jrj/project/business/BasicCode/PaymentTerm.maint.cpp b/jrj/project/business/BasicCode/PaymentTerm.maint.cpp
index 678ac29..3604cc8 100644
--- a/jrj/project/business/BasicCode/PaymentTerm.maint.cpp
+++ b/jrj/project/business/BasicCode/PaymentTerm.maint.cpp
@@ -1,110 +1,121 @@
-use "maint.vd"
-use "xaserver.vd"
-use "xaserverarg.vd"
-use "profit.vd"
-use "xcell.vd"
-use "vbind.vd"
-use "publiccode.vd"
-use "xpagecontrol.vd"
-class PaymentTermEdit : public maint
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class  __declspec(dllexport) PaymentTermEdit : public xframe
 {
+public:
 	xdwtable dw_base;
 	xdwtable	dw_p;
 	xcell dw_cell;
-	string sCryno;
+	xstring sCryno;
+public:
+	PaymentTermEdit(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static PaymentTermEdit* CreateInstance(void* implPtr, void* hWnd)
+	{
+		PaymentTermEdit* pWin = new PaymentTermEdit(implPtr, (HWND)hWnd);
+		return pWin;
+	}
 	int OnAddrow()
 	{
-		dw_p = dw_base.FindDwTable("line");
+		dw_p = dw_base.FindDwTable(L"line");
 		int i;
 		double dDueAmount = 0;
 		double dPercnet = 100;
 		for (i = 1 ; i <= dw_p.GetRowCount();i++)
 		{
-			dDueAmount = dw_p.GetItemDouble(i,"DueAmount");
+			dDueAmount = dw_p.GetItemDouble(i,L"DueAmount");
 			if (dDueAmount > 0)
 				break;
-			dPercnet = dPercnet - dw_p.GetItemDouble(i,"DuePercent");
+			dPercnet = dPercnet - dw_p.GetItemDouble(i,L"DuePercent");
 		}
 		int irow = dw_p.InsertRow(0);
-		dw_p.SetItemString(irow,"SeqNo",irow.toString());
+		dw_p.SetItemString(irow,L"SeqNo",xstring(irow));
 		if (dDueAmount <= 0)
-			dw_p.SetItemDouble(irow,"DuePercent",dPercnet);
+			dw_p.SetItemDouble(irow,L"DuePercent",dPercnet);
 		
 		return 1;
 	}
 	int OnDeleterow()
 	{
-		dw_p = dw_base.FindDwTable("line");
+		dw_p = dw_base.FindDwTable(L"line");
 		int row2 = dw_p.GetRow();
 		if (row2 < 1) return 0;
 		dw_p.DeleteRow(row2);
 
 		return 1;
 	}
-	string OnCreateTxt()
+	xstring OnCreateTxt()
 	{
 		//dw_1.AcceptText(); //不能加会报错
 		int irow;
 		//int icnt = dw_1.GetRowCount();
-		dw_p = dw_base.FindDwTable("line");
+		dw_p = dw_base.FindDwTable(L"line");
 		int icnt = dw_p.GetRowCount();
-		if (icnt < 1) return "";
-		string sTxt;
+		if (icnt < 1) return L"";
+		xstring sTxt;
 		//double dPercnet = 100;
 		for (irow = 1;irow <= icnt ;irow ++)
 		{
-			string sPaymentMethod = dw_p.GetItemString(irow,"PaymentMethod"); //支付方式
-			//string sDueDays = dw_p.GetItemDisplayString(irow,"DueDays"); 
-			string sDueDays = dw_p.GetItemString(irow,"DueDays"); //期限
-			string sDuePercent = dw_p.GetItemString(irow,"DuePercent"); //比例
-			string sDueAmount = dw_p.GetItemString(irow,"DueAmount"); //金额
+			xstring sPaymentMethod = dw_p.GetItemString(irow,L"PaymentMethod"); //支付方式
+			//xstring sDueDays = dw_p.GetItemDisplayString(irow,L"DueDays"); 
+			xstring sDueDays = dw_p.GetItemString(irow,L"DueDays"); //期限
+			xstring sDuePercent = dw_p.GetItemString(irow,L"DuePercent"); //比例
+			xstring sDueAmount = dw_p.GetItemString(irow,L"DueAmount"); //金额
 			
-			if (!sPaymentMethod || sPaymentMethod == "")
-				sTxt = sTxt + "";
-			if (!sDueDays || sDueDays == "")
-				sTxt = sTxt + "";
+			if (!sPaymentMethod || sPaymentMethod == L"")
+				sTxt = sTxt + L"";
+			if (!sDueDays || sDueDays == L"")
+				sTxt = sTxt + L"";
 			else
 			{
-				if (sDueDays == "-1") sDueDays = " IN ADVANCE";
-				else if (sDueDays == "0") sDueDays = " AT SIGHT";
+				if (sDueDays == L"-1") sDueDays = L" IN ADVANCE";
+				else if (sDueDays == L"0") sDueDays = L" AT SIGHT";
 				else 
 				{
-					if (sPaymentMethod == "T/T")
-						sDueDays = " WITHIN "+sDueDays + " DAYS AFTER SHIPMENT";
+					if (sPaymentMethod == L"T/T")
+						sDueDays = L" WITHIN "+sDueDays + L" DAYS AFTER SHIPMENT";
 					else
-						sDueDays = " AT "+sDueDays + " DAYS";
+						sDueDays = L" AT "+sDueDays + L" DAYS";
 				}
 				
-				if (!sDuePercent || sDuePercent == "")
+				if (!sDuePercent || sDuePercent == L"")
 				{
-					if (!sDueAmount || sDueAmount == "")
-						sTxt = sTxt + "";
+					if (!sDueAmount || sDueAmount == L"")
+						sTxt = sTxt + L"";
 					else
 					{
 						
-						sTxt = sTxt + sCryno + " " + sDueAmount + " " + sPaymentMethod + sDueDays + ";";
+						sTxt = sTxt + sCryno + L" " + sDueAmount + L" " + sPaymentMethod + sDueDays + L";";
 					}
 				}
 				else
 				{
-					if (sDuePercent.find(".",0) >= 0)
+					if (sDuePercent.find(L".",0) >= 0)
 					{
-						while (sDuePercent.right(1) == "0")
+						while (sDuePercent.right(1) == L"0")
 						{
 							sDuePercent = sDuePercent.left(sDuePercent.length() - 1);
 						}
-						if (sDuePercent.right(1) == ".")
+						if (sDuePercent.right(1) == L".")
 							sDuePercent = sDuePercent.left(sDuePercent.length() - 1);
 					}
 				
-					sTxt = sTxt + sDuePercent + "% " + sPaymentMethod+ sDueDays + ";";
+					sTxt = sTxt + sDuePercent + L"% " + sPaymentMethod+ sDueDays + L";";
 				}
 			}
 		}
 		
 		sTxt = sTxt.mid(0,sTxt.length() - 1);
-		if (sTxt != "")
-			sTxt = sTxt + ".";
+		if (sTxt != L"")
+			sTxt = sTxt + L".";
 
 		return sTxt;
 	}
@@ -112,38 +123,39 @@
 	{
 		dw_base.AcceptText();
 		//判断是否有必输值为空
-		dw_p = dw_base.FindDwTable("line");
+		dw_p = dw_base.FindDwTable(L"line");
 		double dPercnet = 0;
 		double dAmount = 0;
+		xstring sChargeAll = L"";
 		if (dw_p)
 		{
 			int i;
 			for (i=1;i <= dw_p.GetRowCount();i++)
 			{
-				string seqNo = dw_p.GetItemString(i,"SeqNo");
-				string sPaymentMethod = dw_p.GetItemString(i,"PaymentMethod");
-				string sDueDays = dw_p.GetItemString(i,"DueDays");
-				string sDuePercent = dw_p.GetItemString(i,"DuePercent");
+				xstring seqNo = dw_p.GetItemString(i,L"SeqNo");
+				xstring sPaymentMethod = dw_p.GetItemString(i,L"PaymentMethod");
+				xstring sDueDays = dw_p.GetItemString(i,L"DueDays");
+				xstring sDuePercent = dw_p.GetItemString(i,L"DuePercent");
 				dPercnet = dPercnet + sDuePercent.toDouble();
-				string sDueAmount = dw_p.GetItemString(i,"DueAmount");
+				xstring sDueAmount = dw_p.GetItemString(i,L"DueAmount");
 				dAmount = dAmount + sDueAmount.toDouble();
-				if (!seqNo) seqNo = "";
-				if (!sPaymentMethod) sPaymentMethod = "";
-				if (!sDueDays) sDueDays = "";
-				if (!sDuePercent) sDuePercent = "";
-				if (!sDueAmount) sDueAmount = "";
-				dw_p.SetItemString(i,"SeqNo",i.toString());
-				string sChargeAll = sPaymentMethod + sDueDays + sDuePercent + sDueAmount;
-				if (sChargeAll != "")
+				if (!seqNo) seqNo = L"";
+				if (!sPaymentMethod) sPaymentMethod = L"";
+				if (!sDueDays) sDueDays = L"";
+				if (!sDuePercent) sDuePercent = L"";
+				if (!sDueAmount) sDueAmount = L"";
+				dw_p.SetItemString(i,L"SeqNo",xstring(i));
+				sChargeAll = sPaymentMethod + sDueDays + sDuePercent + sDueAmount;
+				if (sChargeAll != L"")
 				{
-					if (sPaymentMethod == "")
+					if (sPaymentMethod == L"")
 					{
-						alert("支付方式不能为空!");
+						alert(L"支付方式不能为空!");
 						return 0;
 					}
-					if (sDueDays == "")
+					if (sDueDays == L"")
 					{
-						alert("期限不能为空!");
+						alert(L"期限不能为空!");
 						return 0;
 					}
 
@@ -152,7 +164,7 @@
 		}
 		
 		//百分比校验
-		if (dw_p.GetRowCount() <= 1 && sChargeAll == "")
+		if (dw_p.GetRowCount() <= 1 && sChargeAll == L"")
 		{}
 		else
 		{
@@ -160,46 +172,46 @@
 			{
 				if (dAmount <= 0)
 				{
-					alert("比率不等于100!");
+					alert(L"比率不等于100!");
 					return 0;
 				}
 			}
 		}
 		
-		string sTxt = OnCreateTxt();
-		dw_base.SetItemString(1,"PaymentTermEx",sTxt);
+		xstring sTxt = OnCreateTxt();
+		dw_base.SetItemString(1,L"PaymentTermEx",sTxt);
 
 		//CloseWindow();
 		return 1;
 	}
-	int OnItemChanged(ref TNotifyEvent evt,int p)
+	int OnItemChanged(TEvent* evt, LPARAM p)
 	{
-		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
-		string colname=hdr.colname;
-		string value = hdr.data;
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname=hdr.colname;
+		xstring value = hdr.data;
 		int row = hdr.row;
 		
-		if (colname == "DueDays")
+		if (colname == L"DueDays")
 		{
 			xdwtable dw;
-			dw = dw_base.FindDwTable("line");
+			dw = dw_base.FindDwTable(L"line");
 			
 			if (dw)
 			{
-				string sPaymentMethod = dw.GetItemString(row,"PaymentMethod");
-				if (value == "0")
+				xstring sPaymentMethod = dw.GetItemString(row,L"PaymentMethod");
+				if (value == L"0")
 				{
-					if (sPaymentMethod == "T/T")
+					if (sPaymentMethod == L"T/T")
 					{
-						//alert("此支付方式期限不能为 0 (AT SIGHT)");
+						//alert(L"此支付方式期限不能为 0 (AT SIGHT)");
 						//return -1;
 					}
 				}
-				else if (value == "-1")
+				else if (value == L"-1")
 				{
-					if (sPaymentMethod != "T/T")
+					if (sPaymentMethod != L"T/T")
 					{
-						alert("此支付方式期限不能为 -1(IN ADVANCE)");
+						alert(L"此支付方式期限不能为 -1(IN ADVANCE)");
 						return -1;
 					}
 				}
@@ -207,30 +219,30 @@
 		
 		}
 		//生成支付条款文本
-		if (colname == "PaymentMethod" || colname == "DueDays" || colname == "DuePercent" || colname == "DueAmount")
+		if (colname == L"PaymentMethod" || colname == L"DueDays" || colname == L"DuePercent" || colname == L"DueAmount")
 		{
-			string sTxt = OnCreateTxt();
+			xstring sTxt = OnCreateTxt();
 
-			dw_base.SetItemString(1,"Description",sTxt);
+			dw_base.SetItemString(1,L"Description",sTxt);
 		}
 		
 		return 1;
 	}
-	int OnClick(ref TNotifyEvent evt,int p)
+	int OnClick(TEvent* evt, LPARAM p)
 	{
-		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
-		string value = hdr.data;
-		string colname = hdr.colname;
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring value = hdr.data;
+		xstring colname = hdr.colname;
 		int row = hdr.row;
-		xaserverarg arg=new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());
+		xaserverarg arg;
+		
 		//alert(row.toString());
 		xdwtable dw;
-		dw = dw_base.FindDwTable("line");
+		dw = dw_base.FindDwTable(L"line");
 		//alert(colname);
 		if (dw)
 		{
-			if (colname == "DuePercent")
+			if (colname == L"DuePercent")
 			{
 				int i;
 				int icnt = dw.GetRowCount();
@@ -239,23 +251,23 @@
 				double dDueAmount = 0;
 				for (i = 1 ; i <= icnt ; i++)
 				{
-					dDueAmount = dw.GetItemDouble(i,"DueAmount");
+					dDueAmount = dw.GetItemDouble(i,L"DueAmount");
 					if (dDueAmount > 0)
 						break;
 				}
-				dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
+				dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
 				if (dDueAmount > 0)
 				{
-					dw.SetColumnProp("DuePercent","cellprotect","保护");//保护中文规格
+					dw.SetColumnProp(L"DuePercent",L"cellprotect",L"保护");//保护中文规格
 				}
 				else
 				{
-					dw.SetColumnProp("DuePercent","cellprotect","不保护");//保护中文规格
+					dw.SetColumnProp(L"DuePercent",L"cellprotect",L"不保护");//保护中文规格
 				}
 					
 			}
 			
-			if (colname == "DueAmount")
+			if (colname == L"DueAmount")
 			{
 				int j;
 				int jcnt = dw.GetRowCount();
@@ -264,17 +276,17 @@
 				double dDuePercent = 0;
 				for (j = 1 ; j <= jcnt ; j++)
 				{
-					dDuePercent = dw.GetItemDouble(j,"DuePercent");
+					dDuePercent = dw.GetItemDouble(j,L"DuePercent");
 					if (dDuePercent > 0)
 						break;
 				}
 				if (dDuePercent > 0)
 				{
-					dw.SetColumnProp("DueAmount","cellprotect","保护");//保护中文规格
+					dw.SetColumnProp(L"DueAmount",L"cellprotect",L"保护");//保护中文规格
 				}
 				else
 				{
-					dw.SetColumnProp("DueAmount","cellprotect","不保护");//保护中文规格
+					dw.SetColumnProp(L"DueAmount",L"cellprotect",L"不保护");//保护中文规格
 				}
 			}
 			
@@ -287,97 +299,98 @@
 	int OnSave()
 	{
 		if(OnOk()<1)return 0;
-		dw_base = GetControl("dw_base");
+		dw_base = GetControl(L"dw_base");
 		dw_base.AcceptText();
 		//dw_bank.AcceptText();
-		xml x = new xml;
-		xaserverarg arg = new xaserverarg;		
-		x.setNativePointer(xml::CreateInstance());
-		dw_base.DwUpdateAllTo(x.GetXmlDoc()); 
-		//dw_bank.DwUpdateAllTo(x.GetXmlDoc()); 
-		//alert(x.GetXml());
-		arg.setNativePointer(arg.CreateInstance());	
-		arg.AddArg("content",x.GetXml());						
-		arg.AddArg("dbmap","FND_PaymentTerm.dbmap");
+		xml x ;
+		xaserverarg arg ;		
+		
+		dw_base.DwUpdateAllTo(x); 
+		//dw_bank.DwUpdateAllTo(x); 
+		//alert(x.xml());
+			
+		arg.AddArg(L"content",x.xml());						
+		arg.AddArg(L"dbmap",L"FND_PaymentTerm.dbmap");
 		//return 0;
-		if (getUrl("/sale/data/PaymentTerm/entity/company/save",arg.GetString(),x) != 1)
+		if (getUrl(L"/sale/data/PaymentTerm/entity/company/save",arg.GetString(),x) != 1)
 		{
-			alert("保存失败!");
+			alert(L"保存失败!");
 			return 0;
 		}						
 		else
 		{	
-			//alert(x.GetXml());
-			if(x.GetXmlDoc().selectSingleNode("error"))
+			//alert(x.xml());
+			if(x.selectSingleNode(L"error"))
 			{
-				alert("保存出错2!");
+				alert(L"保存出错2!");
 				return 0;				
 			}
-			arg.AddArg("ret","Ok");
-			xwin::MessageBox(GetHWND(),"保存成功!","提示",0);	
-			//alert("保存成功");
+			arg.AddArg(L"ret",L"Ok");
+			MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+			//alert(L"保存成功");
 			dw_base.ResetUpdateStatus();	
 			//dw_bank.ResetUpdateStatus();	
-			//xwin::SendMessage(parenthwnd, 0x401, "maintsave", 0);//通知list窗口更新数据
+			//xwin::SendMessage(parenthwnd, 0x401, L"maintsave", 0);//通知list窗口更新数据
 		}
-		//alert("保存成功");
+		//alert(L"保存成功");
 		dw_base.Redraw();	
 		//dw_bank.Redraw();	
 		CloseWindow();
 		return 0;
 	}
 			
-	int OnCmdDispatch(string comdid)
+	int OnCmdDispatch(xstring comdid)
 	{
 		//alert(comdid);
-		if(comdid=="xmOk") OnSave();
-		else if(comdid=="addrow") OnAddrow();
-		else if(comdid=="deleterow") OnDeleterow();
-		//else if(comdid=="AddRow") OnAddRow();
-		//else if(comdid=="InsertRow") OnInsertRow();
-		//else if(comdid=="DeleteRow")OnDeleteRow();
+		if(comdid==L"xmOk") OnSave();
+		else if(comdid==L"addrow") OnAddrow();
+		else if(comdid==L"deleterow") OnDeleterow();
+		//else if(comdid==L"AddRow") OnAddRow();
+		//else if(comdid==L"InsertRow") OnInsertRow();
+		//else if(comdid==L"DeleteRow")OnDeleteRow();
 		return 1;
 	}
 
 	//按钮事件
-	int OnXCommand(ref TXCommandEvent evt,int p)
+	int OnXCommand(TEvent* evt, LPARAM param)
 	{
-		return OnCmdDispatch(evt.pStrID);
+		return OnCmdDispatch(evt->xcommand.pStrID);
 	}
 
 	int OnAttachEvent()
 	{
 		//按钮事件
-		AttachEvent("WM_XCOMMAND",OnXCommand);
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&PaymentTermEdit::OnXCommand);
 		//获取焦点事件,用于重置工具条
-		//AttachEvent("WM_SETFOCUS",OnSetFocus);
-		AttachEvent("dw_base","DWV_ITEMCHANGED",OnItemChanged);
-		AttachEvent("dw_base","DWV_CLICKED",OnClick);
+		//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+		AttachEvent(L"dw_base",L"DWV_ITEMCHANGED", (FEvent)&PaymentTermEdit::OnItemChanged);
+		AttachEvent(L"dw_base",L"DWV_CLICKED", (FEvent)&PaymentTermEdit::OnClick);
+		return 1;
 	}
 	int OnRetrieve()
 	{
-		if(GetParam())
+		if(GetWinParam())
 		{
-			int p = GetParam();
-			xaserverarg args = new xaserverarg;
-			args.setNativePointer(p);
-			string id = args.GetArgString("EntityID");
+			int p = GetArg();
+			xaserverarg args ;
+			
+			xstring id = args.GetArgString(L"EntityID");
 			//alert(id);
-			if(id=="new")
+			if(id==L"new")
 			{
 				
 				//OnAddNew();
 			}
 			else
 			{
-				xml x = new xml;
-				x.setNativePointer(xml::CreateInstance());
-				if(getUrl("/sale/data/PaymentTerm/entity/base12", args.GetString(), x) != 1)
+				xml x ;
+				
+				if(getUrl(L"/sale/data/PaymentTerm/entity/base12", args.GetString(), x) != 1)
 				{
-					alert("错误");
+					alert(L"错误");
 					return -1;
 				}
-				//alert(x.GetXml());
+				//alert(x.xml());
 				dw_base.Retrieve(x);
 				//dw_bank.Retrieve(x);
 				dw_base.Redraw();
@@ -389,26 +402,27 @@
 
 	int onload()
 	{
+		SetArg();
 		//maint::onload();
 		//maint::onloaded();
-		dw_base = GetControl("dw_base");
+		dw_base = GetControl(L"dw_base");
 		dw_cell = new xcell;
-		dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
-		dw_base.openUrl("/sale/view/Payment/template/Payment/maint");
-		//alert("1233");
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		dw_base.openUrl(L"/sale/view/Payment/template/Payment/maint");
+		//alert(L"1233");
 		OnRetrieve();
 		OnAttachEvent();
-		//dw_base = GetControl("dw_base");
+		//dw_base = GetControl(L"dw_base");
 		
 	}
 	
 	int onloaded()
 	{	
 		//maint::onloaded();
-		//alert("response");
-		//dw_base = GetControl("dw_base");
+		//alert(L"response");
+		//dw_base = GetControl(L"dw_base");
 		//dw_cell = new xcell;
-		//dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
+		//dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
 		return -1; 
 	}
 	
diff --git a/jrj/project/business/BasicCode/QuickCode.cpp b/jrj/project/business/BasicCode/QuickCode.cpp
index 456f4fe..ffc66cf 100644
--- a/jrj/project/business/BasicCode/QuickCode.cpp
+++ b/jrj/project/business/BasicCode/QuickCode.cpp
@@ -1,676 +1,678 @@
-use"lang.vl"
-use "win.vl"
-use "dev:vm[xml.vm]"
-use "treeview.vm"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xutil.vm]"
-use "file.vl"
-use "list.vl"
-unit vbusiness.vpage
-[
-	QuickCode is extend list;
-	about QuickCode
-	[
-		field:
-			
-		method:
-		[
-			xdwgrid__	dw_list;
-			
-			string m_config;
-			string m_agent;
-			string m_id;
-			string m_dbmap;
-			string m_name;
-			string strconfig;
-			msxml::IXMLDOMDocument m_configDoc;			
-			int alert(string str)
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) QuickCode : public xwin
+{
+public:
+	xdwgrid	dw_list;
+
+	xstring m_config;
+	xstring m_agent;
+	xstring m_id;
+	xstring m_dbmap;
+	xstring m_name;
+	xstring strconfig;
+	KXMLDOMDocument m_configDoc;
+	xnode	m_agentNode;
+public:
+	QuickCode(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static QuickCode* CreateInstance(void* implPtr, void* hWnd)
+	{
+		QuickCode* pWin = new QuickCode(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
 			{
-				//win__::MessageBox(this.GetHWND(),str,"提示:",0);
-				TApp::alert(this,str);
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnCmdDispatch(xstring comdid)
+	{
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (comdid == L"save") {
+			//type
+			xaserverarg args;
+
+			args.AddArg(L"id", m_id);
+			args.AddArg(L"name", m_name);
+			xml y;
+
+			//TDataSet::exec(m_config,L"savetype",args,y);
+			//url::post(L"QuickCode/pref/quickcode_type.save",args.GetString(),y); 			
+			//save
+
+			xml x;
+
+			xaserverarg arg;
+
+			dw_list.AcceptText();
+			dw_list.DwUpdateAllToEx(x);
+			KXMLDOMElement e = x.documentElement();
+			e.setAttribute(L"id", m_id);
+			//arg.AddArg(L"id",m_id);
+			arg.AddArg(L"content", e.xml());
+			arg.AddArg(L"dbmap", m_dbmap);
+			//trace(L"-->",m_id);					
+			//trace(L"-->",m_dbmap);
+			//trace(e.xml());				
+			/*if(TDataSet::exec(m_config,L"save",arg,x)!=1)
+			{
+				trace(L"error:"+x.xml());
+				alert(L"保存出错!");
+				return 0;
+			}*/
+			//trace(m_dbmap);
+			trace(x.xml());
+			if (xurl::get(L"QuickCode/pref/quickcode.save", arg.GetString(), x) != 1)
+			{
+				xstring error = x.text();
+				trace(error);
+			}
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
 				return 0;
 			}
-			int SetAgent()
-			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				string magent = m_agent;
-				if (magent == ""){
-					xml__ x = new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					TFile::get(m_config, x);
-					var agent = x.GetXmlDoc().selectSingleNode("config/agentarea/*[1]");
-					if(agent){
-						magent = agent.xml;
-						trace(magent);
-						m_agent = magent;//agent.xml;
-						SetAgentNodeContent (anode,magent);
-					}
-				}
-				else
-					SetAgentNodeContent (anode,m_agent);
-				return 1;
+			dw_list.ResetUpdateStatus();
+			alert(L"保存成功!");
+		}
+		else if (comdid == L"add") {
+			dw_list.InsertRow(0);
+			int rows = dw_list.GetRowCount();
+			dw_list.SetRow(rows);
+			dw_list.SetItemString(rows, L"ToCurrencyCode", L"RMB");
+			dw_list.SetItemDisplayString(rows, L"ToCurrencyCode", L"人民币");
+		}
+		else if (comdid == L"insert") {
+			int row = dw_list.GetRow();
+			if (row<1 || row>dw_list.GetRowCount()) return 0;
+			dw_list.InsertRow(row);
+			dw_list.SetItemString(row, L"ToCurrencyCode", L"RMB");
+			dw_list.SetItemDisplayString(row, L"ToCurrencyCode", L"人民币");
+		}
+		else if (comdid == L"delet") {
+			/*int rows = dw_list.GetRowCount();
+			int row2 = dw_list.GetPrevSelectRow(rows);
+			while(row2 > 0){
+				dw_list.DeleteRow(row2);
+				row2 = dw_list.GetPrevSelectRow(row2 - 1);
 			}
-			
-			int OnCmdDispatch(string comdid)
+			dw_list.SelectRow(0, false);*/
+			int row2 = dw_list.GetRow();
+			if (row2<1 || row2>dw_list.GetRowCount()) return 0;
+			dw_list.DeleteRow(row2);
+		}
+		else if (comdid == L"import") {
+			if (m_id == L"FND_ExchangeRate")
 			{
+				int ll_delq = MessageBox(GetHWND(), L"确定要从老系统导入汇率数据吗?", L"提示", 1);
+				if (ll_delq != 1)
+					return 0;
+				xml xi;
 
-				int hCursor = xutil__::SetCursorWait();
-				if(comdid == "save"){
-					//type
-					xaserverarg__ args=new xaserverarg__;
-					args.setNativePointer(args.CreateInstance());	
-					args.AddArg("id",m_id);
-					args.AddArg("name", m_name);
-					xml__ y=new xml__;
-					y.setNativePointer(xml__::CreateInstance());
-					//TDataSet::exec(m_config,"savetype",args,y);
-					//url::post("QuickCode/pref/quickcode_type.save",args.GetString(),y); 			
-					//save
-
-					xml__ x=new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					xaserverarg__ arg=new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());	
-					dw_list.AcceptText();				
-					dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
-					msxml::IXMLDOMElement e= x.GetXmlDoc().documentElement;
-					e.SetAttribute("id", m_id);
-					//arg.AddArg("id",m_id);
-					arg.AddArg("content",e.xml);
-					arg.AddArg("dbmap", m_dbmap);
-					//trace("-->",m_id);					
-					//trace("-->",m_dbmap);
-					//trace(e.xml);				
-					/*if(TDataSet::exec(m_config,"save",arg,x)!=1)
-					{
-						trace("error:"+x.GetXml());
-						alert("保存出错!");
-						return 0;
-					}*/
-					//trace(m_dbmap);
-					trace(x.GetXml());					
-					if (url::get("QuickCode/pref/quickcode.save",arg.GetString(),x) != 1)
-					{
-						string error = x.GetXmlDoc().text;
-						trace(error);
-					}							
-					trace(x.GetXml());
-					if(x.GetXmlDoc().selectSingleNode("error"))
-					{
-						alert("保存出错2!");
-						return 0;				
-					}
-					dw_list.ResetUpdateStatus();
-					alert("保存成功!");
-				}
-				else if(comdid=="add"){
-					dw_list.InsertRow(0);
-					int rows = dw_list.GetRowCount();
-					dw_list.SetRow(rows);						
-					dw_list.SetItemString(rows,"ToCurrencyCode","RMB");
-					dw_list.SetItemDisplayString(rows,"ToCurrencyCode","人民币");			
-				}
-				else if(comdid=="insert"){
-					int row = dw_list.GetRow();
-					if(row<1 || row>dw_list.GetRowCount()) return 0;
-					dw_list.InsertRow(row); 
-					dw_list.SetItemString(row,"ToCurrencyCode","RMB");
-					dw_list.SetItemDisplayString(row,"ToCurrencyCode","人民币");					
-				}
-				else if(comdid == "delet"){
-					/*int rows = dw_list.GetRowCount();
-					int row2 = dw_list.GetPrevSelectRow(rows);
-					while(row2 > 0){
-						dw_list.DeleteRow(row2);
-						row2 = dw_list.GetPrevSelectRow(row2 - 1);
-					}
-					dw_list.SelectRow(0, false);*/
-					int row2 = dw_list.GetRow();
-					if(row2<1 || row2>dw_list.GetRowCount()) return 0;
-					dw_list.DeleteRow(row2);				
-				}
-				else if(comdid == "import"){
-					if(m_id=="FND_ExchangeRate")
-					{	
-						int ll_delq = win__::MessageBox(this.GetHWND(), "确定要从老系统导入汇率数据吗?","提示",1);
-						if (ll_delq != 1)
-							return 0;
-						xml__ xi=new xml__;
-						xi.setNativePointer(xml__::CreateInstance());
-						xaserverarg__ argi=new xaserverarg__;
-						argi.setNativePointer(argi.CreateInstance());							
-						if (url::get("QuickCode/ExchangeRate/import",argi.GetString(),xi) != 1)
-						{
-							trace(xi.GetXmlDoc().text);
-							return -1;
-						}
-						alert("导入成功!");
-						dw_list.Redraw();
-					}	
-			
-				}				
-				xutil__::RestoreCursor(hCursor);
-				return 0;
-			}
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(""+evt.pStrID);
-			}
-			int OnSetFocus(ref TNotifyEvent evt,int p){
-				SetAgent();
-				return 1;
-			}
-			int OnClicked(ref TNotifyEvent evt,int p)
-			{	
-				ref DWNMHDR  hdr = evt.pnmh;				
-				int row = hdr.row;
-				int col=hdr.col + 1;
-				string colname=dw_list.GetColumnName(col);
-				trace(colname);
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				string comdid;
-				if(colname=="CategoryID")
-				{	
-					openUrl("产品资料.vface/xpage/product/category/dialog", arg);		
-					comdid = arg.GetArgString("comdid");			
-					if(comdid=="ok")
-					{
-						string CategoryID = arg.GetArgString("CategoryID");
-						string CName = arg.GetArgString("CName");							
-						dw_list.SetItemDisplayString(row,colname,CName); 
-						dw_list.SetItemString(row,colname,CategoryID); 					
-						dw_list.Redraw();
-					}
-				}					
-				else if(colname=="MkOrgId")
-				{	
-					openUrl("组织架构.vface/xpage/HrOrg/Chart", arg);
-					comdid = arg.GetArgString("comdid");
-					if(comdid=="xmOk")
-					{
-						string OrgName = arg.GetArgString("OrgName");
-						string OrgId = arg.GetArgString("OrgId");					
-						dw_list.SetItemDisplayString(row,colname,OrgName); 		
-						dw_list.SetItemString(row,colname,OrgId); 	
-						dw_list.Redraw();
-					}	
-				}
-				else if(colname=="Cid")
-				{	
-					openUrl("组织架构.vface/xpage/hremployee/select", arg);
-					comdid = arg.GetArgString("comdid");
-					if(comdid=="xmOk")
-					{
-						string sPersonID = arg.GetArgString("sPersonID");
-					trace(sPersonID);
-						string sPersonName = arg.GetArgString("sPersonName");					
-						dw_list.SetItemDisplayString(row,colname,sPersonName); 		
-						dw_list.SetItemString(row,colname,sPersonID); 	
-						dw_list.Redraw();
-					}	
-				}
-				return 1;
-			}
-			int OnDoubleClicked(ref TNotifyEvent evt,int p)
-			{
-				ref DWNMHDR  hdr = evt.pnmh;
-				int row = hdr.row;
-				if(row<1 || row > dw_list.GetRowCount() ) return 0;
-				
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				//string str = hdr.data;
-				string colname=hdr.colname;
-				string str = dw_list.GetItemString(row, colname);
-				arg.AddArg("value",str);
-				openUrl("/sale/view/view.dlg/xpage/memo/edit", arg);									
-				string comdid = arg.GetArgString("comdid");
-				if(comdid=="xmOK")
+				xaserverarg argi;
+				argi.setNativePointer(argi.CreateInstance());
+				if (xurl::get(L"QuickCode/ExchangeRate/import", argi.GetString(), xi) != 1)
 				{
-					string value = arg.GetArgString("value");
-					dw_list.SetItemString(row,colname,value); 
-					dw_list.Redraw();
-				}								
-				
-				return 1;
-			}
-			int ItemOutput()
-			{
-				string d = xaserver__::GetCurrentDate();
-				d = d.left(10) +"";
-				dw_list.SaveAs(d);		
-				return 1;
-			}				
-			int OnSelectAllRow()
-			{
-				int rows =  this.dw_list.GetRowCount();
-				if(rows < 1) return -1;
-				 this.dw_list.SelectRow(1, rows, true);
-				 this.dw_list.Redraw();
-				return 1;
-			}				
-			int OnRowCopy()
-			{
-				int rows = this.dw_list.GetRowCount();
-				if(rows < 1) return -1;
-				int cols = this.dw_list.GetColumnCount(); 
-				string str = "";
-				int row = this.dw_list.GetNextSelectRow(1);
-				int i;
-				while(row > 0)
-				{
-					string tmp1 = "";
-					for(i=1; i<cols; i++)
-					{
-						int w = this.dw_list.GetColumnWidth(i);
-						if(w < 5) continue;
-						string tmp;
-						if(this.dw_list.GetItemDisplayString(row, i + 1))
-							tmp = this.dw_list.GetItemDisplayString(row, i + 1);
-						else
-							tmp = this.dw_list.GetItemString(row, i + 1);							
-						tmp1 += tmp + "\t";
-					}
-					str += tmp1 + "\r\n";
-					row = this.dw_list.GetNextSelectRow(row + 1);
+					trace(xi.text());
+					return -1;
 				}
-				this.dw_list.SetDataToClip(str);
-				return 1;
-			}
-			int OnColCopy(string col)
-			{
-				int rows = this.dw_list.GetRowCount();
-				if(rows < 1) return -1;
-				string str = "";
-				int row = this.dw_list.GetNextSelectRow(1);
-				while(row > 0)
-				{
-					string tmp;
-					if(this.dw_list.GetItemDisplayString(row, col))
-						tmp = this.dw_list.GetItemDisplayString(row,col);
-					else
-						tmp = this.dw_list.GetItemString(row, col);						
-					str += tmp + "\r\n";
-					row = this.dw_list.GetNextSelectRow(row + 1);
-				}
-				this.dw_list.SetDataToClip(str);
-				
-				return 1;
-			}					
-			int OnRClick(ref TNotifyEvent evt,int p)
-			{
-				ref DWNMHDR  hdr = evt.pnmh;
-				int row = hdr.row;
-				
-				int m = win__::CreatePopupMenu();
-				int MF_STRING = 0x00000000;
-				int MF_DISABLED  = 0x00000002;
-				int TPM_RIGHTBUTTON = 0x0002;
-				int TPM_RETURNCMD = 0x0100;
-				int MF_CHECKED = 0x8;
-				int MF_SEPARATOR = 0x0800;
-				win__::AppendMenu(m,MF_STRING, 1, "复制行");		
-				win__::AppendMenu(m,MF_STRING, 101, "复制列");		
-				win__::AppendMenu(m,MF_SEPARATOR, -1, "");		
-				win__::AppendMenu(m,MF_STRING, 2, "全选");		
-				win__::AppendMenu(m,MF_SEPARATOR, -1, "");		
-				win__::AppendMenu(m,MF_STRING, 4, "导出到Excel");
-				win__::AppendMenu(m,MF_SEPARATOR, -1, "");		
-				win__::AppendMenu(m,MF_STRING, 6, "显示列设置");
-				xrect xr;
-				xpoint pt;
-				win__::GetCursorPos(pt);				
-				int ret=win__::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, this.GetHWND(), xr);
-				
-				//trace(ret);
-				int hCursor = xutil__::SetCursorWait();					
-				if(ret == 1) {OnRowCopy();}
-				else if(ret == 101) {
-					string colname=hdr.colname;
-					if(colname != "")
-						OnColCopy(colname);
-				}
-				else if(ret == 2) {OnSelectAllRow();}
-				else if(ret == 4) {ItemOutput();}
-				else if(ret == 6) {}
-				xutil__::RestoreCursor(hCursor);				
-					
-				return 1;
-			}				
-			int OnAttachEvent()
-			{
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDoubleClicked);//行双击	
-				AttachEvent("dw_list","DWV_ITEMBEINGEDIT",OnClicked);
-				AttachEvent("dw_list","DWV_RCLICKED",OnRClick);//鼠标右键						
-			}
-			int OnRetrieve()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-			trace("asdasd");
-
-				if(m_id.find("__",0)  >0) 
-				{	
-					m_id = m_id.mid(0, m_id.find("__",0));	
-					arg.AddArg("id",m_id);				
-					//trace(m_id);				
-					/*if (TDataSet::exec(m_config, "query_remark", arg.GetString(),x) != 1)
-					{
-						trace(x.GetXmlDoc().text);
-						return -1;
-					}*/
-					if (url::get("QuickCode/entity/list_remark",arg.GetString(),x) != 1)
-					{
-						trace(x.GetXmlDoc().text);
-						return -1;
-					}					
-				}
-				else
-				{				trace("asdasd");
-					arg.AddArg("id",m_id);
-					arg.AddArg("querytxt","");					
-					/*if (TDataSet::exec(m_config, "query", arg.GetString(),x) != 1)
-					{
-						trace(x.GetXmlDoc().text);
-						return -1;
-					}*/
-					if (url::get("QuickCode/entity/list",arg.GetString(),x) != 1)
-					{
-						trace(x.GetXmlDoc().text);
-						return -1;
-					}						
-				}
-
-				dw_list.Retrieve(x);
+				alert(L"导入成功!");
 				dw_list.Redraw();
-				return 1;
 			}
-			string jxParam(string p, string n)
-			{
-				if(p != "")
-				{
-					p +="&";
-					int i = 1;
-					while (p.find("=",0)>0)
-					{
-						string name = p.mid(0, p.find("=",0));
-						string value = p.mid(p.find("=",0) + 1, p.find("&",0) - p.find("=",0) - 1);
-						if(name==n) return ""+value;
-						i += 1;
-						p = p.mid(p.find("&",0) + 1, p.length());
-					}
-				}		
-				return "";
-			}
-			int getURLParam()
-			{
-				if(GetParam())
-				{
-					xpage__ xp=new xpage__;
-					xp.setNativePointer(this.GetXPage());
-					string aurl = xp.GetWkUrl();
-					xaserverarg__ arg;
-					if(aurl && aurl.find("native=true",0)>0)
-					{
-						int p = this.GetParam();
-						arg = new xaserverarg__;
-						arg.setNativePointer(p);
-					}
-					else
-					{
-						arg = GetParam();
-					}
-					string config = arg.GetArgString("config");
-					xml__ x = new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					if(config == "")
-					{
-						string configXml = arg.GetArgString("configxml");
-						x.LoadXml(configXml);
-					}
-					else
-					{
-						getUrl(config, "", x);						
-					}	
-					m_configDoc = x.GetXmlDoc();
 
-				}
-				
-				return 1;
-			}					
-			int loaded()
-			{	
-				getURLParam();
-				msxml::IXMLDOMDocument	 ee=m_configDoc;	
-				string id=m_id;
-				var n = ee.selectSingleNode("//list/dwview[@type='dwgrid'][@id='"+id+"']");
-				string vface = m_configDoc.selectSingleNode("//vface[1]").text;
-				string dwname = "";//e.selectsingleNode("@name").text;
-				string tpl = "";//e.selectsingleNode("@url").text;
-				string dbmap = "";					
-				if(n)
-				{
-					msxml::IXMLDOMElement e = n;
-					//trace(e.xml);
-					if(e.selectSingleNode("@name")) dwname = e.selectSingleNode("@name").text;
-					if(e.selectSingleNode("@url")) tpl = e.selectSingleNode("@url").text;
-					if(e.selectSingleNode("@dbmap")) dbmap = e.selectSingleNode("@dbmap").text;						
-					//trace(vface +"/"+ tpl);
-					//trace(selectmode);			
-				}
+		}
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p) {
+		SetAgent();
+		return 1;
+	}
+	int OnClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		int col = hdr.col + 1;
+		xstring colname = dw_list.GetColumnName(col);
+		trace(colname);
+		xaserverarg arg;
+
+		xstring comdid;
+		if (colname == L"CategoryID")
+		{
+			openUrl(L"产品资料.vface/xpage/product/category/dialog", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"ok")
+			{
+				xstring CategoryID = arg.GetArgString(L"CategoryID");
+				xstring CName = arg.GetArgString(L"CName");
+				dw_list.SetItemDisplayString(row, colname, CName);
+				dw_list.SetItemString(row, colname, CategoryID);
+				dw_list.Redraw();
+			}
+		}
+		else if (colname == L"MkOrgId")
+		{
+			openUrl(L"组织架构.vface/xpage/HrOrg/Chart", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"xmOk")
+			{
+				xstring OrgName = arg.GetArgString(L"OrgName");
+				xstring OrgId = arg.GetArgString(L"OrgId");
+				dw_list.SetItemDisplayString(row, colname, OrgName);
+				dw_list.SetItemString(row, colname, OrgId);
+				dw_list.Redraw();
+			}
+		}
+		else if (colname == L"Cid")
+		{
+			openUrl(L"组织架构.vface/xpage/hremployee/select", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"xmOk")
+			{
+				xstring sPersonID = arg.GetArgString(L"sPersonID");
+				trace(sPersonID);
+				xstring sPersonName = arg.GetArgString(L"sPersonName");
+				dw_list.SetItemDisplayString(row, colname, sPersonName);
+				dw_list.SetItemString(row, colname, sPersonID);
+				dw_list.Redraw();
+			}
+		}
+		return 1;
+	}
+	int OnDoubleClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		if (row<1 || row > dw_list.GetRowCount()) return 0;
+
+		xaserverarg arg;
+
+		//xstring str = hdr.data;
+		xstring colname = hdr.colname;
+		xstring str = dw_list.GetItemString(row, colname);
+		arg.AddArg(L"value", str);
+		openUrl(L"/sale/view/view.dlg/xpage/memo/edit", arg);
+		xstring comdid = arg.GetArgString(L"comdid");
+		if (comdid == L"xmOK")
+		{
+			xstring value = arg.GetArgString(L"value");
+			dw_list.SetItemString(row, colname, value);
+			dw_list.Redraw();
+		}
+
+		return 1;
+	}
+	int ItemOutput()
+	{
+		xstring d = xaserver::GetCurrentDate();
+		d = d.left(10) + L"";
+		dw_list.SaveAs(d);
+		return 1;
+	}
+	int OnSelectAllRow()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		dw_list.SelectRow(1, rows, true);
+		dw_list.Redraw();
+		return 1;
+	}
+	int OnRowCopy()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		int cols = dw_list.GetColumnCount();
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		int i;
+		while (row > 0)
+		{
+			xstring tmp1 = L"";
+			for (i = 1; i < cols; i++)
+			{
+				int w = dw_list.GetColumnWidth(i);
+				if (w < 5) continue;
+				xstring tmp;
+				if (dw_list.GetItemDisplayString(row, i + 1))
+					tmp = dw_list.GetItemDisplayString(row, i + 1);
 				else
-				{	
-					var m = ee.selectSingleNode("//list");				
-					msxml::IXMLDOMElement e1 = m;
-					//trace(e.xml);
-					if(e1.selectSingleNode("@name")) dwname = e1.selectSingleNode("@name").text;
-					if(e1.selectSingleNode("@url")) tpl = e1.selectSingleNode("@url").text;
-					if(e1.selectSingleNode("@dbmap")) dbmap = e1.selectSingleNode("@dbmap").text;			
-		
-				}
-				m_dbmap = dbmap;					
-				dw_list = new xdwgrid__;
-				dw_list.setNativePointer(GetControl(dwname));
-				dw_list.openUrl(vface +"/"+ tpl);
-				//dw_list.SetSelectionMode(4);							
-		
+					tmp = dw_list.GetItemString(row, i + 1);
+				tmp1 += tmp + L"\t";
 			}
-			int Onital()
-			{	
-				//地区
-				xml__ x1=new xml__;
-				x1.setNativePointer(xml__::CreateInstance());				
-				xaserverarg__ arg1=new xaserverarg__;
-				arg1.setNativePointer(arg1.CreateInstance());
-				arg1.AddArg("id","地区");				
-				if (url::get("/sale/data/QuickCode/entity/list",arg1.GetString(),x1) != 1)
-				{
-					trace(x1.GetXmlDoc().text);
-					return -1;
-				}	
+			str += tmp1 + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+		return 1;
+	}
+	int OnColCopy(xstring col)
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		while (row > 0)
+		{
+			xstring tmp;
+			if (dw_list.GetItemDisplayString(row, col))
+				tmp = dw_list.GetItemDisplayString(row, col);
+			else
+				tmp = dw_list.GetItemString(row, col);
+			str += tmp + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
 
-				var list = x1.GetXmlDoc().selectNodes("root/item");
-				int i;
-				int s = list.length;
-				if(s>0)
-				{
-					string str = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
-					for(i=0;i<s;i++)
-					{
-						msxml::IXMLDOMElement xitem = list.item(i);
-						string id="";
-						if(xitem.selectSingleNode("Code"))
-							id = xitem.selectSingleNode("Code").text;
-						string name ="";
-						if(xitem.selectSingleNode("Meaning"))
-							name = xitem.selectSingleNode("Meaning").text;
-						string tmp = "&lt;row>&lt;显示列>"+name+"&lt;/显示列>&lt;数据列>"+id+"&lt;/数据列>&lt;/row>";
-						str += tmp;
-					}
-					str += "&lt;/data>'/></cellprop>";
+		return 1;
+	}
+	int OnRClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
 
+		int m = win::CreatePopupMenu();
+		int MF_STRING = 0x00000000;
+		int MF_DISABLED = 0x00000002;
+		int TPM_RIGHTBUTTON = 0x0002;
+		int TPM_RETURNCMD = 0x0100;
+		int MF_CHECKED = 0x8;
+		int MF_SEPARATOR = 0x0800;
+		win::AppendMenu(m, MF_STRING, 1, L"复制行");
+		win::AppendMenu(m, MF_STRING, 101, L"复制列");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 2, L"全选");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 4, L"导出到Excel");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 6, L"显示列设置");
+		xrect xr;
+		xpoint pt;
+		win::GetCursorPos(pt);
+		int ret = win::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), xr);
 
-					dw_list.SetColumnProps("AreaCode",str);
-				}
-				//币别
-				xml__ x2=new xml__;
-				x2.setNativePointer(xml__::CreateInstance());				
-				xaserverarg__ arg2=new xaserverarg__;
-				arg2.setNativePointer(arg2.CreateInstance());
-				arg2.AddArg("id","FND_Currency");								
-				if (url::get("/sale/data/QuickCode/entity/list",arg2.GetString(),x2) != 1)
-				{
-					trace(x2.GetXmlDoc().text);
-					return -1;
-				}	
+		//trace(ret);
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (ret == 1) { OnRowCopy(); }
+		else if (ret == 101) {
+			xstring colname = hdr.colname;
+			if (colname != L"")
+				OnColCopy(colname);
+		}
+		else if (ret == 2) { OnSelectAllRow(); }
+		else if (ret == 4) { ItemOutput(); }
+		else if (ret == 6) {}
+		xutil::RestoreCursor(hCursor);
 
-				var list1 = x2.GetXmlDoc().selectNodes("root/item");
-				int j;
-				int s1 = list1.length;
-				if(s1>0)
-				{
-					string str1 = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
-					for(j=0;j<s1;j++)
-					{
-						msxml::IXMLDOMElement xitem1 = list1.item(j);
-						string id1="";
-						if(xitem1.selectSingleNode("Code"))
-							id1 = xitem1.selectSingleNode("Code").text;
-						string name1 ="";
-						if(xitem1.selectSingleNode("Name"))
-							name1 = xitem1.selectSingleNode("Name").text;
-						string tmp1 = "&lt;row>&lt;显示列>"+name1+"&lt;/显示列>&lt;数据列>"+id1+"&lt;/数据列>&lt;/row>";
-						str1 += tmp1;
-					}
-					str1 += "&lt;/data>'/></cellprop>";
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&QuickCode::OnSetFocus);
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&QuickCode::OnXCommand);
+		AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&QuickCode::OnDoubleClicked);//行双击	
+		AttachEvent(L"dw_list", L"DWV_ITEMBEINGEDIT", (FEvent)&QuickCode::OnClicked);
+		AttachEvent(L"dw_list", L"DWV_RCLICKED", (FEvent)&QuickCode::OnRClick);//鼠标右键
+		return 1;
+	}
+	int OnRetrieve()
+	{
+		xml x;
 
+		xaserverarg arg;
 
-					dw_list.SetColumnProps("FromCurrencyCode",str1);
-				}
-				//国家
-				xml__ x3=new xml__;
-				x3.setNativePointer(xml__::CreateInstance());				
-				xaserverarg__ arg3=new xaserverarg__;
-				arg3.setNativePointer(arg3.CreateInstance());
-				arg3.AddArg("id","FND_Country");								
-				if (url::get("/sale/data/QuickCode/entity/list",arg3.GetString(),x3) != 1)
-				{
-					trace(x3.GetXmlDoc().text);
-					return -1;
-				}	
+		trace(L"asdasd");
 
-				var list2 = x3.GetXmlDoc().selectNodes("root/item");
-				int k;
-				int s2 = list2.length;
-				if(s2>0)
-				{
-					string str2 = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
-					for(k=0;k<s2;k++)
-					{
-						msxml::IXMLDOMElement xitem2 = list2.item(k);
-						string id2="";
-						if(xitem2.selectSingleNode("Code"))
-							id2 = xitem2.selectSingleNode("Code").text;
-						string name2 ="";
-						if(xitem2.selectSingleNode("Name"))
-							name2 = xitem2.selectSingleNode("Name").text;
-						string tmp2 = "&lt;row>&lt;显示列>"+name2+"&lt;/显示列>&lt;数据列>"+id2+"&lt;/数据列>&lt;/row>";
-						str2 += tmp2;
-					}
-					str2 += "&lt;/data>'/></cellprop>";
-
-
-					dw_list.SetColumnProps("MkCountryId",str2);
-				}						
-			dw_list.SetReadOnlyColumn("ToCurrencyCode");						
-			}				
-			int onload()
+		if (m_id.find(L"", 0) > 0)
+		{
+			m_id = m_id.mid(0, m_id.find(L"", 0));
+			arg.AddArg(L"id", m_id);
+			//trace(m_id);				
+			/*if (TDataSet::exec(m_config, L"query_remark", arg.GetString(),x) != 1)
 			{
-				m_config = "QuickCode.config";
-				m_agent = "";
-	
-				//dw_list = new xdwgrid__;
-				//dw_list.setNativePointer(GetControl("dw_list"));
-				//dw_list.SetSelectionMode(4);
-				//dw_list.AllowSort(false);			
-				if(this.GetParam())
-				{
-					xaserverarg__ arg = this.GetParam();
-					string id = arg.GetArgString("id");
-					if(id == "") return 0;
-					m_id = id;
-					loaded();	
-				
-					/*string tpl = arg.GetArgString("tpl");
-					if(tpl == "" && (m_id.find("__",0) >0))
-						tpl = "QuickCode.tpl/QuickCode_Remark";
-					else if(tpl == "" )
-						tpl = "QuickCode.tpl/QuickCode";		
-					dw_list.SetDataObject(GetServerUrl(),"dev:sheet["+tpl+"]");
-					string dbmap = arg.GetArgString("dbmap");
-					if(dbmap == ""  && (m_id.find("__",0)  >0) )
-						dbmap = "QuickCode_Remark.dbmap";		
-					else if(dbmap == "")
-						dbmap ="QuickCode.dbmap"; 		
-					m_dbmap = dbmap;
-					string name = arg.GetArgString("name");
-					if(name == "")
-						name = id;
-					m_name = name;
-					string title = arg.GetArgString("title");
-					if(title != "")
-						win__::SetWindowText(this.GetHWND(),title);*/
-					
-					
-					
-					
-					/*
-					param p = this.GetParam();
-					string pa = ""+p;
-					//string pa = "id=HrOrgType&title=客户类型";
-					string id = jxParam(pa,"id");
-					if(id == "") return 0;
-					m_id = id;				
-					string tpl = jxParam(pa,"tpl");
-					if(tpl == "" && (m_id.find("__",0) >0))
-						tpl = "QuickCode.tpl/QuickCode_Remark";
-					else if(tpl == "" )
-						tpl = "QuickCode.tpl/QuickCode";						
-					dw_list.SetDataObject(GetServerUrl(),"dev:sheet["+tpl+"]");
-					string dbmap = jxParam(pa,"dbmap");
-					if(dbmap == ""  && (m_id.find("__",0)  >0) )
-						dbmap = "QuickCode_Remark.dbmap";		
-					else if(dbmap == "")
-						dbmap ="QuickCode.dbmap"; 				
-					m_dbmap = dbmap;
-					//trace(m_dbmap);
-					
-					string name = jxParam(pa,"name");
-					if(name == "")
-						name = id;
-					m_name = name;
-					string title = jxParam(pa,"title");
-					if(title != "")
-						win__::SetWindowText(this.GetHWND(),title);*/
-					OnRetrieve();
-				}						
-
-				OnAttachEvent();
-				SetAgent();
-				Onital();
-				return 1;
+				trace(x.text());
+				return -1;
+			}*/
+			if (xurl::get(L"QuickCode/entity/list_remark", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
 			}
-		]
-	]
-]
\ No newline at end of file
+		}
+		else
+		{
+			trace(L"asdasd");
+			arg.AddArg(L"id", m_id);
+			arg.AddArg(L"querytxt", L"");
+			/*if (TDataSet::exec(m_config, L"query", arg.GetString(),x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}*/
+			if (xurl::get(L"QuickCode/entity/list", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}
+		}
+
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		return 1;
+	}
+	xstring jxParam(xstring p, xstring n)
+	{
+		if (p != L"")
+		{
+			p += L"&";
+			int i = 1;
+			while (p.find(L"=L", 0) > 0)
+			{
+				xstring name = p.mid(0, p.find(L"=L", 0));
+				xstring value = p.mid(p.find(L"=L", 0) + 1, p.find(L"&", 0) - p.find(L"=L", 0) - 1);
+				if (name == n) return L"" + value;
+				i += 1;
+				p = p.mid(p.find(L"&", 0) + 1, p.length());
+			}
+		}
+		return "";
+	}
+	int getURLParam()
+	{
+		if (GetWinParam())
+		{
+			xpage xp = new xpage;
+			xp.setNativePointer(GetXPage());
+			xstring aurl = xp.GetWkUrl();
+			xaserverarg arg;
+			if (aurl && aurl.find(L"native=true", 0) > 0)
+			{
+				int p = GetParam();
+				arg;
+				arg.setNativePointer(p);
+			}
+			else
+			{
+				arg = GetParam();
+			}
+			xstring config = arg.GetArgString(L"config");
+			xml x;
+
+			if (config == L"")
+			{
+				xstring configXml = arg.GetArgString(L"configxml");
+				x.loadXML(configXml);
+			}
+			else
+			{
+				getUrl(config, L"", x);
+			}
+			m_configDoc = x;
+
+		}
+
+		return 1;
+	}
+	int loaded()
+	{
+		getURLParam();
+		KXMLDOMDocument	 ee = m_configDoc;
+		xstring id = m_id;
+		var n = ee.selectSingleNode(L"//list/dwview[@type='dwgrid'][@id='" + id + L"']");
+		xstring vface = m_configDoc.selectSingleNode(L"//vface[1]").text();
+		xstring dwname = L"";//e.selectsingleNode(L"@name").text();
+		xstring tpl = L"";//e.selectsingleNode(L"@url").text();
+		xstring dbmap = L"";
+		if (n)
+		{
+			KXMLDOMElement e = n;
+			//trace(e.xml());
+			if (e.selectSingleNode(L"@name")) dwname = e.selectSingleNode(L"@name").text();
+			if (e.selectSingleNode(L"@url")) tpl = e.selectSingleNode(L"@url").text();
+			if (e.selectSingleNode(L"@dbmap")) dbmap = e.selectSingleNode(L"@dbmap").text();
+			//trace(vface +L"/"+ tpl);
+			//trace(selectmode);			
+		}
+		else
+		{
+			var m = ee.selectSingleNode(L"//list");
+			KXMLDOMElement e1 = m;
+			//trace(e.xml());
+			if (e1.selectSingleNode(L"@name")) dwname = e1.selectSingleNode(L"@name").text();
+			if (e1.selectSingleNode(L"@url")) tpl = e1.selectSingleNode(L"@url").text();
+			if (e1.selectSingleNode(L"@dbmap")) dbmap = e1.selectSingleNode(L"@dbmap").text();
+
+		}
+		m_dbmap = dbmap;
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(dwname));
+		dw_list.openUrl(vface + L"/" + tpl);
+		//dw_list.SetSelectionMode(4);							
+
+	}
+	int Onital()
+	{
+		//地区
+		xml x1;
+
+		xaserverarg arg1;
+		arg1.setNativePointer(arg1.CreateInstance());
+		arg1.AddArg(L"id", L"地区");
+		if (xurl::get(L"/sale/data/QuickCode/entity/list", arg1.GetString(), x1) != 1)
+		{
+			trace(x1.text());
+			return -1;
+		}
+
+		var list = x1.selectNodes(L"root/item");
+		int i;
+		int s = list.length;
+		if (s > 0)
+		{
+			xstring str = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
+			for (i = 0; i < s; i++)
+			{
+				KXMLDOMElement xitem = list.item(i);
+				xstring id = L"";
+				if (xitem.selectSingleNode(L"Code"))
+					id = xitem.selectSingleNode(L"Code").text();
+				xstring name = L"";
+				if (xitem.selectSingleNode(L"Meaning"))
+					name = xitem.selectSingleNode(L"Meaning").text();
+				xstring tmp = L"&lt;row>&lt;显示列>" + name + L"&lt;/显示列>&lt;数据列>" + id + L"&lt;/数据列>&lt;/row>";
+				str += tmp;
+			}
+			str += L"&lt;/data>'/></cellprop>";
+
+
+			dw_list.SetColumnProps(L"AreaCode", str);
+		}
+		//币别
+		xml x2;
+
+		xaserverarg arg2;
+		arg2.setNativePointer(arg2.CreateInstance());
+		arg2.AddArg(L"id", L"FND_Currency");
+		if (xurl::get(L"/sale/data/QuickCode/entity/list", arg2.GetString(), x2) != 1)
+		{
+			trace(x2.text());
+			return -1;
+		}
+
+		var list1 = x2.selectNodes(L"root/item");
+		int j;
+		int s1 = list1.length;
+		if (s1 > 0)
+		{
+			xstring str1 = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
+			for (j = 0; j < s1; j++)
+			{
+				KXMLDOMElement xitem1 = list1.item(j);
+				xstring id1 = L"";
+				if (xitem1.selectSingleNode(L"Code"))
+					id1 = xitem1.selectSingleNode(L"Code").text();
+				xstring name1 = L"";
+				if (xitem1.selectSingleNode(L"Name"))
+					name1 = xitem1.selectSingleNode(L"Name").text();
+				xstring tmp1 = L"&lt;row>&lt;显示列>" + name1 + L"&lt;/显示列>&lt;数据列>" + id1 + L"&lt;/数据列>&lt;/row>";
+				str1 += tmp1;
+			}
+			str1 += L"&lt;/data>'/></cellprop>";
+
+
+			dw_list.SetColumnProps(L"FromCurrencyCode", str1);
+		}
+		//国家
+		xml x3;
+
+		xaserverarg arg3;
+		arg3.setNativePointer(arg3.CreateInstance());
+		arg3.AddArg(L"id", L"FND_Country");
+		if (xurl::get(L"/sale/data/QuickCode/entity/list", arg3.GetString(), x3) != 1)
+		{
+			trace(x3.text());
+			return -1;
+		}
+
+		var list2 = x3.selectNodes(L"root/item");
+		int k;
+		int s2 = list2.length;
+		if (s2 > 0)
+		{
+			xstring str2 = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
+			for (k = 0; k < s2; k++)
+			{
+				KXMLDOMElement xitem2 = list2.item(k);
+				xstring id2 = L"";
+				if (xitem2.selectSingleNode(L"Code"))
+					id2 = xitem2.selectSingleNode(L"Code").text();
+				xstring name2 = L"";
+				if (xitem2.selectSingleNode(L"Name"))
+					name2 = xitem2.selectSingleNode(L"Name").text();
+				xstring tmp2 = L"&lt;row>&lt;显示列>" + name2 + L"&lt;/显示列>&lt;数据列>" + id2 + L"&lt;/数据列>&lt;/row>";
+				str2 += tmp2;
+			}
+			str2 += L"&lt;/data>'/></cellprop>";
+
+
+			dw_list.SetColumnProps(L"MkCountryId", str2);
+		}
+		dw_list.SetReadOnlyColumn(L"ToCurrencyCode");
+	}
+	int onload()
+	{
+		SetArg();
+		m_config = L"QuickCode.config";
+		m_agent = L"";
+
+		//dw_list = new xdwgrid;
+		//dw_list.setNativePointer(GetControl(L"dw_list"));
+		//dw_list.SetSelectionMode(4);
+		//dw_list.AllowSort(false);			
+		if (GetWinParam())
+		{
+			xaserverarg arg = GetArg();
+			xstring id = arg.GetArgString(L"id");
+			if (id == L"") return 0;
+			m_id = id;
+			loaded();
+
+			/*xstring tpl = arg.GetArgString(L"tpl");
+			if(tpl == L"" && (m_id.find(L"",0) >0))
+				tpl = L"QuickCode.tpl/QuickCode_Remark";
+			else if(tpl == L"" )
+				tpl = L"QuickCode.tpl/QuickCode";
+			dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]");
+			xstring dbmap = arg.GetArgString(L"dbmap");
+			if(dbmap == L""  && (m_id.find(L"",0)  >0) )
+				dbmap = L"QuickCode_Remark.dbmap";
+			else if(dbmap == L"")
+				dbmap =L"QuickCode.dbmap";
+			m_dbmap = dbmap;
+			xstring name = arg.GetArgString(L"name");
+			if(name == L"")
+				name = id;
+			m_name = name;
+			xstring title = arg.GetArgString(L"title");
+			if(title != L"")
+				win::SetWindowText(GetHWND(),title);*/
+
+
+
+
+				/*
+				param p = GetParam();
+				xstring pa = L""+p;
+				//xstring pa = L"id=HrOrgType&title=客户类型";
+				xstring id = jxParam(pa,L"id");
+				if(id == L"") return 0;
+				m_id = id;
+				xstring tpl = jxParam(pa,L"tpl");
+				if(tpl == L"" && (m_id.find(L"",0) >0))
+					tpl = L"QuickCode.tpl/QuickCode_Remark";
+				else if(tpl == L"" )
+					tpl = L"QuickCode.tpl/QuickCode";
+				dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]");
+				xstring dbmap = jxParam(pa,L"dbmap");
+				if(dbmap == L""  && (m_id.find(L"",0)  >0) )
+					dbmap = L"QuickCode_Remark.dbmap";
+				else if(dbmap == L"")
+					dbmap =L"QuickCode.dbmap";
+				m_dbmap = dbmap;
+				//trace(m_dbmap);
+
+				xstring name = jxParam(pa,L"name");
+				if(name == L"")
+					name = id;
+				m_name = name;
+				xstring title = jxParam(pa,L"title");
+				if(title != L"")
+					win::SetWindowText(GetHWND(),title);*/
+			OnRetrieve();
+		}
+
+		OnAttachEvent();
+		SetAgent();
+		Onital();
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/QuickCode_Tree.cpp b/jrj/project/business/BasicCode/QuickCode_Tree.cpp
index cd40c87..b8b99b0 100644
--- a/jrj/project/business/BasicCode/QuickCode_Tree.cpp
+++ b/jrj/project/business/BasicCode/QuickCode_Tree.cpp
@@ -1,690 +1,696 @@
-use"lang.vl"
-use "win.vl"
-use "dev:vm[xml.vm]"
-use "treeview.vm"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xdwtable.vm]"
-use "dev:vm[xutil.vm]"
-use "file.vl"
-use "list.vl"
-unit vbusiness.vpage
-[
-	QuickCode_Tree is extend list;
-	about QuickCode_Tree
-	[
-		field:
-			
-		method:
-		[
-			xdwgrid__	dw_list;
-			treeview__		tv_1;			
-			string m_config;
-			string m_agent;
-			string m_id;
-			string m_dbmap;
-			string treexquery;
-			string		c_type;	
-			msxml::IXMLDOMDocument m_configDoc;
-			string kpstr;
-			string strtpl;
-			string m_QueryTxt;
-			int alert(string str)
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) QuickCode_Tree : public xwin
+{
+public:
+	xdwgrid	dw_list;
+	xtreeview	tv_1;
+	xstring m_config;
+	xstring m_agent;
+	xstring m_id;
+	xstring m_dbmap;
+	xstring treexquery;
+	xstring		c_type;
+	KXMLDOMDocument m_configDoc;
+	xstring kpstr;
+	xstring strtpl;
+	xstring m_QueryTxt;
+	xnode	m_agentNode;
+public:
+	QuickCode_Tree(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static QuickCode_Tree* CreateInstance(void* implPtr, void* hWnd)
+	{
+		QuickCode_Tree* pWin = new QuickCode_Tree(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		TApp::alert(this, str);
+		//win::MessageBox(GetHWND(),str,L"提示:",0);
+		return 0;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
 			{
-				TApp::alert(this,str);
-				//win__::MessageBox(this.GetHWND(),str,"提示:",0);
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+	int OnRetrieve()
+	{
+		dw_list.AcceptText();
+		xml x;
+
+		xaserverarg arg;
+
+		arg.AddArg(L"id", m_id);
+		arg.AddArg(L"sType", c_type);
+		arg.AddArg(L"QueryTxt", m_QueryTxt);
+		//trace(arg.GetString());
+		/*if (TDataSet::exec(m_config, L"query1", arg.GetString(),x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}*/
+		if (xurl::get(L"QuickCode/entity/listaddtree", arg.GetString(), x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		//trace(x.xml());
+		if (x.xml() == L"")
+		{
+			xml xx;
+			xx.loadXML(L"<root/>");
+			dw_list.Retrieve(xx);
+			dw_list.Redraw();
+		}
+		else
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+
+		return 1;
+	}
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+
+
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		//c_type=dw_type.GetItemLabel(hitem);
+		//如果是跟节点
+		HTREEITEM roothitem = tv_1.GetRootItem();
+		if (hitem == roothitem) {
+			c_type = L"";
+		}
+		else
+		{
+			c_type = tv_1.GetItemLabel(hitem);
+
+		}
+		OnRetrieve();
+		return 1;
+	}
+	int adduomfolder()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"note", L"新增");
+		arg.AddArg(L"m_id", m_id);
+		//win::OpenWindow(L"dev:xpage[AddUomGroup.vx]",arg);
+		openUrl(L"公共设置.vface/xpage/quickcode/AddGroup", arg);
+		xstring ok = arg.GetArgString(L"return");
+		if (ok == L"ok") {
+			xstring GroupName = arg.GetArgString(L"GroupName");
+			xml xx;
+
+			xaserverarg args;
+
+			args.AddArg(L"GroupName", GroupName);
+			args.AddArg(L"OldGroupName", L"");
+			args.AddArg(L"m_id", m_id);
+			/*if(TFile::exec(m_config,L"updateuomtype",args,xx)!=1)
+			{
+				trace(L"error:"+xx.xml());
+				alert(L"保存出错!");
+				return 0;
+			}*/
+			if (xurl::get(L"QuickCode/pref/quickcode_tree.updateGroup", args.GetString(), xx) != 1)
+			{
+				trace(L"error:" + (xstring)xx.xml());
+				alert(L"保存出错!");
 				return 0;
 			}
-			int SetAgent()
+			else
 			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				var xframeElement =  win__::GetElement();
-				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]");
-				if(agent)
+				xstring vv = xx.documentElement().text();
+				xml x;
+
+				x.loadXML(L"<row GroupName='" + GroupName + L"'/>");
+				HTREEITEM root = tv_1.GetRootItem();
+				if (vv == L"OK")
 				{
-					string s = agent.xml+"";
-					SetAgentNodeContent (anode,s);
+					tv_1.InsertChildItem(root, GroupName, x.documentElement(), 15);
 				}
-				return 1;
+
 			}
-			int OnRetrieve()
-			{
-				dw_list.AcceptText();				
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("id",m_id);
-				arg.AddArg("sType",c_type);
-				arg.AddArg("QueryTxt", m_QueryTxt ); 				
-				//trace(arg.GetString());
-				/*if (TDataSet::exec(m_config, "query1", arg.GetString(),x) != 1)
+		}
+		return 1;
+	}
+	int modifyuomfolder()
+	{
+
+		HTREEITEM h = tv_1.GetSelectedItem();
+		if (!h)
+		{
+			alert(L"请选择需要修改的组名");
+			return 0;
+		}
+		HTREEITEM roothitem = tv_1.GetRootItem();
+		if (h == roothitem)
+		{
+			alert(L"不能修改根节点名称!");
+		}
+		else
+		{
+			KXMLDOMElement e = tv_1.GetItemData(h);
+			trace(e.xml());
+			//xstring  OldGroupName= e.SelectSingleNode(L"@GroupName").text();
+			xstring  OldGroupName = tv_1.GetItemLabel(h);
+			xaserverarg arg;
+
+			arg.AddArg(L"note", L"修改");
+			arg.AddArg(L"m_id", m_id);
+			arg.AddArg(L"GroupName", OldGroupName);
+			OpenWindow(L"dev:xpage[AddUomGroup.vx]", arg);
+			xstring ok = arg.GetArgString(L"return");
+			if (ok == L"ok") {
+				xstring NewGroupName = arg.GetArgString(L"GroupName");
+				xml xx;
+
+				xaserverarg args;
+
+				args.AddArg(L"GroupName", NewGroupName);
+				args.AddArg(L"OldGroupName", OldGroupName);
+				args.AddArg(L"m_id", m_id);
+				/*if(TFile::exec(m_config,L"updateuomtype",args,xx)!=1)
 				{
-					trace(x.GetXmlDoc().text);
-					return -1;
+					trace(L"error:"+xx.xml());
+					alert(L"保存出错!");
+					return 0;
 				}*/
-				if (url::get("QuickCode/entity/listaddtree",arg.GetString(),x) != 1)
+				if (xurl::get(L"QuickCode/pref/quickcode_tree.updateGroup", args.GetString(), xx) != 1)
 				{
-					trace(x.GetXmlDoc().text);
-					return -1;
-				}		
-				//trace(x.GetXml());
-				if(x.GetXml()=="")
-				{	
-					xml__ xx=new xml__;
-					xx.setNativePointer(xml__::CreateInstance());
-					xx.LoadXml("<root/>");
-					dw_list.Retrieve(xx);
-					dw_list.Redraw();				
+					trace(L"error:" + (xstring)xx.xml());
+					alert(L"保存出错!");
+					return 0;
 				}
 				else
-				{	
-					dw_list.Retrieve(x);
-					dw_list.Redraw();				
-				}	
+				{
+					trace(xx.xml());
+					xstring vv = xx.documentElement().text();
+					if (vv == L"OK")
+					{
+						tv_1.SetItemLabel(h, NewGroupName);
+					}
 
-				return 1;
-			}				
-			int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+				}
+			}
+		}
+		return 1;
+	}
+	int deluomfolder()
+	{
+
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		if (!hitem)
+		{
+			alert(L"请选择需要删除的组名");
+			return 0;
+		}
+		else
+		{
+
+			int s = dw_list.GetRowCount();
+			if (s > 0)
 			{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int hItem = nmtv.itemNew.hItem;	
-
-				int wid = tv_1.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				//c_type=dw_type.GetItemLabel(hitem);
-				//如果是跟节点
-				int roothitem=treeview__::GetRootItem(wid);
-				if(hitem == roothitem){
-					c_type="";
-				}
-				else
+				alert(L"该分组下面存在数据,不能删除!");
+				return 0;
+			}
+			HTREEITEM roothitem = tv_1.GetRootItem();
+			if (hitem == roothitem)
+			{
+				alert(L"不能删除根节点!");
+			}
+			else
+			{
+				//缺少判断删除的条件
+				xstring GroupName = tv_1.GetItemLabel(hitem);
+				if (MessageBox(GetHWND(), L"确定删除组名:" + GroupName + L" 吗?", L"提示", 1) == 1)
 				{
-					c_type = treeview__::GetItemLabel(wid,hitem);
+					xml xx;
 
+					xaserverarg arg;
+
+					arg.AddArg(L"GroupName", GroupName);
+					arg.AddArg(L"m_id", m_id);
+					trace(GroupName);
+					trace(m_id);
+					/*if (xaserver::ExecXAction(GetServerUrl(),L"[delete.type.FND_UOM.xa]",arg.GetString()) == 1)
+					{
+						tv_1.DeleteItem(wid,hitem);
+						//OnTreeSelChanged();
+					}*/
+					if (xurl::get(L"QuickCode/pref/quickcode_tree.deleteGroup", arg.GetString(), xx) == 1)
+					{
+						tv_1.DeleteItem(hitem);
+					}
+					else
+						alert(L"删除失败!");
 				}
+			}
+		}
+		return 1;
+	}
+	xdwgrid getDW()
+	{
+		return dw_list;
+	}
+	int GridSearch()
+	{
+		xml x;
+
+		xaserver::LoadUrl(L"", L"dev:vface[公共设置.vface]", L"", x);
+		//trace(x.xml());
+		//trace(strtpl);
+		xstring aa = strtpl;
+		var doc = x;
+		var n = doc.selectSingleNode(L"//resource[@url='" + aa + L"']/@src");
+		//trace(n.text());			
+
+		xaserverarg arg;
+
+		arg.AddArg(L"sheet", n.text());
+		arg.AddArg(L"search", list::m_QueryTxt);
+		openUrl(L"view.dlg.vface/xpage/grid/column/search", arg);
+		xstring ok = arg.GetArgString(L"return");
+		if (ok == L"ok") {
+			xstring txt = arg.GetArgString(L"search");
+			if (txt != L"") {
+				m_QueryTxt = txt;
+				//trace(txt);
 				OnRetrieve();
-				return 1;	
 			}
-			int adduomfolder()
-			{
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());		
-				arg.AddArg("note","新增");
-				arg.AddArg("m_id",m_id);				
-				//win__::OpenWindow("dev:xpage[AddUomGroup.vx]",arg);
-				openUrl("公共设置.vface/xpage/quickcode/AddGroup", arg);					
-				string ok = arg.GetArgString("return");
-				if(ok == "ok"){
-					string GroupName = arg.GetArgString("GroupName");	
-					xml__ xx=new xml__;
-					xx.setNativePointer(xml__::CreateInstance());				
-					xaserverarg__ args = new xaserverarg__;
-					args.setNativePointer(args.CreateInstance());		
-					args.AddArg("GroupName",GroupName);
-					args.AddArg("OldGroupName","");
-					args.AddArg("m_id",m_id);					
-					/*if(TFile::exec(m_config,"updateuomtype",args,xx)!=1)
-					{
-						trace("error:"+xx.GetXml());
-						alert("保存出错!");
-						return 0;
-					}*/
-					if (url::get("QuickCode/pref/quickcode_tree.updateGroup",args.GetString(),xx) != 1)
-					{
-						trace("error:"+xx.GetXml());
-						alert("保存出错!");
-						return 0;
-					}						
-					else
-					{	
-						string vv=xx.GetXmlDoc().documentElement.text;
-						xml__ x=new xml__;
-						x.setNativePointer(xml__::CreateInstance());
-						x.LoadXml("<row GroupName='"+GroupName+"'/>");
-						int root = treeview__::GetRootItem(tv_1.GetId());
-						if(vv=="OK")
-						{	
-							treeview__::InsertChildItem(tv_1.GetId(), root, GroupName,x.GetXmlDoc().documentElement, 15);								
-						}
-		
-					}	
-				}					
-				return 1;
-			}
-			int modifyuomfolder()
-			{
-				int wid = tv_1.GetId();
-				int h = treeview__::GetSelectedItem(wid);
-				if (h<1)
-				{
-					alert("请选择需要修改的组名");
-					return 0;
-				}
-				int roothitem=treeview__::GetRootItem(wid);
-				if(h==roothitem)
-				{	
-					alert("不能修改根节点名称!");					
-				}
-				else
-				{	
-					msxml::IXMLDOMElement e = treeview__::GetItemData(wid,h);
-					trace(e.xml);
-					//string  OldGroupName= e.SelectSingleNode("@GroupName").text;
-					string  OldGroupName= treeview__::GetItemLabel(wid,h);
-					xaserverarg__ arg = new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());		
-					arg.AddArg("note","修改");
-					arg.AddArg("m_id",m_id);					
-					arg.AddArg("GroupName",OldGroupName);				
-					win__::OpenWindow("dev:xpage[AddUomGroup.vx]",arg);
-					string ok = arg.GetArgString("return");
-					if(ok == "ok"){
-						string NewGroupName = arg.GetArgString("GroupName");	
-						xml__ xx=new xml__;
-						xx.setNativePointer(xml__::CreateInstance());				
-						xaserverarg__ args = new xaserverarg__;
-						args.setNativePointer(args.CreateInstance());		
-						args.AddArg("GroupName",NewGroupName);
-						args.AddArg("OldGroupName",OldGroupName);
-						args.AddArg("m_id",m_id);			
-						/*if(TFile::exec(m_config,"updateuomtype",args,xx)!=1)
-						{
-							trace("error:"+xx.GetXml());
-							alert("保存出错!");
-							return 0;
-						}*/
-						if (url::get("QuickCode/pref/quickcode_tree.updateGroup",args.GetString(),xx)!=1)
-						{
-							trace("error:"+xx.GetXml());
-							alert("保存出错!");
-							return 0;
-						}					
-						else
-						{	
-						trace(xx.GetXml());
-							string vv=xx.GetXmlDoc().documentElement.text;	
-							if(vv=="OK")
-							{							
-								treeview__::SetItemLabel(tv_1.GetId(), h,NewGroupName);
-							}
+		}
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		HCURSOR hCursor = xutil::SetCursorWait();
+		xdwgrid dw = getDW();
+		if (comdid == L"save") {
+			dw_list.AcceptText();
+			xml x;
 
-						}	
-					}
-				}					
-				return 1;
-			}
-			int deluomfolder()
-			{	
-				
-				int wid = tv_1.GetId();
-				int hitem=treeview__::GetSelectedItem(wid);
-				if (hitem<1)
-				{
-					alert("请选择需要删除的组名");
-					return 0;
-				}					
-				else
-				{
+			xaserverarg arg;
 
-					int s=dw_list.GetRowCount();
-					if (s>0)
-					{
-						alert("该分组下面存在数据,不能删除!");
-						return 0;
-					}
-					int roothitem=treeview__::GetRootItem(wid);
-					if(hitem==roothitem)
-					{	
-						alert("不能删除根节点!");					
-					}
-					else
-					{	
-						//缺少判断删除的条件
-						string GroupName =treeview__::GetItemLabel(wid,hitem);
-						if(win__::MessageBox(GetHWND(),"确定删除组名:"+GroupName+" 吗?","提示",1)==1)
-						{
-							xml__ xx=new xml__;
-							xx.setNativePointer(xml__::CreateInstance());		
-							xaserverarg__ arg = new xaserverarg__;
-							arg.setNativePointer(arg.CreateInstance());
-							arg.AddArg("GroupName",GroupName);
-							arg.AddArg("m_id",m_id);
-							trace(GroupName);
-							trace(m_id);					
-							/*if (xaserver__::ExecXAction(GetServerUrl(),"[delete.type.FND_UOM.xa]",arg.GetString()) == 1)
-							{
-								treeview__::DeleteItem(wid,hitem);
-								//OnTreeSelChanged();
-							}*/
-							if (url::get("QuickCode/pref/quickcode_tree.deleteGroup",arg.GetString(),xx)== 1)
-							{
-								treeview__::DeleteItem(wid,hitem);
-							}								
-							else
-								alert("删除失败!");
-						}
-					}						
-				}
-				return 1;
-			}					
-			xdwgrid__ getDW()
+			dw_list.DwUpdateAllToEx(x);
+			KXMLDOMElement e = x.documentElement();
+			e.setAttribute(L"id", m_id);
+			//arg.AddArg(L"id",m_id);
+			//trace(m_id);
+			//trace(m_dbmap);
+			if (m_id == L"开票银行")
 			{
-				return dw_list;					
+				xml kp;
+
+				kp.loadXML(L"<root></root>");
+				KXMLDOMElement ele = kp.documentElement();
+				var list = e.selectNodes(L"item[@update.modify='1' or @update.delete='1' ]");
+				int j;
+				int k = list.length;
+				for (j = 0; j < k; j++)
+				{
+					KXMLDOMElement ele1 = list.item(j);
+					ele.appendChild(ele1);
+				}
+				kpstr = ele.xml();
+				trace(ele.xml());
 			}
-			int GridSearch()
+			if (m_id == L"开票银行")
 			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserver__::LoadUrl("","dev:vface[公共设置.vface]","",x);
-				//trace(x.GetXml());
-				//trace(strtpl);
-				string aa=strtpl;
-				var doc = x.GetXmlDoc();
-				var n = doc.selectSingleNode("//resource[@url='"+aa+"']/@src");
-				//trace(n.text);			
-							
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("sheet",n.text);
-				arg.AddArg("search",list::m_QueryTxt);
-				openUrl("view.dlg.vface/xpage/grid/column/search", arg);						
-				string ok = arg.GetArgString("return");
-				if(ok == "ok"){
-					string txt = arg.GetArgString("search");
-					if(txt != ""){		
-						m_QueryTxt = txt;
-						//trace(txt);
-						OnRetrieve();
-					}
-				}
+				arg.AddArg(L"content", kpstr);
+			}
+			else
+			{
+				arg.AddArg(L"content", e.xml());
+			}
+			arg.AddArg(L"dbmap", m_dbmap);
+			/*if(TFile::exec(m_config,L"save",arg,x)!=1)
+			{
+				trace(L"error:"+x.xml());
+				alert(L"保存出错!");
 				return 0;
-			}							
-			int OnCmdDispatch(string comdid)
+			}*/
+			trace(m_dbmap + L"\r\n" + e.xml());
+			if (xurl::get(L"QuickCode/pref/quickcode.save", arg.GetString(), x) != 1)
 			{
-				int hCursor = xutil__::SetCursorWait();
-				xdwgrid__ dw=getDW();				
-				if(comdid == "save"){
-					dw_list.AcceptText();
-					xml__ x=new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					xaserverarg__ arg=new xaserverarg__;
-					arg.setNativePointer(arg.CreateInstance());	
-					dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
-					msxml::IXMLDOMElement e= x.GetXmlDoc().documentElement;
-					e.SetAttribute("id", m_id);
-					//arg.AddArg("id",m_id);
-					//trace(m_id);
-					//trace(m_dbmap);
-					if(m_id=="开票银行")
-					{	
-						xml__ kp = new xml__;
-						kp.setNativePointer(xml__::CreateInstance());			
-						kp.LoadXml("<root></root>");
-						msxml::IXMLDOMElement ele= kp.GetXmlDoc().documentElement;
-						var list = e.SelectNodes("item[@update.modify='1' or @update.delete='1' ]");
-						int j;
-						int k = list.length;
-						for (j=0; j<k; j++)
-						{
-							msxml::IXMLDOMElement ele1 = list.item(j);
-							ele.appendChild(ele1);			
-						}
-						kpstr=ele.xml;
-						trace(ele.xml);					
-					}	
-					if(m_id=="开票银行")
-					{	
-						arg.AddArg("content",kpstr);					
-					}
-					else 
-					{	
-						arg.AddArg("content",e.xml);					
-					}						
-					arg.AddArg("dbmap", m_dbmap);
-					/*if(TFile::exec(m_config,"save",arg,x)!=1)
-					{
-						trace("error:"+x.GetXml());
-						alert("保存出错!");
-						return 0;
-					}*/
-					trace(m_dbmap+"\r\n"+e.xml);					
-					if (url::get("QuickCode/pref/quickcode.save",arg.GetString(),x) != 1)
-					{
-						string error = x.GetXmlDoc().text;
-						trace(error);
-					}					
-					//trace(arg.GetString());
-					if(x.GetXmlDoc().selectSingleNode("error"))
-					{
-						alert("保存出错2!");
-						return 0;				
-					}
-					dw_list.ResetUpdateStatus();
-					alert("保存成功!");
-				}
-				else if(comdid=="add"){
-					dw.InsertRow(0); 
-					int rows = dw.GetRowCount();
-					dw.SetItemString(rows,"GroupName",c_type);			
-					dw.SetItemString(rows,"BankName",c_type);	
-				}
-				else if(comdid=="insert"){
-					int row = dw.GetRow();
-					if(row<1 || row>dw.GetRowCount()) return 0;
-					dw.InsertRow(row); 
-				
-					dw.SetItemString(row,"GroupName",c_type);				
-				}
-				else if(comdid == "delet"){
-					dw_list.AcceptText();
-					int row2 = dw.GetRow();
-					if(row2<1 || row2>dw.GetRowCount()) return 0;
-					dw.DeleteRow(row2);
-				}
-				else if (comdid=="adduomfolder")
-					adduomfolder();
-				else if (comdid=="modifyuomfolder")
-					modifyuomfolder();
-				else if (comdid=="deluomfolder")
-					deluomfolder();
-				else if (comdid=="search")
-					GridSearch();				
-				xutil__::RestoreCursor(hCursor);
+				xstring error = x.text();
+				trace(error);
+			}
+			//trace(arg.GetString());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
 				return 0;
 			}
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(""+evt.pStrID);
-			}
-			int OnSetFocus(ref TNotifyEvent evt,int p){
-				SetAgent();
-				tv_1 =  new treeview__;
-				tv_1.setNativePointer(this.GetControl("tv_1"));
-				int wid = tv_1.GetId();
-				int root = treeview__::GetRootItem(wid);		
-				treeview__::ExpandItem(wid,root);					
-				return 1;
-			}
-			int OnDoubleClicked(ref TNotifyEvent evt,int p)
-			{
-				ref DWNMHDR  hdr = evt.pnmh;
-				int row = hdr.row;
-				if(row<1 || row > dw_list.GetRowCount() ) return 0;
-				
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				//string str = hdr.data;
-				string colname=hdr.colname;
-				string str = dw_list.GetItemString(row, colname);
-				arg.AddArg("value",str);
-				openUrl("/sale/view/view.dlg/xpage/memo/edit", arg);									
-				string comdid = arg.GetArgString("comdid");
-				if(comdid=="xmOK")
-				{
-					string value = arg.GetArgString("value");
-					dw_list.SetItemString(row,colname,value); 
-					dw_list.Redraw();
-				}								
-				
-				return 1;
-			}
-			int ItemOutput()
-			{
-				string d = xaserver__::GetCurrentDate();
-				d = d.left(10) +"";
-				dw_list.SaveAs(d);		
-				return 1;
-			}				
-			int OnSelectAllRow()
-			{
-				int rows =  this.dw_list.GetRowCount();
-				if(rows < 1) return -1;
-				 this.dw_list.SelectRow(1, rows, true);
-				 this.dw_list.Redraw();
-				return 1;
-			}				
-			int OnRowCopy()
-			{
-				int rows = this.dw_list.GetRowCount();
-				if(rows < 1) return -1;
-				int cols = this.dw_list.GetColumnCount(); 
-				string str = "";
-				int row = this.dw_list.GetNextSelectRow(1);
-				int i;
-				while(row > 0)
-				{
-					string tmp1 = "";
-					for(i=1; i<cols; i++)
-					{
-						int w = this.dw_list.GetColumnWidth(i);
-						if(w < 5) continue;
-						string tmp;
-						if(this.dw_list.GetItemDisplayString(row, i + 1))
-							tmp = this.dw_list.GetItemDisplayString(row, i + 1);
-						else
-							tmp = this.dw_list.GetItemString(row, i + 1);							
-						tmp1 += tmp + "\t";
-					}
-					str += tmp1 + "\r\n";
-					row = this.dw_list.GetNextSelectRow(row + 1);
-				}
-				this.dw_list.SetDataToClip(str);
-				return 1;
-			}
-			int OnColCopy(string col)
-			{
-				int rows = this.dw_list.GetRowCount();
-				if(rows < 1) return -1;
-				string str = "";
-				int row = this.dw_list.GetNextSelectRow(1);
-				while(row > 0)
-				{
-					string tmp;
-					if(this.dw_list.GetItemDisplayString(row, col))
-						tmp = this.dw_list.GetItemDisplayString(row,col);
-					else
-						tmp = this.dw_list.GetItemString(row, col);						
-					str += tmp + "\r\n";
-					row = this.dw_list.GetNextSelectRow(row + 1);
-				}
-				this.dw_list.SetDataToClip(str);
-				
-				return 1;
-			}					
-			int OnRClick(ref TNotifyEvent evt,int p)
-			{
-				ref DWNMHDR  hdr = evt.pnmh;
-				int row = hdr.row;
-				
-				int m = win__::CreatePopupMenu();
-				int MF_STRING = 0x00000000;
-				int MF_DISABLED  = 0x00000002;
-				int TPM_RIGHTBUTTON = 0x0002;
-				int TPM_RETURNCMD = 0x0100;
-				int MF_CHECKED = 0x8;
-				int MF_SEPARATOR = 0x0800;
-				win__::AppendMenu(m,MF_STRING, 1, "复制行");		
-				win__::AppendMenu(m,MF_STRING, 101, "复制列");		
-				win__::AppendMenu(m,MF_SEPARATOR, -1, "");		
-				win__::AppendMenu(m,MF_STRING, 2, "全选");		
-				win__::AppendMenu(m,MF_SEPARATOR, -1, "");		
-				win__::AppendMenu(m,MF_STRING, 4, "导出到Excel");
-				win__::AppendMenu(m,MF_SEPARATOR, -1, "");		
-				win__::AppendMenu(m,MF_STRING, 6, "显示列设置");
-				xrect xr;
-				xpoint pt;
-				win__::GetCursorPos(pt);				
-				int ret=win__::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, this.GetHWND(), xr);
-				
-				//trace(ret);
-				int hCursor = xutil__::SetCursorWait();					
-				if(ret == 1) {OnRowCopy();}
-				else if(ret == 101) {
-					string colname=hdr.colname;
-					if(colname != "")
-						OnColCopy(colname);
-				}
-				else if(ret == 2) {OnSelectAllRow();}
-				else if(ret == 4) {ItemOutput();}
-				else if(ret == 6) {}
-				xutil__::RestoreCursor(hCursor);				
-					
-				return 1;
-			}				
-			int OnAttachEvent()
-			{
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获得树的选择事件
-				AttachEvent("tv_1", "TVN_SELCHANGED",OnTreeSelChanged);	
-				AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDoubleClicked);//行双击
-				AttachEvent("dw_list","DWV_RCLICKED",OnRClick);//鼠标右键								
-			}
+			dw_list.ResetUpdateStatus();
+			alert(L"保存成功!");
+		}
+		else if (comdid == L"add") {
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetItemString(rows, L"GroupName", c_type);
+			dw.SetItemString(rows, L"BankName", c_type);
+		}
+		else if (comdid == L"insert") {
+			int row = dw.GetRow();
+			if (row<1 || row>dw.GetRowCount()) return 0;
+			dw.InsertRow(row);
 
-				
-			string jxParam(string p, string n)
+			dw.SetItemString(row, L"GroupName", c_type);
+		}
+		else if (comdid == L"delet") {
+			dw_list.AcceptText();
+			int row2 = dw.GetRow();
+			if (row2<1 || row2>dw.GetRowCount()) return 0;
+			dw.DeleteRow(row2);
+		}
+		else if (comdid == L"adduomfolder")
+			adduomfolder();
+		else if (comdid == L"modifyuomfolder")
+			modifyuomfolder();
+		else if (comdid == L"deluomfolder")
+			deluomfolder();
+		else if (comdid == L"search")
+			GridSearch();
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+
+		HTREEITEM root = tv_1.GetRootItem();
+		tv_1.ExpandItem(root);
+		return 1;
+	}
+	int OnDoubleClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		if (row<1 || row > dw_list.GetRowCount()) return 0;
+
+		xaserverarg arg;
+
+		//xstring str = hdr.data;
+		xstring colname = hdr.colname;
+		xstring str = dw_list.GetItemString(row, colname);
+		arg.AddArg(L"value", str);
+		openUrl(L"/sale/view/view.dlg/xpage/memo/edit", arg);
+		xstring comdid = arg.GetArgString(L"comdid");
+		if (comdid == L"xmOK")
+		{
+			xstring value = arg.GetArgString(L"value");
+			dw_list.SetItemString(row, colname, value);
+			dw_list.Redraw();
+		}
+
+		return 1;
+	}
+	int ItemOutput()
+	{
+		xstring d = xaserver::GetCurrentDate();
+		d = d.left(10) + L"";
+		dw_list.SaveAs(d);
+		return 1;
+	}
+	int OnSelectAllRow()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		dw_list.SelectRow(1, rows, true);
+		dw_list.Redraw();
+		return 1;
+	}
+	int OnRowCopy()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		int cols = dw_list.GetColumnCount();
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		int i;
+		while (row > 0)
+		{
+			xstring tmp1 = L"";
+			for (i = 1; i < cols; i++)
 			{
-				if(p != "")
-				{
-					p +="&";
-					int i = 1;
-					while (p.find("=",0)>0)
-					{
-						string name = p.mid(0, p.find("=",0));
-						string value = p.mid(p.find("=",0) + 1, p.find("&",0) - p.find("=",0) - 1);
-						if(name==n) return ""+value;
-						i += 1;
-						p = p.mid(p.find("&",0) + 1, p.length());
-					}
-				}		
-				return "";
+				int w = dw_list.GetColumnWidth(i);
+				if (w < 5) continue;
+				xstring tmp;
+				if (dw_list.GetItemDisplayString(row, i + 1))
+					tmp = dw_list.GetItemDisplayString(row, i + 1);
+				else
+					tmp = dw_list.GetItemString(row, i + 1);
+				tmp1 += tmp + L"\t";
 			}
-			int getURLParam()
+			str += tmp1 + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+		return 1;
+	}
+	int OnColCopy(xstring col)
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		while (row > 0)
+		{
+			xstring tmp;
+			if (dw_list.GetItemDisplayString(row, col))
+				tmp = dw_list.GetItemDisplayString(row, col);
+			else
+				tmp = dw_list.GetItemString(row, col);
+			str += tmp + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+
+		return 1;
+	}
+	int OnRClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+
+		int m = win::CreatePopupMenu();
+		int MF_STRING = 0x00000000;
+		int MF_DISABLED = 0x00000002;
+		int TPM_RIGHTBUTTON = 0x0002;
+		int TPM_RETURNCMD = 0x0100;
+		int MF_CHECKED = 0x8;
+		int MF_SEPARATOR = 0x0800;
+		win::AppendMenu(m, MF_STRING, 1, L"复制行");
+		win::AppendMenu(m, MF_STRING, 101, L"复制列");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 2, L"全选");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 4, L"导出到Excel");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 6, L"显示列设置");
+		xrect xr;
+		xpoint pt;
+		win::GetCursorPos(pt);
+		int ret = win::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), xr);
+
+		//trace(ret);
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (ret == 1) { OnRowCopy(); }
+		else if (ret == 101) {
+			xstring colname = hdr.colname;
+			if (colname != L"")
+				OnColCopy(colname);
+		}
+		else if (ret == 2) { OnSelectAllRow(); }
+		else if (ret == 4) { ItemOutput(); }
+		else if (ret == 6) {}
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&QuickCode_Tree::OnSetFocus);
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&QuickCode_Tree::OnXCommand);
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&QuickCode_Tree::OnTreeSelChanged);
+		AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&QuickCode_Tree::OnDoubleClicked);//行双击
+		AttachEvent(L"dw_list", L"DWV_RCLICKED", (FEvent)&QuickCode_Tree::OnRClick);//鼠标右键		
+		return 1;
+	}
+
+
+	xstring jxParam(xstring p, xstring n)
+	{
+		if (p != L"")
+		{
+			p += L"&";
+			int i = 1;
+			while (p.find(L"=L", 0) > 0)
 			{
-				if(GetParam())
-				{
-					xpage__ xp=new xpage__;
-					xp.setNativePointer(this.GetXPage());
-					string aurl = xp.GetWkUrl();
-					xaserverarg__ arg;
-					if(aurl && aurl.find("native=true",0)>0)
-					{
-						int p = this.GetParam();
-						arg = new xaserverarg__;
-						arg.setNativePointer(p);
-					}
-					else
-					{
-						arg = GetParam();
-					}
-					string config = arg.GetArgString("config");
-					xml__ x = new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					if(config == "")
-					{
-						string configXml = arg.GetArgString("configxml");
-						x.LoadXml(configXml);
-					}
-					else
-					{
-						getUrl(config, "", x);						
-					}	
-					m_configDoc = x.GetXmlDoc();			
-
-				}
-				
-				return 1;
-			}						
-			int loaded()
-			{	
-				getURLParam();
-				msxml::IXMLDOMDocument	 ee=m_configDoc;
-				string id=m_id;
-				var n = ee.selectSingleNode("//list/dwview[@type='dwgrid'][@id='"+id+"']");
-				if(n)
-				{
-					msxml::IXMLDOMElement e = n;
-					//trace(e.xml);
-					string vface = m_configDoc.selectSingleNode("//vface[1]").text;
-					string dwname = "";//e.selectsingleNode("@name").text;
-					string tpl = "";//e.selectsingleNode("@url").text;
-					string dbmap = "";
-					string strtreexquery="";
-					if(e.selectSingleNode("@name")) dwname = e.selectSingleNode("@name").text;
-					if(e.selectSingleNode("@url")) tpl = e.selectSingleNode("@url").text;
-					if(e.selectSingleNode("@dbmap")) dbmap = e.selectSingleNode("@dbmap").text;
-					if(e.selectSingleNode("@treexquery")) strtreexquery = e.selectSingleNode("@treexquery").text;				
-					m_dbmap = dbmap;
-					treexquery = strtreexquery;
-					//trace(vface +"/"+ tpl);
-					//trace(selectmode);
-					dw_list = new xdwgrid__;
-					dw_list.setNativePointer(GetControl(dwname));
-					dw_list.openUrl(vface +"/"+ tpl);
-					strtpl=tpl;
-					trace(tpl);
-
-				}	
-			}					
-			int onload()
+				xstring name = p.mid(0, p.find(L"=L", 0));
+				xstring value = p.mid(p.find(L"=L", 0) + 1, p.find(L"&", 0) - p.find(L"=L", 0) - 1);
+				if (name == n) return L"" + value;
+				i += 1;
+				p = p.mid(p.find(L"&", 0) + 1, p.length());
+			}
+		}
+		return L"";
+	}
+	int getURLParam()
+	{
+		if (GetWinParam())
+		{
+			xpage xp = new xpage;
+			xp.setNativePointer(GetXPage());
+			xstring aurl = xp.GetWkUrl();
+			xaserverarg arg;
+			if (aurl && aurl.find(L"native=true", 0) > 0)
 			{
+				int p = GetParam();
+				arg;
+				arg.setNativePointer(p);
+			}
+			else
+			{
+				arg = GetParam();
+			}
+			xstring config = arg.GetArgString(L"config");
+			xml x;
 
+			if (config == L"")
+			{
+				xstring configXml = arg.GetArgString(L"configxml");
+				x.loadXML(configXml);
+			}
+			else
+			{
+				getUrl(config, L"", x);
+			}
+			m_configDoc = x;
+
+		}
+
+		return 1;
+	}
+	int loaded()
+	{
+		getURLParam();
+		KXMLDOMDocument	 ee = m_configDoc;
+		xstring id = m_id;
+		var n = ee.selectSingleNode(L"//list/dwview[@type='dwgrid'][@id='" + id + L"']");
+		if (n)
+		{
+			KXMLDOMElement e = n;
+			//trace(e.xml);
+			xstring vface = m_configDoc.selectSingleNode(L"//vface[1]").text();
+			xstring dwname = L"";//e.selectsingleNode(L"@name").text();
+			xstring tpl = L"";//e.selectsingleNode(L"@url").text();
+			xstring dbmap = L"";
+			xstring strtreexquery = L"";
+			if (e.selectSingleNode(L"@name")) dwname = e.selectSingleNode(L"@name").text();
+			if (e.selectSingleNode(L"@url")) tpl = e.selectSingleNode(L"@url").text();
+			if (e.selectSingleNode(L"@dbmap")) dbmap = e.selectSingleNode(L"@dbmap").text();
+			if (e.selectSingleNode(L"@treexquery")) strtreexquery = e.selectSingleNode(L"@treexquery").text();
+			m_dbmap = dbmap;
+			treexquery = strtreexquery;
+			//trace(vface +L"/"+ tpl);
+			//trace(selectmode);
+			dw_list = new xdwgrid;
+			dw_list.setNativePointer(GetControl(dwname));
+			dw_list.openUrl(vface + L"/" + tpl);
+			strtpl = tpl;
+			trace(tpl);
+
+		}
+	}
+	int onload()
+	{
+
+		SetArg();
+		m_config = L"QuickCode.config";
+		m_agent = L"";
+		dw_list = new xdwtable;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		if (GetWinParam())
+		{
+			xaserverarg arg = GetArg();
+			//trace(arg.GetString());
+			xstring id = arg.GetArgString(L"id");
+			if (id == L"") return 0;
+			m_id = id;
+			loaded();
+
+			/*xstring tpl = arg.GetArgString(L"tpl");
+			if(tpl == L"")
+				tpl = L"QuickCode.tpl/QuickCode";
+			dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]");
+			//dw_list.SetColHeaderHeight(0);
+			//dw_list.SetRowSelectorWidth(0);
+			xstring dbmap = arg.GetArgString(L"dbmap");
+			if(dbmap == L"")
+				dbmap = L"QuickCode.dbmap";
+			m_dbmap = dbmap;
+			xstring txquery=arg.GetArgString(L"treexquery");
+			treexquery=txquery;
+			xstring title = arg.GetArgString(L"title");
+			if(title != L"")
+				win::SetWindowText(GetHWND(),title);*/
+			OnRetrieve();
+		}
+		SetAgent();
+		xstring aa = treexquery;
+		xstring xfNodeAgentArea2 = L"treeagent";
+		xnode tnode = new xnode;
+		tnode.setNativePointer(GetAgentNode(xfNodeAgentArea2));
+		xstring stree = L"<vbox><xtree name='tv_1' imagelist='0'>";
+		stree += L"<treeitem src='xquery:[" + aa + L"]'  xcaption='@GroupName' xroot='/root' xpath='row' xchildpath='row' image='15' loop='yes' xdata='.'/>";
+		stree += L"</xtree></vbox>";
+		SetAgentNode(tnode, stree);
+
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
 		
-				m_config = "QuickCode.config";
-				m_agent = "";
-				dw_list = new xdwtable__;
-				dw_list.setNativePointer(GetControl("dw_list"));				
-				if(this.GetParam())
-				{
-					xaserverarg__ arg = this.GetParam();
-				//trace(arg.GetString());
-					string id = arg.GetArgString("id");
-					if(id == "") return 0;
-					m_id = id;					
-					loaded();
-	
-					/*string tpl = arg.GetArgString("tpl");
-					if(tpl == "")
-						tpl = "QuickCode.tpl/QuickCode";
-					dw_list.SetDataObject(GetServerUrl(),"dev:sheet["+tpl+"]");
-					//dw_list.SetColHeaderHeight(0);
-					//dw_list.SetRowSelectorWidth(0);	
-					string dbmap = arg.GetArgString("dbmap");
-					if(dbmap == "")
-						dbmap = "QuickCode.dbmap";
-					m_dbmap = dbmap;
-					string txquery=arg.GetArgString("treexquery");
-					treexquery=txquery;
-					string title = arg.GetArgString("title");
-					if(title != "")
-						win__::SetWindowText(this.GetHWND(),title);*/
-					OnRetrieve();
-				}
-				SetAgent();					
-				string aa=treexquery;
-				string xfNodeAgentArea2  = "treeagent";
-				xnode__ tnode = new xnode__;
-				tnode.setNativePointer(GetAgentNode(xfNodeAgentArea2));
-				string stree="<vbox><xtree name='tv_1' imagelist='0'>";
-				stree +="<treeitem src='xquery:["+aa+"]'  xcaption='@GroupName' xroot='/root' xpath='row' xchildpath='row' image='15' loop='yes' xdata='.'/>";
-				stree +="</xtree></vbox>";
-				SetAgentNodeContent (tnode,stree);				
+		HTREEITEM root = tv_1.GetRootItem();
+		tv_1.ExpandItem( root);
+		OnAttachEvent();
 
-				tv_1 =  new treeview__;
-				tv_1.setNativePointer(this.GetControl("tv_1"));
-				int wid = tv_1.GetId();
-				int root = treeview__::GetRootItem(wid);		
-				treeview__::ExpandItem(wid,root);							
-				OnAttachEvent();
-
-				return 1;
-			}
-		]
-	]
-]
\ No newline at end of file
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp b/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp
index aa3bcc1..4b62ed7 100644
--- a/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp
+++ b/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp
@@ -10,116 +10,116 @@
 	about SKUItemcategoryselect
 	[
 		field:
-			xdwtable__  dw_category;					
+			xdwtable  dw_category;					
 		method:
 		[
-			treeview__		tv_gs;	
+			treeview		tv_gs;	
 			//命令发布函数
-			string GetPath(int tv, int h)
+			xstring GetPath(int tv, int h)
 			{
-				string str = treeview__::GetItemLabel(tv, h);
-				int k = treeview__::GetParentItem(tv, h);
-				int r = treeview__::GetRootItem(tv);
+				xstring str = treeview::GetItemLabel(tv, h);
+				int k = treeview::GetParentItem(tv, h);
+				int r = treeview::GetRootItem(tv);
 				while(k > 0 && r != k)
 				{
-					string tmp = treeview__::GetItemLabel(tv, k);
-					str = tmp+"\\" + str;
-					k = treeview__::GetParentItem(tv, k);
+					xstring tmp = treeview::GetItemLabel(tv, k);
+					str = tmp+L"\\" + str;
+					k = treeview::GetParentItem(tv, k);
 				}
 				return str;
 			}
 			int xunhuan(int pItem, int hItem)
 			{
-				xdwtable__ dw = new xdwtable__;
-				dw.setNativePointer(dw_category.FindDwTable("Item",0));						
-				if(treeview__::GetChecked(tv_gs.GetId(),hItem) > 0)
+				xdwtable dw = new xdwtable;
+				dw.setNativePointer(dw_category.FindDwTable(L"Item",0));						
+				if(treeview::GetChecked(tv_gs.GetId(),hItem) > 0)
 				{
-					msxml::IXMLDOMElement e = treeview__::GetItemData(tv_gs.GetId(),hItem);
-					string id = e.selectSingleNode("CategoryID").text;
-					string Name =GetPath(tv_gs.GetId(), hItem);
+					msxml::IXMLDOMElement e = treeview::GetItemData(tv_gs.GetId(),hItem);
+					xstring id = e.selectSingleNode(L"CategoryID").text;
+					xstring Name =GetPath(tv_gs.GetId(), hItem);
 					trace(Name);
-					if(dw.GetItemString(1,"CategoryID")=="")
+					if(dw.GetItemString(1,L"CategoryID")==L"")
 					{	
-						dw.ItemChangeTo(1,"CategoryID",id);
-						dw.ItemChangeTo(1,"Category",Name);						
+						dw.ItemChangeTo(1,L"CategoryID",id);
+						dw.ItemChangeTo(1,L"Category",Name);						
 					}
 					else
 					{
 						int n=dw.InsertRow(0);							
-						dw.ItemChangeTo(n,"CategoryID",id);
-						dw.ItemChangeTo(n,"Category",Name);						
+						dw.ItemChangeTo(n,L"CategoryID",id);
+						dw.ItemChangeTo(n,L"Category",Name);						
 					}	
 	
 			
 				}
 
-				int cItem = treeview__::GetChildItem(tv_gs.GetId(), hItem);
+				int cItem = treeview::GetChildItem(tv_gs.GetId(), hItem);
 				if(cItem > 0)
 				{
 					xunhuan(pItem,cItem);
 				}
-				int nItem = treeview__::GetNextItem(tv_gs.GetId(), hItem);
+				int nItem = treeview::GetNextItem(tv_gs.GetId(), hItem);
 				if(nItem > 0)
 				{
 					xunhuan(pItem,nItem);
 				}
 				return 1;
 			}				
-			int OnCmdDispatch(string comdid)
+			int OnCmdDispatch(xstring comdid)
 			{
-				if(comdid=="ok")
+				if(comdid==L"ok")
 				{
-					int hitem = treeview__::GetSelectedItem(tv_gs.GetId());
+					int hitem = treeview::GetSelectedItem(tv_gs.GetId());
 					if (hitem >0)
 					{
-						msxml::IXMLDOMElement ele=treeview__::GetItemData(tv_gs.GetId(),hitem);
-						string guid = ele.selectSingleNode("CategoryID").text;
-						//string label = ele.selectSingleNode("CName").text;
-						string label = GetPath(tv_gs.GetId(), hitem);
+						msxml::IXMLDOMElement ele=treeview::GetItemData(tv_gs.GetId(),hitem);
+						xstring guid = ele.selectSingleNode(L"CategoryID").text;
+						//xstring label = ele.selectSingleNode(L"CName").text;
+						xstring label = GetPath(tv_gs.GetId(), hitem);
 						trace(label);
-						xunhuan(hitem, treeview__::GetChildItem(tv_gs.GetId(), treeview__::GetRootItem(tv_gs.GetId())));
-						win__::CloseWindow();
+						xunhuan(hitem, treeview::GetChildItem(tv_gs.GetId(), treeview::GetRootItem(tv_gs.GetId())));
+						win::CloseWindow();
 					}
 					return 1;
 				}
-				if(comdid=="close") 
-					win__::CloseWindow();
+				if(comdid==L"close") 
+					win::CloseWindow();
 				return 0;
 			}
 			
-			int OnCmdDispatch0(string comdid)
+			int OnCmdDispatch0(xstring comdid)
 			{
-				xaserverarg__ arg = new xaserverarg__;
+				xaserverarg arg = new xaserverarg;
 				arg.setNativePointer(arg.CreateInstance());							
-				arg = win__::GetParam();
-				arg.AddArg("comdid",comdid);
-				int xitem = treeview__::GetSelectedItem(tv_gs.GetId());
-				if(comdid=="ok" && xitem != 0)
+				arg = win::GetParam();
+				arg.AddArg(L"comdid",comdid);
+				int xitem = treeview::GetSelectedItem(tv_gs.GetId());
+				if(comdid==L"ok" && xitem != 0)
 				{
-					msxml::IXMLDOMElement e=treeview__::GetItemData(tv_gs.GetId(),xitem);
+					msxml::IXMLDOMElement e=treeview::GetItemData(tv_gs.GetId(),xitem);
 					
-					string sHasChild=e.selectSingleNode("@HasChild").text;
+					xstring sHasChild=e.selectSingleNode(L"@HasChild").text;
 
-					if(treeview__::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild=="1")
+					if(treeview::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild==L"1")
 					{
-						alert("提示:请选择最后一级类别!");
+						alert(L"提示:请选择最后一级类别!");
 						return 0;
 					}
 			
-					string ID = e.selectSingleNode("CategoryID").text;
-					string CName = e.selectSingleNode("CName").text;
+					xstring ID = e.selectSingleNode(L"CategoryID").text;
+					xstring CName = e.selectSingleNode(L"CName").text;
 					trace(CName);
-					string ruler;
-					if(e.selectSingleNode("SpecRule"))
-						ruler = e.selectSingleNode("SpecRule").text;
+					xstring ruler;
+					if(e.selectSingleNode(L"SpecRule"))
+						ruler = e.selectSingleNode(L"SpecRule").text;
 					else
-						ruler ="";
-					arg.AddArg("CategoryID",ID);
-					arg.AddArg("CName",CName);
-					arg.AddArg("SpecRule",ruler);
+						ruler =L"";
+					arg.AddArg(L"CategoryID",ID);
+					arg.AddArg(L"CName",CName);
+					arg.AddArg(L"SpecRule",ruler);
 					
 				}
-				win__::CloseWindow();
+				win::CloseWindow();
 				return 0;
 			}
 			
@@ -130,42 +130,42 @@
 			}
 			
 			int CreateSubTree(int pitem){
-				msxml::IXMLDOMElement sitemdata=treeview__::GetItemData(tv_gs.GetId(), pitem);
-				string sHasChild=sitemdata.selectSingleNode("@HasChild").text;//sitemdata.getAttribute("HasChild");	
-				string pid=sitemdata.selectSingleNode("CategoryID").text;
-				//trace(sHasChild+"sdaga"+pid);
-				if(sHasChild=="1"){//数据有子节点		
-					int citem=treeview__::GetChildItem(tv_gs.GetId(), pitem);
+				msxml::IXMLDOMElement sitemdata=treeview::GetItemData(tv_gs.GetId(), pitem);
+				xstring sHasChild=sitemdata.selectSingleNode(L"@HasChild").text;//sitemdata.getAttribute(L"HasChild");	
+				xstring pid=sitemdata.selectSingleNode(L"CategoryID").text;
+				//trace(sHasChild+L"sdaga"+pid);
+				if(sHasChild==L"1"){//数据有子节点		
+					int citem=treeview::GetChildItem(tv_gs.GetId(), pitem);
 
-					//alert(string(citem));
+					//alert(xstring(citem));
 					if (citem==0){//树视图有子节点
-						xml__ x=new xml__;
-						x.setNativePointer(xml__::CreateInstance());
-						xaserverarg__ arg=new xaserverarg__;
+						xml x=new xml;
+						x.setNativePointer(xml::CreateInstance());
+						xaserverarg arg=new xaserverarg;
 						arg.setNativePointer(arg.CreateInstance());	
-						arg.AddArg("parentID",pid);
-						//if(xaserver__::ExecXQuery(GetServerUrl(),"[ItemCategoryEx.xq]",arg.GetString(),x)!=1)
-						if(url::get(GetEntityName(1)+"/entity/category",arg.GetString(),x)!=1)
+						arg.AddArg(L"parentID",pid);
+						//if(xaserver::ExecXQuery(GetServerUrl(),L"[ItemCategoryEx.xq]",arg.GetString(),x)!=1)
+						if(url::get(GetEntityName(1)+L"/entity/category",arg.GetString(),x)!=1)
 						{
 							trace(x.GetXml());
 							return 0;
 						}
 						//trace(x.GetXml());
-						var list=x.GetXmlDoc().selectNodes("root/Category");
+						var list=x.GetXmlDoc().selectNodes(L"root/Category");
 						int i=0,s=list.length;
 						msxml::IXMLDOMElement xitem;
 						for (i=0;i<s;i++){
 							xitem=list.item(s - i - 1);
-							string Name=xitem.selectSingleNode("CName").text;
-							string Has2D=xitem.selectSingleNode("@Has2D").text;//item.getAttribute("Has2D");	
-							if (Has2D=="1")
-								Name=Name+"*";	
-							int kitem=treeview__::InsertItem(tv_gs.GetId(), pitem,0,Name,xitem,15);	
-							//int kitem=treeview__::InsertChildItem(tv_gs.GetId(), pitem,Name,xitem,15);	
-							string HasChild=xitem.selectSingleNode("@HasChild").text;//item.getAttribute("HasChild");	
+							xstring Name=xitem.selectSingleNode(L"CName").text;
+							xstring Has2D=xitem.selectSingleNode(L"@Has2D").text;//item.getAttribute(L"Has2D");	
+							if (Has2D==L"1")
+								Name=Name+L"*";	
+							int kitem=treeview::InsertItem(tv_gs.GetId(), pitem,0,Name,xitem,15);	
+							//int kitem=treeview::InsertChildItem(tv_gs.GetId(), pitem,Name,xitem,15);	
+							xstring HasChild=xitem.selectSingleNode(L"@HasChild").text;//item.getAttribute(L"HasChild");	
 							//trace(HasChild, kitem);
-							if (HasChild=="1")
-								treeview__::SetItemChild1(tv_gs.GetId(), kitem,1);
+							if (HasChild==L"1")
+								treeview::SetItemChild1(tv_gs.GetId(), kitem,1);
 						}			
 					}
 				}	
@@ -173,13 +173,13 @@
 			}
 				
 			int CreateRootTree(){
-				string rootid="00000000-0000-0000-0000-000000000000";
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());							
-				x.LoadXml("<Category HasChild='1'><CategoryID>"+rootid+"</CategoryID></Category>");
-				int hroot=treeview__::InsertItem(tv_gs.GetId(),"公司产品类别", x.GetXmlDoc().documentElement, 17);
+				xstring rootid=L"00000000-0000-0000-0000-000000000000";
+				xml x=new xml;
+				x.setNativePointer(xml::CreateInstance());							
+				x.LoadXml(L"<Category HasChild='1'><CategoryID>"+rootid+L"</CategoryID></Category>");
+				int hroot=treeview::InsertItem(tv_gs.GetId(),L"公司产品类别", x.GetXmlDoc().documentElement, 17);
 				CreateSubTree(hroot);
-				treeview__::ExpandItemEx(tv_gs.GetId(),hroot);
+				treeview::ExpandItemEx(tv_gs.GetId(),hroot);
 				return 1;
 			}								
 
@@ -193,20 +193,20 @@
 			int OnAttachEvent()
 			{
 				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
+				AttachEvent(L"WM_XCOMMAND",OnXCommand);
 				//获得树的展开事件
-				AttachEvent("tv_gs", "TVN_ITEMEXPANDING",OnTreeExpanding);
+				AttachEvent(L"tv_gs", L"TVN_ITEMEXPANDING",OnTreeExpanding);
 			}
 			int onload()
 			{
 				if (GetParam())
 				{
-					xaserverarg__ arg1=GetParam();
-					dw_category = new xdwtable__;
-					dw_category.setNativePointer(arg1.GetArgString("dw_category").toInt());
+					xaserverarg arg1=GetParam();
+					dw_category = new xdwtable;
+					dw_category.setNativePointer(arg1.GetArgString(L"dw_category").toInt());
 				}			
-				tv_gs = new treeview__;
-				tv_gs.setNativePointer(GetControl("tv_gs"));					
+				tv_gs = new treeview;
+				tv_gs.setNativePointer(GetControl(L"tv_gs"));					
 				CreateRootTree();
 				OnAttachEvent();
 				return 1;
diff --git a/jrj/project/business/BasicCode/SKUItem.cpp b/jrj/project/business/BasicCode/SKUItem.cpp
index 01ce4d8..aab65b9 100644
--- a/jrj/project/business/BasicCode/SKUItem.cpp
+++ b/jrj/project/business/BasicCode/SKUItem.cpp
@@ -1,302 +1,310 @@
-use "win.vl"
-use "dev:vm[xdwgrid.vm]"
-use "dev:vm[xdwtable.vm]"
-use "pref.vl"
-use "dev:vm[xml.vm]"
-use "dev:vm[xaserverarg.vm]"
-use "dev:vm[xaserver.vm]"
-use "dev:vm[xutil.vm]"
-use "frame.vl"
-use "treeview.vm"
-use "file.vl"
-//unit vclient.vobject tpp
-unit vbusiness.xpage
-[
-	SKUItem is extend frame;
-	about SKUItem
-	[
-		field:
-		[
-			treeview__		tv_1;
-			xdwgrid__	dw_list;
-			string 	m_type;
-			string CategoryID;
-			xnode__	m_agentNode;	//Agent Condition
-			string	m_agentCond;	//Agent Node
-			string m_searchtxt;			
-		]
-		
-		method:
-		[
-			int SetAgent()
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) SKUItem : public xframe
+{
+public:
+	xtreeview	tv_1;
+	xdwgrid	dw_list;
+	xstring 	m_type;
+	xstring CategoryID;
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+	xstring m_searchtxt;
+public:
+	SKUItem(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static SKUItem* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SKUItem* pWin = new SKUItem(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
 			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				var xframeElement =  GetElement();
-				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
-				if(agent)
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+
+		//重置工具条
+		return 1;
+	}
+
+	int  OnReTrieve()
+	{
+		xstring query = L"[SKUItem.tree.xq]";
+		xml x;
+
+		xaserverarg arg;
+
+		arg.AddArg(L"parentID", CategoryID);
+		arg.AddArg(L"query", L"");
+		if (xaserver::ExecXQuery(GetServerUrl(), query, arg.GetString(), x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		else
+		{
+			dw_list.openUrl(L"其他设置.vface/template/other/SKUItem");
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		return 1;
+	}
+
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM sitem = nmtv.itemNew.hItem;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		dw_list.AcceptText();
+		xml z;
+
+		z.loadXML(L"<root/>");
+		dw_list.Retrieve(z);
+		dw_list.Redraw();
+		dw_list.ResetUpdateStatus();
+
+		KXMLDOMElement ele = tv_1.GetItemData(sitem);
+		if (!ele.selectSingleNode(L"ID")) return 0;
+		CategoryID = ele.selectSingleNode(L"ID").text();
+		//trace(CategoryID);
+		m_searchtxt = L"";
+
+		OnReTrieve();
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+
+	int CreateSubTree(HTREEITEM pitem)
+	{
+		KXMLDOMElement sitemdata = tv_1.GetItemData(pitem);
+		xstring sHasChild = sitemdata.selectSingleNode(L"@HasChild").text();//sitemdata.getAttribute(L"HasChild");	
+		//trace(sHasChild);
+		xstring pid = sitemdata.selectSingleNode(L"ID").text();
+		//trace(sHasChild+L"sdaga"+pid);
+		if (sHasChild == L"1") {//数据有子节点		
+			HTREEITEM citem = tv_1.GetChildItem(pitem);
+			//alert(xstring(citem));
+			if (citem == 0) {//树视图有子节点
+				xml x;
+
+				xaserverarg arg;
+
+				arg.AddArg(L"parentID", pid);
+				arg.AddArg(L"query", L"");
+				if (xaserver::ExecXQuery(GetServerUrl(), L"[SKUItem.tree.xq]", arg.GetString(), x) != 1)
 				{
-					string s = agent.xml;
-					SetAgentNodeContent (anode,s);
+					trace(x.xml());
+					return 0;
 				}
-				return 1;
-			}
-
-			//焦点激活处理函数
-			int OnSetFocus(ref TEvent evt,int param)
-			{
-				SetAgent();
-
-				//重置工具条
-				return 1;
-			}
-
-			int  OnReTrieve()
-			{
-				string query="[SKUItem.tree.xq]";				
-				xml__ x = new xml__;
-				x.setNativePointer(x.CreateInstance());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				arg.AddArg("parentID",CategoryID);
-				arg.AddArg("query","");
-				if (xaserver__::ExecXQuery(GetServerUrl(),query,arg.GetString(),x)!=1)
-				{
-					trace(x.GetXmlDoc().text);
-					return -1;
-				}else	
-				{
-					dw_list.openUrl("其他设置.vface/template/other/SKUItem");	
-					dw_list.Retrieve(x);
-					dw_list.Redraw();
+				//trace(x.xml());
+				var list = x.selectNodes(L"root/SKUItem");
+				int i = 0, s = list.length;
+				KXMLDOMElement xitem;
+				KXMLDOMNode d;
+				for (i = 0; i < s; i++) {
+					xitem = list.item(s - i - 1);
+					//if(i==0)xitem.setAttribute(L"HasChild",L"1");
+					xstring Name = xitem.selectSingleNode(L"ItemName").text();
+					HTREEITEM kitem = tv_1.InsertItem(pitem, 0, Name, xitem, 15);
+					//int kitem=tv_1.InsertChildItem(tv_1.GetId(), pitem,Name,xitem,15);	
+					xstring HasChild = xitem.selectSingleNode(L"@HasChild").text();//item.getAttribute(L"HasChild");	
+					//trace(HasChild, kitem);
+					if (HasChild == L"1")
+						tv_1.SetItemChild1(kitem, 1);
 				}
-				return 1;
 			}
+		}
+		return 1;
+	}
+	int CreateRootTree() {
+		xstring id = L"00000000-0000-0000-0000-000000000000";
+		xml x;
 
-			int OnTreeSelChanged(ref TNotifyEvent evt,int p){
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int sitem = nmtv.itemNew.hItem;
+		x.loadXML(L"<SKUItem HasChild='1' ><ID>" + id + L"</ID></SKUItem>");
+		HTREEITEM hroot = tv_1.InsertItem(L"产品项目分类", x.documentElement(), 17);
+		//trace(hroot);
+		CreateSubTree(hroot);
+		tv_1.ExpandItemEx(hroot);
+		CategoryID = id;
+		OnReTrieve();
+		return 1;
+	}
+	int OnTreeExpanding(TEvent* evt, int p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
 
-				int hCursor = xutil__::SetCursorWait();
-				dw_list.AcceptText();
-				xml__ z= new xml__;
-				z.setNativePointer(xml__::CreateInstance());		
-				z.LoadXml("<root/>");
-				dw_list.Retrieve(z);
-				dw_list.Redraw();
-				dw_list.ResetUpdateStatus();
-				
-				msxml::IXMLDOMElement ele=treeview__::GetItemData(tv_1.GetId(), sitem);
-				if(!ele.selectSingleNode("ID")) return 0;
-				CategoryID = ele.selectSingleNode("ID").text;
-				//trace(CategoryID);
-				m_searchtxt = "";
+		HTREEITEM sitem = nmtv.itemNew.hItem;
+		CreateSubTree(sitem);
+		return 1;
+	}
+	int afterSave() {
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		if (hitem == 0)
+			hitem = tv_1.GetRootItem();
+		int rows = dw_list.GetRowCount();
+		KXMLDOMElement ele = tv_1.GetItemData(hitem);
 
-				OnReTrieve();
-				xutil__::RestoreCursor(hCursor);
-				return 1;
-			}
+		HTREEITEM firstChild = tv_1.GetChildItem(hitem);
+		while (firstChild > 0) {
+			tv_1.DeleteItem(firstChild);
+			firstChild = tv_1.GetChildItem(hitem);
+		}
+		if (rows > 0)
+		{
+			tv_1.SetItemChild1(hitem, 1);
+			ele.setAttribute(L"HasChild", L"1");
+			//trace(ele.xml);
+			tv_1.SetItemData(hitem, ele);
+		}
+		else
+		{
+			tv_1.SetItemChild1(hitem, 0);
+			ele.setAttribute(L"HasChild", L"0");
+			//trace(ele.xml);
+			tv_1.SetItemData(hitem, ele);
+		}
+		CreateSubTree(hitem);
+		if (tv_1.GetRootItem() == hitem)
+			tv_1.ExpandItemEx(hitem);
 
-			int CreateSubTree(int pitem){
-				msxml::IXMLDOMElement sitemdata=treeview__::GetItemData(tv_1.GetId(), pitem);
-				string sHasChild=sitemdata.selectSingleNode("@HasChild").text;//sitemdata.getAttribute("HasChild");	
-				//trace(sHasChild);
-				string pid=sitemdata.selectSingleNode("ID").text;
-				//trace(sHasChild+"sdaga"+pid);
-				if(sHasChild=="1"){//数据有子节点		
-					int citem=treeview__::GetChildItem(tv_1.GetId(), pitem);
-					//alert(string(citem));
-					if (citem==0){//树视图有子节点
-						xml__ x=new xml__;
-						x.setNativePointer(xml__::CreateInstance());
-						xaserverarg__ arg=new xaserverarg__;
-						arg.setNativePointer(arg.CreateInstance());	
-						arg.AddArg("parentID",pid);
-						arg.AddArg("query","");
-						if(xaserver__::ExecXQuery(GetServerUrl(),"[SKUItem.tree.xq]",arg.GetString(),x)!=1)
-						{
-							trace(x.GetXml());
-							return 0;
-						}
-						//trace(x.GetXml());
-						var list=x.GetXmlDoc().selectNodes("root/SKUItem");
-						int i=0,s=list.length;
-						msxml::IXMLDOMElement xitem;
-						msxml::IXMLDOMNode d;
-						for (i=0;i<s;i++){
-							xitem= list.item(s - i - 1);
-							//if(i==0)xitem.setAttribute("HasChild","1");
-							string Name=xitem.selectSingleNode("ItemName").text;
-							int kitem=treeview__::InsertItem(tv_1.GetId(), pitem,0,Name,xitem,15);	
-							//int kitem=treeview__::InsertChildItem(tv_1.GetId(), pitem,Name,xitem,15);	
-							string HasChild=xitem.selectSingleNode("@HasChild").text;//item.getAttribute("HasChild");	
-							//trace(HasChild, kitem);
-							if (HasChild=="1")
-								treeview__::SetItemChild1(tv_1.GetId(), kitem,1);
-						}
-					}
-				}
-				return 1;
-			}
-			int CreateRootTree(){
-				string id="00000000-0000-0000-0000-000000000000";
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				x.LoadXml("<SKUItem HasChild='1' ><ID>"+id+"</ID></SKUItem>");
-				int hroot=treeview__::InsertItem(tv_1.GetId(), "产品项目分类", x.GetXmlDoc().documentElement, 17);
-				//trace(hroot);
-				CreateSubTree(hroot);
-				treeview__::ExpandItemEx(tv_1.GetId(), hroot);
-				CategoryID = id;
-				OnReTrieve();
-				return 1;
-			}
-			int OnTreeExpanding(ref TNotifyEvent evt,int p)	{
-				ref NMTREEVIEW nmtv = evt.pnmh;
-				int sitem = nmtv.itemNew.hItem;
-				CreateSubTree(sitem);
-				return 1;
-			}
-			int afterSave(){
-				int hitem = treeview__::GetSelectedItem(tv_1.GetId());
-				if(hitem == 0)
-					hitem = treeview__::GetRootItem(tv_1.GetId());
-				int rows = dw_list.GetRowCount();
-				msxml::IXMLDOMElement ele = treeview__::GetItemData(tv_1.GetId() ,hitem);
+		dw_list.ResetUpdateStatus();
+		return 0;
+	}
+	int OnSave()
+	{
+		xml x;
 
-				int firstChild = treeview__::GetChildItem(tv_1.GetId() ,hitem);
-				while (firstChild>0){
-					treeview__::DeleteItem(tv_1.GetId() ,firstChild);
-					firstChild = treeview__::GetChildItem(tv_1.GetId() ,hitem);
-				}
-				if(rows>0)
-				{
-					treeview__::SetItemChild1(tv_1.GetId() ,hitem,1);
-					ele.setAttribute("HasChild","1");
-					//trace(ele.xml);
-					treeview__::SetItemData(tv_1.GetId() ,hitem,ele);
-				}
-				else
-				{
-					treeview__::SetItemChild1(tv_1.GetId() ,hitem,0);
-					ele.setAttribute("HasChild","0");
-					//trace(ele.xml);
-					treeview__::SetItemData(tv_1.GetId() ,hitem,ele);
-				}
-				CreateSubTree(hitem);
-				if(treeview__::GetRootItem(tv_1.GetId()) == hitem)
-					treeview__::ExpandItemEx(tv_1.GetId() ,hitem);
+		dw_list.AcceptText();
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+		xaserverarg arg;
 
-				dw_list.ResetUpdateStatus();
-				return 0;
-			}			
-			int OnSave()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(x.CreateInstance());
-				dw_list.AcceptText();
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-				trace(x.GetXml());				
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				arg.AddArg("content", x.GetXml());
-				arg.AddArg("dbmap", "SKUItem.dbmap");		
-				if(xaserver__::ExecXAction(this.GetServerUrl(),"[onSave.xa]",arg.GetString(),x)!=1)
-				{
-					trace(x.GetXmlDoc().documentElement.text);
-					alert("保存失败");
-				}else{
-					alert("保存成功");
-				}
-				dw_list.ResetUpdateStatus();
-				dw_list.Redraw();
-				afterSave();
-				return 1;
-			}
-			int OnSetValue( int row){
-				dw_list.SetItemString(row,"PID",CategoryID);
-				dw_list.SetItemString(row,"ID",TApp::GetGuid());
-				return 1;				
-			}			
-			int OnAddRow()
-			{
-				int row = dw_list.InsertRow(0);
-				int rows = dw_list.GetRowCount();
-				OnSetValue(rows);				
-				dw_list.SetRow(dw_list.GetRowCount());				
-				//trace(row.toString());
-				return 1;
-			}
-			
-			int OnInsertRow()
-			{
-				int row=dw_list.GetRow();
-				if(row<0 || row>dw_list.GetRowCount()) return 0;				
-				dw_list.InsertRow(row);
-				OnSetValue(row);				
-				dw_list.SetRow(row);				
-				return 1;
-			}
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"SKUItem.dbmap");
+		if (xaserver::ExecXAction(GetServerUrl(), L"[onSave.xa]", arg.GetString(), x) != 1)
+		{
+			trace(x.documentElement().text());
+			alert(L"保存失败");
+		}
+		else {
+			alert(L"保存成功");
+		}
+		dw_list.ResetUpdateStatus();
+		dw_list.Redraw();
+		afterSave();
+		return 1;
+	}
+	int OnSetValue(int row) {
+		dw_list.SetItemString(row, L"PID", CategoryID);
+		dw_list.SetItemString(row, L"ID", TApp::GetGuid());
+		return 1;
+	}
+	int OnAddRow()
+	{
+		int row = dw_list.InsertRow(0);
+		int rows = dw_list.GetRowCount();
+		OnSetValue(rows);
+		dw_list.SetRow(dw_list.GetRowCount());
+		//trace(row.toString());
+		return 1;
+	}
 
-			int OnDeleteRow()
-			{			
-				int row = dw_list.GetRow();
-				if(row<0 || row>dw_list.GetRowCount()) return 0;			
-				dw_list.DeleteRow(row);
-				return 1;
-			}
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		dw_list.InsertRow(row);
+		OnSetValue(row);
+		dw_list.SetRow(row);
+		return 1;
+	}
 
-					
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				if (comdid =="Save")  OnSave();
-				else if (comdid =="AddRow") OnAddRow();
-				else if (comdid =="InsertRow") OnInsertRow();
-				else if (comdid =="DeleteRow") OnDeleteRow();
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int param)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				//获得树的选择事件
-				AttachEvent("tv_1", "TVN_SELCHANGED",OnTreeSelChanged);
-				AttachEvent("tv_1", "TVN_ITEMEXPANDING",OnTreeExpanding);				
-			}
-			
-			int OnInitial()
-			{
-				SetAgent();
-				OnAttachEvent();				
-				return 1;
-			}
-			
-			int onload()
-			{
-				m_type = "all";
-				tv_1 =  new treeview__;
-				tv_1.setNativePointer(this.GetControl("tv_1"));					
-				dw_list =  new xdwgrid__;
-				dw_list.setNativePointer(this.GetControl("dw_list"));						
-				dw_list.openUrl("其他设置.vface/template/other/SKUItem");	
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		dw_list.DeleteRow(row);
+		return 1;
+	}
 
-				OnInitial();
-				CreateRootTree();
-				
-				return 1;
-			}
-		]
-		
-	]
-]
\ No newline at end of file
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"Save")  OnSave();
+		else if (comdid == L"AddRow") OnAddRow();
+		else if (comdid == L"InsertRow") OnInsertRow();
+		else if (comdid == L"DeleteRow") OnDeleteRow();
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SKUItem::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SKUItem::OnSetFocus);
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&SKUItem::OnTreeSelChanged);
+		AttachEvent(L"tv_1", L"TVN_ITEMEXPANDING", (FEvent)&SKUItem::OnTreeExpanding);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+		OnAttachEvent();
+		return 1;
+	}
+
+	int onload()
+	{
+		m_type = L"all";
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"其他设置.vface/template/other/SKUItem");
+
+		OnInitial();
+		CreateRootTree();
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUItem.select.cpp b/jrj/project/business/BasicCode/SKUItem.select.cpp
index 273a52a..82f820b 100644
--- a/jrj/project/business/BasicCode/SKUItem.select.cpp
+++ b/jrj/project/business/BasicCode/SKUItem.select.cpp
@@ -6,22 +6,22 @@
 	about SKUItemImport
 	[
 		field:
-			xdwgrid__	dw_list;
-			treeview__		tv_1;
-			xdwtable__  dw_maint;			
+			xdwgrid	dw_list;
+			treeview		tv_1;
+			xdwtable  dw_maint;			
 		method:
 		[
 
-			string jxParam(string p, string n)
+			xstring jxParam(xstring p, xstring n)
 			{
-				if(p != "")
+				if(p != L"")
 				{
 
 					int i = 1;
-					while (p.find("=",0)>0)
+					while (p.find(L"=L",0)>0)
 					{
-						string name = p.mid(0, p.find("=",0));
-						string value = p.mid(p.find("=",0) + 1, p.find("=",0) - 1);
+						xstring name = p.mid(0, p.find(L"=L",0));
+						xstring value = p.mid(p.find(L"=L",0) + 1, p.find(L"=L",0) - 1);
 						return ""+value;
 						i += 1;
 					}
@@ -48,13 +48,13 @@
 			int OnOk()
 			{
 				
-				xdwtable__ dw = new xdwtable__;
-				dw.setNativePointer(dw_maint.FindDwTable("Item",0));				
+				xdwtable dw = new xdwtable;
+				dw.setNativePointer(dw_maint.FindDwTable(L"Item",0));				
 
 				int row = SKUItem::dw_list.GetNextSelectRow(1);
 				if (row<1)
 				{
-					alert("请选择项目名称!");
+					alert(L"请选择项目名称!");
 					return 1;
 				}					
 
@@ -62,18 +62,18 @@
 				{	
 					
 					msxml::IXMLDOMElement e =SKUItem::dw_list.GetRowElement(row);			
-					string ItemName = e.selectSingleNode("ItemName").text+"";
+					xstring ItemName = e.selectSingleNode(L"ItemName").text+L"";
 					//trace(ItemName);
-					if(dw.GetItemString(1,"ItemName")=="")
+					if(dw.GetItemString(1,L"ItemName")==L"")
 					{
-						dw.SetItemString(1,"SeqNo","1");						
-						dw.ItemChangeTo(1,"ItemName",ItemName);				
+						dw.SetItemString(1,L"SeqNo",L"1");						
+						dw.ItemChangeTo(1,L"ItemName",ItemName);				
 					}
 					else
 					{
 						int n=dw.InsertRow(0);
-						dw.SetItemString(n,"SeqNo",n.ToString());						
-						dw.ItemChangeTo(n,"ItemName",ItemName);						
+						dw.SetItemString(n,L"SeqNo",n.ToString());						
+						dw.ItemChangeTo(n,L"ItemName",ItemName);						
 					}		
 					row = SKUItem::dw_list.GetNextSelectRow(row +1);					
 				}
@@ -92,13 +92,13 @@
 				return 1;
 			}			
 				
-			int OnCmdDispatch(string comdid)
+			int OnCmdDispatch(xstring comdid)
 			{
-				if (comdid=="SelectAll") OnSelectAll();
-				else if (comdid=="SelectNo") OnSelectNo();
-				else if (comdid=="cb_import") OnOk();
-				else if (comdid=="cb_close") OnCancel();
-				//else if (comdid=="query") GridSearch();						
+				if (comdid==L"SelectAll") OnSelectAll();
+				else if (comdid==L"SelectNo") OnSelectNo();
+				else if (comdid==L"cb_import") OnOk();
+				else if (comdid==L"cb_close") OnCancel();
+				//else if (comdid==L"query") GridSearch();						
 				return 0;
 			}
 			
@@ -111,15 +111,15 @@
 			{
 				if (GetParam())
 				{
-					xaserverarg__ arg1=GetParam();
-					dw_maint = new xdwtable__;
-					dw_maint.setNativePointer(arg1.GetArgString("dw_maint").toInt());
+					xaserverarg arg1=GetParam();
+					dw_maint = new xdwtable;
+					dw_maint.setNativePointer(arg1.GetArgString(L"dw_maint").toInt());
 				}			
 				SKUItem::onload();
 				SKUItem::dw_list.SetSelectionMode(3); //3
 				SKUItem::dw_list.SetReadOnly(true);			
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-		        AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDoubleClicked);//行双击				
+				AttachEvent(L"WM_XCOMMAND",OnXCommand);
+		        AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED",OnDoubleClicked);//行双击				
 			}
 		]
 	]
diff --git a/jrj/project/business/BasicCode/SKUTemplate.cpp b/jrj/project/business/BasicCode/SKUTemplate.cpp
index 235c0dc..e0e4e42 100644
--- a/jrj/project/business/BasicCode/SKUTemplate.cpp
+++ b/jrj/project/business/BasicCode/SKUTemplate.cpp
@@ -1,419 +1,427 @@
-use "list.vl"
-use "dev:vm[combobox.vm]"
-use "treeview.vm"
-use "dev:vm[gridpages.vm]"
-use "dev:vm[xutil.vm]"
-use "dev:vm[xpage.vm]"
-use "dev:vm[xcell.vm]"
-use "file.vl"
-use "publiccode.vl"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.entity
-[
-	SKUTemplate is extend frame;
-	about SKUTemplate
-	[
-		field:
-		[
-			xdwgrid__  dw_list; 		
-			xdwtable__ dw_maint;
-			xdwtable__ dw_category;
-			int rowno;
-		]
-		
-		method:
-		[	
-			int SetAgent()
-			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				var xframeElement =  GetElement();
-				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
-				if(agent)
-				{
-					string s = agent.xml;
-					SetAgentNodeContent (anode,s);
-				}
-				return 1;
-			}
-				
-			int OnSetFocus(ref TEvent evt,int p)
-			{		
-				SetAgent()	;	
-				return 1;
-			}
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-			int  OnReTrieve()
-			{
-				string query="[SKUTemplate.list.xq]";				
-				xml__ x = new xml__;
-				x.setNativePointer(x.CreateInstance());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());
-				if (xaserver__::ExecXQuery(GetServerUrl(),query,arg.GetString(),x)!=1)
-				{
-					trace(x.GetXmlDoc().text);
-					return -1;
-				}else	
-				{		
-					dw_list.Retrieve(x);
-					dw_list.Redraw();				
-				}
-				return 1;
-			}
-			int OnRowChanged(ref TNotifyEvent evt,int p)
-			{
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) SKUTemplate : public xframe
+{
+public:
 
-				ref DWNMHDR  hdr = evt.pnmh;		
-				int ll_row = hdr.row;
-				rowno=ll_row;
-				string TemplateContent = dw_list.GetItemString(ll_row,"TemplateContent");
-				string Category = dw_list.GetItemString(ll_row,"Category");
-				if(TemplateContent=="")
-				{	
-					dw_maint.openUrl("其他设置.vface/template/other/TemplateContent");
-					dw_maint.SetColHeaderHeight(0);
-					dw_maint.SetRowSelectorWidth(0);				
-				}
-				if(Category=="")
-				{	
-					dw_category.openUrl("其他设置.vface/template/other/TemplateCategory");
-					dw_category.SetColHeaderHeight(0);
-					dw_category.SetRowSelectorWidth(0);					
-				}	
-				xml__ x = new xml__;
-				x.setNativePointer(x.CreateInstance());
-				x.LoadXml(TemplateContent);
-				xml__ x1 = new xml__;
-				x1.setNativePointer(x.CreateInstance());
-				x1.LoadXml(Category);
-				dw_maint.Retrieve(x);
-				dw_maint.Redraw();
-				dw_category.Retrieve(x1);
-				dw_category.Redraw();					
-				return 1;
-			}				
-			int OnSave()
+	xdwgrid  dw_list;
+	xdwtable dw_maint;
+	xdwtable dw_category;
+	int rowno;
+
+	xnode	m_agentNode;
+public:
+	SKUTemplate(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static SKUTemplate* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SKUTemplate* pWin = new SKUTemplate(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
 			{
-				dw_list.AcceptText();
-				dw_maint.AcceptText();
-				dw_category.AcceptText();
-				
-				xml__ x=new xml__;
-				x.setNativePointer(x.CreateInstance());
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-				trace(x.GetXml());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());				
-				arg.AddArg("content", x.GetXml());
-				arg.AddArg("dbmap", "SKUTemplate.dbmap");		
-				if(xaserver__::ExecXAction(this.GetServerUrl(),"[onSave.xa]",arg.GetString(),x)!=1)
-				{
-					trace(x.GetXmlDoc().documentElement.text);
-					alert("保存失败");
-				}else{
-					alert("保存成功");
-				}				
-				dw_list.ResetUpdateStatus();
-				dw_maint.ResetUpdateStatus();
-				dw_category.ResetUpdateStatus();
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+		return 1;
+	}
+
+	int  OnReTrieve()
+	{
+		xstring query = L"[SKUTemplate.list.xq]";
+		xml x;
+
+		xaserverarg arg;
+
+		if (xaserver::ExecXQuery(GetServerUrl(), query, arg.GetString(), x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		else
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		return 1;
+	}
+	int OnRowChanged(TEvent* evt, LPARAM p)
+	{
+
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int ll_row = hdr.row;
+		rowno = ll_row;
+		xstring TemplateContent = dw_list.GetItemString(ll_row, L"TemplateContent");
+		xstring Category = dw_list.GetItemString(ll_row, L"Category");
+		if (TemplateContent == L"")
+		{
+			dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+			dw_maint.SetColHeaderHeight(0);
+			dw_maint.SetRowSelectorWidth(0);
+		}
+		if (Category == L"")
+		{
+			dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+			dw_category.SetColHeaderHeight(0);
+			dw_category.SetRowSelectorWidth(0);
+		}
+		xml x;
+
+		x.loadXML(TemplateContent);
+		xml x1;
+		x1.loadXML(Category);
+		dw_maint.Retrieve(x);
+		dw_maint.Redraw();
+		dw_category.Retrieve(x1);
+		dw_category.Redraw();
+		return 1;
+	}
+	int OnSave()
+	{
+		dw_list.AcceptText();
+		dw_maint.AcceptText();
+		dw_category.AcceptText();
+
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"SKUTemplate.dbmap");
+		if (xaserver::ExecXAction(GetServerUrl(), L"[onSave.xa]", arg.GetString(), x) != 1)
+		{
+			trace(x.documentElement().text());
+			alert(L"保存失败");
+		}
+		else {
+			alert(L"保存成功");
+		}
+		dw_list.ResetUpdateStatus();
+		dw_maint.ResetUpdateStatus();
+		dw_category.ResetUpdateStatus();
+		dw_list.Redraw();
+		dw_maint.Redraw();
+		dw_category.Redraw();
+		return 1;
+	}
+	int OnSetValue(int row) {
+		dw_list.SetItemString(row, L"TemplateID", TApp::GetGuid());
+		return 1;
+	}
+	int RemoveAttribute(xml x, xstring nodename)//根据名称删除属性节点
+	{
+		KXMLDOMElement e;
+		var list = x.getElementsByTagName(L"" + nodename + L"");
+		if (list)
+		{
+
+			int nlen = list.length;
+			int i;
+			for (i = 0; i < nlen; i++)
+			{
+				e = list.item(i);
+				//trace(e.xml);
+				e.removeAttribute(L"update.new");
+				e.removeAttribute(L"update.modify");
+				e.removeAttribute(L"update.delete");
+				e.removeAttribute(L"guid");
+				e.removeAttribute(L"update.origin");
+				e.removeAttribute(L"isnull");
+				//trace(e.xml);				
+			}
+		}
+	}
+	int setMaint()
+	{
+		xml x;
+
+		dw_maint.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		trace(x.xml());
+		RemoveAttribute(x, L"TemplateContent");
+		RemoveAttribute(x, L"Item");
+		RemoveAttribute(x, L"ItemName");
+		RemoveAttribute(x, L"Remark");
+		RemoveAttribute(x, L"SeqNo");
+		//trace(x.xml());				
+		dw_list.SetItemString(row, L"TemplateContent", x.xml());
+		dw_list.Redraw();
+		return 1;
+	}
+	int setItemCategory()
+	{
+		xml x;
+
+		dw_category.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		//trace(row);
+		dw_list.SetItemString(row, L"Category", x.xml());
+		return 1;
+	}
+	int OnAddRow()
+	{
+		int row = dw_list.InsertRow(0);
+		int rows = dw_list.GetRowCount();
+		OnSetValue(rows);
+		dw_list.SetRow(dw_list.GetRowCount());
+		//trace(row.toString());
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		return 1;
+	}
+
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		dw_list.InsertRow(row);
+		OnSetValue(row);
+		dw_list.SetRow(row);
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		return 1;
+	}
+	int OnChangeRowNo(int row)
+	{
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_maint.FindDwTable(L"Item", 0));
+		int i;
+		for (i = row; i <= dw.GetRowCount(); i++)
+			dw.SetItemString(i, L"SeqNo", xstring(i));
+		return 1;
+	}
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		dw_list.DeleteRow(row);
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		return 1;
+	}
+	int RemoveChild(xml x, xstring nodename)//根据名称删除节点
+	{
+		KXMLDOMElement e;
+		var list = x.selectNodes(L"//Item[@update.delete='1']");
+		if (list)
+		{
+			int nlen = list.length;
+			int i;
+			for (i = 0; i < nlen; i++)
+			{
+				e = list.item(i);
+				//trace(e.xml);
+				e.parentNode.removeChild(e);
+				//trace(e.xml);				
+			}
+		}
+	}
+	int setMaint_removeChild()
+	{
+		xml x;
+
+		dw_maint.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		//trace(x.xml());
+		RemoveChild(x, L"Item");
+		RemoveAttribute(x, L"TemplateContent");
+		RemoveAttribute(x, L"Item");
+		RemoveAttribute(x, L"ItemName");
+		RemoveAttribute(x, L"Remark");
+		RemoveAttribute(x, L"SeqNo");
+		//trace(x.xml());				
+		dw_list.SetItemString(row, L"TemplateContent", x.xml());
+		dw_list.Redraw();
+		return 1;
+	}
+	int setItemCategory_removeChild()
+	{
+		xml x;
+
+		dw_category.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		RemoveChild(x, L"Item");
+		//trace(row);
+		dw_list.SetItemString(row, L"Category", x.xml());
+		dw_list.Redraw();
+		return 1;
+	}
+	int del(xdwtable dw_1)
+	{
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_1.GetCurTable());
+		int row = dw.GetRow();
+		if (row < 1 || row > dw.GetRowCount()) return -1;
+		dw.DeleteRow(row);
+		//trace(dw.GetDwName());
+		if (dw_1.GetDwName() == L"TemplateContent")
+		{
+			OnChangeRowNo(row);
+			if (dw.GetRowCount() == 1 && dw.GetItemString(1, L"ItemName") == L"")
+			{
+				dw_list.SetItemString(rowno, L"TemplateContent", L"");
 				dw_list.Redraw();
-				dw_maint.Redraw();	
-				dw_category.Redraw();					
-				return 1;
-			}				
-			int OnSetValue( int row){
-				dw_list.SetItemString(row,"TemplateID",TApp::GetGuid());
-				return 1;				
 			}
-			int RemoveAttribute(xml__ x,string nodename)//根据名称删除属性节点
-			{	
-				msxml::IXMLDOMElement e;
-				var list = x.GetXmlDoc().getElementsByTagName(""+nodename+"");	
-				if(list)
-				{	
-			
-					int nlen = list.length;
-					int i;
-					for(i=0;	i<nlen;	i++)
-					{
-						e = list.item(i);			
-						//trace(e.xml);
-						e.removeAttribute("update.new");
-						e.removeAttribute("update.modify");
-						e.removeAttribute("update.delete");
-						e.removeAttribute("guid");
-						e.removeAttribute("update.origin"); 
-						e.removeAttribute("isnull");  				
-						//trace(e.xml);				
-					}
-				}						
-			}			
-			int setMaint()
+			else
 			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_maint.DwUpdateAllTo(x.GetXmlDoc());				
-				int row = dw_list.GetRow();
-				trace(x.GetXml());
-				RemoveAttribute(x,"TemplateContent");
-				RemoveAttribute(x,"Item");
-				RemoveAttribute(x,"ItemName");	
-				RemoveAttribute(x,"Remark");
-				RemoveAttribute(x,"SeqNo");				
-				//trace(x.GetXml());				
-				dw_list.SetItemString(row, "TemplateContent", x.GetXml());
-				dw_list.Redraw();
-				return 1;
+				setMaint_removeChild();
 			}
-			int setItemCategory()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_category.DwUpdateAllTo(x.GetXmlDoc());				
-				int row = dw_list.GetRow();
-				trace(row);
-				dw_list.SetItemString(row, "Category", x.GetXml());
-				return 1;
-			}				
-			int OnAddRow()
-			{
-				int row = dw_list.InsertRow(0);
-				int rows = dw_list.GetRowCount();
-				OnSetValue(rows);				
-				dw_list.SetRow(dw_list.GetRowCount());				
-				trace(row.toString());
-				dw_maint.openUrl("其他设置.vface/template/other/TemplateContent");
-				dw_maint.SetColHeaderHeight(0);
-				dw_maint.SetRowSelectorWidth(0);
-				dw_category.openUrl("其他设置.vface/template/other/TemplateCategory");
-				dw_category.SetColHeaderHeight(0);
-				dw_category.SetRowSelectorWidth(0);				
-				return 1;
-			}
-			
-			int OnInsertRow()
-			{
-				int row=dw_list.GetRow();
-				if(row<0 || row>dw_list.GetRowCount()) return 0;				
-				dw_list.InsertRow(row);
-				OnSetValue(row);				
-				dw_list.SetRow(row);
-				dw_maint.openUrl("其他设置.vface/template/other/TemplateContent");
-				dw_maint.SetColHeaderHeight(0);
-				dw_maint.SetRowSelectorWidth(0);
-				dw_category.openUrl("其他设置.vface/template/other/TemplateCategory");
-				dw_category.SetColHeaderHeight(0);
-				dw_category.SetRowSelectorWidth(0);				
-				return 1;
-			}
-			int OnChangeRowNo(int row)
-			{
-				xdwtable__ dw = new xdwtable__;
-				dw.setNativePointer(dw_maint.FindDwTable("Item",0));				
-				int i;
-				for (i=row; i<=dw.GetRowCount(); i++)
-					dw.SetItemString(i, "SeqNo", i.toString());
-				return 1;
-			}
-			int OnDeleteRow()
-			{			
-				int row = dw_list.GetRow();
-				if(row<0 || row>dw_list.GetRowCount()) return 0;			
-				dw_list.DeleteRow(row);
-				dw_maint.openUrl("其他设置.vface/template/other/TemplateContent");
-				dw_maint.SetColHeaderHeight(0);
-				dw_maint.SetRowSelectorWidth(0);
-				dw_category.openUrl("其他设置.vface/template/other/TemplateCategory");
-				dw_category.SetColHeaderHeight(0);
-				dw_category.SetRowSelectorWidth(0);					
-				return 1;
-			}
-			int RemoveChild(xml__ x,string nodename)//根据名称删除节点
-			{	
-				msxml::IXMLDOMElement e;
-				var list = x.GetXmlDoc().SelectNodes("//Item[@update.delete='1']");
-				if(list)
-				{	
-					int nlen = list.length;
-					int i;
-					for(i=0;	i<nlen;	i++)
-					{
-						e = list.item(i);			
-						//trace(e.xml);
-						e.parentNode.removeChild(e);		
-						//trace(e.xml);				
-					}
-				}						
-			}			
-			int setMaint_removeChild()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_maint.DwUpdateAllTo(x.GetXmlDoc());				
-				int row = dw_list.GetRow();
-				//trace(x.GetXml());
-				RemoveChild(x,"Item");
-				RemoveAttribute(x,"TemplateContent");
-				RemoveAttribute(x,"Item");
-				RemoveAttribute(x,"ItemName");	
-				RemoveAttribute(x,"Remark");
-				RemoveAttribute(x,"SeqNo");				
-				//trace(x.GetXml());				
-				dw_list.SetItemString(row, "TemplateContent", x.GetXml());
-				dw_list.Redraw();
-				return 1;
-			}
-			int setItemCategory_removeChild()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_category.DwUpdateAllTo(x.GetXmlDoc());				
-				int row = dw_list.GetRow();
-				RemoveChild(x,"Item");						
-				trace(row);
-				dw_list.SetItemString(row, "Category", x.GetXml());
-				dw_list.Redraw();				
-				return 1;
-			}							
-			int del(xdwtable__ dw_1)
-			{
-				xdwtable__ dw = new xdwtable__;
-				dw.setNativePointer(dw_1.GetCurTable());
-				int row = dw.GetRow();
-				if(row < 1 || row > dw.GetRowCount()) return -1;
-				dw.DeleteRow(row);
-				//trace(dw.GetDwName());
-				if(dw_1.GetDwName()=="TemplateContent")
-				{	
-					OnChangeRowNo(row);
-					if(dw.GetRowCount()==1 && dw.GetItemString(1,"ItemName")=="")
-					{
-						dw_list.SetItemString(rowno, "TemplateContent", "");
-						dw_list.Redraw();
-					}
-					else
-					{	
-						setMaint_removeChild();							
-					}	
-				
-				}
-				if(dw_1.GetDwName()=="Categorys")
-				{	
-					trace(dw.GetRowCount());
-					if(dw.GetRowCount()==1 && dw.GetItemString(1,"CategoryID")=="")
-					{
-						dw_list.SetItemString(rowno, "Category", "");
-						dw_list.Redraw();
-					}
-					else
-					{	
-						setItemCategory_removeChild();							
-					}	
-				
-				}					
-	
-				return 1;
-			}			
-			int SKUItem()
-			{				
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("dw_maint",dw_maint.__nativept.toString());				
-				openUrl("其他设置.vface/xpage/SKUItem/select",arg);
-				return 1;				
-			}
-			int SKUItemcategory()
-			{				
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("dw_category",dw_category.__nativept.toString());				
-				openUrl("其他设置.vface/xpage/SKUItemcategory/select",arg);
-				return 1;				
-			}
-			int SKUItemModify()
-			{						
-				openUrl("其他设置.vface/xpage/SKUItem/list");
-				return 1;				
-			}			
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				if (comdid =="save")  OnSave();
-				else if (comdid =="AddRow") OnAddRow();
-				else if (comdid =="InsertRow") OnInsertRow();
-				else if (comdid =="DeleteRow") OnDeleteRow();
-				else if (comdid =="SKUItem") SKUItem();
-				else if (comdid =="SKUItemcategory") SKUItemcategory();				
-				else if(comdid == "del_1") del(dw_maint);
-				else if(comdid == "del_2") del(dw_category);
-				else if(comdid == "SKUItemModify") SKUItemModify();				
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			
-			int OnMaintChanged(ref TNotifyEvent evt,int p)
-			{	
-				//trace("hello");
-				setMaint();
-				return 1;
-			}
-			
-			int OnCategoryChanged(ref TNotifyEvent evt,int p)
-			{
-				setItemCategory();			
-				return 1;
-			}			
-			
-			int OnAttachEvent()
-			{
-				//绑定工具条点击事件
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				//获取焦点事件,用于重置工具条
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_maint","DWV_ITEMCHANGED",OnMaintChanged);
-				AttachEvent("dw_category","DWV_ITEMCHANGED",OnCategoryChanged);
-				AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged);					
 
-				return 1;
-			}
-			int OnInitial()
+		}
+		if (dw_1.GetDwName() == L"Categorys")
+		{
+			//trace(dw.GetRowCount());
+			if (dw.GetRowCount() == 1 && dw.GetItemString(1, L"CategoryID") == L"")
 			{
-				SetAgent();
-				OnAttachEvent();				
-				return 1;
-			}			
-			int onload()
-			{	
-				dw_list =  new xdwgrid__;
-				dw_list.setNativePointer(this.GetControl("dw_list"));						
-				dw_list.openUrl("其他设置.vface/template/other/SKUTemplate");	
-				
-				dw_maint = new xdwtable__;
-				dw_maint.setNativePointer(GetControl("dw_maint"));
-				dw_maint.openUrl("其他设置.vface/template/other/TemplateContent");
-				dw_maint.SetColHeaderHeight(0);
-				dw_maint.SetRowSelectorWidth(0);
-				
-				dw_category = new xdwtable__;
-				dw_category.setNativePointer(GetControl("dw_category"));
-				dw_category.openUrl("其他设置.vface/template/other/TemplateCategory");
-				dw_category.SetColHeaderHeight(0);
-				dw_category.SetRowSelectorWidth(0);
-				dw_category.SetReadOnly(true);						
-				OnInitial();
-				OnReTrieve();
-				xdwtable__ dw = new xdwtable__;
-				dw.setNativePointer(dw_category.FindDwTable("Item",0));						
-				trace(dw.GetRowCount());
-				return 1;
+				dw_list.SetItemString(rowno, L"Category", L"");
+				dw_list.Redraw();
 			}
-		]
-	]
-]
\ No newline at end of file
+			else
+			{
+				setItemCategory_removeChild();
+			}
+
+		}
+
+		return 1;
+	}
+	int SKUItem()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"dw_maint", dw_maint.nativept.toString());
+		openUrl(L"其他设置.vface/xpage/SKUItem/select", arg);
+		return 1;
+	}
+	int SKUItemcategory()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"dw_category", dw_category.nativept.toString());
+		openUrl(L"其他设置.vface/xpage/SKUItemcategory/select", arg);
+		return 1;
+	}
+	int SKUItemModify()
+	{
+		openUrl(L"其他设置.vface/xpage/SKUItem/list");
+		return 1;
+	}
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"save")  OnSave();
+		else if (comdid == L"AddRow") OnAddRow();
+		else if (comdid == L"InsertRow") OnInsertRow();
+		else if (comdid == L"DeleteRow") OnDeleteRow();
+		else if (comdid == L"SKUItem") SKUItem();
+		else if (comdid == L"SKUItemcategory") SKUItemcategory();
+		else if (comdid == L"del_1") del(dw_maint);
+		else if (comdid == L"del_2") del(dw_category);
+		else if (comdid == L"SKUItemModify") SKUItemModify();
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnMaintChanged(TEvent* evt, LPARAM p)
+	{
+		//trace(L"hello");
+		setMaint();
+		return 1;
+	}
+
+	int OnCategoryChanged(TEvent* evt, LPARAM p)
+	{
+		setItemCategory();
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SKUTemplate::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SKUTemplate::OnSetFocus);
+		AttachEvent(L"dw_maint", L"DWV_ITEMCHANGED", (FEvent)&SKUTemplate::OnMaintChanged);
+		AttachEvent(L"dw_category", L"DWV_ITEMCHANGED", (FEvent)&SKUTemplate::OnCategoryChanged);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SKUTemplate::OnRowChanged);
+
+		return 1;
+	}
+	int OnInitial()
+	{
+		SetAgent();
+		OnAttachEvent();
+		return 1;
+	}
+	int onload()
+	{
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"其他设置.vface/template/other/SKUTemplate");
+
+		dw_maint = new xdwtable;
+		dw_maint.setNativePointer(GetControl(L"dw_maint"));
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+
+		dw_category = new xdwtable;
+		dw_category.setNativePointer(GetControl(L"dw_category"));
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		dw_category.SetReadOnly(true);
+		OnInitial();
+		OnReTrieve();
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_category.FindDwTable(L"Item", 0));
+		//trace(dw.GetRowCount());
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUTemplate.select.cpp b/jrj/project/business/BasicCode/SKUTemplate.select.cpp
index fd1794c..35a9e24 100644
--- a/jrj/project/business/BasicCode/SKUTemplate.select.cpp
+++ b/jrj/project/business/BasicCode/SKUTemplate.select.cpp
@@ -6,22 +6,22 @@
 	about SKUTemplateImport
 	[
 		field:
-			xdwgrid__	dw_list;
-			xdwtable__  dw_other;
-			xdwtable__  dw_prop; 					
+			xdwgrid	dw_list;
+			xdwtable  dw_other;
+			xdwtable  dw_prop; 					
 		method:
 		[
 
-			string jxParam(string p, string n)
+			xstring jxParam(xstring p, xstring n)
 			{
-				if(p != "")
+				if(p != L"")
 				{
 
 					int i = 1;
-					while (p.find("=",0)>0)
+					while (p.find(L"=L",0)>0)
 					{
-						string name = p.mid(0, p.find("=",0));
-						string value = p.mid(p.find("=",0) + 1, p.find("=",0) - 1);
+						xstring name = p.mid(0, p.find(L"=L",0));
+						xstring value = p.mid(p.find(L"=L",0) + 1, p.find(L"=L",0) - 1);
 						return ""+value;
 						i += 1;
 					}
@@ -47,25 +47,25 @@
 			
 			int OnOk()
 			{	
-				dw_other.openUrl("/sale/view/CustomerGoods/template/CustomerGoods/itemother");		
+				dw_other.openUrl(L"/sale/view/CustomerGoods/template/CustomerGoods/itemother");		
 				dw_other.SetColHeaderHeight(0);
 				dw_other.SetRowSelectorWidth(0);
 				int row = SKUTemplate::dw_list.GetNextSelectRow(1);
 				if (row<1)
 				{
-					alert("请选择模板!");
+					alert(L"请选择模板!");
 					return 1;
 				}					
 					
 				msxml::IXMLDOMElement e =SKUTemplate::dw_list.GetRowElement(row);			
-				string TemplateContent = e.selectSingleNode("TemplateContent").text+"";
-				string TemplateID = e.selectSingleNode("TemplateID").text+"";				
+				xstring TemplateContent = e.selectSingleNode(L"TemplateContent").text+L"";
+				xstring TemplateID = e.selectSingleNode(L"TemplateID").text+L"";				
 				//trace(ItemName);
-				xml__ x = new xml__;
+				xml x = new xml;
 				x.setNativePointer(x.CreateInstance());
 				x.LoadXml(TemplateContent);					
 				dw_other.Retrieve(x);
-				dw_prop.SetItemString(1,"TemplateID",TemplateID);				
+				dw_prop.SetItemString(1,L"TemplateID",TemplateID);				
 				CloseWindow();
 				return 1;
 			}
@@ -81,13 +81,13 @@
 				return 1;
 			}			
 				
-			int OnCmdDispatch(string comdid)
+			int OnCmdDispatch(xstring comdid)
 			{
-				if (comdid=="SelectAll") OnSelectAll();
-				else if (comdid=="SelectNo") OnSelectNo();
-				else if (comdid=="cb_import") OnOk();
-				else if (comdid=="cb_close") OnCancel();
-				//else if (comdid=="query") GridSearch();						
+				if (comdid==L"SelectAll") OnSelectAll();
+				else if (comdid==L"SelectNo") OnSelectNo();
+				else if (comdid==L"cb_import") OnOk();
+				else if (comdid==L"cb_close") OnCancel();
+				//else if (comdid==L"query") GridSearch();						
 				return 0;
 			}
 			
@@ -101,19 +101,19 @@
 				if (GetParam())
 				{
 					int iArgs = GetParam();
-					xaserverarg__ arg1 = new xaserverarg__;
+					xaserverarg arg1 = new xaserverarg;
 					arg1.setNativePointer(iArgs);
-					dw_other = new xdwtable__;
-					dw_other.setNativePointer(arg1.GetArgString("dw_other").toInt());
-					dw_prop = new xdwtable__;
-					dw_prop.setNativePointer(arg1.GetArgString("dw_prop").toInt());				
+					dw_other = new xdwtable;
+					dw_other.setNativePointer(arg1.GetArgString(L"dw_other").toInt());
+					dw_prop = new xdwtable;
+					dw_prop.setNativePointer(arg1.GetArgString(L"dw_prop").toInt());				
 				}
-				//trace(dw_other.__nativept);
+				//trace(dw_other.nativept);
 				SKUTemplate::onload();
 				SKUTemplate::dw_list.SetSelectionMode(1); //3
 				SKUTemplate::dw_list.SetReadOnly(true);			
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-		        AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDoubleClicked);//行双击				
+				AttachEvent(L"WM_XCOMMAND",OnXCommand);
+		        AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED",OnDoubleClicked);//行双击				
 			}
 		]
 	]
diff --git a/jrj/project/business/BasicCode/ShipcompanyList.cpp b/jrj/project/business/BasicCode/ShipcompanyList.cpp
index 2a0a376..76baf8c 100644
--- a/jrj/project/business/BasicCode/ShipcompanyList.cpp
+++ b/jrj/project/business/BasicCode/ShipcompanyList.cpp
@@ -1,33 +1,38 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-unit vbusiness.entity
-[
-	ShipcompanyList is extend list;
-	about ShipcompanyList
-	[
-		method:
-		[
-			int onload()
-			{
-				list::onload();
-				return -1;
-			}
-			
-			int ViewUpdate(param pr,string updateItem,xaserverarg__   arg)
-				{
-					if(	updateItem=="del")
-					{
-						int DelRow = this.dw_list.GetRow();
-						this.dw_list.DeleteRow(DelRow);
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-					}
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-					return 1;
-				}
-					
-		]
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ShipcompanyList : public xwin
+{
+public:
+	ShipcompanyList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static ShipcompanyList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ShipcompanyList* pWin = new ShipcompanyList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
 
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
 
-	]
-]
\ No newline at end of file
+		}
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ShipcompanyMaint.cpp b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
index 390b1d9..5d399ae 100644
--- a/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
+++ b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
@@ -1,316 +1,319 @@
-use "system.vl"
-use "win.vl"
-use "maint.vl"
-use "file.vl"
-use "dev:vm[xcell.vm]"
-unit vbusiness.entity
-[
-	ShipcompanyMaint is extend maint;
-	about ShipcompanyMaint
-	[
-		field:
-		[
-			msxml::IXMLDOMDocument m_configDoc;
-			string m_userid;
-			string m_username;
-			string ContactID;
-			xdwtable__ dw_base;
-			xcell__ dw_cell;			
-		]
-		
-		method:
-		[
-			int alert(string str)
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ShipcompanyMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	ShipcompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ShipcompanyMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ShipcompanyMaint* pWin = new ShipcompanyMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		dw_cell.SetCellProps(2, 2, strnew);
+		return 0;
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"maint");
+		return 1;
+	}
+	xstring GetGuid() {
+		return TApp::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			m_userid = TApp::GetUserInfo().id;
+			m_username = TApp::GetUserInfo().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"有效");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"Type", L"6");
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", TApp::GetCurDate());
+		}
+		else
+		{
+			setCellReadOnly();
+		}
+		return 0;
+	}
+
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
 			{
-				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
-			}			
-			int setCellReadOnly()
-			{		
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));			
-				dw_cell = new xcell__;
-				dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));		
-				string strnew = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
-				dw_cell.SetCellProps(2,2,strnew);			
-				return 0;
-			}		
-			int OnSetFocus(ref TNotifyEvent evt,int p)
-			{
-				SetAgent("maint");
-				return 1;
-			}		
-			string GetGuid(){
-				return TApp::GetGuid();			
-			}					
-			int OnClear(){
-				if(this.m_EntityID ==""){
-					m_userid = TApp::GetUserInfo().id;
-					m_username = TApp::GetUserInfo().name;						
-					dw_base = new xdwtable__;
-					dw_base.setNativePointer(this.GetControl("dw_base"));									
-					dw_base.SetItemString(1,"PartyID",GetGuid());		
-					dw_base.SetItemString(1,"PStatus","1");
-					dw_base.SetItemDisplayString(1,"PStatus","有效");									
-					dw_base.SetItemString(1,"CreatorID",m_userid);
-					dw_base.SetItemString(1,"PADStatus","1");
-					dw_base.SetItemString(1,"Type","6");						
-					dw_base.SetItemString(1,"AddressID",GetGuid());
-					dw_base.SetItemString(1,"PADIdentifyAddressFlag","Y");	
-					dw_base.SetItemString(1,"PrimaryFlag","Y");						
-					dw_base.SetItemString(1,"EnterName",m_userid);
-					dw_base.SetItemDisplayString(1,"EnterName",m_username);				
-					dw_base.SetItemString(1,"CreateDate",TApp::GetCurDate());										
+				if(m_dels==L"")
+				{
+					m_dels=del;
 				}
 				else
 				{
-					setCellReadOnly();			
-				}	
-				return 0;
-			}					
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
 
-			int OnAddrow()
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));					
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{	
-					dw.InsertRow(0);
-					int rows = dw.GetRowCount();
-					dw.SetRow(rows);								
-				}				
-				return 1;				
-			}
-			int OnInsertRow()
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/shipcompany/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"P" + code;
+		}
+		return  L"P1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ShipNo = dw_base.GetItemString(1, L"ShipNo");
+		if (ShipNo == L"")
+		{
+			dw_base.SetItemString(1, L"ShipNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			trace(aName);
+			if (aName == L"")
 			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));					
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark");
+				trace(aTemp);
+				if (aTemp != L"")
 				{
-					int row=dw.GetRow();
-					if(row<1) return 0;					
-					dw.InsertRow(row);
-					dw.SetRow(row);									
-				}
-				return 1;
-			}
-
-			int OnDeleteRow()
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{
-					int row=dw.GetRow();
-					if(row<1) return 0;
-					/*string del = dw.GetItemString(row,8);
-					if(del!="")
-					{
-						if(m_dels=="")
-						{	
-							m_dels=del;						
-						}		
-						else 
-						{	
-							string temp=m_dels;
-							m_dels=del + "|" + temp;
-						//+= "|"+del;						
-						}	
-
-					}*/				
-					dw.DeleteRow(row);	
-					dw.SetRow(row - 1);						
-				}
-				return 1;
-			}
-			string getGoodsNo()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				if (getUrl("/sale/data/LogisticsCode/pref/shipcompany/PartyNo",arg.GetString(),x) != 1)
-				{
-					trace(x.GetXml());
-					return "";
-				}			
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					string code = e.text;
-				trace(code);
-					return "P"+code;
-				}
-				return "P1000";
-			}				
-			int OnPreSave()
-			{	
-				dw_base.AcceptText();					
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));				
-				string ShipNo = dw_base.GetItemString(1,"ShipNo",0);
-				if (ShipNo=="" || ShipNo== nil) 
-					{
-					dw_base.SetItemString(1,"ShipNo",getGoodsNo());			
-				}				
-				xdwtable__ dwcon =  new xdwtable__;				
-				dwcon.setNativePointer(dw_base.FindDwTable("item",0));
-				int i;				
-				for(i=1;i<=dwcon.GetRowCount();i++)
-				{
-					string aTemp;				
-					string aName = dwcon.GetItemString(i,"ContacterName",0);
-					trace(aName);
-					if (aName=="" || aName== nil)
-					{
-						aTemp=dwcon.GetItemString(i,"Mobile",0)+dwcon.GetItemString(i,"TEL",0)+dwcon.GetItemString(i,"Fax",0)+dwcon.GetItemString(i,"Email",0)+dwcon.GetItemString(i,"PCRemark",0);	
-						trace(aTemp);
-						if(aTemp !="" && aTemp != nil)
-						{
-							alert("联系人名称必填!");
-							return -1;
-						}
-					}
-					else{
-							string ContactID = dwcon.GetItemString(i,"ContactID",0);
-							if (ContactID=="" || ContactID== nil)					
-							{	
-								dwcon.SetItemString(i,"ContactID",GetGuid());
-								dwcon.SetItemString(i,"PCStatus","1");					
-								dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));								
-							}	
-						
-
-
-					}
-				}
-				return 1;					
-			}						
-			int OnSave()
-			{	
-					
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));							
-				string SName = dw_base.GetItemString(1,"Name");
-				if(SName==""){
-					alert("请输入船公司名称!");
+					alert(L"联系人名称必填!");
 					return -1;
 				}
-				int rec =OnPreSave();
-				if (rec== -1)	return -1;					
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc()); 
-				trace(x.GetXml());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("content",x.GetXml());						
-				arg.AddArg("dbmap","Shipcompany.dbmap");
-				//arg.AddArg("m_dels",m_dels);	
-			
-				if (getUrl("/sale/data/LogisticsCode/entity/shipcompany/save",arg.GetString(),x) != 1)
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"")
 				{
-					trace("error:"+x.GetXml());
-					alert("保存失败!");
-					return 0;
-				}						
-				else
-				{	
-					trace(x.GetXml());
-					if(x.GetXmlDoc().selectSingleNode("error"))
-					{
-						alert("保存出错2!");
-						return 0;				
-					}
-					alert("保存成功!");
-					dw_base.ResetUpdateStatus();
-					setCellReadOnly();							
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"1");
+					dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
 				}
-				dw_base.Redraw();
-				//m_dels="";				
-				return 0;
-			}					
-			int OnCmdDispatch(string comdid)
+
+
+
+			}
+		}
+		return 1;
+	}
+	int OnSave()
+	{
+
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入船公司名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Shipcompany.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);	
+
+		if (getUrl(L"/sale/data/LogisticsCode/entity/shipcompany/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
 			{
-				trace(comdid);
-				if(comdid.find("action:bill.row.add",0)>=0) {
-					OnAddrow();
-				}
-				else if(comdid.find("bill.row.insert",0)>=0) {
-					OnInsertRow(); 							
-				}
-				else if(comdid.find("bill.row.delete",0)>=0) {
-					OnDeleteRow();
-				}
-				else if(comdid.find("bill.save",0)>=0) {					
-					trace(1);
-					dw_base.AcceptText();
-					OnSave();
-				}					
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			setCellReadOnly();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		trace(comdid);
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			dw_base.AcceptText();
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		//trace(colname);
+		if (colname == L"ShipNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
 				return 0;
 			}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			int OnCellChanged(ref TNotifyEvent evt,int p)
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				ref DWNMHDR  hdr = evt.pnmh;
-				string colname=hdr.colname;
-				//trace(colname);
-				if(colname=="ShipNo")
-				{
-					string cspec = dw_base.GetItemString(1,1);
-					trace(cspec);
-					string SpecRule="^\\d*$";
-					xaserverarg__ args = new xaserverarg__;
-					args.setNativePointer(args.CreateInstance());
-					args.AddArg("CSpec",cspec);
-					args.AddArg("SpecRule",SpecRule);
-					xml__  x= new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					getUrl("/sale/data/LogisticsCode/pref/forwarderno/check",args.GetString(),x);			
-					if(x.GetXmlDoc().selectSingleNode("root/spec"))
-					{  
-						alert("请输入数字!");
-						return 0;
-					}
-					
-				}
-				return 1;
-			}			
-			int OnAttachEvent()
-			{
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_base","DWV_ITEMCHANGED",OnCellChanged);				
-				return 0;
-			}
-					
-			int onload()
-			{	
-								
-				OnAttachEvent();								
-				//if(!m_configDoc) return -1;
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ShipcompanyMaint::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ShipcompanyMaint::OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ShipcompanyMaint::OnCellChanged);
+		return 1;
+	}
 
-				maint::onload();
-				
-				OnClear();
-			
-			}
-		]
-	]
-]
\ No newline at end of file
+	int onload()
+	{
+
+		OnAttachEvent();
+		//if(!m_configDoc) return -1;
+
+		maint::onload();
+
+		OnClear();
+
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/Simple.Menu.Config.cpp b/jrj/project/business/BasicCode/Simple.Menu.Config.cpp
index 65f8683..d201903 100644
--- a/jrj/project/business/BasicCode/Simple.Menu.Config.cpp
+++ b/jrj/project/business/BasicCode/Simple.Menu.Config.cpp
@@ -1,13 +1,28 @@
-use "frame.vd"
-use "publiccode.vd"
-use "xcontrol.vd"
-use "xtreeview.vd"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-class SimpleMenuConfig : public frame
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+
+class  __declspec(dllexport) SimpleMenuConfig : public xframe
 {
+public:
 	xdwgrid dw_list;
 	xtreeview tv_gs;
-
+	xnode	m_agentNode;
+public:
+	SimpleMenuConfig(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static SimpleMenuConfig* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SimpleMenuConfig* pWin = new SimpleMenuConfig(implPtr, (HWND)hWnd);
+		return pWin;
+	}
 	int AddRow()
 	{
 		dw_list.InsertRow(0);
@@ -41,50 +56,50 @@
 		int i=0;
 		for(i=1; i<=dw_list.GetRowCount();i++)
 		{
-			string seq = dw_list.GetItemString(i, "SeqNo");
-			if(seq != i.toString())
-				dw_list.SetItemString(i, "SeqNo", i.toString());
+			xstring seq = dw_list.GetItemString(i, L"SeqNo");
+			if(seq != xstring(i))
+				dw_list.SetItemString(i, L"SeqNo", xstring(i));
 		}
 		
-		xml x=new xml;
-		x.setNativePointer(xml::CreateInstance());
-		xaserverarg arg=new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());	
-		dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-		arg.AddArg("content", x.GetXml());
-		if(getUrl("/workflow/action/ItemPictureMenu.dbmap/bill.update", arg.GetString(), x) != 1)
-			alert("保存失败!");
+		xml x;
+		
+		xaserverarg arg;
+			
+		dw_list.DwUpdateAllToEx(x);
+		arg.AddArg(L"content", x.xml());
+		if(getUrl(L"/workflow/action/ItemPictureMenu.dbmap/bill.update", arg.GetString(), x) != 1)
+			alert(L"保存失败!");
 		else
 		{
-			string str = x.GetXml();
+			xstring str = x.xml();
 			//alert(str);
-			if(str.find("失败", 0) > 0)
-				alert("保存失败!");
+			if(str.find(L"失败", 0) > 0)
+				alert(L"保存失败!");
 			else
 			{
-				//alert("保存成功!");
+				//alert(L"保存成功!");
 				dw_list.ResetUpdateStatus();
-				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
-				int hItem = xtreeview::GetSelectedItem(tv_gs.GetId());
+				dw_list.DwUpdateAllToEx(x);
+				HTREEITEM hItem =tv_gs.GetSelectedItem();
 				if(hItem > 0)
 				{
-					msxml::IXMLDOMElement e =  x.GetXmlDoc().documentElement;
-					int p = trust(e as int);
-					xtreeview::SetItemData(tv_gs.GetId(), hItem, p);
+					KXMLDOMElement e =  x.documentElement();
+					int p = trust(e);
+					tv_gs.SetItemData(hItem, p);
 				
-					while(xtreeview::GetChildItem(tv_gs.GetId(), hItem) > 0)
-						xtreeview::DeleteItem(tv_gs.GetId(), xtreeview::GetChildItem(tv_gs.GetId(), hItem));
+					while(tv_gs.GetChildItem( hItem) > 0)
+						tv_gs.DeleteItem(tv_gs.GetChildItem( hItem));
 				
-					msxml::IXMLDOMNodeList li =  x.GetXmlDoc().selectNodes("item/item");
-					int s = li.length;
+					KXMLDOMNodeList li =  x.selectNodes(L"item/item");
+					int s = li.length();
 					for(i=0;i<s;i++)
 					{
-						msxml::IXMLDOMElement ele =  li.item(i);
-						int pa = trust(ele as int);
-						string name = ele.selectSingleNode("Name").text;
-						int cItem = xtreeview::InsertChildItem(tv_gs.GetId(), hItem, name, pa, 15);
-						if(ele.selectSingleNode("item"))
-							xtreeview::SetItemChild1(tv_gs.GetId(), cItem, 1);
+						KXMLDOMElement ele =  li.item(i);
+						int pa = trust(ele);
+						xstring name = ele.selectSingleNode(L"Name").text();
+						HTREEITEM cItem =tv_gs.InsertChildItem( hItem, name, pa, 15);
+						if(ele.selectSingleNode(L"item"))
+							tv_gs.SetItemChild1(cItem, 1);
 					}
 				}
 				
@@ -117,132 +132,139 @@
 		return 1;
 	}
 						
-	int OnCmdDispatch(string comdid)
+	int OnCmdDispatch(xstring comdid)
 	{
-		int hCursor = xutil::SetCursorWait();
-		if(comdid == "AddRow")  AddRow();
-		else if(comdid == "InsertRow")  InsertRow();
-		else if(comdid == "DeleteRow")  DeleteRow();
-		else if(comdid == "Save")  Save();
-		else if(comdid == "UpRow")  UpRow();
-		else if(comdid == "DownRow")  DownRow();
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if(comdid == L"AddRow")  AddRow();
+		else if(comdid == L"InsertRow")  InsertRow();
+		else if(comdid == L"DeleteRow")  DeleteRow();
+		else if(comdid == L"Save")  Save();
+		else if(comdid == L"UpRow")  UpRow();
+		else if(comdid == L"DownRow")  DownRow();
 		xutil::RestoreCursor(hCursor);
 		return 0;
 	}		
 
 	int SetAgent()
 	{
-		string xfNodeAgentArea  = "agentarea";
+		xstring xfNodeAgentArea = L"agentarea";
 		xnode anode = GetAgentNode(xfNodeAgentArea);
-		msxml::IXMLDOMElement xframeElement =  GetElement();
-		msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"/*");
-		if(agent)
+		if (m_agentNode)
 		{
-			string s = agent.xml;
-			SetAgentNodeContent(anode,s);
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
 		}
 		return 1;
 	}
 		
-	int OnSetFocus(ref TEvent evt,int p)
+	int OnSetFocus(TEvent* evt, LPARAM p)
 	{		
 		SetAgent()	;	
 		return 1;
 	}		
 	
-	int OnXCommand(ref TXCommandEvent evt,int p)
+	int OnXCommand(TEvent* evt, LPARAM param)
 	{
-		return OnCmdDispatch(evt.pStrID);
-	}	
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
 		
-	int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
 	{
-		ref NMTREEVIEW nmtv = cast(evt.pnmh as NMTREEVIEW);
-		int hItem = nmtv.itemNew.hItem;
-		msxml::IXMLDOMElement e =  trust(xtreeview::GetItemData(tv_gs.GetId(), hItem) as msxml::IXMLDOMElement);
-		//trace("%s", e.xml);
-		//string id = e.selectSingleNode("MenuID").text;
+		
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		KXMLDOMElement& e = *(KXMLDOMElement*)tv_gs.GetItemData(hItem);
+		//trace(L"%s", e.xml);
+		//xstring id = e.selectSingleNode(L"MenuID").text();
 		dw_list.AcceptText();
 		dw_list.Retrieve(e);
 		dw_list.Redraw();
 		return 1;
 	}	
 
-	int OnTreeMoveNode(ref TNotifyEvent evt,int p)	
+	int OnTreeMoveNode(TEvent* evt, LPARAM p)	
 	{
-		ref TVNNMHDR nmtv = trust(evt.pnmh as ref TVNNMHDR);
-		int xfrom = nmtv.FromItem;
-		int xto = nmtv.ToItem;
+		TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
+		HTREEITEM xfrom = nmtv.FromItem;
+		HTREEITEM xto = nmtv.ToItem;
 		
-		int ret = xwin::MessageBox(this.GetHWND(), "确定移动节点!","提示:",1);
+		int ret = MessageBox(GetHWND(), L"确定移动节点!",L"提示:",1);
 		//trace(ret);
 		if(ret == 2)
 		{
-			xtreeview::DeleteItem(tv_gs.GetId(), xto);
+			tv_gs.DeleteItem(xto);
 			return -1;
 		}
+		KXMLDOMElement& fid = *(KXMLDOMElement*)tv_gs.GetItemData(xto);
+		HTREEITEM xpto =tv_gs.GetParentItem(xto);
+		KXMLDOMElement& tid = *(KXMLDOMElement*)tv_gs.GetItemData(xto);
+		//trace(L"%s-------------------------%s",fid.xml,tid.xml);
+		xml x ;
 		
-		msxml::IXMLDOMElement fid = trust(xtreeview::GetItemData(tv_gs.GetId(), xfrom) as msxml::IXMLDOMElement);
-		int xpto = xtreeview::GetParentItem(tv_gs.GetId(), xto);
-		msxml::IXMLDOMElement tid = trust(xtreeview::GetItemData(tv_gs.GetId(), xpto) as msxml::IXMLDOMElement);
-		//trace("%s-------------------------%s",fid.xml,tid.xml);
-		xml x = new xml;
-		x.setNativePointer(xml::CreateInstance());
-		xaserverarg arg=new xaserverarg;
-		arg.setNativePointer(arg.CreateInstance());		
+		xaserverarg arg;
+				
 		
-		string id1 = fid.selectSingleNode("@guid").text;
-		string id2 = tid.selectSingleNode("@guid").text;
-		//trace("%s-------------------------%s",id1,id2);
-		string str = "update ItemPictureMenu set parentid='"+id2+"' where menuid='"+id1+"' ";
-		str += " select 1 for xml path('root')";
+		xstring id1 = fid.selectSingleNode(L"@guid").text();
+		xstring id2 = tid.selectSingleNode(L"@guid").text();
+		//trace(L"%s-------------------------%s",id1,id2);
+		xstring str = L"update ItemPictureMenu set parentid='"+id2+L"' where menuid='"+id1+L"' ";
+		str += L" select 1 for xml path('root')L";
 		
-		arg.AddArg("sql", str);
+		arg.AddArg(L"sql", str);
 		if(getSql(arg.GetString(),x)!=1)
 		{
-			trace("error:"+x.GetXml());
-			alert("移动节点出错!");
-			xtreeview::DeleteItem(tv_gs.GetId(), xto);
+			trace(L"error:"+(xstring)x.xml());
+			alert(L"移动节点出错!");
+			tv_gs.DeleteItem(xto);
 			return 0;
 		}
-		//trace("================");
+		//trace(L"================L");
 		//
-		int xpfrom = xtreeview::GetParentItem(tv_gs.GetId(), xfrom);
-		trace("%d", xpfrom);
-		msxml::IXMLDOMElement fe = trust(xtreeview::GetItemData(tv_gs.GetId(), xpfrom) as msxml::IXMLDOMElement);
-		//trace("%s-------------------------%s",fe.xml,tid.xml);
-		msxml::IXMLDOMElement fe1 = fe.selectSingleNode("item[@guid='"+id1+"']");
+		HTREEITEM xpfrom =tv_gs.GetParentItem(xfrom);
+		//trace(L"%d", xpfrom);
+		KXMLDOMElement& fe = *(KXMLDOMElement*)tv_gs.GetItemData(xpfrom);
+		//trace(L"%s-------------------------%s",fe.xml,tid.xml);
+		KXMLDOMElement fe1 = fe.selectSingleNode(L"item[@guid='"+id1+L"']");
 		fe.removeChild(fe1);
 		tid.appendChild(fid);
 		
-		xtreeview::DeleteItem(tv_gs.GetId(), xfrom);
+		tv_gs.DeleteItem(xfrom);
 		return 1;
 	}
 
 	int OnInitial()
 	{			
-		int rItem = xtreeview::GetRootItem(tv_gs.GetId());
-		xtreeview::ExpandItemEx(tv_gs.GetId(), rItem);
-		xtreeview::ItemFocus(tv_gs.GetId(), rItem);
+		HTREEITEM rItem =tv_gs.GetRootItem();
+		tv_gs.ExpandItemEx( rItem);
+		tv_gs.ItemFocus(rItem);
 		return 1;
 	}
 		
 	int OnAttachEvent()
 	{
-		AttachEvent("WM_XCOMMAND",OnXCommand);
-		AttachEvent("WM_SETFOCUS",OnSetFocus);
-		AttachEvent("tv_gs","TVN_SELCHANGED",OnTreeSelChanged);
-		AttachEvent("tv_gs", "TVN_ENDDRAG",OnTreeMoveNode);
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SimpleMenuConfig::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SimpleMenuConfig::OnSetFocus);
+		AttachEvent(L"tv_gs",L"TVN_SELCHANGED", (FEvent)&SimpleMenuConfig::OnTreeSelChanged);
+		AttachEvent(L"tv_gs", L"TVN_ENDDRAG", (FEvent)&SimpleMenuConfig::OnTreeMoveNode);
 		return 1;
 	}		
 	
 	int onload()
 	{
-		dw_list = GetControl("dw_list");
-		dw_list.openUrl("/sale/view/SimpleProduct/template/Simple/Menu");
-		dw_list.SetColumnState("SeqNo", false);
+		dw_list = GetControl(L"dw_list");
+		dw_list.openUrl(L"/sale/view/SimpleProduct/template/Simple/Menu");
+		dw_list.SetColumnState(L"SeqNo", false);
 		
-		tv_gs = GetControl("tv_gs");
+		tv_gs = GetControl(L"tv_gs");
 		
 		SetAgent();
 		OnAttachEvent();
diff --git a/jrj/project/business/BasicCode/TestingCompanyList.cpp b/jrj/project/business/BasicCode/TestingCompanyList.cpp
index 3936b49..43369c3 100644
--- a/jrj/project/business/BasicCode/TestingCompanyList.cpp
+++ b/jrj/project/business/BasicCode/TestingCompanyList.cpp
@@ -1,33 +1,39 @@
-use "system.vl"
-use "win.vl"
-use "list.vl"
-unit vbusiness.entity
-[
-	TestingCompanyList is extend list;
-	about TestingCompanyList
-	[
-		method:
-		[
-			int onload()
-			{
-				list::onload();
-				return -1;
-			}
-			
-			int ViewUpdate(param pr,string updateItem,xaserverarg__   arg)
-				{
-					if(	updateItem=="del")
-					{
-						int DelRow = this.dw_list.GetRow();
-						this.dw_list.DeleteRow(DelRow);
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-					}
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-					return 1;
-				}
-					
-		]
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) TestingCompanyList : public xwin
+{
+public:
+	TestingCompanyList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static TestingCompanyList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		TestingCompanyList* pWin = new TestingCompanyList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
 
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
 
-	]
-]
\ No newline at end of file
+		}
+
+		return 1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/TestingCompanyMaint.cpp b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
index 12574f7..596dc4b 100644
--- a/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
+++ b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
@@ -1,316 +1,320 @@
-use "system.vl"
-use "win.vl"
-use "maint.vl"
-use "file.vl"
-use "dev:vm[xcell.vm]"
-unit vbusiness.entity
-[
-	TestingCompanyMaint is extend maint;
-	about TestingCompanyMaint
-	[
-		field:
-		[
-			msxml::IXMLDOMDocument m_configDoc;
-			string m_userid;
-			string m_username;
-			string ContactID;
-			xdwtable__ dw_base;
-			xcell__ dw_cell;			
-		]
-		
-		method:
-		[
-			int alert(string str)
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) TestingCompanyMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	TestingCompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static TestingCompanyMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		TestingCompanyMaint* pWin = new TestingCompanyMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		dw_cell.SetCellProps(2, 2, strnew);
+		return 0;
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"maint");
+		return 1;
+	}
+	xstring GetGuid() {
+		return TApp::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			m_userid = TApp::GetUserInfo().id;
+			m_username = TApp::GetUserInfo().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"有效");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"Type", L"20");
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", TApp::GetCurDate());
+		}
+		else
+		{
+			setCellReadOnly();
+		}
+		return 0;
+	}
+
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
 			{
-				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
-				TApp::alert(this,str);
-				return 0;
-			}			
-			int setCellReadOnly()
-			{		
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));			
-				dw_cell = new xcell__;
-				dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));		
-				string strnew = "<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
-				dw_cell.SetCellProps(2,2,strnew);			
-				return 0;
-			}		
-			int OnSetFocus(ref TNotifyEvent evt,int p)
-			{
-				SetAgent("maint");
-				return 1;
-			}		
-			string GetGuid(){
-				return TApp::GetGuid();			
-			}					
-			int OnClear(){
-				if(this.m_EntityID ==""){
-					m_userid = TApp::GetUserInfo().id;
-					m_username = TApp::GetUserInfo().name;						
-					dw_base = new xdwtable__;
-					dw_base.setNativePointer(this.GetControl("dw_base"));									
-					dw_base.SetItemString(1,"PartyID",GetGuid());		
-					dw_base.SetItemString(1,"PStatus","1");
-					dw_base.SetItemDisplayString(1,"PStatus","有效");									
-					dw_base.SetItemString(1,"CreatorID",m_userid);
-					dw_base.SetItemString(1,"PADStatus","1");
-					dw_base.SetItemString(1,"Type","20");						
-					dw_base.SetItemString(1,"AddressID",GetGuid());
-					dw_base.SetItemString(1,"PADIdentifyAddressFlag","Y");	
-					dw_base.SetItemString(1,"PrimaryFlag","Y");						
-					dw_base.SetItemString(1,"EnterName",m_userid);
-					dw_base.SetItemDisplayString(1,"EnterName",m_username);				
-					dw_base.SetItemString(1,"CreateDate",TApp::GetCurDate());										
+				if(m_dels==L"")
+				{
+					m_dels=del;
 				}
 				else
 				{
-					setCellReadOnly();			
-				}	
-				return 0;
-			}					
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
 
-			int OnAddrow()
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));					
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{	
-					dw.InsertRow(0);
-					int rows = dw.GetRowCount();
-					dw.SetRow(rows);								
-				}				
-				return 1;				
-			}
-			int OnInsertRow()
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/shipcompany/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"P" + code;
+		}
+		return L"P1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ShipNo = dw_base.GetItemString(1, L"ShipNo");
+		if (ShipNo == L"")
+		{
+			dw_base.SetItemString(1, L"ShipNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			trace(aName);
+			if (aName == L"" )
 			{
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));					
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark");
+				trace(aTemp);
+				if (aTemp != L"")
 				{
-					int row=dw.GetRow();
-					if(row<1) return 0;					
-					dw.InsertRow(row);
-					dw.SetRow(row);									
-				}
-				return 1;
-			}
-
-			int OnDeleteRow()
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				xdwtable__ dw =  new xdwtable__;
-				dw.setNativePointer(dw_base.GetCurTable());
-				string dw_n=dw.GetDwName();
-				if(dw_n=="item")
-				{
-					int row=dw.GetRow();
-					if(row<1) return 0;
-					/*string del = dw.GetItemString(row,8);
-					if(del!="")
-					{
-						if(m_dels=="")
-						{	
-							m_dels=del;						
-						}		
-						else 
-						{	
-							string temp=m_dels;
-							m_dels=del + "|" + temp;
-						//+= "|"+del;						
-						}	
-
-					}*/				
-					dw.DeleteRow(row);	
-					dw.SetRow(row - 1);						
-				}
-				return 1;
-			}
-			string getGoodsNo()
-			{
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				if (getUrl("/sale/data/LogisticsCode/pref/shipcompany/PartyNo",arg.GetString(),x) != 1)
-				{
-					trace(x.GetXml());
-					return "";
-				}			
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				if(e)
-				{
-					string code = e.text;
-				trace(code);
-					return "P"+code;
-				}
-				return "P1000";
-			}				
-			int OnPreSave()
-			{	
-				dw_base.AcceptText();					
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));				
-				string ShipNo = dw_base.GetItemString(1,"ShipNo",0);
-				if (ShipNo=="" || ShipNo== nil) 
-					{
-					dw_base.SetItemString(1,"ShipNo",getGoodsNo());			
-				}				
-				xdwtable__ dwcon =  new xdwtable__;				
-				dwcon.setNativePointer(dw_base.FindDwTable("item",0));
-				int i;				
-				for(i=1;i<=dwcon.GetRowCount();i++)
-				{
-					string aTemp;				
-					string aName = dwcon.GetItemString(i,"ContacterName",0);
-					trace(aName);
-					if (aName=="" || aName== nil)
-					{
-						aTemp=dwcon.GetItemString(i,"Mobile",0)+dwcon.GetItemString(i,"TEL",0)+dwcon.GetItemString(i,"Fax",0)+dwcon.GetItemString(i,"Email",0)+dwcon.GetItemString(i,"PCRemark",0);	
-						trace(aTemp);
-						if(aTemp !="" && aTemp != nil)
-						{
-							alert("联系人名称必填!");
-							return -1;
-						}
-					}
-					else{
-							string ContactID = dwcon.GetItemString(i,"ContactID",0);
-							if (ContactID=="" || ContactID== nil)					
-							{	
-								dwcon.SetItemString(i,"ContactID",GetGuid());
-								dwcon.SetItemString(i,"PCStatus","1");					
-								dw_base.SetItemString(1,"PrimaryContactID",dwcon.GetItemString(1,"ContactID"));								
-							}	
-						
-
-
-					}
-				}
-				return 1;					
-			}						
-			int OnSave()
-			{	
-					
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));							
-				string SName = dw_base.GetItemString(1,"Name");
-				if(SName==""){
-					alert("请输入船公司名称!");
+					alert(L"联系人名称必填!");
 					return -1;
 				}
-				int rec =OnPreSave();
-				if (rec== -1)	return -1;					
-				xml__ x=new xml__;
-				x.setNativePointer(xml__::CreateInstance());
-				dw_base.DwUpdateAllTo(x.GetXmlDoc()); 
-				trace(x.GetXml());
-				xaserverarg__ arg=new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				arg.AddArg("content",x.GetXml());						
-				arg.AddArg("dbmap","Shipcompany.dbmap");
-				//arg.AddArg("m_dels",m_dels);	
-			
-				if (getUrl("/sale/data/LogisticsCode/entity/shipcompany/save",arg.GetString(),x) != 1)
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"" )
 				{
-					trace("error:"+x.GetXml());
-					alert("保存失败!");
-					return 0;
-				}						
-				else
-				{	
-					trace(x.GetXml());
-					if(x.GetXmlDoc().selectSingleNode("error"))
-					{
-						alert("保存出错2!");
-						return 0;				
-					}
-					alert("保存成功!");
-					dw_base.ResetUpdateStatus();
-					setCellReadOnly();							
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"1");
+					dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
 				}
-				dw_base.Redraw();
-				//m_dels="";				
-				return 0;
-			}					
-			int OnCmdDispatch(string comdid)
+
+
+
+			}
+		}
+		return 1;
+	}
+	int OnSave()
+	{
+
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入船公司名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Shipcompany.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);	
+
+		if (getUrl(L"/sale/data/LogisticsCode/entity/shipcompany/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" +(xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
 			{
-				trace(comdid);
-				if(comdid.find("action:bill.row.add",0)>=0) {
-					OnAddrow();
-				}
-				else if(comdid.find("bill.row.insert",0)>=0) {
-					OnInsertRow(); 							
-				}
-				else if(comdid.find("bill.row.delete",0)>=0) {
-					OnDeleteRow();
-				}
-				else if(comdid.find("bill.save",0)>=0) {					
-					trace(1);
-					dw_base.AcceptText();
-					OnSave();
-				}					
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			setCellReadOnly();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		trace(comdid);
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			dw_base.AcceptText();
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		//trace(colname);
+		if (colname == L"ShipNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x = new xml;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
 				return 0;
 			}
 
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}
-			int OnCellChanged(ref TNotifyEvent evt,int p)
-			{	
-				dw_base = new xdwtable__;
-				dw_base.setNativePointer(this.GetControl("dw_base"));						
-				ref DWNMHDR  hdr = evt.pnmh;
-				string colname=hdr.colname;
-				//trace(colname);
-				if(colname=="ShipNo")
-				{
-					string cspec = dw_base.GetItemString(1,1);
-					trace(cspec);
-					string SpecRule="^\\d*$";
-					xaserverarg__ args = new xaserverarg__;
-					args.setNativePointer(args.CreateInstance());
-					args.AddArg("CSpec",cspec);
-					args.AddArg("SpecRule",SpecRule);
-					xml__  x= new xml__;
-					x.setNativePointer(xml__::CreateInstance());
-					getUrl("/sale/data/LogisticsCode/pref/forwarderno/check",args.GetString(),x);			
-					if(x.GetXmlDoc().selectSingleNode("root/spec"))
-					{  
-						alert("请输入数字!");
-						return 0;
-					}
-					
-				}
-				return 1;
-			}			
-			int OnAttachEvent()
-			{
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-				AttachEvent("dw_base","DWV_ITEMCHANGED",OnCellChanged);				
-				return 0;
-			}
-					
-			int onload()
-			{	
-								
-				OnAttachEvent();								
-				//if(!m_configDoc) return -1;
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&TestingCompanyMaint::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&TestingCompanyMaint::OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&TestingCompanyMaint::OnCellChanged);
+		return 1;
+	}
 
-				maint::onload();
-				
-				OnClear();
-			
-			}
-		]
-	]
-]
\ No newline at end of file
+	int onload()
+	{
+
+		OnAttachEvent();
+		//if(!m_configDoc) return -1;
+
+		maint::onload();
+
+		OnClear();
+
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/brand.regtype.cpp b/jrj/project/business/BasicCode/brand.regtype.cpp
index 0fb0769..d58a1c3 100644
--- a/jrj/project/business/BasicCode/brand.regtype.cpp
+++ b/jrj/project/business/BasicCode/brand.regtype.cpp
@@ -1,147 +1,161 @@
-use "frame.vl"
-use "dev:vm[xdwtable.vm]"
-use "file.vl"
-use "dev:vm[xutil.vm]"
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
 
-unit vbusiness.entity
-[
-	brand_regtype is extend frame;
-	about brand_regtype
-	[
-		method:
-		[
-			xdwtable__ dw_list;
-			
-			int SetAgent()
-			{
-				string xfNodeAgentArea  = "agentarea";
-				xnode__ anode = new xnode__;
-				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
-				var xframeElement =  GetElement();
-				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
-				if(agent){
-					SetAgentNodeContent (anode,agent.xml);
-				}
-				return 1;
-			}
-				
-			xdwtable__ getDw()
-			{
-				xdwtable__ dw1 = new xdwtable__;
-				dw1.setNativePointer(dw_list.FindDwTable("item"));
-				return dw1;
-			}
-		
-			int addRow()
-			{
-				xdwtable__ dw = getDw();
-				int row = dw.InsertRow(0);
-				string no = "2";
-				if(row > 1)
-					no = dw.GetItemString(row - 1, "RegTypeID");
-				int n = no.toInt();
-				int h = n + 1;
-				dw.SetItemString(row, "RegTypeID", h.toString());
-				return 1;
-			}
-			int deleteRow()
-			{
-				xdwtable__ dw = getDw();
-				int row = dw.GetRow();
-				if(row < 1 || row > dw.GetRowCount()) return -1;
-				if (win__::MessageBox(this.GetHWND(),"是否删除选择的记录行?","提示",4) == 7)
-					return 1;
-				dw.DeleteRow(row);
-				return 1;
-			}
-			int save()
-			{
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				dw_list.AcceptText();
-				dw_list.DwUpdateAllTo(x.GetXmlDoc());
-				msxml::IXMLDOMElement e = x.GetXmlDoc().documentElement;
-				//trace(e.xml);
-				arg.AddArg("content", e.xml);
-				if(getUrl("/workflow/action/BrandRegType.dbmap/bill.update", arg.GetString(), x) != 1)
-				{
-					alert("保存失败!");
-					return -1;
-				}
-				//trace(x.GetXml());
-				string str = x.GetXml();
-				if(str.find("保存成功", 0) > 0)
-				{
-					alert("保存成功");
-					dw_list.ResetUpdateStatus();
-					dw_list.Redraw();
-				}
-				else
-					alert("保存失败0!");
-				return 1;
-			}
-				
-			//命令发布函数
-			int OnCmdDispatch(string comdid)
-			{
-				int hCursor = xutil__::SetCursorWait();
-				if(comdid == "xmNew") addRow();
-				else if(comdid == "xmDelete") deleteRow();
-				else if(comdid == "xmSave") save();
-				xutil__::RestoreCursor(hCursor);
-				return 0;
-			}
-			
-			//命令处理事件
-			int OnXCommand(ref TXCommandEvent evt,int p)
-			{
-				return OnCmdDispatch(evt.pStrID);
-			}	
-			
-			int OnSetFocus(ref TEvent evt,int p)
-			{		
-				SetAgent()	;	
-				return 1;
-			}		
-			int OnAttachEvent()
-			{
-				AttachEvent("WM_XCOMMAND",OnXCommand);
-				AttachEvent("WM_SETFOCUS",OnSetFocus);
-		
-				return 1;
-			}
-			int Initail()
-			{
-				xaserverarg__ arg = new xaserverarg__;
-				arg.setNativePointer(arg.CreateInstance());	
-				xml__ x = new xml__;
-				x.setNativePointer(xml__ ::CreateInstance());
-				if(getUrl("/sale/data/brand/entity/regtype", arg.GetString(), x) != 1)
-				{
-					alert("初始化查询失败!");
-					return -1;
-				}
-				//trace(x.GetXml());
-				dw_list.Retrieve(x);
-				dw_list.Redraw();
-				return 1;
-			}
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
 
-			int onload()
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) brand_regtype : public xframe
+{
+public:
+	xdwtable dw_list;
+	xnode	m_agentNode;
+public:
+	brand_regtype(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static brand_regtype* CreateInstance(void* implPtr, void* hWnd)
+	{
+		brand_regtype* pWin = new brand_regtype(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
 			{
-				dw_list = new xdwtable__;
-				dw_list.setNativePointer(GetControl("dw_list"));
-				dw_list.openUrl("/sale/view/brand/template/regtype");
-				//dw_list.SetColHeaderHeight(0);
-				dw_list.SetRowSelectorWidth(0);				
-				
-				OnAttachEvent();
-				SetAgent();
-				Initail();
-				return -1;
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
 			}
-		]
-	]
-]
\ No newline at end of file
+		}
+		return 1;
+	}
+
+	xdwtable getDw()
+	{
+		xdwtable dw1 = new xdwtable;
+		dw1.setNativePointer(dw_list.FindDwTable(L"item"));
+		return dw1;
+	}
+
+	int addRow()
+	{
+		xdwtable dw = getDw();
+		int row = dw.InsertRow(0);
+		xstring no = L"2";
+		if (row > 1)
+			no = dw.GetItemString(row - 1, L"RegTypeID");
+		int n = no.toInt();
+		int h = n + 1;
+		dw.SetItemString(row, L"RegTypeID", xstring(h));
+		return 1;
+	}
+	int deleteRow()
+	{
+		xdwtable dw = getDw();
+		int row = dw.GetRow();
+		if (row < 1 || row > dw.GetRowCount()) return -1;
+		if (MessageBox(GetHWND(), L"是否删除选择的记录行?", L"提示", 4) == 7)
+			return 1;
+		dw.DeleteRow(row);
+		return 1;
+	}
+	int save()
+	{
+		xml x;
+	
+		xaserverarg arg;
+
+		dw_list.AcceptText();
+		dw_list.DwUpdateAllTo(x);
+		KXMLDOMElement e = x.documentElement();
+		//trace(e.xml);
+		arg.AddArg(L"content", e.xml());
+		if (getUrl(L"/workflow/action/BrandRegType.dbmap/bill.update", arg.GetString(), x) != 1)
+		{
+			alert(L"保存失败!");
+			return -1;
+		}
+		//trace(x.xml());
+		xstring str = x.xml();
+		if (str.find(L"保存成功", 0) > 0)
+		{
+			alert(L"保存成功");
+			dw_list.ResetUpdateStatus();
+			dw_list.Redraw();
+		}
+		else
+			alert(L"保存失败0!");
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (comdid == L"xmNew") addRow();
+		else if (comdid == L"xmDelete") deleteRow();
+		else if (comdid == L"xmSave") save();
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&brand_regtype::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&brand_regtype::OnSetFocus);
+
+		return 1;
+	}
+	int Initail()
+	{
+		xaserverarg arg;
+
+		xml x;
+		if (getUrl(L"/sale/data/brand/entity/regtype", arg.GetString(), x) != 1)
+		{
+			alert(L"初始化查询失败!");
+			return -1;
+		}
+		//trace(x.xml());
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		return 1;
+	}
+
+	int onload()
+	{
+		dw_list = new xdwtable;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"/sale/view/brand/template/regtype");
+		//dw_list.SetColHeaderHeight(0);
+		dw_list.SetRowSelectorWidth(0);
+
+		OnAttachEvent();
+		SetAgent();
+		Initail();
+		return -1;
+	}
+};
\ No newline at end of file

--
Gitblit v1.9.3