From f087a50629e95666db2e0b0ba4373834e2b9593b Mon Sep 17 00:00:00 2001
From: LiFan <2308045698@qq.com>
Date: 星期二, 16 七月 2024 14:43:07 +0800
Subject: [PATCH] update BasicCode

---
 jrj/project/business/BasicCode/SKUItem.categoryselect.cpp  |  216 +
 jrj/project/business/BasicCode/ForwarderList.cpp           |  136 +
 jrj/project/business/BasicCode/AddUomGroup.cpp             |  122 
 jrj/project/business/BasicCode/PaymentTerm.maint.cpp       |  415 +++
 jrj/project/business/BasicCode/SKUTemplate.cpp             |  419 +++
 jrj/project/business/BasicCode/basicfareTypeList.cpp       |  143 +
 jrj/project/business/BasicCode/TestingCompanyMaint.cpp     |  316 ++
 jrj/project/business/BasicCode/ProfitParam.cpp             |  126 
 jrj/project/business/BasicCode/ShipcompanyList.cpp         |   33 
 jrj/project/business/BasicCode/ExchangeRate.cpp            |  212 +
 jrj/project/business/BasicCode/FCL.cpp                     |  345 ++
 jrj/project/business/BasicCode/BrandInforMaint.cpp         |   98 
 jrj/project/business/BasicCode/QuickCode_Tree.cpp          |  690 +++++
 jrj/project/business/BasicCode/ColorCardNew.cpp            |  403 +++
 jrj/project/business/BasicCode/ForwarderMaint.cpp          |  461 +++
 jrj/project/business/BasicCode/ExpressList.cpp             |   34 
 jrj/project/business/BasicCode/QuickCode.cpp               |  676 +++++
 jrj/project/business/BasicCode/CustomerMarketMaint.cpp     |   89 
 jrj/project/business/BasicCode/TypeList.maint.supplier.cpp |  172 +
 jrj/project/business/BasicCode/SetUpRemarks.cpp            |  143 +
 jrj/project/business/BasicCode/AccountUnitMaint.cpp        |  140 +
 jrj/project/business/BasicCode/TestingCompanyList.cpp      |   33 
 jrj/project/business/BasicCode/Simple.Menu.Config.cpp      |  254 +
 jrj/project/business/BasicCode/brand.regtype.cpp           |  147 +
 jrj/project/business/BasicCode/CartermList.cpp             |  165 +
 jrj/project/business/BasicCode/SKUItem.select.cpp          |  126 
 jrj/project/business/BasicCode/ShipcompanyMaint.cpp        |  316 ++
 jrj/project/business/BasicCode/ExpressMaint.cpp            |  342 ++
 jrj/project/business/BasicCode/CustomerMarketList.cpp      |   29 
 jrj/project/business/BasicCode/SpecialDeductFeeList.cpp    |  144 +
 jrj/project/business/BasicCode/FreightExpenseType.cpp      |  161 +
 jrj/project/business/BasicCode/SKUTemplate.select.cpp      |  120 
 jrj/project/business/BasicCode/SourceRemark.cpp            |  143 +
 jrj/project/business/BasicCode/BrandInforList.cpp          |   29 
 jrj/project/business/BasicCode/SKUItem.cpp                 |  302 ++
 jrj/ext-jrj/ext-jrj.vcxproj                                |   36 
 jrj/project/business/BasicCode/PaymentTerm.list.cpp        |  126 
 37 files changed, 7,862 insertions(+), 0 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index c96b076..7461b2a 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -287,6 +287,42 @@
     <ClCompile Include="..\project\business\AR\maint.SettlementExchange.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\AccountUnitMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\AddUomGroup.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\basicfareTypeList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\brand.regtype.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\BrandInforList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\BrandInforMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\CartermList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ColorCardNew.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\CustomerMarketList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\CustomerMarketMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ExchangeRate.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ExpressList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ExpressMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\FCL.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ForwarderList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ForwarderMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\FreightExpenseType.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\PaymentTerm.list.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\PaymentTerm.maint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ProfitParam.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\QuickCode.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\QuickCode_Tree.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SetUpRemarks.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ShipcompanyList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\ShipcompanyMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\Simple.Menu.Config.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.categoryselect.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.select.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SKUTemplate.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SKUTemplate.select.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SourceRemark.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\SpecialDeductFeeList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\TestingCompanyList.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\TestingCompanyMaint.cpp" />
+    <ClCompile Include="..\project\business\BasicCode\TypeList.maint.supplier.cpp" />
     <ClCompile Include="..\project\business\Company\CompanyList.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
diff --git a/jrj/project/business/BasicCode/AccountUnitMaint.cpp b/jrj/project/business/BasicCode/AccountUnitMaint.cpp
new file mode 100644
index 0000000..8d8023f
--- /dev/null
+++ b/jrj/project/business/BasicCode/AccountUnitMaint.cpp
@@ -0,0 +1,140 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+
+unit trade 
+[
+	class AccountUnitMaintWin :  public xwin
+	{
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmAddRow")
+			{
+				dw_list.InsertRow(0);
+				return 1;
+			}
+			else if(comdid=="xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid=="xmSave")
+				return OnSave();
+			else if(comdid=="xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int OnSave()
+		{
+			xml x=new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
+			xaserverarg arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("content",x.GetXml());						
+			if (url::get("/sale/data/TradeFinance3/accountunit/update",arg.GetString(),x) != 1)
+			{
+				trace("error:"+x.GetXml());
+				alert("保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.GetXml());
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("保存出错2!");
+					return 0;				
+				}
+				win32::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			if (url::get("/sale/data/TradeFinance3/accountunit/list",arg.GetString(),x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/FinancialCode/template/AccountUnit");
+			dw_list.SetColumnState("TAUID",false);
+			
+			OnRetrieve();
+			
+			OnAttachEvent();	
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/AddUomGroup.cpp b/jrj/project/business/BasicCode/AddUomGroup.cpp
new file mode 100644
index 0000000..20fea8e
--- /dev/null
+++ b/jrj/project/business/BasicCode/AddUomGroup.cpp
@@ -0,0 +1,122 @@
+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]"
+
+unit vbusiness.xpage
+[
+	AddUomGroup is extend win__;
+	about AddUomGroup
+	[
+		control:
+		
+		method:
+		[
+
+			
+			int SetAgent()
+			{
+				return 1;
+			}
+			//焦点激活处理函数
+			int OnSetFocus(ref TEvent evt,int p)
+			{
+				int SetAgent();
+
+				//重置工具条
+				return 1;
+			}
+
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if (comdid=="cb_cancel")
+					CloseWindow();
+				else if(comdid=="cb_ok")
+				{
+					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();				
+				}
+				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())
+				{
+
+					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(),"辅助属性");						
+						}						
+					}
+				}
+				
+				return 1;
+			}
+		]
+		
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/BrandInforList.cpp b/jrj/project/business/BasicCode/BrandInforList.cpp
new file mode 100644
index 0000000..7beda87
--- /dev/null
+++ b/jrj/project/business/BasicCode/BrandInforList.cpp
@@ -0,0 +1,29 @@
+use "system.vl"
+use "win.vl"
+use "list.vl"
+unit vbusiness.entity
+[
+	BrandInforList is extend list;
+	about BrandInforList
+	[
+
+		
+		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
diff --git a/jrj/project/business/BasicCode/BrandInforMaint.cpp b/jrj/project/business/BasicCode/BrandInforMaint.cpp
new file mode 100644
index 0000000..a13f50f
--- /dev/null
+++ b/jrj/project/business/BasicCode/BrandInforMaint.cpp
@@ -0,0 +1,98 @@
+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)
+			{
+				//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(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);						
+					}				
+				}*/				
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CartermList.cpp b/jrj/project/business/BasicCode/CartermList.cpp
new file mode 100644
index 0000000..0e5c1d0
--- /dev/null
+++ b/jrj/project/business/BasicCode/CartermList.cpp
@@ -0,0 +1,165 @@
+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;
+			string m_QueryTxt;
+			msxml::IXMLDOMDocument m_configDoc;
+			static int dw_hWnd;			
+		]
+		
+		method:
+		[
+
+			int alert(string str)
+			{
+				//win__::MessageBox(this.GetHWND(),str,"提示22:",0);
+				TApp::alert(this,str);
+				return 0;
+			}		
+
+		
+			string 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,"PartyID",GetGuid());	
+				this.dw_list.SetItemString(rows,"ContactID",GetGuid());						
+				this.dw_list.SetItemString(rows,"PAStatus","1");
+				this.dw_list.SetItemString(rows,"PStatus","1");
+				this.dw_list.SetItemString(rows,"PCStatus","1");					
+				this.dw_list.SetItemString(rows,"Type","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,"PartyID",GetGuid());					
+				this.dw_list.SetItemString(row,"ContactID",GetGuid());						
+				this.dw_list.SetItemString(row,"PAStatus","1");
+				this.dw_list.SetItemString(row,"PStatus","1");
+				this.dw_list.SetItemString(row,"PCStatus","1");					
+				this.dw_list.SetItemString(row,"Type","7");					
+			}
+			
+			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 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()
+			{				
+				/*string no = this.dw_list.GetItemString(1,"CarTermNo");
+				if(no==""){
+					alert("请输入车队编码!");
+					return -1;
+				}	
+				string SName = this.dw_list.GetItemString(1,"Name");
+				if(SName==""){
+					alert("请输入车队名称!");
+					return -1;
+				}
+				string ContacterName = this.dw_list.GetItemString(1,"ContacterName");
+				if(ContacterName==""){
+					alert("请输入联系人名称!");
+					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("content",x.GetXml());						
+				arg.AddArg("dbmap","CarTerm.dbmap");		
+				if (getUrl("/sale/data/CarTerm/entity/carterm/save",arg.GetString(),x) != 1)
+				{
+					trace("error:"+x.GetXml());
+					alert("保存失败!");
+					return 0;
+				}						
+				else
+				{	
+					trace(x.GetXml());
+					if(x.GetXmlDoc().selectSingleNode("error"))
+					{
+						alert("保存出错2!");
+						return 0;
+					}					
+					alert("保存成功!");					
+					this.dw_list.ResetUpdateStatus();							
+				}
+				this.dw_list.Redraw();			
+				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 OnAttachEvent()
+			{
+				AttachEvent("WM_XCOMMAND",OnXCommand);			
+				return 0;
+			}
+			
+			int onload()
+			{			
+				OnAttachEvent();								
+				list::onload();
+				this.dw_list.SetReadOnly(false);	
+				return -1;
+			}
+					
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ColorCardNew.cpp b/jrj/project/business/BasicCode/ColorCardNew.cpp
new file mode 100644
index 0000000..f73a6c6
--- /dev/null
+++ b/jrj/project/business/BasicCode/ColorCardNew.cpp
@@ -0,0 +1,403 @@
+/*use "list.vd"
+use "xtreeview.vd"
+use "publiccode.vd"*/
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+unit trade 
+[
+class ColorCardNew : public listwin
+{
+	xdwgrid	dw_list;
+	xdwgrid	dw_detail;
+	bool 	ismodify;
+	xnode	m_agentNode;
+	string	m_agentCond;
+
+	int SetAgent()
+	{
+		string xfNodeAgentArea  = "agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		msxml::IXMLDOMElement xframeElement =  GetElement();
+		msxml::IXMLDOMNode agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+		if(agent)
+			SetAgentNodeContent(anode, agent.xml);
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(ref TEvent evt,int param)
+	{
+		SetAgent();
+
+		//重置工具条
+		return 1;
+	}
+	int ProcessFlowAction(string guid,string comdid)
+	{
+		//int pr = pr1;
+		//string action = comdid;//.mid(comdid.find("action:",0)+7,9999);
+		/*if(action == "bill.delete" || action == "bill.deleteEx")
+		{
+			if (MessageBox(GetHWND(),"是否确定删除记录!","提示1",1) == 2)  
+				return 1;
+		}*/
+		
+		xaserverarg arg0 = new xaserverarg ;
+		arg0.setNativePointer(arg0.CreateInstance());
+		//arg0.AddArg("Action", action,"xs:string");
+		arg0.AddArg("EntityName", "ColorCard","xs:string");
+		arg0.AddArg("EntityIDName", "ColorCardID","xs:string");
+		arg0.AddArg("EntityID", guid,"xs:string");
+		arg0.AddArg("FunctionCode", comdid,"xs:string");
+		xml x = new xml;
+		x.setNativePointer(xml::CreateInstance());
+
+		if(url::get("/sale/data/Role.config/sys/sql/action", arg0.GetString(), x) != 1)
+		{	
+			//ismodify=false;
+			//dw_list.SetReadOnly(ismodify);			
+			return -1;
+		}
+		string kk=x.GetXml();
+		if(kk.find("<root/>",0)>=0) 
+		{
+			//ismodify=true;
+			//dw_list.SetReadOnly(ismodify);	
+			return 1;
+		}
+		return -1;
+	}	
+		
+	int ModifyProcessAction(string guid,string comdid)
+	{
+		if(ProcessFlowAction(guid,comdid)>0)
+		{
+			ismodify=true;
+			dw_list.SetReadOnly(ismodify);	
+			return -1;
+		}
+		else
+		{
+			ismodify=false;
+			dw_list.SetReadOnly(ismodify);			
+			return -1;
+		}
+	}
+	int DeleteProcessAction(string guid,string comdid)
+	{
+		if(ProcessFlowAction(guid,comdid)>0)
+		{			
+			return -1; //没有权限
+		}
+		else
+		{
+			return 1; //有权限
+		}
+	}
+	
+	//根据ColorCardID加载Detail数据
+	int  OnRetrieveDetail(string ColorCardID)
+	{
+		xml x=new xml;
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg=new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());	
+
+		arg.AddArg("ColorCardID",ColorCardID);
+		if (url::get("ColorCard/entity/list1",arg.GetString(),x) != 1)
+		{
+			trace(x.GetXmlDoc().text);
+			return -1;
+		}
+		dw_detail.Retrieve(x);
+		dw_detail.Redraw();
+		dw_detail.SetReadOnly(ismodify);		
+		return 1;
+	}
+	
+	int OnPreSave()
+	{
+		if (dw_list)
+		{
+			string colorCardCName;
+			string colorCardName;
+			string orgID;
+			int i;
+			int row = dw_list.GetRowCount();
+			for (i=1; i<=row;i++)
+			{
+				colorCardCName=dw_list.GetItemString(i,"ColorCardCName",0)+"";
+				colorCardName=dw_list.GetItemString(i,"ColorCardName",0)+"";
+				orgID=dw_list.GetItemString(i,"OrgID",0)+"";
+				if (colorCardCName=="" || !colorCardCName)
+				{
+					alert("第"+i.toString()+"行色卡名称中文为空");
+					return -1;
+				}
+				if (colorCardName=="" || !colorCardName)
+				{
+					alert("第"+i.toString()+"行色卡名称为空");
+					return -1;
+				}
+				if (orgID=="" || !orgID)
+				{
+					alert("第"+i.toString()+"行关联组织为空");
+					return -1;
+				}
+			}
+		}
+	
+		return 1 ;
+	}
+	
+	//保存
+	int OnSave()
+	{
+		dw_list.AcceptText();
+		dw_detail.AcceptText();
+		int rec;
+		rec = OnPreSave();
+		if (rec == -1)	
+			return -1;
+		xml x= new xml;
+		x.setNativePointer(xml::CreateInstance());
+		dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());	
+		msxml::IXMLDOMElement e=  x.GetXmlDoc().selectSingleNode("root");
+		arg.AddArg("content",e.xml);							
+		arg.AddArg("dbmap","ColorCard.dbmap");
+		if (url::get("ColorCard/pref/colorcard.save",arg.GetString(),x) != 1)
+		{
+			trace("error:"+x.GetXml());
+			alert("保存失败!");
+			return 0;
+		}						
+		else
+		{	
+			alert("保存成功!");		
+			dw_list.ResetUpdateStatus();							
+		}
+		dw_list.Redraw();	
+	}
+	
+	//新增
+	int OnAdd()
+	{
+		dw_list.AcceptText();
+		int nrow=dw_list.InsertRow(0);
+		dw_list.ShowRowTo(nrow);
+		string tempguid = publiccode::GetGuid();
+		dw_list.SetItemString(nrow,"ColorCardID",tempguid);
+		OnRetrieveDetail(tempguid);
+	}
+	
+	//插入
+	int OnInsert()
+	{
+		dw_list.AcceptText();
+		int row = dw_list.GetRow();
+		if(row<1) return 0;
+		int nrow=dw_list.InsertRow(row);
+		string tempguid = publiccode::GetGuid();
+		dw_list.SetItemString(nrow,"ColorCardID",tempguid);
+		OnRetrieveDetail(tempguid);
+	}
+	
+	//删除
+	int OnDelete()
+	{
+		dw_list.AcceptText();					
+		int row = dw_list.GetRow();
+		if(row<1) return 0;
+		string id=dw_list.GetItemString(row,"ColorCardID");
+		if(DeleteProcessAction(id,"DeleteColorCard")<0)
+		{
+			alert("您没有权限删除该数据");
+			return -1;
+		}
+		if(id !="")
+		{
+			xml x=new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg("ColorCardID", id);
+			if(url::get("ColorCard/pref/beforedelete",arg.GetString(),x)!=1)
+			{
+				trace("error:"+x.GetXml());
+				alert("删除出错!");
+				return 0;
+			}
+			msxml::IXMLDOMElement e= x.GetXmlDoc().documentElement;
+			if(e.selectSingleNode("error")) 
+			{
+				alert(e.selectSingleNode("error").text);
+				return 0;
+			}					
+		}					
+		dw_list.DeleteRow(row); 		
+	}
+	
+	int OnAddRowDetail()
+	{
+		dw_detail.AcceptText();
+		int nrow=dw_detail.InsertRow(0);
+		string tempguid = publiccode::GetGuid();
+		dw_detail.SetItemString(dw_detail.GetRow(),"ColorCardID",dw_list.GetItemString(dw_list.GetRow(),"ColorCardID"));
+		dw_detail.SetItemString(dw_detail.GetRow(),"ColorID",tempguid);
+		//OnRetrieveDetail(tempguid);
+		dw_detail.ShowRowTo(nrow);
+		
+		return 1;
+	}
+	
+	int OnInsertRowDetail()
+	{
+		dw_detail.AcceptText();
+		int row = dw_detail.GetRow();
+		if(row<1) return 0;
+		int nrow=dw_detail.InsertRow(row);
+		string tempguid = publiccode::GetGuid();
+		dw_detail.SetItemString(dw_detail.GetRow(),"ColorCardID",dw_list.GetItemString(dw_list.GetRow(),"ColorCardID"));
+		dw_detail.SetItemString(dw_detail.GetRow(),"ColorID",tempguid);
+		
+		return 1;
+	}
+	
+	int OnDelRowDetail()
+	{
+		int row = dw_detail.GetRow();
+		int rowz = dw_list.GetRow();
+		if(row<1)return 0;
+		dw_detail.DeleteRow(row);
+		msxml::IXMLDOMElement ez= this.dw_list.GetRowElement(rowz);
+		xml xz=new xml;
+		xz.setNativePointer(xml::CreateInstance());				
+		dw_detail.DwUpdateAllToEx(xz.GetXmlDoc());	
+		if (ez.selectSingleNode("root"))		
+			ez.removeChild(ez.selectSingleNode("root"));
+		ez.appendChild(xz.GetXmlDoc().documentElement);
+		
+		return 1;
+	}
+	
+	//命令发布函数
+	int OnCmdDispatch(string comdid)
+	{
+		if(comdid=="save") OnSave();
+		else if(comdid=="add") OnAdd();
+		else if(comdid=="insert") OnInsert();
+		else if(comdid=="del") OnDelete();
+		else if(comdid=="addrowDetail") OnAddRowDetail();
+		else if(comdid=="insertrowDetail") OnInsertRowDetail();
+		else if(comdid=="deleterowDetail") OnDelRowDetail();
+		
+		return 1;
+	}
+	
+	//命令处理事件
+	int OnXCommand(ref TXCommandEvent evt,int param)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}
+	
+	//行改变事件
+	int OnListRowChanged(ref TNotifyEvent evt,int p)
+	{
+		dw_detail.AcceptText();					
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		dw_list.Redraw();					
+		msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
+		string ColorCardID = e.selectSingleNode("ColorCardID").text; 
+		OnRetrieveDetail(ColorCardID);
+		
+		return 1;	
+	}
+	
+	int OnDetailChanged(ref TNotifyEvent evt,int p)
+	{
+		int row = dw_list.GetRow();
+		msxml::IXMLDOMElement e= this.dw_list.GetRowElement(row);
+		xml x=new xml;
+		x.setNativePointer(xml::CreateInstance());				
+		dw_detail.DwUpdateAllToEx(x.GetXmlDoc());			
+		if (e.selectSingleNode("root"))		
+			e.removeChild(e.selectSingleNode("root"));
+		e.appendChild(x.GetXmlDoc().documentElement);
+		
+		return 0;
+	}
+	
+	int OnDwListClick(ref TNotifyEvent evt,int p)
+	{				
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		dw_list.Redraw();					
+		msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
+		string ColorCardID = e.selectSingleNode("ColorCardID").text;
+		ModifyProcessAction(ColorCardID,"ModifyColorCard");
+		
+		return 1;	
+	}
+	
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent("WM_XCOMMAND",OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent("WM_SETFOCUS",OnSetFocus);
+		//行改变事件
+		AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnListRowChanged);
+		AttachEvent("dw_detail","DWV_ITEMCHANGED",OnDetailChanged);	
+		//AttachEvent("dw_list","DWV_ITEMCHANGED",OnDetailChanged);	
+		AttachEvent("dw_list","DWV_CLICKED",OnDwListClick);
+		
+		return 1;
+	}
+	
+	int  OnRetrieve(string str)
+	{
+		xml x=new xml;
+		x.setNativePointer(xml::CreateInstance());
+		xaserverarg arg=new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());	
+		arg.AddArg("id",str);	
+		if (url::get("ColorCard/entity/list",arg.GetString(),x) != 1)
+		{
+			trace(x.GetXmlDoc().text);
+			return -1;
+		}				
+		//doc=x;
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+
+		OnAttachEvent();
+		
+		return 1;
+	}
+	
+	int onload()
+	{
+
+		dw_list = GetControl("dw_list");
+		dw_list.openUrl("产品设置.vface/template/ColorCard/list");	
+		
+		dw_detail = GetControl("dw_detail");
+		dw_detail.openUrl("产品设置.vface/template/ColorCard/listex");	
+		OnInitial();
+
+		OnRetrieve("FND_ColorCard");
+		
+		return 1;
+	}
+};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CustomerMarketList.cpp b/jrj/project/business/BasicCode/CustomerMarketList.cpp
new file mode 100644
index 0000000..c6843e4
--- /dev/null
+++ b/jrj/project/business/BasicCode/CustomerMarketList.cpp
@@ -0,0 +1,29 @@
+use "system.vl"
+use "win.vl"
+use "list.vl"
+unit vbusiness.entity
+[
+	CustomerMarketList is extend list;
+	about CustomerMarketList
+	[
+
+		
+		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
diff --git a/jrj/project/business/BasicCode/CustomerMarketMaint.cpp b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
new file mode 100644
index 0000000..136986c
--- /dev/null
+++ b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
@@ -0,0 +1,89 @@
+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);				
+					}	
+
+					if(e.selectSingleNode("orgname"))
+					{	
+						string orgname = e.selectSingleNode("orgname").text;
+						dw_base.SetItemDisplayString(1,"OrgID",orgname);						
+					}				
+				}				
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExchangeRate.cpp b/jrj/project/business/BasicCode/ExchangeRate.cpp
new file mode 100644
index 0000000..b2e0b61
--- /dev/null
+++ b/jrj/project/business/BasicCode/ExchangeRate.cpp
@@ -0,0 +1,212 @@
+	use "xcontrol.vframe.vbusiness.vd"
+	use "xbase.vframe.vbusiness.vd"
+	use "base.view.vd"
+
+	unit trade 
+	[
+		class ExchangeRateWin :  public xframe
+		{
+			xdwgrid	dw_list;
+			int hSignWin;
+			xnode	m_agentNode;	//Agent Condition
+
+			int SetAgent()
+			{
+				string xfNodeAgentArea  = "agentarea";
+				xnode anode = GetAgentNode(xfNodeAgentArea);
+				if(m_agentNode)
+				{
+					SetAgentNodeContent (anode,m_agentNode);
+				}
+				else
+				{
+					msxml::IXMLDOMElement xframeElement =  GetElement();
+					msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+					if(agent)
+					{
+						string s = agent.xml;
+						m_agentNode =  SetAgentNodeContent (anode,s);
+					}
+				}
+				return 1;
+			}
+
+			//焦点激活处理函数
+			int OnSetFocus(ref TEvent evt,int param)
+			{
+				//重置工具条
+				SetAgent();
+				return 1;
+			}
+
+			int OnSave()
+			{
+				xml x = new xml;
+				x.setNativePointer(xml::CreateInstance());
+				dw_list.AcceptText();
+				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
+				xml x0 = ViewObject::MakeXml();
+				x0.LoadXml("<data/>");
+				
+				msxml::IXMLDOMNodeList t = x.GetXmlDoc().selectNodes("data/Item[@update.modify='1' or @update.delete ='1']");
+				msxml::IXMLDOMElement e1= x0.GetXmlDoc().documentElement;
+				int len = t.length;
+				for(int i=0;i<len;i++)
+				{
+					e1.appendChild(t.item(i));
+				}
+				xaserverarg arg = ViewObject::MakeArg();
+				arg.AddArg("content",x0.GetXml());
+				trace(x0.GetXml());
+				if(url::get("/sale/data/expense3/update/ExchangeRate", arg.GetString(),x)!=1)
+				{
+					string error = x.GetXmlDoc().text;
+					alert("err:"+error);
+					return 1;
+				}
+				string str = x.GetXmlDoc().documentElement.getAttribute("text");
+				if(str == "true")
+				{
+					dw_list.ResetUpdateStatus();			
+					alert("保存成功!"); 
+				}else 
+				{
+					alert("保存失败!");
+				}
+				return 1;
+			}
+				
+					
+			//命令发布函数
+			int OnCmdDispatch(string comdid)
+			{
+				if(comdid=="xmAddRow")
+				{
+					string sdate = publiccode::GetCurrentDate();
+					string suserid = publiccode::GetUser().id;
+					string susername = publiccode::GetUser().name;
+					int row =dw_list.GetRowCount();
+					dw_list.InsertRow(0);
+					dw_list.SetItemString(row+1,"CreatorID",suserid);
+					dw_list.SetItemDisplayString(row+1,"CreatorID",susername);
+					dw_list.SetItemString(row+1,"CreateDate",sdate);
+					return 1;
+				}
+				else if(comdid=="xmDeleteRow")
+				{
+					dw_list.DeleteRow(0);
+					return 1;
+				}
+				else if (comdid == "xmSave")
+				{
+					OnSave();
+				}
+				else if (comdid == "xmRefresh")
+				{
+					OnRetrieve();
+				}
+				else if(comdid =="ToUpdate")
+				{
+					ToUpdate();
+				}
+				
+				return 0;
+			}
+				
+			
+			int ToUpdate()
+			{
+				string Months = dw_list.GetItemString(dw_list.GetRow(),"Months");
+				int MB_OKCANCEL = 1;
+				int IDOK  = 1;
+				int ret = win32::MessageBox(GetHWND(),"确认更新"+Months+"盈亏汇率?","提示",MB_OKCANCEL);
+				if(ret == IDOK)
+				{
+					xml x = ViewObject::RetrieveData("/sale/data/Expense3/ExchangeRateUpdateEx","Months",Months);
+					string status = x.GetXml();
+					if(status.find("ok") == 1)
+					{
+						alert("更新成功");
+					}else
+					{
+						alert("更新失败");
+					}
+				}
+				return 1;
+			}
+			
+			//触发鼠标离开后tran事件,通过查找某个参数得到对应的列			
+				int OnBaseItemChanged(ref TNotifyEvent evt,int p)
+			{
+				ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+				string colname=hdr.colname;
+				string value = hdr.data;
+				
+				string dwname = "dw_list";
+				if(value != "")
+				{
+					msxml::IXMLDOMNodeList nlist = GetElement().selectNodes("//*[@name='"+dwname+"']/trans[@for='"+colname+"']");
+					ViewObject::TransData(nlist, dw_list, hdr.row, colname, value);
+				}
+
+				return 1;
+			}
+				
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int param)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				//获取焦点事件,用于重置工具条
+				AttachEvent("WM_SETFOCUS",OnSetFocus);
+				AttachEvent("dw_list","DWV_ITEMCHANGED",OnBaseItemChanged);
+			}
+			
+			
+			int  OnRetrieve()
+			{
+				xml x = new xml;
+				x.setNativePointer(xml::CreateInstance());
+				xaserverarg arg = new xaserverarg;
+				arg.setNativePointer(arg.CreateInstance());	
+				arg.AddArg("QueryTxt",GetControl("search").GetText());
+				
+				
+				if (getUrl("/sale/data/Expense3/ExchangeRateList",arg.GetString(),x)!=1)
+				{
+					trace(x.GetXmlDoc().text);
+					return -1;
+				}else	
+				{
+					dw_list.Retrieve(x);
+					dw_list.Redraw();
+				}
+				return 1;
+			}
+		
+			int onload()
+			{
+				dw_list = GetControl("dw_list");
+				dw_list.openUrl("/sale/view/Expense3/ExchangeRate");
+				
+				
+				OnRetrieve();
+			
+				OnAttachEvent();	
+				
+				return 1;
+			}
+			
+			int onloaded()
+			{
+				SetAgent();
+				return 1;
+			}		
+		};
+	]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExpressList.cpp b/jrj/project/business/BasicCode/ExpressList.cpp
new file mode 100644
index 0000000..047b16d
--- /dev/null
+++ b/jrj/project/business/BasicCode/ExpressList.cpp
@@ -0,0 +1,34 @@
+use "system.vl"
+use "win.vl"
+use "list.vl"
+unit vbusiness.entity
+[
+	ExpressList is extend list;
+	about ExpressList
+	[
+
+		
+		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);
+
+					}
+
+					return 1;
+				}
+					
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExpressMaint.cpp b/jrj/project/business/BasicCode/ExpressMaint.cpp
new file mode 100644
index 0000000..e0402a7
--- /dev/null
+++ b/jrj/project/business/BasicCode/ExpressMaint.cpp
@@ -0,0 +1,342 @@
+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;
+			}
+
+			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);						
+				}
+					//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"));								
+							}	
+						
+
+
+					}
+				}
+				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()
+			{
+				dw_base = new xdwtable__;
+				dw_base.setNativePointer(this.GetControl("dw_base"));							
+				string SName = dw_base.GetItemString(1,"Name");
+				if(SName==""){
+					alert("请输入快递公司名称!");
+					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)
+				{
+					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();						
+				}
+				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)
+			{
+				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")
+				{
+					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()
+			{			
+				dw_base = new xdwtable__;
+				dw_base.setNativePointer(this.GetControl("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
new file mode 100644
index 0000000..100fe1a
--- /dev/null
+++ b/jrj/project/business/BasicCode/FCL.cpp
@@ -0,0 +1,345 @@
+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:
+		[		
+
+			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()
+			{
+				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()
+			{
+				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"))
+				{
+					string s=e.selectSingleNode("@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,"");
+					//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());					
+				}
+
+				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)
+			{
+				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();					
+				}	
+
+
+				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
diff --git a/jrj/project/business/BasicCode/ForwarderList.cpp b/jrj/project/business/BasicCode/ForwarderList.cpp
new file mode 100644
index 0000000..b38d13e
--- /dev/null
+++ b/jrj/project/business/BasicCode/ForwarderList.cpp
@@ -0,0 +1,136 @@
+use "system.vl"
+use "win.vl"
+use "list.vl"
+use "treeview.vm"
+use "dev:vm[gridpages.vm]"
+
+
+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)
+			{	
+
+
+				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)
+			{
+				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;	
+			}
+			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);
+
+					}
+
+					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
diff --git a/jrj/project/business/BasicCode/ForwarderMaint.cpp b/jrj/project/business/BasicCode/ForwarderMaint.cpp
new file mode 100644
index 0000000..d34b7ee
--- /dev/null
+++ b/jrj/project/business/BasicCode/ForwarderMaint.cpp
@@ -0,0 +1,461 @@
+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;
+
+			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,"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"));	
+						
+				}
+				else
+				{
+					setCellReadOnly();			
+				}					
+				return 0;
+			}					
+
+			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;
+			}
+
+			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);						
+				}
+					//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/PartyNo",arg.GetString(),x) != 1)
+				{
+					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("请输入货代名称!");
+					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)
+				{
+					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();						
+				}
+				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)
+			{
+				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")
+				{
+					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;
+					}
+					
+				}
+					//只能选一个主联系人
+				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();						
+			}
+
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/FreightExpenseType.cpp b/jrj/project/business/BasicCode/FreightExpenseType.cpp
new file mode 100644
index 0000000..d5a5753
--- /dev/null
+++ b/jrj/project/business/BasicCode/FreightExpenseType.cpp
@@ -0,0 +1,161 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+
+unit trade 
+[
+	class FreightExpenseTypeWin :  public xframe
+	{
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+		int	 	seqno;
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		int CalcSeqNo()
+		{
+			seqno = -1;
+			for(int i=1; i<dw_list.GetRowCount();i++)
+			{
+				string val = dw_list.GetItemString(i,"FieldName");
+				if(val.find("OtherFee")==0) continue;
+				if(val.find("Other")==0)
+				{
+					string no = val.mid(5,99999);
+					if(no.toInt()>seqno) seqno = no.toInt();
+				}
+			}
+			return seqno;
+		}
+				
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			dw_list.AcceptText();
+			xml x= new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc());
+			
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(xaserverarg::CreateInstance());
+			arg.AddArg("content",x.GetXml());
+			
+			//trace(x.GetXml());
+			
+			if(url::get("/sale/data/LogisticsCode/entity/freightexpensetype/update", arg.GetString(),x)!=1)
+			{
+				string error = x.GetXmlDoc().text;
+				alert("err:"+error);
+				return 1;
+			}
+			//alert(x.GetXml());
+			string str = x.GetXmlDoc().documentElement.getAttribute("text");
+			trace(x.GetXml());
+			if(str == "true")
+			{
+				dw_list.ResetUpdateStatus();
+				alert("保存成功!"); 
+			}else 
+			{
+				alert("保存失败!");
+			}
+			return 1;
+		}
+				
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmAddRow")
+			{
+				dw_list.InsertRow(0);
+				if(seqno==-1) CalcSeqNo();
+				seqno++;
+				dw_list.SetItemString(dw_list.GetRowCount(),"FieldName", "Other"+seqno.toString());
+				return 1;
+			}
+			else if(comdid=="xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid=="xmSave")
+			{
+				return OnSave();
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			if (getUrl("/sale/data/LogisticsCode/entity/freightexpensetype/list","",x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/LogisticsCode/template/freightexpensetype/list");
+			dw_list.SetColumnState("ID",false);
+			OnAttachEvent();	
+			seqno = -1;
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			OnRetrieve();
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/PaymentTerm.list.cpp b/jrj/project/business/BasicCode/PaymentTerm.list.cpp
new file mode 100644
index 0000000..c52fd7d
--- /dev/null
+++ b/jrj/project/business/BasicCode/PaymentTerm.list.cpp
@@ -0,0 +1,126 @@
+use "list.vd"
+use "xtreeview.vd"
+use "xwin.vd"
+class PaymentTermlist111 : public list
+{
+	//xdwgrid	dw_list; 
+	int OnDBClick(ref TNotifyEvent evt,int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		int row = hdr.row;
+		//alert(row.toString());
+		msxml::IXMLDOMElement e = dw_list.GetRowElement(row);
+		string id = e.selectSingleNode("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")
+		{
+			alert("OK");
+			list::onloaded();
+		}				
+		return 1;
+	}	
+	int OnDelete()
+	{
+		int row = this.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);
+		//alert(termid);
+		xml x1 = new xml;
+		x1.setNativePointer(x1.CreateInstance());
+		if (url::post("/sale/data/PaymentTerm/entity/delete",arg.GetString(),x1) != 1)
+		{
+			string error = x1.GetXmlDoc().text;
+			trace(error);
+		}
+		else
+		{
+			//error = x1.GetXmlDoc().text;
+			//alert(error);
+			MessageBox(GetHWND(),"删除成功!","提示",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);
+		return 0;
+	}
+	int OnOpen()
+	{
+		xaserverarg arg = new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		int row = dw_list.GetRow();
+		if (row < 1) 
+		{
+			xwin::MessageBox(GetHWND(),"请选中要修改的行!","提示",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);
+	
+	}
+	int OnRefresh()
+	{
+		list::onloaded();
+		return 0;
+	}
+	//按钮事件
+	int OnCmdDispatch(string 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();		
+		return 0;
+	}	
+	int OnXCommand(ref TXCommandEvent evt,int p)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}	
+	//命令发布函数
+	int OnAttachEvent()
+	{
+		AttachEvent("WM_XCOMMAND",OnXCommand);
+		//AttachEvent("WM_SETFOCUS",OnSetFocus);
+
+		//AttachEvent("dw_list","DWV_ROWFOCUSCHANGED",OnRowChanged);
+		AttachEvent("dw_list","DWV_DOUBLECLICKED",OnDBClick);
+		return 1;
+	}
+	int onload()
+	{
+		
+		list::onload();
+		OnAttachEvent();
+	}
+	
+	int onloaded()
+	{
+		//OnRetrieve();
+		//alert("12");
+		list::onloaded();
+			
+			
+		return -1; 
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/PaymentTerm.maint.cpp b/jrj/project/business/BasicCode/PaymentTerm.maint.cpp
new file mode 100644
index 0000000..678ac29
--- /dev/null
+++ b/jrj/project/business/BasicCode/PaymentTerm.maint.cpp
@@ -0,0 +1,415 @@
+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
+{
+	xdwtable dw_base;
+	xdwtable	dw_p;
+	xcell dw_cell;
+	string sCryno;
+	int OnAddrow()
+	{
+		dw_p = dw_base.FindDwTable("line");
+		int i;
+		double dDueAmount = 0;
+		double dPercnet = 100;
+		for (i = 1 ; i <= dw_p.GetRowCount();i++)
+		{
+			dDueAmount = dw_p.GetItemDouble(i,"DueAmount");
+			if (dDueAmount > 0)
+				break;
+			dPercnet = dPercnet - dw_p.GetItemDouble(i,"DuePercent");
+		}
+		int irow = dw_p.InsertRow(0);
+		dw_p.SetItemString(irow,"SeqNo",irow.toString());
+		if (dDueAmount <= 0)
+			dw_p.SetItemDouble(irow,"DuePercent",dPercnet);
+		
+		return 1;
+	}
+	int OnDeleterow()
+	{
+		dw_p = dw_base.FindDwTable("line");
+		int row2 = dw_p.GetRow();
+		if (row2 < 1) return 0;
+		dw_p.DeleteRow(row2);
+
+		return 1;
+	}
+	string OnCreateTxt()
+	{
+		//dw_1.AcceptText(); //不能加会报错
+		int irow;
+		//int icnt = dw_1.GetRowCount();
+		dw_p = dw_base.FindDwTable("line");
+		int icnt = dw_p.GetRowCount();
+		if (icnt < 1) return "";
+		string 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"); //金额
+			
+			if (!sPaymentMethod || sPaymentMethod == "")
+				sTxt = sTxt + "";
+			if (!sDueDays || sDueDays == "")
+				sTxt = sTxt + "";
+			else
+			{
+				if (sDueDays == "-1") sDueDays = " IN ADVANCE";
+				else if (sDueDays == "0") sDueDays = " AT SIGHT";
+				else 
+				{
+					if (sPaymentMethod == "T/T")
+						sDueDays = " WITHIN "+sDueDays + " DAYS AFTER SHIPMENT";
+					else
+						sDueDays = " AT "+sDueDays + " DAYS";
+				}
+				
+				if (!sDuePercent || sDuePercent == "")
+				{
+					if (!sDueAmount || sDueAmount == "")
+						sTxt = sTxt + "";
+					else
+					{
+						
+						sTxt = sTxt + sCryno + " " + sDueAmount + " " + sPaymentMethod + sDueDays + ";";
+					}
+				}
+				else
+				{
+					if (sDuePercent.find(".",0) >= 0)
+					{
+						while (sDuePercent.right(1) == "0")
+						{
+							sDuePercent = sDuePercent.left(sDuePercent.length() - 1);
+						}
+						if (sDuePercent.right(1) == ".")
+							sDuePercent = sDuePercent.left(sDuePercent.length() - 1);
+					}
+				
+					sTxt = sTxt + sDuePercent + "% " + sPaymentMethod+ sDueDays + ";";
+				}
+			}
+		}
+		
+		sTxt = sTxt.mid(0,sTxt.length() - 1);
+		if (sTxt != "")
+			sTxt = sTxt + ".";
+
+		return sTxt;
+	}
+	int OnOk()
+	{
+		dw_base.AcceptText();
+		//判断是否有必输值为空
+		dw_p = dw_base.FindDwTable("line");
+		double dPercnet = 0;
+		double dAmount = 0;
+		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");
+				dPercnet = dPercnet + sDuePercent.toDouble();
+				string sDueAmount = dw_p.GetItemString(i,"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 (sPaymentMethod == "")
+					{
+						alert("支付方式不能为空!");
+						return 0;
+					}
+					if (sDueDays == "")
+					{
+						alert("期限不能为空!");
+						return 0;
+					}
+
+				}
+			}
+		}
+		
+		//百分比校验
+		if (dw_p.GetRowCount() <= 1 && sChargeAll == "")
+		{}
+		else
+		{
+			if (dPercnet != 100)
+			{
+				if (dAmount <= 0)
+				{
+					alert("比率不等于100!");
+					return 0;
+				}
+			}
+		}
+		
+		string sTxt = OnCreateTxt();
+		dw_base.SetItemString(1,"PaymentTermEx",sTxt);
+
+		//CloseWindow();
+		return 1;
+	}
+	int OnItemChanged(ref TNotifyEvent evt,int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		string colname=hdr.colname;
+		string value = hdr.data;
+		int row = hdr.row;
+		
+		if (colname == "DueDays")
+		{
+			xdwtable dw;
+			dw = dw_base.FindDwTable("line");
+			
+			if (dw)
+			{
+				string sPaymentMethod = dw.GetItemString(row,"PaymentMethod");
+				if (value == "0")
+				{
+					if (sPaymentMethod == "T/T")
+					{
+						//alert("此支付方式期限不能为 0 (AT SIGHT)");
+						//return -1;
+					}
+				}
+				else if (value == "-1")
+				{
+					if (sPaymentMethod != "T/T")
+					{
+						alert("此支付方式期限不能为 -1(IN ADVANCE)");
+						return -1;
+					}
+				}
+			}
+		
+		}
+		//生成支付条款文本
+		if (colname == "PaymentMethod" || colname == "DueDays" || colname == "DuePercent" || colname == "DueAmount")
+		{
+			string sTxt = OnCreateTxt();
+
+			dw_base.SetItemString(1,"Description",sTxt);
+		}
+		
+		return 1;
+	}
+	int OnClick(ref TNotifyEvent evt,int p)
+	{
+		ref DWNMHDR  hdr = trust(evt.pnmh as ref DWNMHDR);
+		string value = hdr.data;
+		string colname = hdr.colname;
+		int row = hdr.row;
+		xaserverarg arg=new xaserverarg;
+		arg.setNativePointer(arg.CreateInstance());
+		//alert(row.toString());
+		xdwtable dw;
+		dw = dw_base.FindDwTable("line");
+		//alert(colname);
+		if (dw)
+		{
+			if (colname == "DuePercent")
+			{
+				int i;
+				int icnt = dw.GetRowCount();
+				if (icnt < 1)
+					return 0;
+				double dDueAmount = 0;
+				for (i = 1 ; i <= icnt ; i++)
+				{
+					dDueAmount = dw.GetItemDouble(i,"DueAmount");
+					if (dDueAmount > 0)
+						break;
+				}
+				dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
+				if (dDueAmount > 0)
+				{
+					dw.SetColumnProp("DuePercent","cellprotect","保护");//保护中文规格
+				}
+				else
+				{
+					dw.SetColumnProp("DuePercent","cellprotect","不保护");//保护中文规格
+				}
+					
+			}
+			
+			if (colname == "DueAmount")
+			{
+				int j;
+				int jcnt = dw.GetRowCount();
+				if (jcnt < 1)
+					return 0;
+				double dDuePercent = 0;
+				for (j = 1 ; j <= jcnt ; j++)
+				{
+					dDuePercent = dw.GetItemDouble(j,"DuePercent");
+					if (dDuePercent > 0)
+						break;
+				}
+				if (dDuePercent > 0)
+				{
+					dw.SetColumnProp("DueAmount","cellprotect","保护");//保护中文规格
+				}
+				else
+				{
+					dw.SetColumnProp("DueAmount","cellprotect","不保护");//保护中文规格
+				}
+			}
+			
+		}
+		
+		return 1;
+	}
+		
+	//保存事件
+	int OnSave()
+	{
+		if(OnOk()<1)return 0;
+		dw_base = GetControl("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");
+		//return 0;
+		if (getUrl("/sale/data/PaymentTerm/entity/company/save",arg.GetString(),x) != 1)
+		{
+			alert("保存失败!");
+			return 0;
+		}						
+		else
+		{	
+			//alert(x.GetXml());
+			if(x.GetXmlDoc().selectSingleNode("error"))
+			{
+				alert("保存出错2!");
+				return 0;				
+			}
+			arg.AddArg("ret","Ok");
+			xwin::MessageBox(GetHWND(),"保存成功!","提示",0);	
+			//alert("保存成功");
+			dw_base.ResetUpdateStatus();	
+			//dw_bank.ResetUpdateStatus();	
+			//xwin::SendMessage(parenthwnd, 0x401, "maintsave", 0);//通知list窗口更新数据
+		}
+		//alert("保存成功");
+		dw_base.Redraw();	
+		//dw_bank.Redraw();	
+		CloseWindow();
+		return 0;
+	}
+			
+	int OnCmdDispatch(string 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();
+		return 1;
+	}
+
+	//按钮事件
+	int OnXCommand(ref TXCommandEvent evt,int p)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//按钮事件
+		AttachEvent("WM_XCOMMAND",OnXCommand);
+		//获取焦点事件,用于重置工具条
+		//AttachEvent("WM_SETFOCUS",OnSetFocus);
+		AttachEvent("dw_base","DWV_ITEMCHANGED",OnItemChanged);
+		AttachEvent("dw_base","DWV_CLICKED",OnClick);
+	}
+	int OnRetrieve()
+	{
+		if(GetParam())
+		{
+			int p = GetParam();
+			xaserverarg args = new xaserverarg;
+			args.setNativePointer(p);
+			string id = args.GetArgString("EntityID");
+			//alert(id);
+			if(id=="new")
+			{
+				
+				//OnAddNew();
+			}
+			else
+			{
+				xml x = new xml;
+				x.setNativePointer(xml::CreateInstance());
+				if(getUrl("/sale/data/PaymentTerm/entity/base12", args.GetString(), x) != 1)
+				{
+					alert("错误");
+					return -1;
+				}
+				//alert(x.GetXml());
+				dw_base.Retrieve(x);
+				//dw_bank.Retrieve(x);
+				dw_base.Redraw();
+				//dw_bank.Redraw();
+			}
+		}
+		return 1;
+	}
+
+	int onload()
+	{
+		//maint::onload();
+		//maint::onloaded();
+		dw_base = GetControl("dw_base");
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
+		dw_base.openUrl("/sale/view/Payment/template/Payment/maint");
+		//alert("1233");
+		OnRetrieve();
+		OnAttachEvent();
+		//dw_base = GetControl("dw_base");
+		
+	}
+	
+	int onloaded()
+	{	
+		//maint::onloaded();
+		//alert("response");
+		//dw_base = GetControl("dw_base");
+		//dw_cell = new xcell;
+		//dw_cell.setNativePointer(dw_base.QueryItem("ixcell"));
+		return -1; 
+	}
+	
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ProfitParam.cpp b/jrj/project/business/BasicCode/ProfitParam.cpp
new file mode 100644
index 0000000..a52bf6e
--- /dev/null
+++ b/jrj/project/business/BasicCode/ProfitParam.cpp
@@ -0,0 +1,126 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+use "base.view.vd"
+
+unit trade 
+[
+	class ProfitParamList :  public frame
+	{
+		xdwgrid	dw_list;
+
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+		int OnSave()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.AcceptText();
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(xaserverarg::CreateInstance());
+			arg.AddArg("content",x.GetXml());
+			if(url::get("/sale/data/Gdn/update/ProParamUpdate", arg.GetString(),x)!=1)
+			{
+				string error = x.GetXmlDoc().text;
+				alert("err:"+error);
+				return 1;
+			}
+			string str = x.GetXmlDoc().documentElement.getAttribute("text");
+			if(str == "true")
+			{
+				dw_list.ResetUpdateStatus();
+				dw_list.Redraw();
+				alert("保存成功!"); 
+			}else 
+			{
+				alert("保存失败!");
+			}
+		}
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid == "xmsave")
+			{
+				OnSave();
+			}
+			else if(comdid == "xmrefresh")
+			{
+				OnRetrieve();
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x = ViewObject::RetrieveData("/sale/data/Gdn/profit/profitParamList");
+			if(x)
+			{
+				//alert(x.GetXml());
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			OnAttachEvent();	
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/VATNotify/template/profitparam/list");
+			
+			OnRetrieve();
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/QuickCode.cpp b/jrj/project/business/BasicCode/QuickCode.cpp
new file mode 100644
index 0000000..456f4fe
--- /dev/null
+++ b/jrj/project/business/BasicCode/QuickCode.cpp
@@ -0,0 +1,676 @@
+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)
+			{
+				//win__::MessageBox(this.GetHWND(),str,"提示:",0);
+				TApp::alert(this,str);
+				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;
+			}
+			
+			int OnCmdDispatch(string comdid)
+			{
+
+				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")
+				{
+					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("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);
+				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);			
+				}
+				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);							
+		
+			}
+			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;
+				}	
+
+				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>";
+
+
+					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;
+				}	
+
+				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>";
+
+
+					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;
+				}	
+
+				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()
+			{
+				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;
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/QuickCode_Tree.cpp b/jrj/project/business/BasicCode/QuickCode_Tree.cpp
new file mode 100644
index 0000000..cd40c87
--- /dev/null
+++ b/jrj/project/business/BasicCode/QuickCode_Tree.cpp
@@ -0,0 +1,690 @@
+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)
+			{
+				TApp::alert(this,str);
+				//win__::MessageBox(this.GetHWND(),str,"提示:",0);
+				return 0;
+			}
+			int SetAgent()
+			{
+				string xfNodeAgentArea  = "agentarea";
+				xnode__ anode = new xnode__;
+				anode.setNativePointer(GetAgentNode(xfNodeAgentArea));
+				var xframeElement =  win__::GetElement();
+				var agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]");
+				if(agent)
+				{
+					string s = agent.xml+"";
+					SetAgentNodeContent (anode,s);
+				}
+				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)
+				{
+					trace(x.GetXmlDoc().text);
+					return -1;
+				}*/
+				if (url::get("QuickCode/entity/listaddtree",arg.GetString(),x) != 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();				
+				}
+				else
+				{	
+					dw_list.Retrieve(x);
+					dw_list.Redraw();				
+				}	
+
+				return 1;
+			}				
+			int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+			{
+				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
+				{
+					c_type = treeview__::GetItemLabel(wid,hitem);
+
+				}
+				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 1;
+			}
+			int deluomfolder()
+			{	
+				
+				int wid = tv_1.GetId();
+				int hitem=treeview__::GetSelectedItem(wid);
+				if (hitem<1)
+				{
+					alert("请选择需要删除的组名");
+					return 0;
+				}					
+				else
+				{
+
+					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()
+			{
+				return dw_list;					
+			}
+			int GridSearch()
+			{
+				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();
+					}
+				}
+				return 0;
+			}							
+			int OnCmdDispatch(string comdid)
+			{
+				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);
+				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);//鼠标右键								
+			}
+
+				
+			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+"']");
+				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()
+			{
+
+		
+				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);				
+
+				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
diff --git a/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp b/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp
new file mode 100644
index 0000000..aa3bcc1
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUItem.categoryselect.cpp
@@ -0,0 +1,216 @@
+use"lang.vl"
+use "win.vl"
+use "treeview.vm"
+use "file.vl"
+use "dev:vm[xdwtable.vm]"
+
+unit vbusiness.vpage
+[
+	SKUItemcategoryselect is extend TProduct;
+	about SKUItemcategoryselect
+	[
+		field:
+			xdwtable__  dw_category;					
+		method:
+		[
+			treeview__		tv_gs;	
+			//命令发布函数
+			string GetPath(int tv, int h)
+			{
+				string 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);
+				}
+				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)
+				{
+					msxml::IXMLDOMElement e = treeview__::GetItemData(tv_gs.GetId(),hItem);
+					string id = e.selectSingleNode("CategoryID").text;
+					string Name =GetPath(tv_gs.GetId(), hItem);
+					trace(Name);
+					if(dw.GetItemString(1,"CategoryID")=="")
+					{	
+						dw.ItemChangeTo(1,"CategoryID",id);
+						dw.ItemChangeTo(1,"Category",Name);						
+					}
+					else
+					{
+						int n=dw.InsertRow(0);							
+						dw.ItemChangeTo(n,"CategoryID",id);
+						dw.ItemChangeTo(n,"Category",Name);						
+					}	
+	
+			
+				}
+
+				int cItem = treeview__::GetChildItem(tv_gs.GetId(), hItem);
+				if(cItem > 0)
+				{
+					xunhuan(pItem,cItem);
+				}
+				int nItem = treeview__::GetNextItem(tv_gs.GetId(), hItem);
+				if(nItem > 0)
+				{
+					xunhuan(pItem,nItem);
+				}
+				return 1;
+			}				
+			int OnCmdDispatch(string comdid)
+			{
+				if(comdid=="ok")
+				{
+					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);
+						trace(label);
+						xunhuan(hitem, treeview__::GetChildItem(tv_gs.GetId(), treeview__::GetRootItem(tv_gs.GetId())));
+						win__::CloseWindow();
+					}
+					return 1;
+				}
+				if(comdid=="close") 
+					win__::CloseWindow();
+				return 0;
+			}
+			
+			int OnCmdDispatch0(string comdid)
+			{
+				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)
+				{
+					msxml::IXMLDOMElement e=treeview__::GetItemData(tv_gs.GetId(),xitem);
+					
+					string sHasChild=e.selectSingleNode("@HasChild").text;
+
+					if(treeview__::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild=="1")
+					{
+						alert("提示:请选择最后一级类别!");
+						return 0;
+					}
+			
+					string ID = e.selectSingleNode("CategoryID").text;
+					string CName = e.selectSingleNode("CName").text;
+					trace(CName);
+					string ruler;
+					if(e.selectSingleNode("SpecRule"))
+						ruler = e.selectSingleNode("SpecRule").text;
+					else
+						ruler ="";
+					arg.AddArg("CategoryID",ID);
+					arg.AddArg("CName",CName);
+					arg.AddArg("SpecRule",ruler);
+					
+				}
+				win__::CloseWindow();
+				return 0;
+			}
+			
+			//命令处理事件
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			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);
+
+					//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);
+						//if(xaserver__::ExecXQuery(GetServerUrl(),"[ItemCategoryEx.xq]",arg.GetString(),x)!=1)
+						if(url::get(GetEntityName(1)+"/entity/category",arg.GetString(),x)!=1)
+						{
+							trace(x.GetXml());
+							return 0;
+						}
+						//trace(x.GetXml());
+						var list=x.GetXmlDoc().selectNodes("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");	
+							//trace(HasChild, kitem);
+							if (HasChild=="1")
+								treeview__::SetItemChild1(tv_gs.GetId(), kitem,1);
+						}			
+					}
+				}	
+				return 1;
+			}
+				
+			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);
+				CreateSubTree(hroot);
+				treeview__::ExpandItemEx(tv_gs.GetId(),hroot);
+				return 1;
+			}								
+
+			int OnTreeExpanding(ref TNotifyEvent evt,int p)	{
+				ref NMTREEVIEW nmtv = evt.pnmh;
+				int sitem = nmtv.itemNew.hItem;
+				CreateSubTree(sitem);
+				return 1;
+				
+			}
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent("WM_XCOMMAND",OnXCommand);
+				//获得树的展开事件
+				AttachEvent("tv_gs", "TVN_ITEMEXPANDING",OnTreeExpanding);
+			}
+			int onload()
+			{
+				if (GetParam())
+				{
+					xaserverarg__ arg1=GetParam();
+					dw_category = new xdwtable__;
+					dw_category.setNativePointer(arg1.GetArgString("dw_category").toInt());
+				}			
+				tv_gs = new treeview__;
+				tv_gs.setNativePointer(GetControl("tv_gs"));					
+				CreateRootTree();
+				OnAttachEvent();
+				return 1;
+			}			
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUItem.cpp b/jrj/project/business/BasicCode/SKUItem.cpp
new file mode 100644
index 0000000..01ce4d8
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUItem.cpp
@@ -0,0 +1,302 @@
+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()
+			{
+				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 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();
+				}
+				return 1;
+			}
+
+			int OnTreeSelChanged(ref TNotifyEvent evt,int p){
+				ref NMTREEVIEW nmtv = evt.pnmh;
+				int sitem = nmtv.itemNew.hItem;
+
+				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 = "";
+
+				OnReTrieve();
+				xutil__::RestoreCursor(hCursor);
+				return 1;
+			}
+
+			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);
+
+				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.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;
+			}
+
+			int OnDeleteRow()
+			{			
+				int row = dw_list.GetRow();
+				if(row<0 || row>dw_list.GetRowCount()) return 0;			
+				dw_list.DeleteRow(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");	
+
+				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
new file mode 100644
index 0000000..273a52a
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUItem.select.cpp
@@ -0,0 +1,126 @@
+use "dev:code[SKUItem.vx]"
+
+unit vbusiness.vpage
+[
+	SKUItemImport is extend SKUItem;
+	about SKUItemImport
+	[
+		field:
+			xdwgrid__	dw_list;
+			treeview__		tv_1;
+			xdwtable__  dw_maint;			
+		method:
+		[
+
+			string jxParam(string p, string n)
+			{
+				if(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) - 1);
+						return ""+value;
+						i += 1;
+					}
+				}		
+				return "";
+			}		
+			int OnSelectAll()
+			{
+				if(this.dw_list.GetRowCount() > 0 )
+					this.dw_list.SelectRow(1,true);
+
+				this.dw_list.SelectRow(0,true);
+				this.dw_list.Redraw();
+				return 1;
+			}
+			
+			int OnSelectNo()
+			{
+				this.dw_list.SelectRow(0,false);
+				this.dw_list.Redraw();
+				return 1;
+			}
+			
+			int OnOk()
+			{
+				
+				xdwtable__ dw = new xdwtable__;
+				dw.setNativePointer(dw_maint.FindDwTable("Item",0));				
+
+				int row = SKUItem::dw_list.GetNextSelectRow(1);
+				if (row<1)
+				{
+					alert("请选择项目名称!");
+					return 1;
+				}					
+
+				while (row>0)
+				{	
+					
+					msxml::IXMLDOMElement e =SKUItem::dw_list.GetRowElement(row);			
+					string ItemName = e.selectSingleNode("ItemName").text+"";
+					//trace(ItemName);
+					if(dw.GetItemString(1,"ItemName")=="")
+					{
+						dw.SetItemString(1,"SeqNo","1");						
+						dw.ItemChangeTo(1,"ItemName",ItemName);				
+					}
+					else
+					{
+						int n=dw.InsertRow(0);
+						dw.SetItemString(n,"SeqNo",n.ToString());						
+						dw.ItemChangeTo(n,"ItemName",ItemName);						
+					}		
+					row = SKUItem::dw_list.GetNextSelectRow(row +1);					
+				}
+				CloseWindow();
+				return 1;
+			}
+			
+			int OnCancel()
+			{
+				CloseWindow();	
+				return 1;
+			}
+			int OnDoubleClicked(ref TNotifyEvent evt,int p)
+			{	
+				OnOk();	
+				return 1;
+			}			
+				
+			int OnCmdDispatch(string 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();						
+				return 0;
+			}
+			
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int onload()
+			{
+				if (GetParam())
+				{
+					xaserverarg__ arg1=GetParam();
+					dw_maint = new xdwtable__;
+					dw_maint.setNativePointer(arg1.GetArgString("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);//行双击				
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUTemplate.cpp b/jrj/project/business/BasicCode/SKUTemplate.cpp
new file mode 100644
index 0000000..235c0dc
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUTemplate.cpp
@@ -0,0 +1,419 @@
+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"
+
+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;
+			}
+
+			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)
+			{
+
+				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()
+			{
+				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();
+				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()
+			{
+				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;
+			}
+			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()
+			{
+				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;
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUTemplate.select.cpp b/jrj/project/business/BasicCode/SKUTemplate.select.cpp
new file mode 100644
index 0000000..fd1794c
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUTemplate.select.cpp
@@ -0,0 +1,120 @@
+use "dev:code[SKUTemplate.vx]"
+
+unit vbusiness.vpage
+[
+	SKUTemplateImport is extend SKUTemplate;
+	about SKUTemplateImport
+	[
+		field:
+			xdwgrid__	dw_list;
+			xdwtable__  dw_other;
+			xdwtable__  dw_prop; 					
+		method:
+		[
+
+			string jxParam(string p, string n)
+			{
+				if(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) - 1);
+						return ""+value;
+						i += 1;
+					}
+				}		
+				return "";
+			}		
+			int OnSelectAll()
+			{
+				if(this.dw_list.GetRowCount() > 0 )
+					this.dw_list.SelectRow(1,true);
+
+				this.dw_list.SelectRow(0,true);
+				this.dw_list.Redraw();
+				return 1;
+			}
+			
+			int OnSelectNo()
+			{
+				this.dw_list.SelectRow(0,false);
+				this.dw_list.Redraw();
+				return 1;
+			}
+			
+			int OnOk()
+			{	
+				dw_other.openUrl("/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("请选择模板!");
+					return 1;
+				}					
+					
+				msxml::IXMLDOMElement e =SKUTemplate::dw_list.GetRowElement(row);			
+				string TemplateContent = e.selectSingleNode("TemplateContent").text+"";
+				string TemplateID = e.selectSingleNode("TemplateID").text+"";				
+				//trace(ItemName);
+				xml__ x = new xml__;
+				x.setNativePointer(x.CreateInstance());
+				x.LoadXml(TemplateContent);					
+				dw_other.Retrieve(x);
+				dw_prop.SetItemString(1,"TemplateID",TemplateID);				
+				CloseWindow();
+				return 1;
+			}
+			
+			int OnCancel()
+			{
+				CloseWindow();	
+				return 1;
+			}
+			int OnDoubleClicked(ref TNotifyEvent evt,int p)
+			{	
+				OnOk();	
+				return 1;
+			}			
+				
+			int OnCmdDispatch(string 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();						
+				return 0;
+			}
+			
+			int OnXCommand(ref TXCommandEvent evt,int p)
+			{
+				return OnCmdDispatch(evt.pStrID);
+			}
+			
+			int onload()
+			{
+				if (GetParam())
+				{
+					int iArgs = GetParam();
+					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());				
+				}
+				//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);//行双击				
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SetUpRemarks.cpp b/jrj/project/business/BasicCode/SetUpRemarks.cpp
new file mode 100644
index 0000000..b767709
--- /dev/null
+++ b/jrj/project/business/BasicCode/SetUpRemarks.cpp
@@ -0,0 +1,143 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+
+unit trade 
+[
+	class SetUpRemarks :  public xwin
+	{
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				dw_list.SetItemString(row+1,"State","Y");
+				return 1;
+			}
+			else if(comdid=="xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid=="xmSave")
+				return OnSave();
+			else if(comdid=="xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int OnSave()
+		{
+			xml x=new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
+			xaserverarg arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("content",x.GetXml());						
+			if (url::get("/sale/data/TradeFinance3/SetUpRemarks/update",arg.GetString(),x) != 1)
+			{
+				trace("error:"+x.GetXml());
+				alert("保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.GetXml());
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("保存出错2!");
+					return 0;				
+				}
+				win32::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			if (url::get("/sale/data/TradeFinance3/SetUpRemarks/list",arg.GetString(),x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/FinancialCode/template/SetUpRemarksList");
+			dw_list.SetColumnState("ID",false);
+			
+			OnRetrieve();
+			
+			OnAttachEvent();	
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ShipcompanyList.cpp b/jrj/project/business/BasicCode/ShipcompanyList.cpp
new file mode 100644
index 0000000..2a0a376
--- /dev/null
+++ b/jrj/project/business/BasicCode/ShipcompanyList.cpp
@@ -0,0 +1,33 @@
+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);
+
+					}
+
+					return 1;
+				}
+					
+		]
+
+
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ShipcompanyMaint.cpp b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
new file mode 100644
index 0000000..390b1d9
--- /dev/null
+++ b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
@@ -0,0 +1,316 @@
+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)
+			{
+				//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());										
+				}
+				else
+				{
+					setCellReadOnly();			
+				}	
+				return 0;
+			}					
+
+			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;
+			}
+
+			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("请输入船公司名称!");
+					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)
+				{
+					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();							
+				}
+				dw_base.Redraw();
+				//m_dels="";				
+				return 0;
+			}					
+			int OnCmdDispatch(string comdid)
+			{
+				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();
+				}					
+				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;
+
+				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
new file mode 100644
index 0000000..65f8683
--- /dev/null
+++ b/jrj/project/business/BasicCode/Simple.Menu.Config.cpp
@@ -0,0 +1,254 @@
+use "frame.vd"
+use "publiccode.vd"
+use "xcontrol.vd"
+use "xtreeview.vd"
+
+class SimpleMenuConfig : public frame
+{
+	xdwgrid dw_list;
+	xtreeview tv_gs;
+
+	int AddRow()
+	{
+		dw_list.InsertRow(0);
+		return 1;
+	}
+
+	int InsertRow()
+	{
+		dw_list.AcceptText();
+		int row = dw_list.GetRow();
+		if(row < 1 || row >dw_list.GetRowCount())
+			AddRow();
+		else
+			dw_list.InsertRow(row);
+		return 1;
+	}
+
+	int DeleteRow()
+	{
+		dw_list.AcceptText();
+		int row = dw_list.GetRow();
+		if(row < 1 || row >dw_list.GetRowCount()) 
+			return 1;
+		dw_list.DeleteRow(row);
+		return 1;
+	}
+
+	int Save()
+	{
+		dw_list.AcceptText();
+		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());
+		}
+		
+		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("保存失败!");
+		else
+		{
+			string str = x.GetXml();
+			//alert(str);
+			if(str.find("失败", 0) > 0)
+				alert("保存失败!");
+			else
+			{
+				//alert("保存成功!");
+				dw_list.ResetUpdateStatus();
+				dw_list.DwUpdateAllToEx(x.GetXmlDoc());
+				int hItem = xtreeview::GetSelectedItem(tv_gs.GetId());
+				if(hItem > 0)
+				{
+					msxml::IXMLDOMElement e =  x.GetXmlDoc().documentElement;
+					int p = trust(e as int);
+					xtreeview::SetItemData(tv_gs.GetId(), hItem, p);
+				
+					while(xtreeview::GetChildItem(tv_gs.GetId(), hItem) > 0)
+						xtreeview::DeleteItem(tv_gs.GetId(), xtreeview::GetChildItem(tv_gs.GetId(), hItem));
+				
+					msxml::IXMLDOMNodeList li =  x.GetXmlDoc().selectNodes("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);
+					}
+				}
+				
+			}
+		}
+		return 1;
+	}
+						
+	int UpRow()
+	{
+		dw_list.AcceptText();
+		int row = dw_list.GetRow();
+		if(row < 2 || row > dw_list.GetRowCount()) 
+			return 1;
+		dw_list.SetRowMove(row, -1);
+		dw_list.SetRow(row - 1);
+		dw_list.Redraw();
+		return 1;
+	}
+						
+	int DownRow()
+	{
+		dw_list.AcceptText();
+		int row = dw_list.GetRow();
+		if(row < 1 || row > dw_list.GetRowCount() - 1) 
+			return 1;
+		dw_list.SetRowMove(row, 1);
+		dw_list.SetRow(row + 1);
+		dw_list.Redraw();
+		return 1;
+	}
+						
+	int OnCmdDispatch(string 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();
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}		
+
+	int SetAgent()
+	{
+		string xfNodeAgentArea  = "agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		msxml::IXMLDOMElement xframeElement =  GetElement();
+		msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"/*");
+		if(agent)
+		{
+			string s = agent.xml;
+			SetAgentNodeContent(anode,s);
+		}
+		return 1;
+	}
+		
+	int OnSetFocus(ref TEvent evt,int p)
+	{		
+		SetAgent()	;	
+		return 1;
+	}		
+	
+	int OnXCommand(ref TXCommandEvent evt,int p)
+	{
+		return OnCmdDispatch(evt.pStrID);
+	}	
+		
+	int OnTreeSelChanged(ref TNotifyEvent evt,int 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;
+		dw_list.AcceptText();
+		dw_list.Retrieve(e);
+		dw_list.Redraw();
+		return 1;
+	}	
+
+	int OnTreeMoveNode(ref TNotifyEvent evt,int p)	
+	{
+		ref TVNNMHDR nmtv = trust(evt.pnmh as ref TVNNMHDR);
+		int xfrom = nmtv.FromItem;
+		int xto = nmtv.ToItem;
+		
+		int ret = xwin::MessageBox(this.GetHWND(), "确定移动节点!","提示:",1);
+		//trace(ret);
+		if(ret == 2)
+		{
+			xtreeview::DeleteItem(tv_gs.GetId(), xto);
+			return -1;
+		}
+		
+		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());		
+		
+		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')";
+		
+		arg.AddArg("sql", str);
+		if(getSql(arg.GetString(),x)!=1)
+		{
+			trace("error:"+x.GetXml());
+			alert("移动节点出错!");
+			xtreeview::DeleteItem(tv_gs.GetId(), xto);
+			return 0;
+		}
+		//trace("================");
+		//
+		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+"']");
+		fe.removeChild(fe1);
+		tid.appendChild(fid);
+		
+		xtreeview::DeleteItem(tv_gs.GetId(), xfrom);
+		return 1;
+	}
+
+	int OnInitial()
+	{			
+		int rItem = xtreeview::GetRootItem(tv_gs.GetId());
+		xtreeview::ExpandItemEx(tv_gs.GetId(), rItem);
+		xtreeview::ItemFocus(tv_gs.GetId(), 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);
+		return 1;
+	}		
+	
+	int onload()
+	{
+		dw_list = GetControl("dw_list");
+		dw_list.openUrl("/sale/view/SimpleProduct/template/Simple/Menu");
+		dw_list.SetColumnState("SeqNo", false);
+		
+		tv_gs = GetControl("tv_gs");
+		
+		SetAgent();
+		OnAttachEvent();
+		
+		OnInitial();
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SourceRemark.cpp b/jrj/project/business/BasicCode/SourceRemark.cpp
new file mode 100644
index 0000000..3a53069
--- /dev/null
+++ b/jrj/project/business/BasicCode/SourceRemark.cpp
@@ -0,0 +1,143 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+
+unit trade 
+[
+	class SourceRemark :  public xwin
+	{
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				//dw_list.SetItemString(row+1,"State","Y");
+				return 1;
+			}
+			else if(comdid=="xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid=="xmSave")
+				return OnSave();
+			else if(comdid=="xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int OnSave()
+		{
+			xml x=new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
+			xaserverarg arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("content",x.GetXml());						
+			if (url::get("/sale/data/TradeFinance3/SourceRemark/update",arg.GetString(),x) != 1)
+			{
+				trace("error:"+x.GetXml());
+				alert("保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.GetXml());
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("保存出错2!");
+					return 0;				
+				}
+				win32::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			if (url::get("/sale/data/TradeFinance3/SourceRemark/list",arg.GetString(),x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/FinancialCode/template/SourceRemarkList");
+			dw_list.SetColumnState("ID",false);
+			
+			OnRetrieve();
+			
+			OnAttachEvent();	
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SpecialDeductFeeList.cpp b/jrj/project/business/BasicCode/SpecialDeductFeeList.cpp
new file mode 100644
index 0000000..022f3bc
--- /dev/null
+++ b/jrj/project/business/BasicCode/SpecialDeductFeeList.cpp
@@ -0,0 +1,144 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+
+unit trade 
+[
+	class SpecialDeductFeeList :  public xwin
+	{
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				//dw_list.SetItemString(row+1,"State","Y");
+				return 1;
+			}
+			else if(comdid=="xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid=="xmSave")
+				return OnSave();
+			else if(comdid=="xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int OnSave()
+		{
+			xml x=new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
+			xaserverarg arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("content",x.GetXml());		
+			trace(x.GetXml());
+			if (url::get("/sale/data/expense3/update/SpecialDeductFee",arg.GetString(),x) != 1)
+			{
+				trace("error:"+x.GetXml());
+				alert("保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.GetXml());
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("保存出错2!");
+					return 0;				
+				}
+				win32::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			if (url::get("/sale/data/expense3/SpecialDeductFeeList",arg.GetString(),x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/expense3/SpecialDeductFeeList");
+			dw_list.SetColumnState("ID",false);
+			
+			OnRetrieve();
+			
+			OnAttachEvent();	
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/TestingCompanyList.cpp b/jrj/project/business/BasicCode/TestingCompanyList.cpp
new file mode 100644
index 0000000..3936b49
--- /dev/null
+++ b/jrj/project/business/BasicCode/TestingCompanyList.cpp
@@ -0,0 +1,33 @@
+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);
+
+					}
+
+					return 1;
+				}
+					
+		]
+
+
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/TestingCompanyMaint.cpp b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
new file mode 100644
index 0000000..12574f7
--- /dev/null
+++ b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
@@ -0,0 +1,316 @@
+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)
+			{
+				//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());										
+				}
+				else
+				{
+					setCellReadOnly();			
+				}	
+				return 0;
+			}					
+
+			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;
+			}
+
+			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("请输入船公司名称!");
+					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)
+				{
+					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();							
+				}
+				dw_base.Redraw();
+				//m_dels="";				
+				return 0;
+			}					
+			int OnCmdDispatch(string comdid)
+			{
+				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();
+				}					
+				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;
+
+				maint::onload();
+				
+				OnClear();
+			
+			}
+		]
+	]
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/TypeList.maint.supplier.cpp b/jrj/project/business/BasicCode/TypeList.maint.supplier.cpp
new file mode 100644
index 0000000..5125fa3
--- /dev/null
+++ b/jrj/project/business/BasicCode/TypeList.maint.supplier.cpp
@@ -0,0 +1,172 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+use "base.view.vd"
+
+unit trade 
+[
+	class TypeListMaintWin :  public xframe
+	{
+		xdwgrid	dw_list;
+		xtreeview tv_folder;
+
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		int OnSave()
+		{
+			xml x = ViewObject::MakeXml();
+			xaserverarg arg = ViewObject::MakeArg();
+			
+			xml x1 = ViewObject::MakeXml();
+			x1.LoadXml("<root/>");
+			
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc());
+			msxml::IXMLDOMNodeList t = x.GetXmlDoc().selectNodes("root/Supplier[@update.modify]");
+			msxml::IXMLDOMElement e1= x1.GetXmlDoc().documentElement;
+			int len = t.length;
+			for(int i=0;i<len;i++)
+			{
+				e1.appendChild(t.item(i));
+			}
+			arg.AddArg("content",x1.GetXml());
+			if(url::get("/sale/data/SupplierV3/entity/save/v3", arg.GetString(),x)!=1)
+			{
+				string error = x.GetXmlDoc().text;
+				alert(error);
+				return 1;
+			}else
+			{
+				
+				if( x.GetXmlDoc().selectSingleNode("ok"))
+				{
+					alert("保存成功");
+					dw_list.ResetUpdateStatus();
+				}else
+				{
+					alert("保存失败!");
+				}
+			}
+			return 1;
+		}
+				
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmSave")
+				return OnSave();
+			else if(comdid=="xmSearch")
+				return OnRetrieve();
+			
+			return 0;
+		}
+		
+		int OnRetrieve()
+		{
+			int hItem =tv_folder.GetSelectedItem();
+			string typ = tv_folder.GetItemData(hItem);
+			string searchStr = GetControl("SearchContent").GetText();
+			
+			int hCursor = xutil::SetCursorWait();
+			xml x = ViewObject::RetrieveData("/sale/data/SupplierV3/type/list", "sType",typ,"SearchText",searchStr);
+			if(x) 
+				dw_list.Retrieve(x);
+			else
+				dw_list.Reset();
+			dw_list.Redraw();
+			xutil::RestoreCursor(hCursor);
+			
+			return 1;
+		}
+		
+		//树选择
+		int OnTreeSelChanged(ref TNotifyEvent evt,int p)
+		{
+			ref NMTREEVIEW nmtv = cast(evt.pnmh as NMTREEVIEW);
+			int hItem = nmtv.itemNew.hItem;
+			return OnRetrieve();
+		}
+				
+			//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+			AttachEvent("tv_folder", "TVN_SELCHANGED",OnTreeSelChanged);
+		}
+		
+		/*
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("xxx","xxx");
+			if (getUrl("",arg.GetString(),x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				//dw_list.Retrieve(x);
+				//dw_list.Redraw();
+			}
+			return 1;
+		}
+		*/
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/SupplierV3/template/supplier/mainttypelist");
+			
+			tv_folder = GetControl("tv_folder");
+			OnAttachEvent();	
+			xtreeview::ExpandItem(tv_folder.GetId(),xtreeview::GetRootItem(tv_folder.GetId()));
+			
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/basicfareTypeList.cpp b/jrj/project/business/BasicCode/basicfareTypeList.cpp
new file mode 100644
index 0000000..e2c5515
--- /dev/null
+++ b/jrj/project/business/BasicCode/basicfareTypeList.cpp
@@ -0,0 +1,143 @@
+use "xcontrol.vframe.vbusiness.vd"
+use "xbase.vframe.vbusiness.vd"
+
+unit trade 
+[
+	class basicfareTypeList :  public xwin
+	{
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+
+		int SetAgent()
+		{
+			string xfNodeAgentArea  = "agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNodeContent (anode,m_agentNode);
+			}
+			else
+			{
+				msxml::IXMLDOMElement xframeElement =  GetElement();
+				msxml::IXMLDOMElement agent = xframeElement.selectSingleNode("agent/"+xfNodeAgentArea+"[1]/*");
+				if(agent)
+				{
+					string s = agent.xml;
+					m_agentNode =  SetAgentNodeContent (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(ref TEvent evt,int param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(string comdid)
+		{
+			if(comdid=="xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				dw_list.SetItemString(row+1,"State","Y");
+				return 1;
+			}
+			else if(comdid=="xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid=="xmSave")
+				return OnSave();
+			else if(comdid=="xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(ref TXCommandEvent evt,int param)
+		{
+			return OnCmdDispatch(evt.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent("WM_XCOMMAND",OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent("WM_SETFOCUS",OnSetFocus);
+		}
+		
+		int OnSave()
+		{
+			xml x=new xml;
+			x.setNativePointer(xml::CreateInstance());
+			dw_list.DwUpdateAllToEx(x.GetXmlDoc()); 
+			xaserverarg arg=new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg("content",x.GetXml());						
+			if (url::get("/sale/data/expense3/update/basicfareType",arg.GetString(),x) != 1)
+			{
+				trace("error:"+x.GetXml());
+				alert("保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.GetXml());
+				if(x.GetXmlDoc().selectSingleNode("error"))
+				{
+					alert("保存出错2!");
+					return 0;				
+				}
+				win32::MessageBox(GetHWND(),"保存成功!","提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			if (url::get("/sale/data/expense3/basicfareTypeLsit",arg.GetString(),x)!=1)
+			{
+				trace(x.GetXmlDoc().text);
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl("dw_list");
+			dw_list.openUrl("/sale/view/expense3/basicfareTypeList");
+			dw_list.SetColumnState("ID",false);
+			
+			OnRetrieve();
+			
+			OnAttachEvent();	
+			return 1;
+		}
+		
+		int onloaded()
+		{
+			SetAgent();			
+			
+			return 1;
+		}		
+	};
+]
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/brand.regtype.cpp b/jrj/project/business/BasicCode/brand.regtype.cpp
new file mode 100644
index 0000000..0fb0769
--- /dev/null
+++ b/jrj/project/business/BasicCode/brand.regtype.cpp
@@ -0,0 +1,147 @@
+use "frame.vl"
+use "dev:vm[xdwtable.vm]"
+use "file.vl"
+use "dev:vm[xutil.vm]"
+
+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;
+			}
+
+			int onload()
+			{
+				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;
+			}
+		]
+	]
+]
\ No newline at end of file

--
Gitblit v1.9.3