From 7a91c3a1ed37b0332d4ff0ebeae60bd6da3665c0 Mon Sep 17 00:00:00 2001
From: xj qian <qianxj15@sina.com>
Date: 星期二, 16 七月 2024 18:28:58 +0800
Subject: [PATCH] Merge branch 'master' of http://116.62.18.175:6699/r/mis-prj

---
 jrj/project/business/BasicCode/SKUItem.categoryselect.cpp  |  216 +
 jrj/project/business/BasicCode/ForwarderList.cpp           |  135 
 jrj/project/business/BasicCode/AddUomGroup.cpp             |  121 
 jrj/project/business/GDN/CustomCodeNew.cpp                 |    0 
 jrj/project/business/BasicCode/PaymentTerm.maint.cpp       |  429 +++
 jrj/project/business/BasicCode/SKUTemplate.cpp             |  427 +++
 jrj/project/business/BasicCode/basicfareTypeList.cpp       |  158 +
 jrj/project/business/BasicCode/TestingCompanyMaint.cpp     |  321 ++
 jrj/project/business/BasicCode/ProfitParam.cpp             |  140 +
 jrj/ext-jrj/ext-jrj.vcxproj.filters                        |  117 
 jrj/project/business/BasicCode/ShipcompanyList.cpp         |   41 
 jrj/project/business/BasicCode/ExchangeRate.cpp            |  226 +
 jrj/project/business/BasicCode/FCL.cpp                     |  354 ++
 jrj/project/business/BasicCode/BrandInforMaint.cpp         |  100 
 jrj/project/business/BasicCode/QuickCode_Tree.cpp          |  696 ++++
 jrj/project/business/BasicCode/ColorCardNew.cpp            |  416 ++
 jrj/project/business/BasicCode/ForwarderMaint.cpp          |  467 +++
 jrj/project/business/BasicCode/ExpressList.cpp             |   41 
 jrj/project/business/BasicCode/QuickCode.cpp               |  678 ++++
 jrj/project/business/BasicCode/CustomerMarketMaint.cpp     |   92 
 jrj/project/business/BasicCode/TypeList.maint.supplier.cpp |  186 +
 jrj/project/business/BasicCode/SetUpRemarks.cpp            |  158 +
 jrj/project/business/BasicCode/AccountUnitMaint.cpp        |  155 +
 jrj/project/business/BasicCode/TestingCompanyList.cpp      |   42 
 jrj/project/business/BasicCode/Simple.Menu.Config.cpp      |  276 +
 jrj/project/business/BasicCode/brand.regtype.cpp           |  161 +
 jrj/project/business/BasicCode/CartermList.cpp             |  170 +
 jrj/project/business/BasicCode/SKUItem.select.cpp          |  126 
 jrj/project/business/BasicCode/ShipcompanyMaint.cpp        |  320 ++
 jrj/project/business/BasicCode/ExpressMaint.cpp            |  346 ++
 jrj/project/business/BasicCode/CustomerMarketList.cpp      |   38 
 jrj/project/business/BasicCode/SpecialDeductFeeList.cpp    |  159 +
 jrj/project/business/BasicCode/FreightExpenseType.cpp      |  176 +
 jrj/project/business/BasicCode/SKUTemplate.select.cpp      |  120 
 jrj/project/business/BasicCode/SourceRemark.cpp            |  158 +
 jrj/project/business/BasicCode/BrandInforList.cpp          |   39 
 jrj/project/business/BasicCode/SKUItem.cpp                 |  310 ++
 jrj/ext-jrj/ext-jrj.vcxproj                                |  110 
 jrj/project/business/BasicCode/PaymentTerm.list.cpp        |  144 +
 39 files changed, 8,365 insertions(+), 4 deletions(-)

diff --git a/jrj/ext-jrj/ext-jrj.vcxproj b/jrj/ext-jrj/ext-jrj.vcxproj
index 551ba31..4013c16 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj
+++ b/jrj/ext-jrj/ext-jrj.vcxproj
@@ -287,6 +287,114 @@
     <ClCompile Include="..\project\business\AR\maint.SettlementExchange.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\AccountUnitMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\AddUomGroup.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\basicfareTypeList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\brand.regtype.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\BrandInforList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\BrandInforMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\CartermList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ColorCardNew.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\CustomerMarketList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\CustomerMarketMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ExchangeRate.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ExpressList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ExpressMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\FCL.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ForwarderList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ForwarderMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\FreightExpenseType.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\PaymentTerm.list.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\PaymentTerm.maint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ProfitParam.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\QuickCode.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\QuickCode_Tree.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SetUpRemarks.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ShipcompanyList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ShipcompanyMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\Simple.Menu.Config.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.categoryselect.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.select.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUTemplate.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUTemplate.select.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SourceRemark.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SpecialDeductFeeList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\TestingCompanyList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\TestingCompanyMaint.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\TypeList.maint.supplier.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="..\project\business\Company\CompanyList.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
@@ -483,7 +591,7 @@
     </ClCompile>
     <ClCompile Include="..\project\business\GDN\AdvanceChargeList.cpp" />
     <ClCompile Include="..\project\business\GDN\CustomCodeNew.cpp">
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
     </ClCompile>
     <ClCompile Include="..\project\business\GDN\GDNDelay.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
diff --git a/jrj/ext-jrj/ext-jrj.vcxproj.filters b/jrj/ext-jrj/ext-jrj.vcxproj.filters
index edac3b9..965a48d 100644
--- a/jrj/ext-jrj/ext-jrj.vcxproj.filters
+++ b/jrj/ext-jrj/ext-jrj.vcxproj.filters
@@ -115,6 +115,9 @@
     <Filter Include="project\business\Company">
       <UniqueIdentifier>{84413ffb-b8a4-4dfe-a715-ef03dec8f2ef}</UniqueIdentifier>
     </Filter>
+    <Filter Include="project\business\BasicCode">
+      <UniqueIdentifier>{64c23153-69c8-4db3-9225-9e5375e489ff}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="framework.h">
@@ -839,9 +842,6 @@
     <ClCompile Include="..\project\total3\viewex.total2.cpp">
       <Filter>vbusiness\total</Filter>
     </ClCompile>
-    <ClCompile Include="..\project\business\GDN\CustomCodeNew.cpp">
-      <Filter>project\business\GDN</Filter>
-    </ClCompile>
     <ClCompile Include="..\project\business\GDN\po.paper.cpp">
       <Filter>project\business\GDN</Filter>
     </ClCompile>
@@ -908,5 +908,116 @@
     <ClCompile Include="..\project\total3\ViewTotalWin.cpp">
       <Filter>vbusiness\total</Filter>
     </ClCompile>
+    <ClCompile Include="..\project\business\GDN\CustomCodeNew.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\AccountUnitMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\AddUomGroup.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\basicfareTypeList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\brand.regtype.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\BrandInforList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\BrandInforMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\CartermList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ColorCardNew.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\CustomerMarketList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\CustomerMarketMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ExchangeRate.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ExpressList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ExpressMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\FCL.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ForwarderList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ForwarderMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\FreightExpenseType.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\PaymentTerm.list.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\PaymentTerm.maint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ProfitParam.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\QuickCode.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\QuickCode_Tree.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SetUpRemarks.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ShipcompanyList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\ShipcompanyMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\Simple.Menu.Config.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.categoryselect.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUItem.select.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUTemplate.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SKUTemplate.select.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SourceRemark.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\SpecialDeductFeeList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\TestingCompanyList.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\TestingCompanyMaint.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
+    <ClCompile Include="..\project\business\BasicCode\TypeList.maint.supplier.cpp">
+      <Filter>project\business\BasicCode</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/AccountUnitMaint.cpp b/jrj/project/business/BasicCode/AccountUnitMaint.cpp
new file mode 100644
index 0000000..25eb97f
--- /dev/null
+++ b/jrj/project/business/BasicCode/AccountUnitMaint.cpp
@@ -0,0 +1,155 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) AccountUnitMaintWin :  public xwin
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		AccountUnitMaintWin(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	public:
+		static AccountUnitMaintWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			AccountUnitMaintWin* pWin = new AccountUnitMaintWin(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAddRow")
+			{
+				dw_list.InsertRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+				return OnSave();
+			else if(comdid==L"xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&AccountUnitMaintWin::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&AccountUnitMaintWin::OnSetFocus);
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			xml x;
+			
+			dw_list.DwUpdateAllToEx(x); 
+			xaserverarg arg;
+			
+			arg.AddArg(L"content",x.xml());						
+			if (xurl::get(L"/sale/data/TradeFinance3/accountunit/update",arg.GetString(),x) != 1)
+			{
+				trace(L"error:"+(xstring)x.xml());
+				alert(L"保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.xml());
+				if(x.selectSingleNode(L"error"))
+				{
+					alert(L"保存出错2!");
+					return 0;				
+				}
+				MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			
+			xaserverarg arg;
+			
+			if (xurl::get(L"/sale/data/TradeFinance3/accountunit/list",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/FinancialCode/template/AccountUnit");
+			dw_list.SetColumnState(L"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..2327ddd
--- /dev/null
+++ b/jrj/project/business/BasicCode/AddUomGroup.cpp
@@ -0,0 +1,121 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument; 
+class __declspec(dllexport) AddUomGroup : public xwin
+{
+
+public:
+	AddUomGroup(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static AddUomGroup* CreateInstance(void* implPtr, void* hWnd)
+	{
+		AddUomGroup* pWin = new AddUomGroup(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+
+	int SetAgent()
+	{
+		return 1;
+	}
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		int SetAgent();
+
+		//重置工具条
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"cb_cancel")
+			CloseWindow();
+		else if (comdid == L"cb_ok")
+		{
+			control xc = new control;
+			xc.setNativePointer(GetControl(L"Txt"));
+			xstring name = xc.GetText();
+			xaserverarg arg;
+
+			arg = GetArg();
+			arg.AddArg(L"GroupName", name);
+			arg.AddArg(L"return", L"ok");
+			CloseWindow();
+		}
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&AddUomGroup::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&AddUomGroup::OnSetFocus);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+
+		OnAttachEvent();
+
+		return 1;
+	}
+
+
+
+	int onload()
+	{
+		SetArg();
+		OnInitial();
+
+		
+
+			if (GetWinParam())
+			{
+				xaserverarg arg;
+
+				arg = GetArg();
+				xstring note = arg.GetArgString(L"note");
+				if (note == L"修改")
+				{
+					xstring name = arg.GetArgString(L"GroupName");
+					control xc = new control;
+					xc.setNativePointer(GetControl(L"Txt"));
+					xc.SetText(name);
+				}
+				xstring id = arg.GetArgString(L"m_id");
+				if (id == L"FND_UOM")
+				{
+					SetWindowText(GetHWND(), L"计量单位");
+				}
+				else if (id == L"FND_CustomerSource")
+				{
+					SetWindowText(GetHWND(), L"客户来源");
+				}
+				else if (id == L"FND_AuxiliaryAttribute")
+				{
+					SetWindowText(GetHWND(), L"辅助属性");
+				}
+			}
+		
+
+		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..4d9c6ad
--- /dev/null
+++ b/jrj/project/business/BasicCode/BrandInforList.cpp
@@ -0,0 +1,39 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) BrandInforList : public xwin
+{
+public:
+	xdwgrid	dw_list;
+public:
+	BrandInforList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static BrandInforList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		BrandInforList* pWin = new BrandInforList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del") {
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+		}
+		return 1;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/BrandInforMaint.cpp b/jrj/project/business/BasicCode/BrandInforMaint.cpp
new file mode 100644
index 0000000..5784bec
--- /dev/null
+++ b/jrj/project/business/BasicCode/BrandInforMaint.cpp
@@ -0,0 +1,100 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) BrandInforMaint : public xframe
+{
+public:
+
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	BrandInforMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static BrandInforMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		BrandInforMaint* pWin = new BrandInforMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"update")
+		{
+
+			dw_base.ResetUpdateStatus();
+			return 1;
+		}
+	}
+	xstring GetEntityData(param pr)
+	{
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		//trace(L"------x");
+		trace(x.xml());
+		return x.xml();
+	}
+	int onload()
+	{
+		maint::onload();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+
+		dw_base.SetColHeaderHeight(0);
+		dw_base.SetRowSelectorWidth(0);
+
+		dw_base.SetScrollState(false);
+
+
+		/*if (!maint::m_EntityID)
+		{
+			//xstring suserid = publiccode::GetUser().id;
+			xstring suserid = xaserver::GetUserId();
+			xstring susername = publiccode::GetUser().name;
+			xstring sdate = publiccode::GetCurrentDate();
+			dw_base.SetItemString(dw_base.GetRow(),L"CreatorID",suserid);//Party
+			dw_base.SetItemDisplayString(dw_base.GetRow(),L"CreatorID",susername);
+			dw_base.SetItemString(dw_base.GetRow(),L"CreateDate",sdate);
+			xml x;
+
+			xaserverarg arg;
+
+			arg.AddArg(L"id", suserid);
+			if(xaserver::ExecXQuery(L"",L"[OrgInfo.xq]",arg.GetString(),x)!=1)
+			{
+				trace(x.xml());
+				return nil;
+			}
+			//alert(x.xml());
+			KXMLDOMElement e= x.documentElement();
+			trace(e.xml);
+			if(e.selectSingleNode(L"orgid"))
+			{
+				xstring orgid= e.selectSingleNode(L"orgid").text();
+				dw_base.SetItemString(1,L"OrgID",orgid);
+			}
+
+			if(e.selectSingleNode(L"orgname"))
+			{
+				xstring orgname = e.selectSingleNode(L"orgname").text();
+				dw_base.SetItemDisplayString(1,L"OrgID",orgname);
+			}
+		}*/
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CartermList.cpp b/jrj/project/business/BasicCode/CartermList.cpp
new file mode 100644
index 0000000..01afbee
--- /dev/null
+++ b/jrj/project/business/BasicCode/CartermList.cpp
@@ -0,0 +1,170 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) CartermList : public xwin
+{
+public:
+	xdwgrid	dw_list;
+	xdwpages dw_pages;
+	xstring m_QueryTxt;
+	KXMLDOMDocument m_configDoc;
+	static int dw_hWnd;
+
+public:
+	CartermList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static CartermList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		CartermList* pWin = new CartermList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+
+
+	xstring GetGuid() {
+		return publiccode::GetGuid();
+	}
+	int OnAddrow()
+	{
+		dw_list.InsertRow(0);
+		int rows = dw_list.GetRowCount();
+		dw_list.SetRow(rows);
+		dw_list.SetItemString(rows, L"PartyID", GetGuid());
+		dw_list.SetItemString(rows, L"ContactID", GetGuid());
+		dw_list.SetItemString(rows, L"PAStatus", L"1");
+		dw_list.SetItemString(rows, L"PStatus", L"1");
+		dw_list.SetItemString(rows, L"PCStatus", L"1");
+		dw_list.SetItemString(rows, L"Type", L"7");
+	}
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<1 || row>dw_list.GetRowCount()) return 0;
+		dw_list.InsertRow(row);
+		dw_list.SetItemString(row, L"PartyID", GetGuid());
+		dw_list.SetItemString(row, L"ContactID", GetGuid());
+		dw_list.SetItemString(row, L"PAStatus", L"1");
+		dw_list.SetItemString(row, L"PStatus", L"1");
+		dw_list.SetItemString(row, L"PCStatus", L"1");
+		dw_list.SetItemString(row, L"Type", L"7");
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		int rows = dw_list.GetRowCount();
+		int row2 = dw_list.GetPrevSelectRow(rows);
+		while (row2 > 0) {
+			dw_list.DeleteRow(row2);
+			row2 = dw_list.GetPrevSelectRow(row2 - 1);
+		}
+		dw_list.SelectRow(0, false);
+	}
+
+	int OnSave()
+	{
+		/*xstring no = dw_list.GetItemString(1,L"CarTermNo");
+		if(no==L""){
+			alert(L"请输入车队编码!");
+			return -1;
+		}
+		xstring SName = dw_list.GetItemString(1,L"Name");
+		if(SName==L""){
+			alert(L"请输入车队名称!");
+			return -1;
+		}
+		xstring ContacterName = dw_list.GetItemString(1,L"ContacterName");
+		if(ContacterName==L""){
+			alert(L"请输入联系人名称!");
+			return -1;
+		}	*/
+		xml x;
+
+		dw_list.AcceptText();
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"CarTerm.dbmap");
+		if (xurl::get(L"/sale/data/CarTerm/entity/carterm/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_list.ResetUpdateStatus();
+		}
+		dw_list.Redraw();
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&CartermList::OnXCommand);
+		return 1;
+	}
+
+	int onload()
+	{
+		OnAttachEvent();
+		list::onload();
+		dw_list.SetReadOnly(false);
+		return -1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ColorCardNew.cpp b/jrj/project/business/BasicCode/ColorCardNew.cpp
new file mode 100644
index 0000000..d749027
--- /dev/null
+++ b/jrj/project/business/BasicCode/ColorCardNew.cpp
@@ -0,0 +1,416 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ColorCardNew : public listwin
+{
+public:
+	xdwgrid	dw_list;
+	xdwgrid	dw_detail;
+	bool 	ismodify;
+	xnode	m_agentNode;
+	xstring	m_agentCond;
+public:
+	ColorCardNew(void* implPtr, HWND hWnd) :listwin(implPtr, hWnd) {}
+public:
+	static ColorCardNew* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ColorCardNew* pWin = new ColorCardNew(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea  = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		KXMLDOMElement xframeElement =  GetElement();
+		KXMLDOMNode agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+		if(agent)
+			SetAgentNode(anode, agent.xml());
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM param)
+	{
+		SetAgent();
+
+		//重置工具条
+		return 1;
+	}
+	int ProcessFlowAction(xstring guid,xstring comdid)
+	{
+		//int pr = pr1;
+		//xstring action = comdid;//.mid(comdid.find(L"action:",0)+7,9999);
+		/*if(action == L"bill.delete" || action == L"bill.deleteEx")
+		{
+			if (MessageBox(GetHWND(),L"是否确定删除记录!",L"提示1",1) == 2)  
+				return 1;
+		}*/
+		
+		xaserverarg arg0 ;
+		arg0.setNativePointer(arg0.CreateInstance());
+		//arg0.AddArg(L"Action", action,L"xs:xstring");
+		arg0.AddArg(L"EntityName", L"ColorCard",L"xs:xstring");
+		arg0.AddArg(L"EntityIDName", L"ColorCardID",L"xs:xstring");
+		arg0.AddArg(L"EntityID", guid,L"xs:xstring");
+		arg0.AddArg(L"FunctionCode", comdid,L"xs:xstring");
+		xml x = new xml;
+		
+
+		if(xurl::get(L"/sale/data/Role.config/sys/sql/action", arg0.GetString(), x) != 1)
+		{	
+			//ismodify=false;
+			//dw_list.SetReadOnly(ismodify);			
+			return -1;
+		}
+		xstring kk=x.xml();
+		if(kk.find(L"<root/>",0)>=0) 
+		{
+			//ismodify=true;
+			//dw_list.SetReadOnly(ismodify);	
+			return 1;
+		}
+		return -1;
+	}	
+		
+	int ModifyProcessAction(xstring guid,xstring 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(xstring guid,xstring comdid)
+	{
+		if(ProcessFlowAction(guid,comdid)>0)
+		{			
+			return -1; //没有权限
+		}
+		else
+		{
+			return 1; //有权限
+		}
+	}
+	
+	//根据ColorCardID加载Detail数据
+	int  OnRetrieveDetail(xstring ColorCardID)
+	{
+		xml x;
+		
+		xaserverarg arg;
+		
+
+		arg.AddArg(L"ColorCardID",ColorCardID);
+		if (xurl::get(L"ColorCard/entity/list1",arg.GetString(),x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		dw_detail.Retrieve(x);
+		dw_detail.Redraw();
+		dw_detail.SetReadOnly(ismodify);		
+		return 1;
+	}
+	
+	int OnPreSave()
+	{
+		if (dw_list)
+		{
+			xstring colorCardCName;
+			xstring colorCardName;
+			xstring orgID;
+			int i;
+			int row = dw_list.GetRowCount();
+			for (i=1; i<=row;i++)
+			{
+				colorCardCName=dw_list.GetItemString(i,L"ColorCardCName")+L"";
+				colorCardName=dw_list.GetItemString(i,L"ColorCardName")+L"";
+				orgID=dw_list.GetItemString(i,L"OrgID")+L"";
+				if (colorCardCName==L"" || !colorCardCName)
+				{
+					alert(L"第"+xstring(i)+L"行色卡名称中文为空");
+					return -1;
+				}
+				if (colorCardName==L"" || !colorCardName)
+				{
+					alert(L"第"+ xstring(i) +L"行色卡名称为空");
+					return -1;
+				}
+				if (orgID==L"" || !orgID)
+				{
+					alert(L"第"+ xstring(i) +L"行关联组织为空");
+					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;
+		
+		dw_list.DwUpdateAllToEx(x); 
+		xaserverarg arg;
+		
+		KXMLDOMElement e=  x.selectSingleNode(L"root");
+		arg.AddArg(L"content",e.xml());							
+		arg.AddArg(L"dbmap",L"ColorCard.dbmap");
+		if (xurl::get(L"ColorCard/pref/colorcard.save",arg.GetString(),x) != 1)
+		{
+			trace(L"error:"+(xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}						
+		else
+		{	
+			alert(L"保存成功!");		
+			dw_list.ResetUpdateStatus();							
+		}
+		dw_list.Redraw();	
+	}
+	
+	//新增
+	int OnAdd()
+	{
+		dw_list.AcceptText();
+		int nrow=dw_list.InsertRow(0);
+		dw_list.ShowRowTo(nrow);
+		xstring tempguid = publiccode::GetGuid();
+		dw_list.SetItemString(nrow,L"ColorCardID",tempguid);
+		OnRetrieveDetail(tempguid);
+		return 1;
+	}
+	
+	//插入
+	int OnInsert()
+	{
+		dw_list.AcceptText();
+		int row = dw_list.GetRow();
+		if(row<1) return 0;
+		int nrow=dw_list.InsertRow(row);
+		xstring tempguid = publiccode::GetGuid();
+		dw_list.SetItemString(nrow,L"ColorCardID",tempguid);
+		OnRetrieveDetail(tempguid);
+	}
+	
+	//删除
+	int OnDelete()
+	{
+		dw_list.AcceptText();					
+		int row = dw_list.GetRow();
+		if(row<1) return 0;
+		xstring id=dw_list.GetItemString(row,L"ColorCardID");
+		if(DeleteProcessAction(id,L"DeleteColorCard")<0)
+		{
+			alert(L"您没有权限删除该数据");
+			return -1;
+		}
+		if(id !=L"")
+		{
+			xml x;
+			
+			xaserverarg arg;
+			arg.setNativePointer(arg.CreateInstance());
+			arg.AddArg(L"ColorCardID", id);
+			if(xurl::get(L"ColorCard/pref/beforedelete",arg.GetString(),x)!=1)
+			{
+				trace(L"error:"+(xstring)x.xml());
+				alert(L"删除出错!");
+				return 0;
+			}
+			KXMLDOMElement e= x.documentElement();
+			if(e.selectSingleNode(L"error")) 
+			{
+				alert(e.selectSingleNode(L"error").text());
+				return 0;
+			}					
+		}					
+		dw_list.DeleteRow(row); 		
+	}
+	
+	int OnAddRowDetail()
+	{
+		dw_detail.AcceptText();
+		int nrow=dw_detail.InsertRow(0);
+		xstring tempguid = publiccode::GetGuid();
+		dw_detail.SetItemString(dw_detail.GetRow(),L"ColorCardID",dw_list.GetItemString(dw_list.GetRow(),L"ColorCardID"));
+		dw_detail.SetItemString(dw_detail.GetRow(),L"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);
+		xstring tempguid = publiccode::GetGuid();
+		dw_detail.SetItemString(dw_detail.GetRow(),L"ColorCardID",dw_list.GetItemString(dw_list.GetRow(),L"ColorCardID"));
+		dw_detail.SetItemString(dw_detail.GetRow(),L"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);
+		KXMLDOMElement ez= dw_list.GetRowElement(rowz);
+		xml xz;			
+		dw_detail.DwUpdateAllToEx(xz);	
+		if (ez.selectSingleNode(L"root"))		
+			ez.removeChild(ez.selectSingleNode(L"root"));
+		ez.appendChild(xz.documentElement());
+		
+		return 1;
+	}
+	
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if(comdid==L"save") OnSave();
+		else if(comdid==L"add") OnAdd();
+		else if(comdid==L"insert") OnInsert();
+		else if(comdid==L"del") OnDelete();
+		else if(comdid==L"addrowDetail") OnAddRowDetail();
+		else if(comdid==L"insertrowDetail") OnInsertRowDetail();
+		else if(comdid==L"deleterowDetail") OnDelRowDetail();
+		
+		return 1;
+	}
+	
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	
+	//行改变事件
+	int OnListRowChanged(TEvent* evt, int p)
+	{
+		dw_detail.AcceptText();
+
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		dw_list.Redraw();					
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring ColorCardID = e.selectSingleNode(L"ColorCardID").text(); 
+		OnRetrieveDetail(ColorCardID);
+		
+		return 1;	
+	}
+	
+	int OnDetailChanged(TEvent* evt, int p)
+	{
+		int row = dw_list.GetRow();
+		KXMLDOMElement e= dw_list.GetRowElement(row);
+		xml x;
+						
+		dw_detail.DwUpdateAllToEx(x);			
+		if (e.selectSingleNode(L"root"))		
+			e.removeChild(e.selectSingleNode(L"root"));
+		e.appendChild(x.documentElement());
+		
+		return 0;
+	}
+	
+	int OnDwListClick(TEvent* evt, int p)
+	{				
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		dw_list.Redraw();					
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring ColorCardID = e.selectSingleNode(L"ColorCardID").text();
+		ModifyProcessAction(ColorCardID,L"ModifyColorCard");
+		
+		return 1;	
+	}
+	
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ColorCardNew::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ColorCardNew::OnSetFocus);
+		//行改变事件
+		AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED", (FEvent)&ColorCardNew::OnListRowChanged);
+		AttachEvent(L"dw_detail",L"DWV_ITEMCHANGED", (FEvent)&ColorCardNew::OnDetailChanged);
+		//AttachEvent(L"dw_list",L"DWV_ITEMCHANGED",OnDetailChanged);	
+		AttachEvent(L"dw_list",L"DWV_CLICKED", (FEvent)&ColorCardNew::OnDwListClick);
+		
+		return 1;
+	}
+	
+	int  OnRetrieve(xstring str)
+	{
+		xml x;
+		
+		xaserverarg arg;
+		
+		arg.AddArg(L"id",str);	
+		if (xurl::get(L"ColorCard/entity/list",arg.GetString(),x) != 1)
+		{
+			trace(x.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(L"dw_list");
+		dw_list.openUrl(L"产品设置.vface/template/ColorCard/list");	
+		
+		dw_detail = GetControl(L"dw_detail");
+		dw_detail.openUrl(L"产品设置.vface/template/ColorCard/listex");	
+		OnInitial();
+
+		OnRetrieve(L"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..cf794b4
--- /dev/null
+++ b/jrj/project/business/BasicCode/CustomerMarketList.cpp
@@ -0,0 +1,38 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) CustomerMarketList : public xwin
+{
+public:
+	xdwgrid	dw_list;
+public:
+	CustomerMarketList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static CustomerMarketList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		CustomerMarketList* pWin = new CustomerMarketList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"del") {
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+		}
+		return 1;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/CustomerMarketMaint.cpp b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
new file mode 100644
index 0000000..ec84f4f
--- /dev/null
+++ b/jrj/project/business/BasicCode/CustomerMarketMaint.cpp
@@ -0,0 +1,92 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) CustomerMarketMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	CustomerMarketMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static CustomerMarketMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		CustomerMarketMaint* pWin = new CustomerMarketMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg  arg)
+	{
+		if (updateItem == L"update")
+		{
+
+			dw_base.ResetUpdateStatus();
+			return 1;
+		}
+	}
+	xstring GetEntityData(param pr)
+	{
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		//trace(L"------x");
+		trace(x.xml());
+		return x.xml();
+	}
+	int onload()
+	{
+		maint::onload();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		if (!maint::m_EntityID)
+		{
+			//xstring suserid = publiccode::GetUser().id;
+			xstring suserid = xaserver::GetUserId();
+			xstring susername = publiccode::GetUser().name;
+			xstring sdate = publiccode::GetCurrentDate();
+			dw_base.SetItemString(dw_base.GetRow(), L"CreatorID", suserid);//Party
+			dw_base.SetItemDisplayString(dw_base.GetRow(), L"CreatorID", susername);
+			dw_base.SetItemString(dw_base.GetRow(), L"CreateDate", sdate);
+			xml x;
+
+			xaserverarg arg;
+
+			arg.AddArg(L"id", suserid);
+			if (xaserver::ExecXQuery(L"", L"[OrgInfo.xq]", arg.GetString(), x) != 1)
+			{
+				trace(x.xml());
+				return nil;
+			}
+			//alert(x.xml());
+			KXMLDOMElement e = x.documentElement();
+			trace(e.xml());
+			if (e.selectSingleNode(L"orgid"))
+			{
+				xstring orgid = e.selectSingleNode(L"orgid").text();
+				dw_base.SetItemString(1, L"OrgID", orgid);
+			}
+
+			if (e.selectSingleNode(L"orgname"))
+			{
+				xstring orgname = e.selectSingleNode(L"orgname").text();
+				dw_base.SetItemDisplayString(1, L"OrgID", orgname);
+			}
+		}
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExchangeRate.cpp b/jrj/project/business/BasicCode/ExchangeRate.cpp
new file mode 100644
index 0000000..51e0e26
--- /dev/null
+++ b/jrj/project/business/BasicCode/ExchangeRate.cpp
@@ -0,0 +1,226 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+		class __declspec(dllexport) ExchangeRateWin :  public xframe
+		{
+		public:
+			xdwgrid	dw_list;
+			int hSignWin;
+			xnode	m_agentNode;	//Agent Condition
+		public:
+			ExchangeRateWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+		public:
+			static ExchangeRateWin* CreateInstance(void* implPtr, void* hWnd)
+			{
+				ExchangeRateWin* pWin = new ExchangeRateWin(implPtr, (HWND)hWnd);
+				return pWin;
+			}
+			int SetAgent()
+			{
+				xstring xfNodeAgentArea  = L"agentarea";
+				xnode anode = GetAgentNode(xfNodeAgentArea);
+				if(m_agentNode)
+				{
+					SetAgentNode (anode,m_agentNode);
+				}
+				else
+				{
+					KXMLDOMElement xframeElement =  GetElement();
+					KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+					if(agent)
+					{
+						xstring s = agent.xml();
+						m_agentNode =  SetAgentNode (anode,s);
+					}
+				}
+				return 1;
+			}
+
+			//焦点激活处理函数
+			int OnSetFocus(TEvent* evt, LPARAM param)
+			{
+				//重置工具条
+				SetAgent();
+				return 1;
+			}
+
+			int OnSave()
+			{
+				xml x = new xml;
+				
+				dw_list.AcceptText();
+				dw_list.DwUpdateAllToEx(x);
+				xml x0;
+				x0.loadXML(L"<data/>");
+				
+				KXMLDOMNodeList t = x.selectNodes(L"data/Item[@update.modify='1' or @update.delete ='1']");
+				KXMLDOMElement e1= x0.documentElement();
+				int len = t.length();
+				for(int i=0;i<len;i++)
+				{
+					e1.appendChild(t.item(i));
+				}
+				xaserverarg arg ;
+				arg.AddArg(L"content",x0.xml());
+				trace(x0.xml());
+				if(xurl::get(L"/sale/data/expense3/update/ExchangeRate", arg.GetString(),x)!=1)
+				{
+					xstring error = x.text();
+					alert(L"err:"+error);
+					return 1;
+				}
+				xstring str = x.documentElement().getAttribute(L"text");
+				if(str == L"true")
+				{
+					dw_list.ResetUpdateStatus();			
+					alert(L"保存成功!"); 
+				}else 
+				{
+					alert(L"保存失败!");
+				}
+				return 1;
+			}
+				
+					
+			//命令发布函数
+			int OnCmdDispatch(xstring comdid)
+			{
+				if(comdid==L"xmAddRow")
+				{
+					xstring sdate = publiccode::GetCurrentDate();
+					xstring suserid = publiccode::GetUser().id;
+					xstring susername = publiccode::GetUser().name;
+					int row =dw_list.GetRowCount();
+					dw_list.InsertRow(0);
+					dw_list.SetItemString(row+1,L"CreatorID",suserid);
+					dw_list.SetItemDisplayString(row+1,L"CreatorID",susername);
+					dw_list.SetItemString(row+1,L"CreateDate",sdate);
+					return 1;
+				}
+				else if(comdid==L"xmDeleteRow")
+				{
+					dw_list.DeleteRow(0);
+					return 1;
+				}
+				else if (comdid == L"xmSave")
+				{
+					OnSave();
+				}
+				else if (comdid == L"xmRefresh")
+				{
+					OnRetrieve();
+				}
+				else if(comdid ==L"ToUpdate")
+				{
+					ToUpdate();
+				}
+				
+				return 0;
+			}
+				
+			
+			int ToUpdate()
+			{
+				xstring Months = dw_list.GetItemString(dw_list.GetRow(),L"Months");
+				int MB_OKCANCEL = 1;
+				int IDOK  = 1;
+				int ret = MessageBox(GetHWND(),L"确认更新"+Months+L"盈亏汇率?",L"提示",MB_OKCANCEL);
+				if(ret == IDOK)
+				{
+					xml x = ViewObject::RetrieveData(L"/sale/data/Expense3/ExchangeRateUpdateEx",L"Months",Months);
+					xstring status = x.xml();
+					if(status.find(L"ok") == 1)
+					{
+						alert(L"更新成功");
+					}else
+					{
+						alert(L"更新失败");
+					}
+				}
+				return 1;
+			}
+			
+			//触发鼠标离开后tran事件,通过查找某个参数得到对应的列			
+			int OnBaseItemChanged(TEvent* evt, int p)
+			{
+				DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+				xstring colname=hdr.colname;
+				xstring value = hdr.data;
+				
+				xstring dwname = L"dw_list";
+				if(value != L"")
+				{
+					KXMLDOMNodeList nlist = GetElement().selectNodes(L"//*[@name='"+dwname+L"']/trans[@for='"+colname+L"']");
+					ViewObject::TransData(nlist, dw_list, hdr.row, colname, value);
+				}
+
+				return 1;
+			}
+				
+			
+			//命令处理事件
+				int OnXCommand(TEvent* evt, LPARAM param)
+				{
+					return OnCmdDispatch(evt->xcommand.pStrID);
+				}
+			
+			int OnAttachEvent()
+			{
+				//绑定工具条点击事件
+				AttachEvent(L"WM_XCOMMAND", (FEvent)&ExchangeRateWin::OnXCommand);
+				//获取焦点事件,用于重置工具条
+				AttachEvent(L"WM_SETFOCUS", (FEvent)&ExchangeRateWin::OnSetFocus);
+				AttachEvent(L"dw_list",L"DWV_ITEMCHANGED", (FEvent)&ExchangeRateWin::OnBaseItemChanged);
+				return 1;
+			}
+			
+			
+			int  OnRetrieve()
+			{
+				xml x = new xml;
+				
+				xaserverarg arg;
+				
+				arg.AddArg(L"QueryTxt",xcontrol(GetControl(L"search")).GetText());
+				
+				
+				if (getUrl(L"/sale/data/Expense3/ExchangeRateList",arg.GetString(),x)!=1)
+				{
+					trace(x.text());
+					return -1;
+				}else	
+				{
+					dw_list.Retrieve(x);
+					dw_list.Redraw();
+				}
+				return 1;
+			}
+		
+			int onload()
+			{
+				dw_list = GetControl(L"dw_list");
+				dw_list.openUrl(L"/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..7f16177
--- /dev/null
+++ b/jrj/project/business/BasicCode/ExpressList.cpp
@@ -0,0 +1,41 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ExpressList : public xwin
+{
+public:
+	xdwgrid	dw_list;
+public:
+	ExpressList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static ExpressList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ExpressList* pWin = new ExpressList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ExpressMaint.cpp b/jrj/project/business/BasicCode/ExpressMaint.cpp
new file mode 100644
index 0000000..ce669d1
--- /dev/null
+++ b/jrj/project/business/BasicCode/ExpressMaint.cpp
@@ -0,0 +1,346 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ExpressMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xdwtable dw_base;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xcell dw_cell;
+public:
+	ExpressMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ExpressMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ExpressMaint* pWin = new ExpressMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		dw_cell.SetCellProps(2, 2, strnew);
+		return 0;
+	}
+
+
+	xstring GetGuid() {
+		return publiccode::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			//trace(1);
+			m_userid = publiccode::GetUser().id;
+			m_username = publiccode::GetUser().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"有效");
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
+			dw_base.SetItemString(1, L"Type", L"8");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", publiccode::GetCurrentDate());
+			dw_base.SetItemString(1, L"PBAStatus", L"Y");
+
+
+		}
+		return 0;
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"maint");
+		return 1;
+	}
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
+			{
+				if(m_dels==L"")
+				{
+					m_dels=del;
+				}
+				else
+				{
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
+
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		//trace(m_dels);
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/express/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"E" + code;
+		}
+		return L"E1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ExpressNo = dw_base.GetItemString(1, L"ExpressNo");
+		if (ExpressNo == L"")
+		{
+			dw_base.SetItemString(1, L"ExpressNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			if (aName == L"")
+			{
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark");
+				trace(aTemp);
+				if (aTemp != L"")
+				{
+					alert(L"联系人名称必填!");
+					return -1;
+				}
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"")
+				{
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"1");
+					//dw_base.SetItemString(1,L"PrimaryContactID",dwcon.GetItemString(1,L"ContactID"));								
+				}
+
+
+
+			}
+		}
+		xdwtable dwcon1 = new xdwtable;
+		dwcon1.setNativePointer(dw_base.FindDwTable(L"PartyBankAccount", 0));
+		int j;
+		xstring sPBABankName = L"";
+		xstring sPBABankAccountNo = L"";
+		for (j = 1; j <= dwcon1.GetRowCount(); j++)
+		{
+			xstring sPBABankName = dwcon1.GetItemString(j, L"Bank");
+			xstring sPBABankAccountNo = dwcon1.GetItemString(j, L"BankNo");
+
+			xstring sPBAAll = sPBABankName + sPBABankAccountNo;
+			if (sPBAAll != L"")
+			{
+				if (sPBABankName == L"")
+				{
+					alert(L"银行名称不能为空");
+					return -1;
+				}
+				if (sPBABankAccountNo == L"")
+				{
+					alert(L"银行账户不能为空");
+					return -1;
+				}
+			}
+		}
+		return 1;
+	}
+	int OnSave()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入快递公司名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Express.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);				
+		if (getUrl(L"/sale/data/LogisticsCode/entity/express/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			setCellReadOnly();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		//trace(colname);
+		if (colname == L"ExpressNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
+				return 0;
+			}
+
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ExpressMaint::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ExpressMaint::OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ExpressMaint::OnCellChanged);
+		return 1;
+	}
+
+	int onload()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+
+		OnAttachEvent();
+		//if(!m_configDoc) return -1;
+
+		maint::onload();
+		OnClear();
+
+	}
+
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/FCL.cpp b/jrj/project/business/BasicCode/FCL.cpp
new file mode 100644
index 0000000..c612560
--- /dev/null
+++ b/jrj/project/business/BasicCode/FCL.cpp
@@ -0,0 +1,354 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) FCL : public xframe
+{
+public:
+	xcombobox ddlb_1;
+	int	changeddlb;
+	xdwgrid	dw_list;
+	int m_PageSize; //每页显示数量
+	int m_PageIndex; //第几页
+	xstring m_QueryTxt; //查询条件
+	xdwtable	dw_base;
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+	xstring m_config;
+	xstring m_spec;
+public:
+	FCL(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static FCL* CreateInstance(void* implPtr, void* hWnd)
+	{
+		FCL* pWin = new FCL(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnRetrieve()
+	{
+		xaserverarg arg;
+
+		xdwpages zz = new xdwpages;
+		zz.setNativePointer(GetControl(L"pages"));
+		xml x;
+
+		getUrl(L"/sale/data/FCL/entity/list", arg.GetString(), x);
+		KXMLDOMElement e = x.documentElement();
+		if (e.selectSingleNode(L"@TotalPage"))
+		{
+			xstring s = e.selectSingleNode(L"@TotalPage").text(); //总数量				
+			zz.SetMaxPage(s.toInt());
+		}
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		return 1;
+	}
+	int SetPriceBaseEmpty()
+	{
+		int rows = dw_base.GetColumnCount();
+		int i;
+		for (i = 1; i <= rows; i++)
+		{
+			dw_base.SetItemString(1, i, L"");
+			//dw_base.SetItemDisplayString(1,i,L"");				
+		}
+		dw_base.ResetUpdateStatus();
+		dw_base.Redraw();
+		return 1;
+	}
+	int SetCellEdit(int row, xstring name, xstring value, xstring display)
+	{
+		dw_base.SetItemString(row, name, value);
+		dw_base.Redraw();
+		if (display != L"")
+		{
+			dw_base.SetItemDisplayString(row, name, display);
+		}
+		dw_base.AcceptText();
+		dw_base.ResetUpdateStatus();
+		dw_base.Redraw();
+		return 1;
+	}
+	int OnSetCTGValue(int row)
+	{
+		dw_base.AcceptText();
+		SetPriceBaseEmpty();
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		var list = e.selectNodes(L"*");
+		if (list)
+		{
+			int s = list.length;
+			int i;
+			for (i = 0; i < s; i++)
+			{
+				xml x;
+				;
+				KXMLDOMElement xitem = list.item(i);
+				x.loadXML(xitem.xml());
+				//trace(xitem.xml);
+				KXMLDOMElement e1 = x.documentElement();
+				xstring name = e1.tagName();
+				trace(name);
+				trace(e1.text());
+				xstring display;
+				if (e1.selectSingleNode(L"@_displaystring"))
+				{
+					display = e1.selectSingleNode(L"@_displaystring").text();
+					SetCellEdit(1, name, e1.text(), L"" + display);
+				}
+				else
+					SetCellEdit(1, name, e1.text(), L"");
+
+			}
+		}
+		return 1;
+	}
+	int OnRowClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		OnSetCTGValue(row);
+		return 1;
+	}
+	int setMaint()
+	{
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		dw_list.SetItemString(row, L"PriceInfo", x.xml());
+		return 1;
+	}
+	int SetTotalAmount(int row, xstring name)
+	{
+		if (name == L"price20base" || name == L"price20BAF" || name == L"price20CAF" || name == L"price20add" || name == L"price20comm" || name == L"price20other")
+		{
+			double price20base = dw_base.GetItemString(row, L"price20base").toDouble();
+			double price20BAF = dw_base.GetItemString(row, L"price20BAF").toDouble();
+			double price20CAF = dw_base.GetItemString(row, L"price20CAF").toDouble();
+			double price20add = dw_base.GetItemString(row, L"price20add").toDouble();
+			double price20comm = dw_base.GetItemString(row, L"price20comm").toDouble();
+			double price20other = dw_base.GetItemString(row, L"price20other").toDouble();
+			double price20 = price20base + price20BAF + (price20CAF / 100) * price20base + price20add - (price20comm / 100) * price20base + price20other;
+			dw_base.SetItemString(1, L"price20", xstring(price20));
+		}
+
+		if (name == L"price40base" || name == L"price40BAF" || name == L"price40CAF" || name == L"price40add" || name == L"price40comm" || name == L"price40other")
+		{
+			double price40base = dw_base.GetItemString(row, L"price40base").toDouble();
+			double price40BAF = dw_base.GetItemString(row, L"price40BAF").toDouble();
+			double price40CAF = dw_base.GetItemString(row, L"price40CAF").toDouble();
+			double price40add = dw_base.GetItemString(row, L"price40add").toDouble();
+			double price40comm = dw_base.GetItemString(row, L"price40comm").toDouble();
+			double price40other = dw_base.GetItemString(row, L"price40other").toDouble();
+			double price40 = price40base + price40BAF + (price40CAF / 100) * price40base + price40add - (price40comm / 100) * price40base + price40other;
+			dw_base.SetItemString(1, L"price40", xstring(price40));
+		}
+
+		if (name == L"price40Hbase" || name == L"price40HBAF" || name == L"price40HCAF" || name == L"price40Hadd" || name == L"price40Hcomm" || name == L"price40Hother")
+		{
+			double price40Hbase = dw_base.GetItemString(row, L"price40Hbase").toDouble();
+			double price40HBAF = dw_base.GetItemString(row, L"price40HBAF").toDouble();
+			double price40HCAF = dw_base.GetItemString(row, L"price40HCAF").toDouble();
+			double price40Hadd = dw_base.GetItemString(row, L"price40Hadd").toDouble();
+			double price40Hcomm = dw_base.GetItemString(row, L"price40Hcomm").toDouble();
+			double price40Hother = dw_base.GetItemString(row, L"price40Hother").toDouble();
+			double price40H = price40Hbase + price40HBAF + (price40HCAF / 100) * price40Hbase + price40Hadd - (price40Hcomm / 100) * price40Hbase + price40Hother;
+			dw_base.SetItemString(1, L"price40h", xstring(price40H));
+		}
+		return 1;
+	}
+	int OnPriceBaseChanged(TEvent* evt, LPARAM p)
+	{
+		trace(L"123");
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring name = hdr.colname;
+		xstring value = hdr.data;
+		SetTotalAmount(1, name);
+		xstring price20 = dw_base.GetItemString(1, L"price20");
+		xstring price40 = dw_base.GetItemString(1, L"price40");
+		xstring price40h = dw_base.GetItemString(1, L"price40h");
+		dw_list.SetItemString(dw_list.GetRow(), L"price20", price20);
+		dw_list.SetItemString(dw_list.GetRow(), L"price40", price40);
+		dw_list.SetItemString(dw_list.GetRow(), L"price40h", price40h);
+		dw_list.Redraw();
+		setMaint();
+		return 1;
+	}
+	int OnListChanged(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		xstring colname = hdr.colname;
+		xstring value = hdr.data;
+		if (colname == L"port")
+		{
+			xml x;
+
+			xaserverarg arg;
+
+			arg.AddArg(L"code", value);
+			if (getUrl(L"/sale/data/FCL/pref/shipthread", arg.GetString(), x) != 1)
+			{
+				trace(x.xml());
+			}
+			KXMLDOMElement e = x.documentElement();
+			dw_list.SetItemString(row, L"shipthread", e.text());
+			dw_list.Redraw();
+		}
+
+
+		return 1;
+	}
+	int OnChangePages(TEvent* evt, LPARAM p)
+	{
+		PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
+		int c = h.cur;
+		HCURSOR hCursor = xutil::SetCursorWait();
+		m_pageIndex = c;
+		OnRetrieve();
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+	int  onSave()
+	{
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+	}
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<1 || row>dw_list.GetRowCount())
+		{
+			return -1;
+		}
+		dw_list.DeleteRow(row);
+
+	}
+	int OnAddrow()
+	{
+		int row = dw_list.InsertRow(0);
+		dw_list.SetItemString(row, L"modifieddate", publiccode::GetCurrentDate());
+		SetPriceBaseEmpty();
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row < 1) return 0;
+		int newrow = dw_list.InsertRow(row);
+		dw_list.SetItemString(newrow, L"modifieddate", publiccode::GetCurrentDate());
+		SetPriceBaseEmpty();
+		return 1;
+	}
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row > 0 && row <= dw_list.GetRowCount())
+		{
+			dw_list.DeleteRow(row);
+			//OnSetCTGValue(row);						
+		}
+		return 1;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"add", 0) >= 0)
+			OnAddrow();
+		else if (comdid.find(L"insert", 0) >= 0)
+			OnInsertRow();
+		else if (comdid.find(L"del", 0) >= 0)
+			OnDeleteRow();
+		else if (comdid.find(L"save", 0) >= 0)
+			onSave();
+		return 1;
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p) {
+		SetAgent();
+		return 1;
+	}
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnItemError(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring value = hdr.data;
+		int e = hdr.idFrom;
+		if (e == -1000)
+			alert(L"【" + value + L"】不是有效的数字!");
+		if (e == -1001)
+			alert(L"【" + value + L"】不是有效的数字!");
+		if (e == -1002)
+			alert(L"【" + value + L"】不是有效的日期!");
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&FCL::OnXCommand);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&FCL::OnRowClicked);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&FCL::OnSetFocus);
+		AttachEvent(L"pages", L"PAGE_CLICK", (FEvent)&FCL::OnChangePages);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnPriceBaseChanged);
+		AttachEvent(L"dw_base", L"DWV_ITEMERROR", (FEvent)&FCL::OnItemError);
+		AttachEvent(L"dw_list", L"DWV_ITEMCHANGED", (FEvent)&FCL::OnListChanged);
+		return 1;
+
+	}
+	int OnInit()
+	{
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"/sale/view/FCL/template/FCL/List");
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_base.openUrl(L"/sale/view/FCL/template/FCL/pricebase");
+		dw_list.SetReadOnlyColumn(L"shipthread", true);
+		dw_list.SetReadOnlyColumn(L"price20", true);
+		dw_list.SetReadOnlyColumn(L"price40", true);
+		dw_list.SetReadOnlyColumn(L"price40h", true);
+		return 1;
+	}
+
+	int onload()
+	{
+		m_PageSize = 30; //每页显示数量
+		m_PageIndex = 1; //第几页
+		m_QueryTxt = L""; //查询条件
+		OnInit();
+		OnAttachEvent();
+		OnRetrieve();
+		SetAgent();
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ForwarderList.cpp b/jrj/project/business/BasicCode/ForwarderList.cpp
new file mode 100644
index 0000000..5d58f1e
--- /dev/null
+++ b/jrj/project/business/BasicCode/ForwarderList.cpp
@@ -0,0 +1,135 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ForwarderList : public xwin
+{
+
+public:
+	//xdwpages dw_pages;
+	xstring m_QueryTxt;
+	KXMLDOMDocument m_configDoc;
+	xtreeview		tv_1;
+	xstring		sType;
+	static int dw_hWnd;
+	int m_pageIndex;
+	int m_pageNumber;
+	xdwgrid	dw_list;
+public:
+	ForwarderList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static ForwarderList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ForwarderList* pWin = new ForwarderList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+
+
+	int SetEntityData(xaserverarg arg)
+	{
+
+		arg.AddArg(L"sType", sType);
+		xml x;
+
+		getUrl(L"/sale/data/LogisticsCode/entity/list", arg.GetString(), x);
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			if (list::dw_pages.nativept && e.selectSingleNode(L"@TotalPage"))
+			{
+				xstring s = e.selectSingleNode(L"@TotalPage").text(); //总数量				
+				list::dw_pages.SetMaxPage(s.toInt());
+			}
+		}
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		dw_list.SetReadOnly(true);
+		return 1;
+	}
+
+
+
+
+	int OnRetrieve()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"pageindex", xstring(m_pageIndex)); //第几页
+		arg.AddArg(L"pagenumber", xstring(m_pageNumber)); //每页数量
+		//trace(list::m_QueryTxt);
+		arg.AddArg(L"QueryTxt", list::m_QueryTxt); //每页数量					
+		return SetEntityData(arg);
+	}
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		list::m_QueryTxt = L"";
+
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		//c_type=dw_type.GetItemLabel(hitem);
+		//如果是跟节点
+		HTREEITEM roothitem = tv_1.GetRootItem();
+		KXMLDOMElement e = tv_1.GetItemData(hitem);
+		xstring value = e.selectSingleNode(L"@data").text();
+		sType = value + L"";
+		OnRetrieve();
+		return 1;
+	}
+	int OnChangePages(TEvent* evt, LPARAM p)
+	{
+		PAGENMHDR& h = *(PAGENMHDR*)evt->notify.pnmh;
+		int c = h.cur;
+		HCURSOR hCursor = xutil::SetCursorWait();
+		m_pageIndex = c;
+		OnRetrieve();
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&ForwarderList::OnTreeSelChanged);
+		return 1;
+	}
+
+	int onload()
+	{
+		list::m_QueryTxt = L"";
+		m_pageIndex = 1;
+		m_pageNumber = 30;
+		sType = L"0";
+		list::onload();
+
+		OnAttachEvent();
+
+
+
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+
+		HTREEITEM root = tv_1.GetRootItem();
+		tv_1.ExpandItem(root);
+		dw_list.SetColumnStaus(L"ForwarderID", false);
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/ForwarderMaint.cpp b/jrj/project/business/BasicCode/ForwarderMaint.cpp
new file mode 100644
index 0000000..89951e0
--- /dev/null
+++ b/jrj/project/business/BasicCode/ForwarderMaint.cpp
@@ -0,0 +1,467 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ForwarderMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+
+	xdwtable dw_base;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xcell dw_cell;
+
+public:
+	ForwarderMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ForwarderMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ForwarderMaint* pWin = new ForwarderMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		//dw_cell.SetCellProps(2,2,strnew);			
+		return 0;
+	}
+
+	xstring GetGuid() {
+		return publiccode::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			trace(1);
+			m_userid = publiccode::GetUser().id;
+			m_username = publiccode::GetUser().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"ForwarderID", GetGuid());
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"普通");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PADPrimaryFlag", L"Y");
+			//dw_base.SetItemString(1,L"BankAccountID",GetGuid());				
+			dw_base.SetItemString(1, L"Type", L"5");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", publiccode::GetCurrentDate());
+			/*xdwtable dw =  new xdwtable;
+			dw.setNativePointer(dw_base.GetCurTable());
+			xdwtable dwcon =  new xdwtable;
+			dwcon.setNativePointer(dw.FindDwTable(L"Contacters",0));
+			dwcon.SetItemString(1,L"ContactID",GetGuid());
+			dwcon.SetItemString(1,L"PCStatus",L"1");*/
+			//dw_base.SetItemString(1,L"EBankAccountID",GetGuid());	
+			//dw_base.SetItemString(1,L"CBankAccountID",GetGuid());
+			/*xdwtable dweon =  new xdwtable;
+			dweon.setNativePointer(dw_base.FindDwTable(L"item1",0));
+			xdwtable dwcon =  new xdwtable;
+			dwcon.setNativePointer(dw_base.FindDwTable(L"item2",0));
+			dweon.SetItemString(1,L"EPBAStatus",L"Y");
+			dwcon.SetItemString(1,L"CPBAStatus",L"Y");
+			dweon.SetItemString(1,L"ECurrencyCode",L"USD");
+			dwcon.SetItemString(1,L"CCurrencyCode",L"RMB");*/
+			dw_base.SetItemString(1, L"ForwarderType", L"1");
+			dw_base.SetItemDisplayString(1, L"ForwarderType", L"预付货");
+			//dw_base.SetItemString(1,L"PrimaryContactID",dwcon.GetItemString(1,L"ContactID"));	
+
+		}
+		else
+		{
+			setCellReadOnly();
+		}
+		return 0;
+	}
+
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
+			{
+				if(m_dels==L"")
+				{
+					m_dels=del;
+				}
+				else
+				{
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
+
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		//trace(m_dels);
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"F" + code;
+		}
+		return L"F1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ForwarderNo = dw_base.GetItemString(1, L"ForwarderNo");
+		if (ForwarderNo == L"")
+		{
+			dw_base.SetItemString(1, L"ForwarderNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			trace(aName);
+			if (aName == L"")
+			{
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark") + dwcon.GetItemString(i, L"fz");
+				trace(aTemp);
+				if (aTemp != L"")
+				{
+					alert(L"联系人名称必填!");
+					return -1;
+				}
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"")
+				{
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"Y");
+					dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
+				}
+			}
+		}
+		xdwtable dwcon2 = new xdwtable;
+		dwcon2.setNativePointer(dw_base.FindDwTable(L"item2", 0));
+		int k;
+		xstring sPBABankName2 = L"";
+		xstring sPBABankAccountNo2 = L"";
+		for (k = 1; k <= dwcon2.GetRowCount(); k++)
+		{
+			sPBABankName2 = dwcon2.GetItemString(k, L"CBank");
+			sPBABankAccountNo2 = dwcon2.GetItemString(k, L"CBankNo");
+
+			xstring sPBAAll2 = sPBABankName2 + sPBABankAccountNo2;
+
+			if (sPBAAll2 != L"")
+			{
+				if (sPBABankName2 == L"")
+				{
+					alert(L"人民币银行名称不能为空");
+					return -1;
+				}
+				if (sPBABankAccountNo2 == L"")
+				{
+					alert(L"人民币银行账户不能为空");
+					return -1;
+				}
+				dwcon2.SetItemString(k, L"CPBAStatus", L"Y");
+				dwcon2.SetItemString(k, L"CCurrencyCode", L"RMB");
+				dwcon2.SetItemString(k, L"CBankAccountID", GetGuid());
+
+				if (dwcon2.GetItemString(k, L"CBankAccountID") != L"" && m_EntityID == L"")
+				{
+					dw_base.SetItemString(1, L"CBkAccountID", dwcon2.GetItemString(k, L"CBankAccountID"));
+				}
+			}
+		}
+		xdwtable  dwcon1 = new xdwtable;
+		dwcon1.setNativePointer(dw_base.FindDwTable(L"item1", 0));
+		int j;
+		xstring sPBABankName1 = L"";
+		xstring sPBABankAccountNo1 = L"";
+		for (j = 1; j <= dwcon1.GetRowCount(); j++)
+		{
+			xstring sPBABankName1 = dwcon1.GetItemString(j, L"EBank");
+			xstring sPBABankAccountNo1 = dwcon1.GetItemString(j, L"EBankNo");
+
+			xstring sPBAAll1 = sPBABankName1 + sPBABankAccountNo1;
+			if (sPBAAll1 != L"")
+			{
+				if (sPBABankName1 == L"")
+				{
+					alert(L"美金银行名称不能为空");
+					return -1;
+				}
+				if (sPBABankAccountNo1 == L"")
+				{
+					alert(L"美金银行账户不能为空");
+					return -1;
+				}
+				dwcon1.SetItemString(j, L"EPBAStatus", L"Y");
+				dwcon1.SetItemString(j, L"ECurrencyCode", L"USD");
+				dwcon1.SetItemString(j, L"EBankAccountID", GetGuid());
+				if (dwcon1.GetItemString(j, L"EBankAccountID") != L"" && m_EntityID == L"")
+				{
+					dw_base.SetItemString(1, L"EBkAccountID", dwcon1.GetItemString(j, L"EBankAccountID"));
+				}
+			}
+		}
+		return 1;
+	}
+	int OnPostSave()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xaserverarg args;
+
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		//trace(x.xml());
+
+		//主联系人
+		xstring spGuid;
+		KXMLDOMElement e;
+		var list = x.selectNodes(L"//item");
+		int nlen = list.length;
+		int i;
+		for (i = 0; i < nlen; i++)
+		{
+			e = list.item(i);
+			if (i == 0) spGuid = e.selectSingleNode(L"@guid").text();
+			xstring sP = e.selectSingleNode(L"PPrimaryFlag").text();
+			if (sP == L"Y")
+			{
+				spGuid = e.selectSingleNode(L"@guid").text();
+				break;
+			}
+		}
+		if (spGuid == L"")
+		{
+			trace(L"error");
+			return 0;
+		}
+		args.AddArg(L"contact", spGuid);
+		//trace(L"<---->");
+		//trace(spGuid);
+		xml x1;
+
+		if (getUrl(L"/sale/data/SupplierSubmit/pref/primarycontact", args.GetString(), x) != 1)
+		{
+			xstring error = x1.text();
+			trace(error);
+			return 0;
+		}
+
+
+		return 1;
+	}
+	int OnSave()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入货代名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Forwarder.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);				
+		if (getUrl(L"/sale/data/LogisticsCode/entity/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			OnPostSave();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		xstring coldata = hdr.data;
+		trace(colname);
+		if (colname == L"ForwarderNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
+				return 0;
+			}
+
+		}
+		//只能选一个主联系人
+		else if (colname == L"PPrimaryFlag" && coldata == L"Y")
+		{
+			xdwtable dw_pc;
+			dw_pc = new xdwtable;
+			dw_pc.setNativePointer(dw_base.FindDwTable(L"item"));
+			if (dw_pc)
+			{
+				int i;
+				for (i = 1; i <= dw_pc.GetRowCount(); i++)
+				{
+					if (i != hdr.row)
+						dw_pc.SetItemString(i, L"PPrimaryFlag", L"N");
+				}
+			}
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ForwarderMaint::OnXCommand);
+		//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ForwarderMaint::OnCellChanged);
+		return 1;
+	}
+	int onload()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+
+		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..b04754c
--- /dev/null
+++ b/jrj/project/business/BasicCode/FreightExpenseType.cpp
@@ -0,0 +1,176 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) FreightExpenseTypeWin :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+		int	 	seqno;
+	public:
+		FreightExpenseTypeWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static FreightExpenseTypeWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			FreightExpenseTypeWin* pWin = new FreightExpenseTypeWin(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		int CalcSeqNo()
+		{
+			seqno = -1;
+			for(int i=1; i<dw_list.GetRowCount();i++)
+			{
+				xstring val = dw_list.GetItemString(i,L"FieldName");
+				if(val.find(L"OtherFee")==0) continue;
+				if(val.find(L"Other")==0)
+				{
+					xstring no = val.mid(5,99999);
+					if(no.toInt()>seqno) seqno = no.toInt();
+				}
+			}
+			return seqno;
+		}
+				
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			dw_list.AcceptText();
+			xml x= new xml;
+			
+			dw_list.DwUpdateAllToEx(x);
+			
+			xaserverarg arg;
+			arg.setNativePointer(xaserverarg::CreateInstance());
+			arg.AddArg(L"content",x.xml());
+			
+			//trace(x.xml());
+			
+			if(xurl::get(L"/sale/data/LogisticsCode/entity/freightexpensetype/update", arg.GetString(),x)!=1)
+			{
+				xstring error = x.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			//alert(x.xml());
+			xstring str = x.documentElement().getAttribute(L"text");
+			trace(x.xml());
+			if(str == L"true")
+			{
+				dw_list.ResetUpdateStatus();
+				alert(L"保存成功!"); 
+			}else 
+			{
+				alert(L"保存失败!");
+			}
+			return 1;
+		}
+				
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAddRow")
+			{
+				dw_list.InsertRow(0);
+				if(seqno==-1) CalcSeqNo();
+				seqno++;
+				dw_list.SetItemString(dw_list.GetRowCount(),L"FieldName", L"Other"+xstring(seqno));
+				return 1;
+			}
+			else if(comdid==L"xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+			{
+				return OnSave();
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&FreightExpenseTypeWin::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&FreightExpenseTypeWin::OnSetFocus);
+			return 1;
+		}
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			
+			if (getUrl(L"/sale/data/LogisticsCode/entity/freightexpensetype/list",L"",x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/LogisticsCode/template/freightexpensetype/list");
+			dw_list.SetColumnState(L"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..d21425f
--- /dev/null
+++ b/jrj/project/business/BasicCode/PaymentTerm.list.cpp
@@ -0,0 +1,144 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class  __declspec(dllexport) PaymentTermlist111 : public xwin
+{
+public:
+
+	xdwgrid  dw_list;
+public:
+	PaymentTermlist111(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static PaymentTermlist111* CreateInstance(void* implPtr, void* hWnd)
+	{
+		PaymentTermlist111* pWin = new PaymentTermlist111(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	//xdwgrid	dw_list; 
+	int OnDBClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		//alert(row.toString());
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring id = e.selectSingleNode(L"TermID").text();
+		//alert( id);
+		xaserverarg arg ;
+		
+		arg.AddArg(L"EntityID", id);
+		//arg.AddArg(L"hwnd", GetHWND().toString());
+		
+		openUrl(L"/sale/view/Payment/worknode/Payment/maint", arg);
+		if (arg.GetArgString(L"ret") == L"Ok")
+		{
+			alert(L"OK");
+			list::onloaded();
+		}				
+		return 1;
+	}	
+	int OnDelete()
+	{
+		int row = dw_list.GetRow();
+		if (row < 1) return 1;				
+		KXMLDOMElement ele = dw_list.GetRowElement(row);
+		xstring termid = ele.selectSingleNode(L"TermID").text();
+		xaserverarg arg ; 
+			
+		arg.AddArg(L"termId",termid);
+		//alert(termid);
+		xml x1 ;
+	
+		if (xurl::post(L"/sale/data/PaymentTerm/entity/delete",arg.GetString(),x1) != 1)
+		{
+			xstring error = x1.text();
+			trace(error);
+		}
+		else
+		{
+			//error = x1.text();
+			//alert(error);
+			MessageBox(GetHWND(),L"删除成功!",L"提示",0);
+			dw_list.DeleteRow(row);
+		}
+	}
+		
+	int OnNew()
+	{
+		xaserverarg arg ;
+		
+		arg.AddArg(L"EntityID", L"new");
+		
+		//openUrl(L"/sale/view/Test/worknode/company/maint", arg);
+		openUrl(L"/sale/view/Payment/worknode/Payment/maint", arg);
+		return 0;
+	}
+	int OnOpen()
+	{
+		xaserverarg arg ;
+		
+		int row = dw_list.GetRow();
+		if (row < 1) 
+		{
+			MessageBox(GetHWND(),L"请选中要修改的行!",L"提示",0);
+			return -1;
+		}
+		KXMLDOMElement e = dw_list.GetRowElement(row);
+		xstring guid = e.selectSingleNode(L"TermID").text();
+		arg.AddArg(L"EntityID",guid);
+		
+		openUrl(L"/sale/view/Test2/worknode/company2/maint", arg);
+	
+	}
+	int OnRefresh()
+	{
+		list::onloaded();
+		return 0;
+	}
+	//按钮事件
+	int OnCmdDispatch(xstring comdid)
+	{
+		//alert(comdid);
+		if (comdid == L"action:bill.new") return OnNew();
+		else if(comdid == L"action:bill.open") return OnOpen();		
+		else if(comdid == L"Refresh") return OnRefresh();
+		else if(comdid == L"action:bill.delete") return OnDelete();		
+		return 0;
+	}	
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	//命令发布函数
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&PaymentTermlist111::OnXCommand);
+		//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+
+		//AttachEvent(L"dw_list",L"DWV_ROWFOCUSCHANGED",OnRowChanged);
+		AttachEvent(L"dw_list",L"DWV_DOUBLECLICKED", (FEvent)&PaymentTermlist111::OnDBClick);
+		return 1;
+	}
+	int onload()
+	{
+		
+		list::onload();
+		OnAttachEvent();
+	}
+	
+	int onloaded()
+	{
+		//OnRetrieve();
+		//alert(L"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..3604cc8
--- /dev/null
+++ b/jrj/project/business/BasicCode/PaymentTerm.maint.cpp
@@ -0,0 +1,429 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class  __declspec(dllexport) PaymentTermEdit : public xframe
+{
+public:
+	xdwtable dw_base;
+	xdwtable	dw_p;
+	xcell dw_cell;
+	xstring sCryno;
+public:
+	PaymentTermEdit(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static PaymentTermEdit* CreateInstance(void* implPtr, void* hWnd)
+	{
+		PaymentTermEdit* pWin = new PaymentTermEdit(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int OnAddrow()
+	{
+		dw_p = dw_base.FindDwTable(L"line");
+		int i;
+		double dDueAmount = 0;
+		double dPercnet = 100;
+		for (i = 1 ; i <= dw_p.GetRowCount();i++)
+		{
+			dDueAmount = dw_p.GetItemDouble(i,L"DueAmount");
+			if (dDueAmount > 0)
+				break;
+			dPercnet = dPercnet - dw_p.GetItemDouble(i,L"DuePercent");
+		}
+		int irow = dw_p.InsertRow(0);
+		dw_p.SetItemString(irow,L"SeqNo",xstring(irow));
+		if (dDueAmount <= 0)
+			dw_p.SetItemDouble(irow,L"DuePercent",dPercnet);
+		
+		return 1;
+	}
+	int OnDeleterow()
+	{
+		dw_p = dw_base.FindDwTable(L"line");
+		int row2 = dw_p.GetRow();
+		if (row2 < 1) return 0;
+		dw_p.DeleteRow(row2);
+
+		return 1;
+	}
+	xstring OnCreateTxt()
+	{
+		//dw_1.AcceptText(); //不能加会报错
+		int irow;
+		//int icnt = dw_1.GetRowCount();
+		dw_p = dw_base.FindDwTable(L"line");
+		int icnt = dw_p.GetRowCount();
+		if (icnt < 1) return L"";
+		xstring sTxt;
+		//double dPercnet = 100;
+		for (irow = 1;irow <= icnt ;irow ++)
+		{
+			xstring sPaymentMethod = dw_p.GetItemString(irow,L"PaymentMethod"); //支付方式
+			//xstring sDueDays = dw_p.GetItemDisplayString(irow,L"DueDays"); 
+			xstring sDueDays = dw_p.GetItemString(irow,L"DueDays"); //期限
+			xstring sDuePercent = dw_p.GetItemString(irow,L"DuePercent"); //比例
+			xstring sDueAmount = dw_p.GetItemString(irow,L"DueAmount"); //金额
+			
+			if (!sPaymentMethod || sPaymentMethod == L"")
+				sTxt = sTxt + L"";
+			if (!sDueDays || sDueDays == L"")
+				sTxt = sTxt + L"";
+			else
+			{
+				if (sDueDays == L"-1") sDueDays = L" IN ADVANCE";
+				else if (sDueDays == L"0") sDueDays = L" AT SIGHT";
+				else 
+				{
+					if (sPaymentMethod == L"T/T")
+						sDueDays = L" WITHIN "+sDueDays + L" DAYS AFTER SHIPMENT";
+					else
+						sDueDays = L" AT "+sDueDays + L" DAYS";
+				}
+				
+				if (!sDuePercent || sDuePercent == L"")
+				{
+					if (!sDueAmount || sDueAmount == L"")
+						sTxt = sTxt + L"";
+					else
+					{
+						
+						sTxt = sTxt + sCryno + L" " + sDueAmount + L" " + sPaymentMethod + sDueDays + L";";
+					}
+				}
+				else
+				{
+					if (sDuePercent.find(L".",0) >= 0)
+					{
+						while (sDuePercent.right(1) == L"0")
+						{
+							sDuePercent = sDuePercent.left(sDuePercent.length() - 1);
+						}
+						if (sDuePercent.right(1) == L".")
+							sDuePercent = sDuePercent.left(sDuePercent.length() - 1);
+					}
+				
+					sTxt = sTxt + sDuePercent + L"% " + sPaymentMethod+ sDueDays + L";";
+				}
+			}
+		}
+		
+		sTxt = sTxt.mid(0,sTxt.length() - 1);
+		if (sTxt != L"")
+			sTxt = sTxt + L".";
+
+		return sTxt;
+	}
+	int OnOk()
+	{
+		dw_base.AcceptText();
+		//判断是否有必输值为空
+		dw_p = dw_base.FindDwTable(L"line");
+		double dPercnet = 0;
+		double dAmount = 0;
+		xstring sChargeAll = L"";
+		if (dw_p)
+		{
+			int i;
+			for (i=1;i <= dw_p.GetRowCount();i++)
+			{
+				xstring seqNo = dw_p.GetItemString(i,L"SeqNo");
+				xstring sPaymentMethod = dw_p.GetItemString(i,L"PaymentMethod");
+				xstring sDueDays = dw_p.GetItemString(i,L"DueDays");
+				xstring sDuePercent = dw_p.GetItemString(i,L"DuePercent");
+				dPercnet = dPercnet + sDuePercent.toDouble();
+				xstring sDueAmount = dw_p.GetItemString(i,L"DueAmount");
+				dAmount = dAmount + sDueAmount.toDouble();
+				if (!seqNo) seqNo = L"";
+				if (!sPaymentMethod) sPaymentMethod = L"";
+				if (!sDueDays) sDueDays = L"";
+				if (!sDuePercent) sDuePercent = L"";
+				if (!sDueAmount) sDueAmount = L"";
+				dw_p.SetItemString(i,L"SeqNo",xstring(i));
+				sChargeAll = sPaymentMethod + sDueDays + sDuePercent + sDueAmount;
+				if (sChargeAll != L"")
+				{
+					if (sPaymentMethod == L"")
+					{
+						alert(L"支付方式不能为空!");
+						return 0;
+					}
+					if (sDueDays == L"")
+					{
+						alert(L"期限不能为空!");
+						return 0;
+					}
+
+				}
+			}
+		}
+		
+		//百分比校验
+		if (dw_p.GetRowCount() <= 1 && sChargeAll == L"")
+		{}
+		else
+		{
+			if (dPercnet != 100)
+			{
+				if (dAmount <= 0)
+				{
+					alert(L"比率不等于100!");
+					return 0;
+				}
+			}
+		}
+		
+		xstring sTxt = OnCreateTxt();
+		dw_base.SetItemString(1,L"PaymentTermEx",sTxt);
+
+		//CloseWindow();
+		return 1;
+	}
+	int OnItemChanged(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname=hdr.colname;
+		xstring value = hdr.data;
+		int row = hdr.row;
+		
+		if (colname == L"DueDays")
+		{
+			xdwtable dw;
+			dw = dw_base.FindDwTable(L"line");
+			
+			if (dw)
+			{
+				xstring sPaymentMethod = dw.GetItemString(row,L"PaymentMethod");
+				if (value == L"0")
+				{
+					if (sPaymentMethod == L"T/T")
+					{
+						//alert(L"此支付方式期限不能为 0 (AT SIGHT)");
+						//return -1;
+					}
+				}
+				else if (value == L"-1")
+				{
+					if (sPaymentMethod != L"T/T")
+					{
+						alert(L"此支付方式期限不能为 -1(IN ADVANCE)");
+						return -1;
+					}
+				}
+			}
+		
+		}
+		//生成支付条款文本
+		if (colname == L"PaymentMethod" || colname == L"DueDays" || colname == L"DuePercent" || colname == L"DueAmount")
+		{
+			xstring sTxt = OnCreateTxt();
+
+			dw_base.SetItemString(1,L"Description",sTxt);
+		}
+		
+		return 1;
+	}
+	int OnClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring value = hdr.data;
+		xstring colname = hdr.colname;
+		int row = hdr.row;
+		xaserverarg arg;
+		
+		//alert(row.toString());
+		xdwtable dw;
+		dw = dw_base.FindDwTable(L"line");
+		//alert(colname);
+		if (dw)
+		{
+			if (colname == L"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,L"DueAmount");
+					if (dDueAmount > 0)
+						break;
+				}
+				dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+				if (dDueAmount > 0)
+				{
+					dw.SetColumnProp(L"DuePercent",L"cellprotect",L"保护");//保护中文规格
+				}
+				else
+				{
+					dw.SetColumnProp(L"DuePercent",L"cellprotect",L"不保护");//保护中文规格
+				}
+					
+			}
+			
+			if (colname == L"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,L"DuePercent");
+					if (dDuePercent > 0)
+						break;
+				}
+				if (dDuePercent > 0)
+				{
+					dw.SetColumnProp(L"DueAmount",L"cellprotect",L"保护");//保护中文规格
+				}
+				else
+				{
+					dw.SetColumnProp(L"DueAmount",L"cellprotect",L"不保护");//保护中文规格
+				}
+			}
+			
+		}
+		
+		return 1;
+	}
+		
+	//保存事件
+	int OnSave()
+	{
+		if(OnOk()<1)return 0;
+		dw_base = GetControl(L"dw_base");
+		dw_base.AcceptText();
+		//dw_bank.AcceptText();
+		xml x ;
+		xaserverarg arg ;		
+		
+		dw_base.DwUpdateAllTo(x); 
+		//dw_bank.DwUpdateAllTo(x); 
+		//alert(x.xml());
+			
+		arg.AddArg(L"content",x.xml());						
+		arg.AddArg(L"dbmap",L"FND_PaymentTerm.dbmap");
+		//return 0;
+		if (getUrl(L"/sale/data/PaymentTerm/entity/company/save",arg.GetString(),x) != 1)
+		{
+			alert(L"保存失败!");
+			return 0;
+		}						
+		else
+		{	
+			//alert(x.xml());
+			if(x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;				
+			}
+			arg.AddArg(L"ret",L"Ok");
+			MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+			//alert(L"保存成功");
+			dw_base.ResetUpdateStatus();	
+			//dw_bank.ResetUpdateStatus();	
+			//xwin::SendMessage(parenthwnd, 0x401, L"maintsave", 0);//通知list窗口更新数据
+		}
+		//alert(L"保存成功");
+		dw_base.Redraw();	
+		//dw_bank.Redraw();	
+		CloseWindow();
+		return 0;
+	}
+			
+	int OnCmdDispatch(xstring comdid)
+	{
+		//alert(comdid);
+		if(comdid==L"xmOk") OnSave();
+		else if(comdid==L"addrow") OnAddrow();
+		else if(comdid==L"deleterow") OnDeleterow();
+		//else if(comdid==L"AddRow") OnAddRow();
+		//else if(comdid==L"InsertRow") OnInsertRow();
+		//else if(comdid==L"DeleteRow")OnDeleteRow();
+		return 1;
+	}
+
+	//按钮事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//按钮事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&PaymentTermEdit::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		//AttachEvent(L"WM_SETFOCUS",OnSetFocus);
+		AttachEvent(L"dw_base",L"DWV_ITEMCHANGED", (FEvent)&PaymentTermEdit::OnItemChanged);
+		AttachEvent(L"dw_base",L"DWV_CLICKED", (FEvent)&PaymentTermEdit::OnClick);
+		return 1;
+	}
+	int OnRetrieve()
+	{
+		if(GetWinParam())
+		{
+			int p = GetArg();
+			xaserverarg args ;
+			
+			xstring id = args.GetArgString(L"EntityID");
+			//alert(id);
+			if(id==L"new")
+			{
+				
+				//OnAddNew();
+			}
+			else
+			{
+				xml x ;
+				
+				if(getUrl(L"/sale/data/PaymentTerm/entity/base12", args.GetString(), x) != 1)
+				{
+					alert(L"错误");
+					return -1;
+				}
+				//alert(x.xml());
+				dw_base.Retrieve(x);
+				//dw_bank.Retrieve(x);
+				dw_base.Redraw();
+				//dw_bank.Redraw();
+			}
+		}
+		return 1;
+	}
+
+	int onload()
+	{
+		SetArg();
+		//maint::onload();
+		//maint::onloaded();
+		dw_base = GetControl(L"dw_base");
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		dw_base.openUrl(L"/sale/view/Payment/template/Payment/maint");
+		//alert(L"1233");
+		OnRetrieve();
+		OnAttachEvent();
+		//dw_base = GetControl(L"dw_base");
+		
+	}
+	
+	int onloaded()
+	{	
+		//maint::onloaded();
+		//alert(L"response");
+		//dw_base = GetControl(L"dw_base");
+		//dw_cell = new xcell;
+		//dw_cell.setNativePointer(dw_base.QueryItem(L"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..80468cf
--- /dev/null
+++ b/jrj/project/business/BasicCode/ProfitParam.cpp
@@ -0,0 +1,140 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) ProfitParamList :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		ProfitParamList(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static ProfitParamList* CreateInstance(void* implPtr, void* hWnd)
+		{
+			ProfitParamList* pWin = new ProfitParamList(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+		int OnSave()
+		{
+			xml x = new xml;
+			
+			dw_list.AcceptText();
+			dw_list.DwUpdateAllToEx(x);
+			xaserverarg arg;
+			arg.setNativePointer(xaserverarg::CreateInstance());
+			arg.AddArg(L"content",x.xml());
+			if(xurl::get(L"/sale/data/Gdn/update/ProParamUpdate", arg.GetString(),x)!=1)
+			{
+				xstring error = x.text();
+				alert(L"err:"+error);
+				return 1;
+			}
+			xstring str = x.documentElement().getAttribute(L"text");
+			if(str == L"true")
+			{
+				dw_list.ResetUpdateStatus();
+				dw_list.Redraw();
+				alert(L"保存成功!"); 
+			}else 
+			{
+				alert(L"保存失败!");
+			}
+		}
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid == L"xmsave")
+			{
+				OnSave();
+			}
+			else if(comdid == L"xmrefresh")
+			{
+				OnRetrieve();
+			}
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&ProfitParamList::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&ProfitParamList::OnSetFocus);
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x = ViewObject::RetrieveData(L"/sale/data/Gdn/profit/profitParamList");
+			if(x)
+			{
+				//alert(x.xml());
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			OnAttachEvent();	
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/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..ffc66cf
--- /dev/null
+++ b/jrj/project/business/BasicCode/QuickCode.cpp
@@ -0,0 +1,678 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) QuickCode : public xwin
+{
+public:
+	xdwgrid	dw_list;
+
+	xstring m_config;
+	xstring m_agent;
+	xstring m_id;
+	xstring m_dbmap;
+	xstring m_name;
+	xstring strconfig;
+	KXMLDOMDocument m_configDoc;
+	xnode	m_agentNode;
+public:
+	QuickCode(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static QuickCode* CreateInstance(void* implPtr, void* hWnd)
+	{
+		QuickCode* pWin = new QuickCode(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnCmdDispatch(xstring comdid)
+	{
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (comdid == L"save") {
+			//type
+			xaserverarg args;
+
+			args.AddArg(L"id", m_id);
+			args.AddArg(L"name", m_name);
+			xml y;
+
+			//TDataSet::exec(m_config,L"savetype",args,y);
+			//url::post(L"QuickCode/pref/quickcode_type.save",args.GetString(),y); 			
+			//save
+
+			xml x;
+
+			xaserverarg arg;
+
+			dw_list.AcceptText();
+			dw_list.DwUpdateAllToEx(x);
+			KXMLDOMElement e = x.documentElement();
+			e.setAttribute(L"id", m_id);
+			//arg.AddArg(L"id",m_id);
+			arg.AddArg(L"content", e.xml());
+			arg.AddArg(L"dbmap", m_dbmap);
+			//trace(L"-->",m_id);					
+			//trace(L"-->",m_dbmap);
+			//trace(e.xml());				
+			/*if(TDataSet::exec(m_config,L"save",arg,x)!=1)
+			{
+				trace(L"error:"+x.xml());
+				alert(L"保存出错!");
+				return 0;
+			}*/
+			//trace(m_dbmap);
+			trace(x.xml());
+			if (xurl::get(L"QuickCode/pref/quickcode.save", arg.GetString(), x) != 1)
+			{
+				xstring error = x.text();
+				trace(error);
+			}
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			dw_list.ResetUpdateStatus();
+			alert(L"保存成功!");
+		}
+		else if (comdid == L"add") {
+			dw_list.InsertRow(0);
+			int rows = dw_list.GetRowCount();
+			dw_list.SetRow(rows);
+			dw_list.SetItemString(rows, L"ToCurrencyCode", L"RMB");
+			dw_list.SetItemDisplayString(rows, L"ToCurrencyCode", L"人民币");
+		}
+		else if (comdid == L"insert") {
+			int row = dw_list.GetRow();
+			if (row<1 || row>dw_list.GetRowCount()) return 0;
+			dw_list.InsertRow(row);
+			dw_list.SetItemString(row, L"ToCurrencyCode", L"RMB");
+			dw_list.SetItemDisplayString(row, L"ToCurrencyCode", L"人民币");
+		}
+		else if (comdid == L"delet") {
+			/*int rows = dw_list.GetRowCount();
+			int row2 = dw_list.GetPrevSelectRow(rows);
+			while(row2 > 0){
+				dw_list.DeleteRow(row2);
+				row2 = dw_list.GetPrevSelectRow(row2 - 1);
+			}
+			dw_list.SelectRow(0, false);*/
+			int row2 = dw_list.GetRow();
+			if (row2<1 || row2>dw_list.GetRowCount()) return 0;
+			dw_list.DeleteRow(row2);
+		}
+		else if (comdid == L"import") {
+			if (m_id == L"FND_ExchangeRate")
+			{
+				int ll_delq = MessageBox(GetHWND(), L"确定要从老系统导入汇率数据吗?", L"提示", 1);
+				if (ll_delq != 1)
+					return 0;
+				xml xi;
+
+				xaserverarg argi;
+				argi.setNativePointer(argi.CreateInstance());
+				if (xurl::get(L"QuickCode/ExchangeRate/import", argi.GetString(), xi) != 1)
+				{
+					trace(xi.text());
+					return -1;
+				}
+				alert(L"导入成功!");
+				dw_list.Redraw();
+			}
+
+		}
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p) {
+		SetAgent();
+		return 1;
+	}
+	int OnClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		int col = hdr.col + 1;
+		xstring colname = dw_list.GetColumnName(col);
+		trace(colname);
+		xaserverarg arg;
+
+		xstring comdid;
+		if (colname == L"CategoryID")
+		{
+			openUrl(L"产品资料.vface/xpage/product/category/dialog", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"ok")
+			{
+				xstring CategoryID = arg.GetArgString(L"CategoryID");
+				xstring CName = arg.GetArgString(L"CName");
+				dw_list.SetItemDisplayString(row, colname, CName);
+				dw_list.SetItemString(row, colname, CategoryID);
+				dw_list.Redraw();
+			}
+		}
+		else if (colname == L"MkOrgId")
+		{
+			openUrl(L"组织架构.vface/xpage/HrOrg/Chart", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"xmOk")
+			{
+				xstring OrgName = arg.GetArgString(L"OrgName");
+				xstring OrgId = arg.GetArgString(L"OrgId");
+				dw_list.SetItemDisplayString(row, colname, OrgName);
+				dw_list.SetItemString(row, colname, OrgId);
+				dw_list.Redraw();
+			}
+		}
+		else if (colname == L"Cid")
+		{
+			openUrl(L"组织架构.vface/xpage/hremployee/select", arg);
+			comdid = arg.GetArgString(L"comdid");
+			if (comdid == L"xmOk")
+			{
+				xstring sPersonID = arg.GetArgString(L"sPersonID");
+				trace(sPersonID);
+				xstring sPersonName = arg.GetArgString(L"sPersonName");
+				dw_list.SetItemDisplayString(row, colname, sPersonName);
+				dw_list.SetItemString(row, colname, sPersonID);
+				dw_list.Redraw();
+			}
+		}
+		return 1;
+	}
+	int OnDoubleClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		if (row<1 || row > dw_list.GetRowCount()) return 0;
+
+		xaserverarg arg;
+
+		//xstring str = hdr.data;
+		xstring colname = hdr.colname;
+		xstring str = dw_list.GetItemString(row, colname);
+		arg.AddArg(L"value", str);
+		openUrl(L"/sale/view/view.dlg/xpage/memo/edit", arg);
+		xstring comdid = arg.GetArgString(L"comdid");
+		if (comdid == L"xmOK")
+		{
+			xstring value = arg.GetArgString(L"value");
+			dw_list.SetItemString(row, colname, value);
+			dw_list.Redraw();
+		}
+
+		return 1;
+	}
+	int ItemOutput()
+	{
+		xstring d = xaserver::GetCurrentDate();
+		d = d.left(10) + L"";
+		dw_list.SaveAs(d);
+		return 1;
+	}
+	int OnSelectAllRow()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		dw_list.SelectRow(1, rows, true);
+		dw_list.Redraw();
+		return 1;
+	}
+	int OnRowCopy()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		int cols = dw_list.GetColumnCount();
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		int i;
+		while (row > 0)
+		{
+			xstring tmp1 = L"";
+			for (i = 1; i < cols; i++)
+			{
+				int w = dw_list.GetColumnWidth(i);
+				if (w < 5) continue;
+				xstring tmp;
+				if (dw_list.GetItemDisplayString(row, i + 1))
+					tmp = dw_list.GetItemDisplayString(row, i + 1);
+				else
+					tmp = dw_list.GetItemString(row, i + 1);
+				tmp1 += tmp + L"\t";
+			}
+			str += tmp1 + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+		return 1;
+	}
+	int OnColCopy(xstring col)
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		while (row > 0)
+		{
+			xstring tmp;
+			if (dw_list.GetItemDisplayString(row, col))
+				tmp = dw_list.GetItemDisplayString(row, col);
+			else
+				tmp = dw_list.GetItemString(row, col);
+			str += tmp + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+
+		return 1;
+	}
+	int OnRClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+
+		int m = win::CreatePopupMenu();
+		int MF_STRING = 0x00000000;
+		int MF_DISABLED = 0x00000002;
+		int TPM_RIGHTBUTTON = 0x0002;
+		int TPM_RETURNCMD = 0x0100;
+		int MF_CHECKED = 0x8;
+		int MF_SEPARATOR = 0x0800;
+		win::AppendMenu(m, MF_STRING, 1, L"复制行");
+		win::AppendMenu(m, MF_STRING, 101, L"复制列");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 2, L"全选");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 4, L"导出到Excel");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 6, L"显示列设置");
+		xrect xr;
+		xpoint pt;
+		win::GetCursorPos(pt);
+		int ret = win::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), xr);
+
+		//trace(ret);
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (ret == 1) { OnRowCopy(); }
+		else if (ret == 101) {
+			xstring colname = hdr.colname;
+			if (colname != L"")
+				OnColCopy(colname);
+		}
+		else if (ret == 2) { OnSelectAllRow(); }
+		else if (ret == 4) { ItemOutput(); }
+		else if (ret == 6) {}
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&QuickCode::OnSetFocus);
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&QuickCode::OnXCommand);
+		AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&QuickCode::OnDoubleClicked);//行双击	
+		AttachEvent(L"dw_list", L"DWV_ITEMBEINGEDIT", (FEvent)&QuickCode::OnClicked);
+		AttachEvent(L"dw_list", L"DWV_RCLICKED", (FEvent)&QuickCode::OnRClick);//鼠标右键
+		return 1;
+	}
+	int OnRetrieve()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		trace(L"asdasd");
+
+		if (m_id.find(L"", 0) > 0)
+		{
+			m_id = m_id.mid(0, m_id.find(L"", 0));
+			arg.AddArg(L"id", m_id);
+			//trace(m_id);				
+			/*if (TDataSet::exec(m_config, L"query_remark", arg.GetString(),x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}*/
+			if (xurl::get(L"QuickCode/entity/list_remark", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}
+		}
+		else
+		{
+			trace(L"asdasd");
+			arg.AddArg(L"id", m_id);
+			arg.AddArg(L"querytxt", L"");
+			/*if (TDataSet::exec(m_config, L"query", arg.GetString(),x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}*/
+			if (xurl::get(L"QuickCode/entity/list", arg.GetString(), x) != 1)
+			{
+				trace(x.text());
+				return -1;
+			}
+		}
+
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		return 1;
+	}
+	xstring jxParam(xstring p, xstring n)
+	{
+		if (p != L"")
+		{
+			p += L"&";
+			int i = 1;
+			while (p.find(L"=L", 0) > 0)
+			{
+				xstring name = p.mid(0, p.find(L"=L", 0));
+				xstring value = p.mid(p.find(L"=L", 0) + 1, p.find(L"&", 0) - p.find(L"=L", 0) - 1);
+				if (name == n) return L"" + value;
+				i += 1;
+				p = p.mid(p.find(L"&", 0) + 1, p.length());
+			}
+		}
+		return "";
+	}
+	int getURLParam()
+	{
+		if (GetWinParam())
+		{
+			xpage xp = new xpage;
+			xp.setNativePointer(GetXPage());
+			xstring aurl = xp.GetWkUrl();
+			xaserverarg arg;
+			if (aurl && aurl.find(L"native=true", 0) > 0)
+			{
+				int p = GetParam();
+				arg;
+				arg.setNativePointer(p);
+			}
+			else
+			{
+				arg = GetParam();
+			}
+			xstring config = arg.GetArgString(L"config");
+			xml x;
+
+			if (config == L"")
+			{
+				xstring configXml = arg.GetArgString(L"configxml");
+				x.loadXML(configXml);
+			}
+			else
+			{
+				getUrl(config, L"", x);
+			}
+			m_configDoc = x;
+
+		}
+
+		return 1;
+	}
+	int loaded()
+	{
+		getURLParam();
+		KXMLDOMDocument	 ee = m_configDoc;
+		xstring id = m_id;
+		var n = ee.selectSingleNode(L"//list/dwview[@type='dwgrid'][@id='" + id + L"']");
+		xstring vface = m_configDoc.selectSingleNode(L"//vface[1]").text();
+		xstring dwname = L"";//e.selectsingleNode(L"@name").text();
+		xstring tpl = L"";//e.selectsingleNode(L"@url").text();
+		xstring dbmap = L"";
+		if (n)
+		{
+			KXMLDOMElement e = n;
+			//trace(e.xml());
+			if (e.selectSingleNode(L"@name")) dwname = e.selectSingleNode(L"@name").text();
+			if (e.selectSingleNode(L"@url")) tpl = e.selectSingleNode(L"@url").text();
+			if (e.selectSingleNode(L"@dbmap")) dbmap = e.selectSingleNode(L"@dbmap").text();
+			//trace(vface +L"/"+ tpl);
+			//trace(selectmode);			
+		}
+		else
+		{
+			var m = ee.selectSingleNode(L"//list");
+			KXMLDOMElement e1 = m;
+			//trace(e.xml());
+			if (e1.selectSingleNode(L"@name")) dwname = e1.selectSingleNode(L"@name").text();
+			if (e1.selectSingleNode(L"@url")) tpl = e1.selectSingleNode(L"@url").text();
+			if (e1.selectSingleNode(L"@dbmap")) dbmap = e1.selectSingleNode(L"@dbmap").text();
+
+		}
+		m_dbmap = dbmap;
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(dwname));
+		dw_list.openUrl(vface + L"/" + tpl);
+		//dw_list.SetSelectionMode(4);							
+
+	}
+	int Onital()
+	{
+		//地区
+		xml x1;
+
+		xaserverarg arg1;
+		arg1.setNativePointer(arg1.CreateInstance());
+		arg1.AddArg(L"id", L"地区");
+		if (xurl::get(L"/sale/data/QuickCode/entity/list", arg1.GetString(), x1) != 1)
+		{
+			trace(x1.text());
+			return -1;
+		}
+
+		var list = x1.selectNodes(L"root/item");
+		int i;
+		int s = list.length;
+		if (s > 0)
+		{
+			xstring str = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
+			for (i = 0; i < s; i++)
+			{
+				KXMLDOMElement xitem = list.item(i);
+				xstring id = L"";
+				if (xitem.selectSingleNode(L"Code"))
+					id = xitem.selectSingleNode(L"Code").text();
+				xstring name = L"";
+				if (xitem.selectSingleNode(L"Meaning"))
+					name = xitem.selectSingleNode(L"Meaning").text();
+				xstring tmp = L"&lt;row>&lt;显示列>" + name + L"&lt;/显示列>&lt;数据列>" + id + L"&lt;/数据列>&lt;/row>";
+				str += tmp;
+			}
+			str += L"&lt;/data>'/></cellprop>";
+
+
+			dw_list.SetColumnProps(L"AreaCode", str);
+		}
+		//币别
+		xml x2;
+
+		xaserverarg arg2;
+		arg2.setNativePointer(arg2.CreateInstance());
+		arg2.AddArg(L"id", L"FND_Currency");
+		if (xurl::get(L"/sale/data/QuickCode/entity/list", arg2.GetString(), x2) != 1)
+		{
+			trace(x2.text());
+			return -1;
+		}
+
+		var list1 = x2.selectNodes(L"root/item");
+		int j;
+		int s1 = list1.length;
+		if (s1 > 0)
+		{
+			xstring str1 = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
+			for (j = 0; j < s1; j++)
+			{
+				KXMLDOMElement xitem1 = list1.item(j);
+				xstring id1 = L"";
+				if (xitem1.selectSingleNode(L"Code"))
+					id1 = xitem1.selectSingleNode(L"Code").text();
+				xstring name1 = L"";
+				if (xitem1.selectSingleNode(L"Name"))
+					name1 = xitem1.selectSingleNode(L"Name").text();
+				xstring tmp1 = L"&lt;row>&lt;显示列>" + name1 + L"&lt;/显示列>&lt;数据列>" + id1 + L"&lt;/数据列>&lt;/row>";
+				str1 += tmp1;
+			}
+			str1 += L"&lt;/data>'/></cellprop>";
+
+
+			dw_list.SetColumnProps(L"FromCurrencyCode", str1);
+		}
+		//国家
+		xml x3;
+
+		xaserverarg arg3;
+		arg3.setNativePointer(arg3.CreateInstance());
+		arg3.AddArg(L"id", L"FND_Country");
+		if (xurl::get(L"/sale/data/QuickCode/entity/list", arg3.GetString(), x3) != 1)
+		{
+			trace(x3.text());
+			return -1;
+		}
+
+		var list2 = x3.selectNodes(L"root/item");
+		int k;
+		int s2 = list2.length;
+		if (s2 > 0)
+		{
+			xstring str2 = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''><edit edittype='ddlb' ddlbxml='&lt;data>";
+			for (k = 0; k < s2; k++)
+			{
+				KXMLDOMElement xitem2 = list2.item(k);
+				xstring id2 = L"";
+				if (xitem2.selectSingleNode(L"Code"))
+					id2 = xitem2.selectSingleNode(L"Code").text();
+				xstring name2 = L"";
+				if (xitem2.selectSingleNode(L"Name"))
+					name2 = xitem2.selectSingleNode(L"Name").text();
+				xstring tmp2 = L"&lt;row>&lt;显示列>" + name2 + L"&lt;/显示列>&lt;数据列>" + id2 + L"&lt;/数据列>&lt;/row>";
+				str2 += tmp2;
+			}
+			str2 += L"&lt;/data>'/></cellprop>";
+
+
+			dw_list.SetColumnProps(L"MkCountryId", str2);
+		}
+		dw_list.SetReadOnlyColumn(L"ToCurrencyCode");
+	}
+	int onload()
+	{
+		SetArg();
+		m_config = L"QuickCode.config";
+		m_agent = L"";
+
+		//dw_list = new xdwgrid;
+		//dw_list.setNativePointer(GetControl(L"dw_list"));
+		//dw_list.SetSelectionMode(4);
+		//dw_list.AllowSort(false);			
+		if (GetWinParam())
+		{
+			xaserverarg arg = GetArg();
+			xstring id = arg.GetArgString(L"id");
+			if (id == L"") return 0;
+			m_id = id;
+			loaded();
+
+			/*xstring tpl = arg.GetArgString(L"tpl");
+			if(tpl == L"" && (m_id.find(L"",0) >0))
+				tpl = L"QuickCode.tpl/QuickCode_Remark";
+			else if(tpl == L"" )
+				tpl = L"QuickCode.tpl/QuickCode";
+			dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]");
+			xstring dbmap = arg.GetArgString(L"dbmap");
+			if(dbmap == L""  && (m_id.find(L"",0)  >0) )
+				dbmap = L"QuickCode_Remark.dbmap";
+			else if(dbmap == L"")
+				dbmap =L"QuickCode.dbmap";
+			m_dbmap = dbmap;
+			xstring name = arg.GetArgString(L"name");
+			if(name == L"")
+				name = id;
+			m_name = name;
+			xstring title = arg.GetArgString(L"title");
+			if(title != L"")
+				win::SetWindowText(GetHWND(),title);*/
+
+
+
+
+				/*
+				param p = GetParam();
+				xstring pa = L""+p;
+				//xstring pa = L"id=HrOrgType&title=客户类型";
+				xstring id = jxParam(pa,L"id");
+				if(id == L"") return 0;
+				m_id = id;
+				xstring tpl = jxParam(pa,L"tpl");
+				if(tpl == L"" && (m_id.find(L"",0) >0))
+					tpl = L"QuickCode.tpl/QuickCode_Remark";
+				else if(tpl == L"" )
+					tpl = L"QuickCode.tpl/QuickCode";
+				dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]");
+				xstring dbmap = jxParam(pa,L"dbmap");
+				if(dbmap == L""  && (m_id.find(L"",0)  >0) )
+					dbmap = L"QuickCode_Remark.dbmap";
+				else if(dbmap == L"")
+					dbmap =L"QuickCode.dbmap";
+				m_dbmap = dbmap;
+				//trace(m_dbmap);
+
+				xstring name = jxParam(pa,L"name");
+				if(name == L"")
+					name = id;
+				m_name = name;
+				xstring title = jxParam(pa,L"title");
+				if(title != L"")
+					win::SetWindowText(GetHWND(),title);*/
+			OnRetrieve();
+		}
+
+		OnAttachEvent();
+		SetAgent();
+		Onital();
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/QuickCode_Tree.cpp b/jrj/project/business/BasicCode/QuickCode_Tree.cpp
new file mode 100644
index 0000000..b8b99b0
--- /dev/null
+++ b/jrj/project/business/BasicCode/QuickCode_Tree.cpp
@@ -0,0 +1,696 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) QuickCode_Tree : public xwin
+{
+public:
+	xdwgrid	dw_list;
+	xtreeview	tv_1;
+	xstring m_config;
+	xstring m_agent;
+	xstring m_id;
+	xstring m_dbmap;
+	xstring treexquery;
+	xstring		c_type;
+	KXMLDOMDocument m_configDoc;
+	xstring kpstr;
+	xstring strtpl;
+	xstring m_QueryTxt;
+	xnode	m_agentNode;
+public:
+	QuickCode_Tree(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static QuickCode_Tree* CreateInstance(void* implPtr, void* hWnd)
+	{
+		QuickCode_Tree* pWin = new QuickCode_Tree(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		TApp::alert(this, str);
+		//win::MessageBox(GetHWND(),str,L"提示:",0);
+		return 0;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+	int OnRetrieve()
+	{
+		dw_list.AcceptText();
+		xml x;
+
+		xaserverarg arg;
+
+		arg.AddArg(L"id", m_id);
+		arg.AddArg(L"sType", c_type);
+		arg.AddArg(L"QueryTxt", m_QueryTxt);
+		//trace(arg.GetString());
+		/*if (TDataSet::exec(m_config, L"query1", arg.GetString(),x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}*/
+		if (xurl::get(L"QuickCode/entity/listaddtree", arg.GetString(), x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		//trace(x.xml());
+		if (x.xml() == L"")
+		{
+			xml xx;
+			xx.loadXML(L"<root/>");
+			dw_list.Retrieve(xx);
+			dw_list.Redraw();
+		}
+		else
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+
+		return 1;
+	}
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+
+
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		//c_type=dw_type.GetItemLabel(hitem);
+		//如果是跟节点
+		HTREEITEM roothitem = tv_1.GetRootItem();
+		if (hitem == roothitem) {
+			c_type = L"";
+		}
+		else
+		{
+			c_type = tv_1.GetItemLabel(hitem);
+
+		}
+		OnRetrieve();
+		return 1;
+	}
+	int adduomfolder()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"note", L"新增");
+		arg.AddArg(L"m_id", m_id);
+		//win::OpenWindow(L"dev:xpage[AddUomGroup.vx]",arg);
+		openUrl(L"公共设置.vface/xpage/quickcode/AddGroup", arg);
+		xstring ok = arg.GetArgString(L"return");
+		if (ok == L"ok") {
+			xstring GroupName = arg.GetArgString(L"GroupName");
+			xml xx;
+
+			xaserverarg args;
+
+			args.AddArg(L"GroupName", GroupName);
+			args.AddArg(L"OldGroupName", L"");
+			args.AddArg(L"m_id", m_id);
+			/*if(TFile::exec(m_config,L"updateuomtype",args,xx)!=1)
+			{
+				trace(L"error:"+xx.xml());
+				alert(L"保存出错!");
+				return 0;
+			}*/
+			if (xurl::get(L"QuickCode/pref/quickcode_tree.updateGroup", args.GetString(), xx) != 1)
+			{
+				trace(L"error:" + (xstring)xx.xml());
+				alert(L"保存出错!");
+				return 0;
+			}
+			else
+			{
+				xstring vv = xx.documentElement().text();
+				xml x;
+
+				x.loadXML(L"<row GroupName='" + GroupName + L"'/>");
+				HTREEITEM root = tv_1.GetRootItem();
+				if (vv == L"OK")
+				{
+					tv_1.InsertChildItem(root, GroupName, x.documentElement(), 15);
+				}
+
+			}
+		}
+		return 1;
+	}
+	int modifyuomfolder()
+	{
+
+		HTREEITEM h = tv_1.GetSelectedItem();
+		if (!h)
+		{
+			alert(L"请选择需要修改的组名");
+			return 0;
+		}
+		HTREEITEM roothitem = tv_1.GetRootItem();
+		if (h == roothitem)
+		{
+			alert(L"不能修改根节点名称!");
+		}
+		else
+		{
+			KXMLDOMElement e = tv_1.GetItemData(h);
+			trace(e.xml());
+			//xstring  OldGroupName= e.SelectSingleNode(L"@GroupName").text();
+			xstring  OldGroupName = tv_1.GetItemLabel(h);
+			xaserverarg arg;
+
+			arg.AddArg(L"note", L"修改");
+			arg.AddArg(L"m_id", m_id);
+			arg.AddArg(L"GroupName", OldGroupName);
+			OpenWindow(L"dev:xpage[AddUomGroup.vx]", arg);
+			xstring ok = arg.GetArgString(L"return");
+			if (ok == L"ok") {
+				xstring NewGroupName = arg.GetArgString(L"GroupName");
+				xml xx;
+
+				xaserverarg args;
+
+				args.AddArg(L"GroupName", NewGroupName);
+				args.AddArg(L"OldGroupName", OldGroupName);
+				args.AddArg(L"m_id", m_id);
+				/*if(TFile::exec(m_config,L"updateuomtype",args,xx)!=1)
+				{
+					trace(L"error:"+xx.xml());
+					alert(L"保存出错!");
+					return 0;
+				}*/
+				if (xurl::get(L"QuickCode/pref/quickcode_tree.updateGroup", args.GetString(), xx) != 1)
+				{
+					trace(L"error:" + (xstring)xx.xml());
+					alert(L"保存出错!");
+					return 0;
+				}
+				else
+				{
+					trace(xx.xml());
+					xstring vv = xx.documentElement().text();
+					if (vv == L"OK")
+					{
+						tv_1.SetItemLabel(h, NewGroupName);
+					}
+
+				}
+			}
+		}
+		return 1;
+	}
+	int deluomfolder()
+	{
+
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		if (!hitem)
+		{
+			alert(L"请选择需要删除的组名");
+			return 0;
+		}
+		else
+		{
+
+			int s = dw_list.GetRowCount();
+			if (s > 0)
+			{
+				alert(L"该分组下面存在数据,不能删除!");
+				return 0;
+			}
+			HTREEITEM roothitem = tv_1.GetRootItem();
+			if (hitem == roothitem)
+			{
+				alert(L"不能删除根节点!");
+			}
+			else
+			{
+				//缺少判断删除的条件
+				xstring GroupName = tv_1.GetItemLabel(hitem);
+				if (MessageBox(GetHWND(), L"确定删除组名:" + GroupName + L" 吗?", L"提示", 1) == 1)
+				{
+					xml xx;
+
+					xaserverarg arg;
+
+					arg.AddArg(L"GroupName", GroupName);
+					arg.AddArg(L"m_id", m_id);
+					trace(GroupName);
+					trace(m_id);
+					/*if (xaserver::ExecXAction(GetServerUrl(),L"[delete.type.FND_UOM.xa]",arg.GetString()) == 1)
+					{
+						tv_1.DeleteItem(wid,hitem);
+						//OnTreeSelChanged();
+					}*/
+					if (xurl::get(L"QuickCode/pref/quickcode_tree.deleteGroup", arg.GetString(), xx) == 1)
+					{
+						tv_1.DeleteItem(hitem);
+					}
+					else
+						alert(L"删除失败!");
+				}
+			}
+		}
+		return 1;
+	}
+	xdwgrid getDW()
+	{
+		return dw_list;
+	}
+	int GridSearch()
+	{
+		xml x;
+
+		xaserver::LoadUrl(L"", L"dev:vface[公共设置.vface]", L"", x);
+		//trace(x.xml());
+		//trace(strtpl);
+		xstring aa = strtpl;
+		var doc = x;
+		var n = doc.selectSingleNode(L"//resource[@url='" + aa + L"']/@src");
+		//trace(n.text());			
+
+		xaserverarg arg;
+
+		arg.AddArg(L"sheet", n.text());
+		arg.AddArg(L"search", list::m_QueryTxt);
+		openUrl(L"view.dlg.vface/xpage/grid/column/search", arg);
+		xstring ok = arg.GetArgString(L"return");
+		if (ok == L"ok") {
+			xstring txt = arg.GetArgString(L"search");
+			if (txt != L"") {
+				m_QueryTxt = txt;
+				//trace(txt);
+				OnRetrieve();
+			}
+		}
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		HCURSOR hCursor = xutil::SetCursorWait();
+		xdwgrid dw = getDW();
+		if (comdid == L"save") {
+			dw_list.AcceptText();
+			xml x;
+
+			xaserverarg arg;
+
+			dw_list.DwUpdateAllToEx(x);
+			KXMLDOMElement e = x.documentElement();
+			e.setAttribute(L"id", m_id);
+			//arg.AddArg(L"id",m_id);
+			//trace(m_id);
+			//trace(m_dbmap);
+			if (m_id == L"开票银行")
+			{
+				xml kp;
+
+				kp.loadXML(L"<root></root>");
+				KXMLDOMElement ele = kp.documentElement();
+				var list = e.selectNodes(L"item[@update.modify='1' or @update.delete='1' ]");
+				int j;
+				int k = list.length;
+				for (j = 0; j < k; j++)
+				{
+					KXMLDOMElement ele1 = list.item(j);
+					ele.appendChild(ele1);
+				}
+				kpstr = ele.xml();
+				trace(ele.xml());
+			}
+			if (m_id == L"开票银行")
+			{
+				arg.AddArg(L"content", kpstr);
+			}
+			else
+			{
+				arg.AddArg(L"content", e.xml());
+			}
+			arg.AddArg(L"dbmap", m_dbmap);
+			/*if(TFile::exec(m_config,L"save",arg,x)!=1)
+			{
+				trace(L"error:"+x.xml());
+				alert(L"保存出错!");
+				return 0;
+			}*/
+			trace(m_dbmap + L"\r\n" + e.xml());
+			if (xurl::get(L"QuickCode/pref/quickcode.save", arg.GetString(), x) != 1)
+			{
+				xstring error = x.text();
+				trace(error);
+			}
+			//trace(arg.GetString());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			dw_list.ResetUpdateStatus();
+			alert(L"保存成功!");
+		}
+		else if (comdid == L"add") {
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetItemString(rows, L"GroupName", c_type);
+			dw.SetItemString(rows, L"BankName", c_type);
+		}
+		else if (comdid == L"insert") {
+			int row = dw.GetRow();
+			if (row<1 || row>dw.GetRowCount()) return 0;
+			dw.InsertRow(row);
+
+			dw.SetItemString(row, L"GroupName", c_type);
+		}
+		else if (comdid == L"delet") {
+			dw_list.AcceptText();
+			int row2 = dw.GetRow();
+			if (row2<1 || row2>dw.GetRowCount()) return 0;
+			dw.DeleteRow(row2);
+		}
+		else if (comdid == L"adduomfolder")
+			adduomfolder();
+		else if (comdid == L"modifyuomfolder")
+			modifyuomfolder();
+		else if (comdid == L"deluomfolder")
+			deluomfolder();
+		else if (comdid == L"search")
+			GridSearch();
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+
+		HTREEITEM root = tv_1.GetRootItem();
+		tv_1.ExpandItem(root);
+		return 1;
+	}
+	int OnDoubleClicked(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+		if (row<1 || row > dw_list.GetRowCount()) return 0;
+
+		xaserverarg arg;
+
+		//xstring str = hdr.data;
+		xstring colname = hdr.colname;
+		xstring str = dw_list.GetItemString(row, colname);
+		arg.AddArg(L"value", str);
+		openUrl(L"/sale/view/view.dlg/xpage/memo/edit", arg);
+		xstring comdid = arg.GetArgString(L"comdid");
+		if (comdid == L"xmOK")
+		{
+			xstring value = arg.GetArgString(L"value");
+			dw_list.SetItemString(row, colname, value);
+			dw_list.Redraw();
+		}
+
+		return 1;
+	}
+	int ItemOutput()
+	{
+		xstring d = xaserver::GetCurrentDate();
+		d = d.left(10) + L"";
+		dw_list.SaveAs(d);
+		return 1;
+	}
+	int OnSelectAllRow()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		dw_list.SelectRow(1, rows, true);
+		dw_list.Redraw();
+		return 1;
+	}
+	int OnRowCopy()
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		int cols = dw_list.GetColumnCount();
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		int i;
+		while (row > 0)
+		{
+			xstring tmp1 = L"";
+			for (i = 1; i < cols; i++)
+			{
+				int w = dw_list.GetColumnWidth(i);
+				if (w < 5) continue;
+				xstring tmp;
+				if (dw_list.GetItemDisplayString(row, i + 1))
+					tmp = dw_list.GetItemDisplayString(row, i + 1);
+				else
+					tmp = dw_list.GetItemString(row, i + 1);
+				tmp1 += tmp + L"\t";
+			}
+			str += tmp1 + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+		return 1;
+	}
+	int OnColCopy(xstring col)
+	{
+		int rows = dw_list.GetRowCount();
+		if (rows < 1) return -1;
+		xstring str = L"";
+		int row = dw_list.GetNextSelectRow(1);
+		while (row > 0)
+		{
+			xstring tmp;
+			if (dw_list.GetItemDisplayString(row, col))
+				tmp = dw_list.GetItemDisplayString(row, col);
+			else
+				tmp = dw_list.GetItemString(row, col);
+			str += tmp + L"\r\n";
+			row = dw_list.GetNextSelectRow(row + 1);
+		}
+		dw_list.SetDataToClip(str);
+
+		return 1;
+	}
+	int OnRClick(TEvent* evt, LPARAM p)
+	{
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int row = hdr.row;
+
+		int m = win::CreatePopupMenu();
+		int MF_STRING = 0x00000000;
+		int MF_DISABLED = 0x00000002;
+		int TPM_RIGHTBUTTON = 0x0002;
+		int TPM_RETURNCMD = 0x0100;
+		int MF_CHECKED = 0x8;
+		int MF_SEPARATOR = 0x0800;
+		win::AppendMenu(m, MF_STRING, 1, L"复制行");
+		win::AppendMenu(m, MF_STRING, 101, L"复制列");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 2, L"全选");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 4, L"导出到Excel");
+		win::AppendMenu(m, MF_SEPARATOR, -1, L"");
+		win::AppendMenu(m, MF_STRING, 6, L"显示列设置");
+		xrect xr;
+		xpoint pt;
+		win::GetCursorPos(pt);
+		int ret = win::TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), xr);
+
+		//trace(ret);
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (ret == 1) { OnRowCopy(); }
+		else if (ret == 101) {
+			xstring colname = hdr.colname;
+			if (colname != L"")
+				OnColCopy(colname);
+		}
+		else if (ret == 2) { OnSelectAllRow(); }
+		else if (ret == 4) { ItemOutput(); }
+		else if (ret == 6) {}
+		xutil::RestoreCursor(hCursor);
+
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&QuickCode_Tree::OnSetFocus);
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&QuickCode_Tree::OnXCommand);
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&QuickCode_Tree::OnTreeSelChanged);
+		AttachEvent(L"dw_list", L"DWV_DOUBLECLICKED", (FEvent)&QuickCode_Tree::OnDoubleClicked);//行双击
+		AttachEvent(L"dw_list", L"DWV_RCLICKED", (FEvent)&QuickCode_Tree::OnRClick);//鼠标右键		
+		return 1;
+	}
+
+
+	xstring jxParam(xstring p, xstring n)
+	{
+		if (p != L"")
+		{
+			p += L"&";
+			int i = 1;
+			while (p.find(L"=L", 0) > 0)
+			{
+				xstring name = p.mid(0, p.find(L"=L", 0));
+				xstring value = p.mid(p.find(L"=L", 0) + 1, p.find(L"&", 0) - p.find(L"=L", 0) - 1);
+				if (name == n) return L"" + value;
+				i += 1;
+				p = p.mid(p.find(L"&", 0) + 1, p.length());
+			}
+		}
+		return L"";
+	}
+	int getURLParam()
+	{
+		if (GetWinParam())
+		{
+			xpage xp = new xpage;
+			xp.setNativePointer(GetXPage());
+			xstring aurl = xp.GetWkUrl();
+			xaserverarg arg;
+			if (aurl && aurl.find(L"native=true", 0) > 0)
+			{
+				int p = GetParam();
+				arg;
+				arg.setNativePointer(p);
+			}
+			else
+			{
+				arg = GetParam();
+			}
+			xstring config = arg.GetArgString(L"config");
+			xml x;
+
+			if (config == L"")
+			{
+				xstring configXml = arg.GetArgString(L"configxml");
+				x.loadXML(configXml);
+			}
+			else
+			{
+				getUrl(config, L"", x);
+			}
+			m_configDoc = x;
+
+		}
+
+		return 1;
+	}
+	int loaded()
+	{
+		getURLParam();
+		KXMLDOMDocument	 ee = m_configDoc;
+		xstring id = m_id;
+		var n = ee.selectSingleNode(L"//list/dwview[@type='dwgrid'][@id='" + id + L"']");
+		if (n)
+		{
+			KXMLDOMElement e = n;
+			//trace(e.xml);
+			xstring vface = m_configDoc.selectSingleNode(L"//vface[1]").text();
+			xstring dwname = L"";//e.selectsingleNode(L"@name").text();
+			xstring tpl = L"";//e.selectsingleNode(L"@url").text();
+			xstring dbmap = L"";
+			xstring strtreexquery = L"";
+			if (e.selectSingleNode(L"@name")) dwname = e.selectSingleNode(L"@name").text();
+			if (e.selectSingleNode(L"@url")) tpl = e.selectSingleNode(L"@url").text();
+			if (e.selectSingleNode(L"@dbmap")) dbmap = e.selectSingleNode(L"@dbmap").text();
+			if (e.selectSingleNode(L"@treexquery")) strtreexquery = e.selectSingleNode(L"@treexquery").text();
+			m_dbmap = dbmap;
+			treexquery = strtreexquery;
+			//trace(vface +L"/"+ tpl);
+			//trace(selectmode);
+			dw_list = new xdwgrid;
+			dw_list.setNativePointer(GetControl(dwname));
+			dw_list.openUrl(vface + L"/" + tpl);
+			strtpl = tpl;
+			trace(tpl);
+
+		}
+	}
+	int onload()
+	{
+
+		SetArg();
+		m_config = L"QuickCode.config";
+		m_agent = L"";
+		dw_list = new xdwtable;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		if (GetWinParam())
+		{
+			xaserverarg arg = GetArg();
+			//trace(arg.GetString());
+			xstring id = arg.GetArgString(L"id");
+			if (id == L"") return 0;
+			m_id = id;
+			loaded();
+
+			/*xstring tpl = arg.GetArgString(L"tpl");
+			if(tpl == L"")
+				tpl = L"QuickCode.tpl/QuickCode";
+			dw_list.SetDataObject(GetServerUrl(),L"dev:sheet["+tpl+L"]");
+			//dw_list.SetColHeaderHeight(0);
+			//dw_list.SetRowSelectorWidth(0);
+			xstring dbmap = arg.GetArgString(L"dbmap");
+			if(dbmap == L"")
+				dbmap = L"QuickCode.dbmap";
+			m_dbmap = dbmap;
+			xstring txquery=arg.GetArgString(L"treexquery");
+			treexquery=txquery;
+			xstring title = arg.GetArgString(L"title");
+			if(title != L"")
+				win::SetWindowText(GetHWND(),title);*/
+			OnRetrieve();
+		}
+		SetAgent();
+		xstring aa = treexquery;
+		xstring xfNodeAgentArea2 = L"treeagent";
+		xnode tnode = new xnode;
+		tnode.setNativePointer(GetAgentNode(xfNodeAgentArea2));
+		xstring stree = L"<vbox><xtree name='tv_1' imagelist='0'>";
+		stree += L"<treeitem src='xquery:[" + aa + L"]'  xcaption='@GroupName' xroot='/root' xpath='row' xchildpath='row' image='15' loop='yes' xdata='.'/>";
+		stree += L"</xtree></vbox>";
+		SetAgentNode(tnode, stree);
+
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+		
+		HTREEITEM root = tv_1.GetRootItem();
+		tv_1.ExpandItem( 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..4b62ed7
--- /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;	
+			//命令发布函数
+			xstring GetPath(int tv, int h)
+			{
+				xstring str = treeview::GetItemLabel(tv, h);
+				int k = treeview::GetParentItem(tv, h);
+				int r = treeview::GetRootItem(tv);
+				while(k > 0 && r != k)
+				{
+					xstring tmp = treeview::GetItemLabel(tv, k);
+					str = tmp+L"\\" + str;
+					k = treeview::GetParentItem(tv, k);
+				}
+				return str;
+			}
+			int xunhuan(int pItem, int hItem)
+			{
+				xdwtable dw = new xdwtable;
+				dw.setNativePointer(dw_category.FindDwTable(L"Item",0));						
+				if(treeview::GetChecked(tv_gs.GetId(),hItem) > 0)
+				{
+					msxml::IXMLDOMElement e = treeview::GetItemData(tv_gs.GetId(),hItem);
+					xstring id = e.selectSingleNode(L"CategoryID").text;
+					xstring Name =GetPath(tv_gs.GetId(), hItem);
+					trace(Name);
+					if(dw.GetItemString(1,L"CategoryID")==L"")
+					{	
+						dw.ItemChangeTo(1,L"CategoryID",id);
+						dw.ItemChangeTo(1,L"Category",Name);						
+					}
+					else
+					{
+						int n=dw.InsertRow(0);							
+						dw.ItemChangeTo(n,L"CategoryID",id);
+						dw.ItemChangeTo(n,L"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(xstring comdid)
+			{
+				if(comdid==L"ok")
+				{
+					int hitem = treeview::GetSelectedItem(tv_gs.GetId());
+					if (hitem >0)
+					{
+						msxml::IXMLDOMElement ele=treeview::GetItemData(tv_gs.GetId(),hitem);
+						xstring guid = ele.selectSingleNode(L"CategoryID").text;
+						//xstring label = ele.selectSingleNode(L"CName").text;
+						xstring label = GetPath(tv_gs.GetId(), hitem);
+						trace(label);
+						xunhuan(hitem, treeview::GetChildItem(tv_gs.GetId(), treeview::GetRootItem(tv_gs.GetId())));
+						win::CloseWindow();
+					}
+					return 1;
+				}
+				if(comdid==L"close") 
+					win::CloseWindow();
+				return 0;
+			}
+			
+			int OnCmdDispatch0(xstring comdid)
+			{
+				xaserverarg arg = new xaserverarg;
+				arg.setNativePointer(arg.CreateInstance());							
+				arg = win::GetParam();
+				arg.AddArg(L"comdid",comdid);
+				int xitem = treeview::GetSelectedItem(tv_gs.GetId());
+				if(comdid==L"ok" && xitem != 0)
+				{
+					msxml::IXMLDOMElement e=treeview::GetItemData(tv_gs.GetId(),xitem);
+					
+					xstring sHasChild=e.selectSingleNode(L"@HasChild").text;
+
+					if(treeview::GetChildItem(tv_gs.GetId(),xitem)>0 || sHasChild==L"1")
+					{
+						alert(L"提示:请选择最后一级类别!");
+						return 0;
+					}
+			
+					xstring ID = e.selectSingleNode(L"CategoryID").text;
+					xstring CName = e.selectSingleNode(L"CName").text;
+					trace(CName);
+					xstring ruler;
+					if(e.selectSingleNode(L"SpecRule"))
+						ruler = e.selectSingleNode(L"SpecRule").text;
+					else
+						ruler =L"";
+					arg.AddArg(L"CategoryID",ID);
+					arg.AddArg(L"CName",CName);
+					arg.AddArg(L"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);
+				xstring sHasChild=sitemdata.selectSingleNode(L"@HasChild").text;//sitemdata.getAttribute(L"HasChild");	
+				xstring pid=sitemdata.selectSingleNode(L"CategoryID").text;
+				//trace(sHasChild+L"sdaga"+pid);
+				if(sHasChild==L"1"){//数据有子节点		
+					int citem=treeview::GetChildItem(tv_gs.GetId(), pitem);
+
+					//alert(xstring(citem));
+					if (citem==0){//树视图有子节点
+						xml x=new xml;
+						x.setNativePointer(xml::CreateInstance());
+						xaserverarg arg=new xaserverarg;
+						arg.setNativePointer(arg.CreateInstance());	
+						arg.AddArg(L"parentID",pid);
+						//if(xaserver::ExecXQuery(GetServerUrl(),L"[ItemCategoryEx.xq]",arg.GetString(),x)!=1)
+						if(url::get(GetEntityName(1)+L"/entity/category",arg.GetString(),x)!=1)
+						{
+							trace(x.GetXml());
+							return 0;
+						}
+						//trace(x.GetXml());
+						var list=x.GetXmlDoc().selectNodes(L"root/Category");
+						int i=0,s=list.length;
+						msxml::IXMLDOMElement xitem;
+						for (i=0;i<s;i++){
+							xitem=list.item(s - i - 1);
+							xstring Name=xitem.selectSingleNode(L"CName").text;
+							xstring Has2D=xitem.selectSingleNode(L"@Has2D").text;//item.getAttribute(L"Has2D");	
+							if (Has2D==L"1")
+								Name=Name+L"*";	
+							int kitem=treeview::InsertItem(tv_gs.GetId(), pitem,0,Name,xitem,15);	
+							//int kitem=treeview::InsertChildItem(tv_gs.GetId(), pitem,Name,xitem,15);	
+							xstring HasChild=xitem.selectSingleNode(L"@HasChild").text;//item.getAttribute(L"HasChild");	
+							//trace(HasChild, kitem);
+							if (HasChild==L"1")
+								treeview::SetItemChild1(tv_gs.GetId(), kitem,1);
+						}			
+					}
+				}	
+				return 1;
+			}
+				
+			int CreateRootTree(){
+				xstring rootid=L"00000000-0000-0000-0000-000000000000";
+				xml x=new xml;
+				x.setNativePointer(xml::CreateInstance());							
+				x.LoadXml(L"<Category HasChild='1'><CategoryID>"+rootid+L"</CategoryID></Category>");
+				int hroot=treeview::InsertItem(tv_gs.GetId(),L"公司产品类别", x.GetXmlDoc().documentElement, 17);
+				CreateSubTree(hroot);
+				treeview::ExpandItemEx(tv_gs.GetId(),hroot);
+				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(L"WM_XCOMMAND",OnXCommand);
+				//获得树的展开事件
+				AttachEvent(L"tv_gs", L"TVN_ITEMEXPANDING",OnTreeExpanding);
+			}
+			int onload()
+			{
+				if (GetParam())
+				{
+					xaserverarg arg1=GetParam();
+					dw_category = new xdwtable;
+					dw_category.setNativePointer(arg1.GetArgString(L"dw_category").toInt());
+				}			
+				tv_gs = new treeview;
+				tv_gs.setNativePointer(GetControl(L"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..ec0c200
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUItem.cpp
@@ -0,0 +1,310 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) SKUItem : public xframe
+{
+public:
+	xtreeview	tv_1;
+	xdwgrid	dw_list;
+	xstring 	m_type;
+	xstring CategoryID;
+	xnode	m_agentNode;	//Agent Condition
+	xstring	m_agentCond;	//Agent Node
+	xstring m_searchtxt;
+public:
+	SKUItem(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static SKUItem* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SKUItem* pWin = new SKUItem(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	//焦点激活处理函数
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+
+		//重置工具条
+		return 1;
+	}
+
+	int  OnReTrieve()
+	{
+		xstring query = L"[SKUItem.tree.xq]";
+		xml x;
+
+		xaserverarg arg;
+
+		arg.AddArg(L"parentID", CategoryID);
+		arg.AddArg(L"query", L"");
+		if (xaserver::ExecXQuery(GetServerUrl(), query, arg.GetString(), x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		else
+		{
+			dw_list.openUrl(L"其他设置.vface/template/other/SKUItem");
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		return 1;
+	}
+
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM sitem = nmtv.itemNew.hItem;
+
+		HCURSOR hCursor = xutil::SetCursorWait();
+		dw_list.AcceptText();
+		xml z;
+
+		z.loadXML(L"<root/>");
+		dw_list.Retrieve(z);
+		dw_list.Redraw();
+		dw_list.ResetUpdateStatus();
+
+		KXMLDOMElement ele = tv_1.GetItemData(sitem);
+		if (!ele.selectSingleNode(L"ID")) return 0;
+		CategoryID = ele.selectSingleNode(L"ID").text();
+		//trace(CategoryID);
+		m_searchtxt = L"";
+
+		OnReTrieve();
+		xutil::RestoreCursor(hCursor);
+		return 1;
+	}
+
+	int CreateSubTree(HTREEITEM pitem)
+	{
+		KXMLDOMElement sitemdata = tv_1.GetItemData(pitem);
+		xstring sHasChild = sitemdata.selectSingleNode(L"@HasChild").text();//sitemdata.getAttribute(L"HasChild");	
+		//trace(sHasChild);
+		xstring pid = sitemdata.selectSingleNode(L"ID").text();
+		//trace(sHasChild+L"sdaga"+pid);
+		if (sHasChild == L"1") {//数据有子节点		
+			HTREEITEM citem = tv_1.GetChildItem(pitem);
+			//alert(xstring(citem));
+			if (citem == 0) {//树视图有子节点
+				xml x;
+
+				xaserverarg arg;
+
+				arg.AddArg(L"parentID", pid);
+				arg.AddArg(L"query", L"");
+				if (xaserver::ExecXQuery(GetServerUrl(), L"[SKUItem.tree.xq]", arg.GetString(), x) != 1)
+				{
+					trace(x.xml());
+					return 0;
+				}
+				//trace(x.xml());
+				var list = x.selectNodes(L"root/SKUItem");
+				int i = 0, s = list.length;
+				KXMLDOMElement xitem;
+				KXMLDOMNode d;
+				for (i = 0; i < s; i++) {
+					xitem = list.item(s - i - 1);
+					//if(i==0)xitem.setAttribute(L"HasChild",L"1");
+					xstring Name = xitem.selectSingleNode(L"ItemName").text();
+					HTREEITEM kitem = tv_1.InsertItem(pitem, 0, Name, xitem, 15);
+					//int kitem=tv_1.InsertChildItem(tv_1.GetId(), pitem,Name,xitem,15);	
+					xstring HasChild = xitem.selectSingleNode(L"@HasChild").text();//item.getAttribute(L"HasChild");	
+					//trace(HasChild, kitem);
+					if (HasChild == L"1")
+						tv_1.SetItemChild1(kitem, 1);
+				}
+			}
+		}
+		return 1;
+	}
+	int CreateRootTree() {
+		xstring id = L"00000000-0000-0000-0000-000000000000";
+		xml x;
+
+		x.loadXML(L"<SKUItem HasChild='1' ><ID>" + id + L"</ID></SKUItem>");
+		HTREEITEM hroot = tv_1.InsertItem(L"产品项目分类", x.documentElement(), 17);
+		//trace(hroot);
+		CreateSubTree(hroot);
+		tv_1.ExpandItemEx(hroot);
+		CategoryID = id;
+		OnReTrieve();
+		return 1;
+	}
+	int OnTreeExpanding(TEvent* evt, int p)
+	{
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+
+		HTREEITEM sitem = nmtv.itemNew.hItem;
+		CreateSubTree(sitem);
+		return 1;
+	}
+	int afterSave() {
+		HTREEITEM hitem = tv_1.GetSelectedItem();
+		if (hitem == 0)
+			hitem = tv_1.GetRootItem();
+		int rows = dw_list.GetRowCount();
+		KXMLDOMElement ele = tv_1.GetItemData(hitem);
+
+		HTREEITEM firstChild = tv_1.GetChildItem(hitem);
+		while (firstChild > 0) {
+			tv_1.DeleteItem(firstChild);
+			firstChild = tv_1.GetChildItem(hitem);
+		}
+		if (rows > 0)
+		{
+			tv_1.SetItemChild1(hitem, 1);
+			ele.setAttribute(L"HasChild", L"1");
+			//trace(ele.xml);
+			tv_1.SetItemData(hitem, ele);
+		}
+		else
+		{
+			tv_1.SetItemChild1(hitem, 0);
+			ele.setAttribute(L"HasChild", L"0");
+			//trace(ele.xml);
+			tv_1.SetItemData(hitem, ele);
+		}
+		CreateSubTree(hitem);
+		if (tv_1.GetRootItem() == hitem)
+			tv_1.ExpandItemEx(hitem);
+
+		dw_list.ResetUpdateStatus();
+		return 0;
+	}
+	int OnSave()
+	{
+		xml x;
+
+		dw_list.AcceptText();
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"SKUItem.dbmap");
+		if (xaserver::ExecXAction(GetServerUrl(), L"[onSave.xa]", arg.GetString(), x) != 1)
+		{
+			trace(x.documentElement().text());
+			alert(L"保存失败");
+		}
+		else {
+			alert(L"保存成功");
+		}
+		dw_list.ResetUpdateStatus();
+		dw_list.Redraw();
+		afterSave();
+		return 1;
+	}
+	int OnSetValue(int row) {
+		dw_list.SetItemString(row, L"PID", CategoryID);
+		dw_list.SetItemString(row, L"ID", publiccode::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(xstring comdid)
+	{
+		if (comdid == L"Save")  OnSave();
+		else if (comdid == L"AddRow") OnAddRow();
+		else if (comdid == L"InsertRow") OnInsertRow();
+		else if (comdid == L"DeleteRow") OnDeleteRow();
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SKUItem::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SKUItem::OnSetFocus);
+		//获得树的选择事件
+		AttachEvent(L"tv_1", L"TVN_SELCHANGED", (FEvent)&SKUItem::OnTreeSelChanged);
+		AttachEvent(L"tv_1", L"TVN_ITEMEXPANDING", (FEvent)&SKUItem::OnTreeExpanding);
+		return 1;
+	}
+
+	int OnInitial()
+	{
+		SetAgent();
+		OnAttachEvent();
+		return 1;
+	}
+
+	int onload()
+	{
+		m_type = L"all";
+		tv_1 = new treeview;
+		tv_1.setNativePointer(GetControl(L"tv_1"));
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"其他设置.vface/template/other/SKUItem");
+
+		OnInitial();
+		CreateRootTree();
+
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUItem.select.cpp b/jrj/project/business/BasicCode/SKUItem.select.cpp
new file mode 100644
index 0000000..82f820b
--- /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:
+		[
+
+			xstring jxParam(xstring p, xstring n)
+			{
+				if(p != L"")
+				{
+
+					int i = 1;
+					while (p.find(L"=L",0)>0)
+					{
+						xstring name = p.mid(0, p.find(L"=L",0));
+						xstring value = p.mid(p.find(L"=L",0) + 1, p.find(L"=L",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(L"Item",0));				
+
+				int row = SKUItem::dw_list.GetNextSelectRow(1);
+				if (row<1)
+				{
+					alert(L"请选择项目名称!");
+					return 1;
+				}					
+
+				while (row>0)
+				{	
+					
+					msxml::IXMLDOMElement e =SKUItem::dw_list.GetRowElement(row);			
+					xstring ItemName = e.selectSingleNode(L"ItemName").text+L"";
+					//trace(ItemName);
+					if(dw.GetItemString(1,L"ItemName")==L"")
+					{
+						dw.SetItemString(1,L"SeqNo",L"1");						
+						dw.ItemChangeTo(1,L"ItemName",ItemName);				
+					}
+					else
+					{
+						int n=dw.InsertRow(0);
+						dw.SetItemString(n,L"SeqNo",n.ToString());						
+						dw.ItemChangeTo(n,L"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(xstring comdid)
+			{
+				if (comdid==L"SelectAll") OnSelectAll();
+				else if (comdid==L"SelectNo") OnSelectNo();
+				else if (comdid==L"cb_import") OnOk();
+				else if (comdid==L"cb_close") OnCancel();
+				//else if (comdid==L"query") GridSearch();						
+				return 0;
+			}
+			
+			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(L"dw_maint").toInt());
+				}			
+				SKUItem::onload();
+				SKUItem::dw_list.SetSelectionMode(3); //3
+				SKUItem::dw_list.SetReadOnly(true);			
+				AttachEvent(L"WM_XCOMMAND",OnXCommand);
+		        AttachEvent(L"dw_list",L"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..9c410fb
--- /dev/null
+++ b/jrj/project/business/BasicCode/SKUTemplate.cpp
@@ -0,0 +1,427 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) SKUTemplate : public xframe
+{
+public:
+
+	xdwgrid  dw_list;
+	xdwtable dw_maint;
+	xdwtable dw_category;
+	int rowno;
+
+	xnode	m_agentNode;
+public:
+	SKUTemplate(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static SKUTemplate* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SKUTemplate* pWin = new SKUTemplate(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+		return 1;
+	}
+
+	int  OnReTrieve()
+	{
+		xstring query = L"[SKUTemplate.list.xq]";
+		xml x;
+
+		xaserverarg arg;
+
+		if (xaserver::ExecXQuery(GetServerUrl(), query, arg.GetString(), x) != 1)
+		{
+			trace(x.text());
+			return -1;
+		}
+		else
+		{
+			dw_list.Retrieve(x);
+			dw_list.Redraw();
+		}
+		return 1;
+	}
+	int OnRowChanged(TEvent* evt, LPARAM p)
+	{
+
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		int ll_row = hdr.row;
+		rowno = ll_row;
+		xstring TemplateContent = dw_list.GetItemString(ll_row, L"TemplateContent");
+		xstring Category = dw_list.GetItemString(ll_row, L"Category");
+		if (TemplateContent == L"")
+		{
+			dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+			dw_maint.SetColHeaderHeight(0);
+			dw_maint.SetRowSelectorWidth(0);
+		}
+		if (Category == L"")
+		{
+			dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+			dw_category.SetColHeaderHeight(0);
+			dw_category.SetRowSelectorWidth(0);
+		}
+		xml x;
+
+		x.loadXML(TemplateContent);
+		xml x1;
+		x1.loadXML(Category);
+		dw_maint.Retrieve(x);
+		dw_maint.Redraw();
+		dw_category.Retrieve(x1);
+		dw_category.Redraw();
+		return 1;
+	}
+	int OnSave()
+	{
+		dw_list.AcceptText();
+		dw_maint.AcceptText();
+		dw_category.AcceptText();
+
+		xml x;
+
+		dw_list.DwUpdateAllToEx(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"SKUTemplate.dbmap");
+		if (xaserver::ExecXAction(GetServerUrl(), L"[onSave.xa]", arg.GetString(), x) != 1)
+		{
+			trace(x.documentElement().text());
+			alert(L"保存失败");
+		}
+		else {
+			alert(L"保存成功");
+		}
+		dw_list.ResetUpdateStatus();
+		dw_maint.ResetUpdateStatus();
+		dw_category.ResetUpdateStatus();
+		dw_list.Redraw();
+		dw_maint.Redraw();
+		dw_category.Redraw();
+		return 1;
+	}
+	int OnSetValue(int row) {
+		dw_list.SetItemString(row, L"TemplateID", publiccode::GetGuid());
+		return 1;
+	}
+	int RemoveAttribute(xml x, xstring nodename)//根据名称删除属性节点
+	{
+		KXMLDOMElement e;
+		var list = x.getElementsByTagName(L"" + nodename + L"");
+		if (list)
+		{
+
+			int nlen = list.length;
+			int i;
+			for (i = 0; i < nlen; i++)
+			{
+				e = list.item(i);
+				//trace(e.xml);
+				e.removeAttribute(L"update.new");
+				e.removeAttribute(L"update.modify");
+				e.removeAttribute(L"update.delete");
+				e.removeAttribute(L"guid");
+				e.removeAttribute(L"update.origin");
+				e.removeAttribute(L"isnull");
+				//trace(e.xml);				
+			}
+		}
+	}
+	int setMaint()
+	{
+		xml x;
+
+		dw_maint.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		trace(x.xml());
+		RemoveAttribute(x, L"TemplateContent");
+		RemoveAttribute(x, L"Item");
+		RemoveAttribute(x, L"ItemName");
+		RemoveAttribute(x, L"Remark");
+		RemoveAttribute(x, L"SeqNo");
+		//trace(x.xml());				
+		dw_list.SetItemString(row, L"TemplateContent", x.xml());
+		dw_list.Redraw();
+		return 1;
+	}
+	int setItemCategory()
+	{
+		xml x;
+
+		dw_category.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		//trace(row);
+		dw_list.SetItemString(row, L"Category", x.xml());
+		return 1;
+	}
+	int OnAddRow()
+	{
+		int row = dw_list.InsertRow(0);
+		int rows = dw_list.GetRowCount();
+		OnSetValue(rows);
+		dw_list.SetRow(dw_list.GetRowCount());
+		//trace(row.toString());
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		return 1;
+	}
+
+	int OnInsertRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		dw_list.InsertRow(row);
+		OnSetValue(row);
+		dw_list.SetRow(row);
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		return 1;
+	}
+	int OnChangeRowNo(int row)
+	{
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_maint.FindDwTable(L"Item", 0));
+		int i;
+		for (i = row; i <= dw.GetRowCount(); i++)
+			dw.SetItemString(i, L"SeqNo", xstring(i));
+		return 1;
+	}
+	int OnDeleteRow()
+	{
+		int row = dw_list.GetRow();
+		if (row<0 || row>dw_list.GetRowCount()) return 0;
+		dw_list.DeleteRow(row);
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		return 1;
+	}
+	int RemoveChild(xml x, xstring nodename)//根据名称删除节点
+	{
+		KXMLDOMElement e;
+		var list = x.selectNodes(L"//Item[@update.delete='1']");
+		if (list)
+		{
+			int nlen = list.length;
+			int i;
+			for (i = 0; i < nlen; i++)
+			{
+				e = list.item(i);
+				//trace(e.xml);
+				e.parentNode.removeChild(e);
+				//trace(e.xml);				
+			}
+		}
+	}
+	int setMaint_removeChild()
+	{
+		xml x;
+
+		dw_maint.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		//trace(x.xml());
+		RemoveChild(x, L"Item");
+		RemoveAttribute(x, L"TemplateContent");
+		RemoveAttribute(x, L"Item");
+		RemoveAttribute(x, L"ItemName");
+		RemoveAttribute(x, L"Remark");
+		RemoveAttribute(x, L"SeqNo");
+		//trace(x.xml());				
+		dw_list.SetItemString(row, L"TemplateContent", x.xml());
+		dw_list.Redraw();
+		return 1;
+	}
+	int setItemCategory_removeChild()
+	{
+		xml x;
+
+		dw_category.DwUpdateAllTo(x);
+		int row = dw_list.GetRow();
+		RemoveChild(x, L"Item");
+		//trace(row);
+		dw_list.SetItemString(row, L"Category", x.xml());
+		dw_list.Redraw();
+		return 1;
+	}
+	int del(xdwtable dw_1)
+	{
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_1.GetCurTable());
+		int row = dw.GetRow();
+		if (row < 1 || row > dw.GetRowCount()) return -1;
+		dw.DeleteRow(row);
+		//trace(dw.GetDwName());
+		if (dw_1.GetDwName() == L"TemplateContent")
+		{
+			OnChangeRowNo(row);
+			if (dw.GetRowCount() == 1 && dw.GetItemString(1, L"ItemName") == L"")
+			{
+				dw_list.SetItemString(rowno, L"TemplateContent", L"");
+				dw_list.Redraw();
+			}
+			else
+			{
+				setMaint_removeChild();
+			}
+
+		}
+		if (dw_1.GetDwName() == L"Categorys")
+		{
+			//trace(dw.GetRowCount());
+			if (dw.GetRowCount() == 1 && dw.GetItemString(1, L"CategoryID") == L"")
+			{
+				dw_list.SetItemString(rowno, L"Category", L"");
+				dw_list.Redraw();
+			}
+			else
+			{
+				setItemCategory_removeChild();
+			}
+
+		}
+
+		return 1;
+	}
+	int SKUItem()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"dw_maint", dw_maint.nativept.toString());
+		openUrl(L"其他设置.vface/xpage/SKUItem/select", arg);
+		return 1;
+	}
+	int SKUItemcategory()
+	{
+		xaserverarg arg;
+
+		arg.AddArg(L"dw_category", dw_category.nativept.toString());
+		openUrl(L"其他设置.vface/xpage/SKUItemcategory/select", arg);
+		return 1;
+	}
+	int SKUItemModify()
+	{
+		openUrl(L"其他设置.vface/xpage/SKUItem/list");
+		return 1;
+	}
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		if (comdid == L"save")  OnSave();
+		else if (comdid == L"AddRow") OnAddRow();
+		else if (comdid == L"InsertRow") OnInsertRow();
+		else if (comdid == L"DeleteRow") OnDeleteRow();
+		else if (comdid == L"SKUItem") SKUItem();
+		else if (comdid == L"SKUItemcategory") SKUItemcategory();
+		else if (comdid == L"del_1") del(dw_maint);
+		else if (comdid == L"del_2") del(dw_category);
+		else if (comdid == L"SKUItemModify") SKUItemModify();
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnMaintChanged(TEvent* evt, LPARAM p)
+	{
+		//trace(L"hello");
+		setMaint();
+		return 1;
+	}
+
+	int OnCategoryChanged(TEvent* evt, LPARAM p)
+	{
+		setItemCategory();
+		return 1;
+	}
+
+	int OnAttachEvent()
+	{
+		//绑定工具条点击事件
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SKUTemplate::OnXCommand);
+		//获取焦点事件,用于重置工具条
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SKUTemplate::OnSetFocus);
+		AttachEvent(L"dw_maint", L"DWV_ITEMCHANGED", (FEvent)&SKUTemplate::OnMaintChanged);
+		AttachEvent(L"dw_category", L"DWV_ITEMCHANGED", (FEvent)&SKUTemplate::OnCategoryChanged);
+		AttachEvent(L"dw_list", L"DWV_ROWFOCUSCHANGED", (FEvent)&SKUTemplate::OnRowChanged);
+
+		return 1;
+	}
+	int OnInitial()
+	{
+		SetAgent();
+		OnAttachEvent();
+		return 1;
+	}
+	int onload()
+	{
+		dw_list = new xdwgrid;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"其他设置.vface/template/other/SKUTemplate");
+
+		dw_maint = new xdwtable;
+		dw_maint.setNativePointer(GetControl(L"dw_maint"));
+		dw_maint.openUrl(L"其他设置.vface/template/other/TemplateContent");
+		dw_maint.SetColHeaderHeight(0);
+		dw_maint.SetRowSelectorWidth(0);
+
+		dw_category = new xdwtable;
+		dw_category.setNativePointer(GetControl(L"dw_category"));
+		dw_category.openUrl(L"其他设置.vface/template/other/TemplateCategory");
+		dw_category.SetColHeaderHeight(0);
+		dw_category.SetRowSelectorWidth(0);
+		dw_category.SetReadOnly(true);
+		OnInitial();
+		OnReTrieve();
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_category.FindDwTable(L"Item", 0));
+		//trace(dw.GetRowCount());
+		return 1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/BasicCode/SKUTemplate.select.cpp b/jrj/project/business/BasicCode/SKUTemplate.select.cpp
new file mode 100644
index 0000000..35a9e24
--- /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:
+		[
+
+			xstring jxParam(xstring p, xstring n)
+			{
+				if(p != L"")
+				{
+
+					int i = 1;
+					while (p.find(L"=L",0)>0)
+					{
+						xstring name = p.mid(0, p.find(L"=L",0));
+						xstring value = p.mid(p.find(L"=L",0) + 1, p.find(L"=L",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(L"/sale/view/CustomerGoods/template/CustomerGoods/itemother");		
+				dw_other.SetColHeaderHeight(0);
+				dw_other.SetRowSelectorWidth(0);
+				int row = SKUTemplate::dw_list.GetNextSelectRow(1);
+				if (row<1)
+				{
+					alert(L"请选择模板!");
+					return 1;
+				}					
+					
+				msxml::IXMLDOMElement e =SKUTemplate::dw_list.GetRowElement(row);			
+				xstring TemplateContent = e.selectSingleNode(L"TemplateContent").text+L"";
+				xstring TemplateID = e.selectSingleNode(L"TemplateID").text+L"";				
+				//trace(ItemName);
+				xml x = new xml;
+				x.setNativePointer(x.CreateInstance());
+				x.LoadXml(TemplateContent);					
+				dw_other.Retrieve(x);
+				dw_prop.SetItemString(1,L"TemplateID",TemplateID);				
+				CloseWindow();
+				return 1;
+			}
+			
+			int OnCancel()
+			{
+				CloseWindow();	
+				return 1;
+			}
+			int OnDoubleClicked(ref TNotifyEvent evt,int p)
+			{	
+				OnOk();	
+				return 1;
+			}			
+				
+			int OnCmdDispatch(xstring comdid)
+			{
+				if (comdid==L"SelectAll") OnSelectAll();
+				else if (comdid==L"SelectNo") OnSelectNo();
+				else if (comdid==L"cb_import") OnOk();
+				else if (comdid==L"cb_close") OnCancel();
+				//else if (comdid==L"query") GridSearch();						
+				return 0;
+			}
+			
+			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(L"dw_other").toInt());
+					dw_prop = new xdwtable;
+					dw_prop.setNativePointer(arg1.GetArgString(L"dw_prop").toInt());				
+				}
+				//trace(dw_other.nativept);
+				SKUTemplate::onload();
+				SKUTemplate::dw_list.SetSelectionMode(1); //3
+				SKUTemplate::dw_list.SetReadOnly(true);			
+				AttachEvent(L"WM_XCOMMAND",OnXCommand);
+		        AttachEvent(L"dw_list",L"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..8652de3
--- /dev/null
+++ b/jrj/project/business/BasicCode/SetUpRemarks.cpp
@@ -0,0 +1,158 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) SetUpRemarks :  public xwin
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		SetUpRemarks(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	public:
+		static SetUpRemarks* CreateInstance(void* implPtr, void* hWnd)
+		{
+			SetUpRemarks* pWin = new SetUpRemarks(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				dw_list.SetItemString(row+1,L"State",L"Y");
+				return 1;
+			}
+			else if(comdid==L"xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+				return OnSave();
+			else if(comdid==L"xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&SetUpRemarks::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&SetUpRemarks::OnSetFocus);
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			xml x;
+			
+			dw_list.DwUpdateAllToEx(x); 
+			xaserverarg arg;
+			
+			arg.AddArg(L"content",x.xml());						
+			if (xurl::get(L"/sale/data/TradeFinance3/SetUpRemarks/update",arg.GetString(),x) != 1)
+			{
+				trace(L"error:"+(xstring)x.xml());
+				alert(L"保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.xml());
+				if(x.selectSingleNode(L"error"))
+				{
+					alert(L"保存出错2!");
+					return 0;				
+				}
+				MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			
+			xaserverarg arg;
+			
+			if (xurl::get(L"/sale/data/TradeFinance3/SetUpRemarks/list",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/FinancialCode/template/SetUpRemarksList");
+			dw_list.SetColumnState(L"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..fc49f1e
--- /dev/null
+++ b/jrj/project/business/BasicCode/ShipcompanyList.cpp
@@ -0,0 +1,41 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ShipcompanyList : public xwin
+{
+public:
+
+	xdwgrid  dw_list;
+public:
+	ShipcompanyList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static ShipcompanyList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ShipcompanyList* pWin = new ShipcompanyList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		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..1d88656
--- /dev/null
+++ b/jrj/project/business/BasicCode/ShipcompanyMaint.cpp
@@ -0,0 +1,320 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) ShipcompanyMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	ShipcompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static ShipcompanyMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		ShipcompanyMaint* pWin = new ShipcompanyMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		dw_cell.SetCellProps(2, 2, strnew);
+		return 0;
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"maint");
+		return 1;
+	}
+	xstring GetGuid() 
+	{
+		return publiccode::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			m_userid = publiccode::GetUser().id;
+			m_username = publiccode::GetUser().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"有效");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"Type", L"6");
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", publiccode::GetCurrentDate());
+		}
+		else
+		{
+			setCellReadOnly();
+		}
+		return 0;
+	}
+
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
+			{
+				if(m_dels==L"")
+				{
+					m_dels=del;
+				}
+				else
+				{
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
+
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/shipcompany/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"P" + code;
+		}
+		return  L"P1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ShipNo = dw_base.GetItemString(1, L"ShipNo");
+		if (ShipNo == L"")
+		{
+			dw_base.SetItemString(1, L"ShipNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			trace(aName);
+			if (aName == L"")
+			{
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark");
+				trace(aTemp);
+				if (aTemp != L"")
+				{
+					alert(L"联系人名称必填!");
+					return -1;
+				}
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"")
+				{
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"1");
+					dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
+				}
+
+
+
+			}
+		}
+		return 1;
+	}
+	int OnSave()
+	{
+
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入船公司名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Shipcompany.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);	
+
+		if (getUrl(L"/sale/data/LogisticsCode/entity/shipcompany/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" + (xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			setCellReadOnly();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		trace(comdid);
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			dw_base.AcceptText();
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		//trace(colname);
+		if (colname == L"ShipNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
+				return 0;
+			}
+
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&ShipcompanyMaint::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&ShipcompanyMaint::OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&ShipcompanyMaint::OnCellChanged);
+		return 1;
+	}
+
+	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..d201903
--- /dev/null
+++ b/jrj/project/business/BasicCode/Simple.Menu.Config.cpp
@@ -0,0 +1,276 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+
+class  __declspec(dllexport) SimpleMenuConfig : public xframe
+{
+public:
+	xdwgrid dw_list;
+	xtreeview tv_gs;
+	xnode	m_agentNode;
+public:
+	SimpleMenuConfig(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static SimpleMenuConfig* CreateInstance(void* implPtr, void* hWnd)
+	{
+		SimpleMenuConfig* pWin = new SimpleMenuConfig(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int AddRow()
+	{
+		dw_list.InsertRow(0);
+		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++)
+		{
+			xstring seq = dw_list.GetItemString(i, L"SeqNo");
+			if(seq != xstring(i))
+				dw_list.SetItemString(i, L"SeqNo", xstring(i));
+		}
+		
+		xml x;
+		
+		xaserverarg arg;
+			
+		dw_list.DwUpdateAllToEx(x);
+		arg.AddArg(L"content", x.xml());
+		if(getUrl(L"/workflow/action/ItemPictureMenu.dbmap/bill.update", arg.GetString(), x) != 1)
+			alert(L"保存失败!");
+		else
+		{
+			xstring str = x.xml();
+			//alert(str);
+			if(str.find(L"失败", 0) > 0)
+				alert(L"保存失败!");
+			else
+			{
+				//alert(L"保存成功!");
+				dw_list.ResetUpdateStatus();
+				dw_list.DwUpdateAllToEx(x);
+				HTREEITEM hItem =tv_gs.GetSelectedItem();
+				if(hItem > 0)
+				{
+					KXMLDOMElement e =  x.documentElement();
+					int p = trust(e);
+					tv_gs.SetItemData(hItem, p);
+				
+					while(tv_gs.GetChildItem( hItem) > 0)
+						tv_gs.DeleteItem(tv_gs.GetChildItem( hItem));
+				
+					KXMLDOMNodeList li =  x.selectNodes(L"item/item");
+					int s = li.length();
+					for(i=0;i<s;i++)
+					{
+						KXMLDOMElement ele =  li.item(i);
+						int pa = trust(ele);
+						xstring name = ele.selectSingleNode(L"Name").text();
+						HTREEITEM cItem =tv_gs.InsertChildItem( hItem, name, pa, 15);
+						if(ele.selectSingleNode(L"item"))
+							tv_gs.SetItemChild1(cItem, 1);
+					}
+				}
+				
+			}
+		}
+		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(xstring comdid)
+	{
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if(comdid == L"AddRow")  AddRow();
+		else if(comdid == L"InsertRow")  InsertRow();
+		else if(comdid == L"DeleteRow")  DeleteRow();
+		else if(comdid == L"Save")  Save();
+		else if(comdid == L"UpRow")  UpRow();
+		else if(comdid == L"DownRow")  DownRow();
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}		
+
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+		
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{		
+		SetAgent()	;	
+		return 1;
+	}		
+	
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+		
+	int OnTreeSelChanged(TEvent* evt, LPARAM p)
+	{
+		
+		NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+		HTREEITEM hItem = nmtv.itemNew.hItem;
+		KXMLDOMElement& e = *(KXMLDOMElement*)tv_gs.GetItemData(hItem);
+		//trace(L"%s", e.xml);
+		//xstring id = e.selectSingleNode(L"MenuID").text();
+		dw_list.AcceptText();
+		dw_list.Retrieve(e);
+		dw_list.Redraw();
+		return 1;
+	}	
+
+	int OnTreeMoveNode(TEvent* evt, LPARAM p)	
+	{
+		TVNNMHDR& nmtv = *(TVNNMHDR*)evt->notify.pnmh;
+		HTREEITEM xfrom = nmtv.FromItem;
+		HTREEITEM xto = nmtv.ToItem;
+		
+		int ret = MessageBox(GetHWND(), L"确定移动节点!",L"提示:",1);
+		//trace(ret);
+		if(ret == 2)
+		{
+			tv_gs.DeleteItem(xto);
+			return -1;
+		}
+		KXMLDOMElement& fid = *(KXMLDOMElement*)tv_gs.GetItemData(xto);
+		HTREEITEM xpto =tv_gs.GetParentItem(xto);
+		KXMLDOMElement& tid = *(KXMLDOMElement*)tv_gs.GetItemData(xto);
+		//trace(L"%s-------------------------%s",fid.xml,tid.xml);
+		xml x ;
+		
+		xaserverarg arg;
+				
+		
+		xstring id1 = fid.selectSingleNode(L"@guid").text();
+		xstring id2 = tid.selectSingleNode(L"@guid").text();
+		//trace(L"%s-------------------------%s",id1,id2);
+		xstring str = L"update ItemPictureMenu set parentid='"+id2+L"' where menuid='"+id1+L"' ";
+		str += L" select 1 for xml path('root')L";
+		
+		arg.AddArg(L"sql", str);
+		if(getSql(arg.GetString(),x)!=1)
+		{
+			trace(L"error:"+(xstring)x.xml());
+			alert(L"移动节点出错!");
+			tv_gs.DeleteItem(xto);
+			return 0;
+		}
+		//trace(L"================L");
+		//
+		HTREEITEM xpfrom =tv_gs.GetParentItem(xfrom);
+		//trace(L"%d", xpfrom);
+		KXMLDOMElement& fe = *(KXMLDOMElement*)tv_gs.GetItemData(xpfrom);
+		//trace(L"%s-------------------------%s",fe.xml,tid.xml);
+		KXMLDOMElement fe1 = fe.selectSingleNode(L"item[@guid='"+id1+L"']");
+		fe.removeChild(fe1);
+		tid.appendChild(fid);
+		
+		tv_gs.DeleteItem(xfrom);
+		return 1;
+	}
+
+	int OnInitial()
+	{			
+		HTREEITEM rItem =tv_gs.GetRootItem();
+		tv_gs.ExpandItemEx( rItem);
+		tv_gs.ItemFocus(rItem);
+		return 1;
+	}
+		
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&SimpleMenuConfig::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&SimpleMenuConfig::OnSetFocus);
+		AttachEvent(L"tv_gs",L"TVN_SELCHANGED", (FEvent)&SimpleMenuConfig::OnTreeSelChanged);
+		AttachEvent(L"tv_gs", L"TVN_ENDDRAG", (FEvent)&SimpleMenuConfig::OnTreeMoveNode);
+		return 1;
+	}		
+	
+	int onload()
+	{
+		dw_list = GetControl(L"dw_list");
+		dw_list.openUrl(L"/sale/view/SimpleProduct/template/Simple/Menu");
+		dw_list.SetColumnState(L"SeqNo", false);
+		
+		tv_gs = GetControl(L"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..fb8bc63
--- /dev/null
+++ b/jrj/project/business/BasicCode/SourceRemark.cpp
@@ -0,0 +1,158 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) SourceRemark :  public xwin
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		SourceRemark(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	public:
+		static SourceRemark* CreateInstance(void* implPtr, void* hWnd)
+		{
+			SourceRemark* pWin = new SourceRemark(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				//dw_list.SetItemString(row+1,L"State",L"Y");
+				return 1;
+			}
+			else if(comdid==L"xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+				return OnSave();
+			else if(comdid==L"xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&SourceRemark::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&SourceRemark::OnSetFocus);
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			xml x;
+			
+			dw_list.DwUpdateAllToEx(x); 
+			xaserverarg arg;
+			
+			arg.AddArg(L"content",x.xml());						
+			if (xurl::get(L"/sale/data/TradeFinance3/SourceRemark/update",arg.GetString(),x) != 1)
+			{
+				trace(L"error:"+(xstring)x.xml());
+				alert(L"保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.xml());
+				if(x.selectSingleNode(L"error"))
+				{
+					alert(L"保存出错2!");
+					return 0;				
+				}
+				MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			
+			xaserverarg arg;
+			
+			if (xurl::get(L"/sale/data/TradeFinance3/SourceRemark/list",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/FinancialCode/template/SourceRemarkList");
+			dw_list.SetColumnState(L"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..6e905b7
--- /dev/null
+++ b/jrj/project/business/BasicCode/SpecialDeductFeeList.cpp
@@ -0,0 +1,159 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) SpecialDeductFeeList :  public xwin
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		SpecialDeductFeeList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	public:
+		static SpecialDeductFeeList* CreateInstance(void* implPtr, void* hWnd)
+		{
+			SpecialDeductFeeList* pWin = new SpecialDeductFeeList(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				//dw_list.SetItemString(row+1,L"State",L"Y");
+				return 1;
+			}
+			else if(comdid==L"xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+				return OnSave();
+			else if(comdid==L"xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&SpecialDeductFeeList::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&SpecialDeductFeeList::OnSetFocus);
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			xml x;
+			
+			dw_list.DwUpdateAllToEx(x); 
+			xaserverarg arg;
+			
+			arg.AddArg(L"content",x.xml());		
+			trace(x.xml());
+			if (xurl::get(L"/sale/data/expense3/update/SpecialDeductFee",arg.GetString(),x) != 1)
+			{
+				trace(L"error:"+(xstring)x.xml());
+				alert(L"保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.xml());
+				if(x.selectSingleNode(L"error"))
+				{
+					alert(L"保存出错2!");
+					return 0;				
+				}
+				MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			
+			xaserverarg arg;
+			
+			if (xurl::get(L"/sale/data/expense3/SpecialDeductFeeList",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/expense3/SpecialDeductFeeList");
+			dw_list.SetColumnState(L"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..50c7dd3
--- /dev/null
+++ b/jrj/project/business/BasicCode/TestingCompanyList.cpp
@@ -0,0 +1,42 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) TestingCompanyList : public xwin
+{
+public:
+
+	xdwgrid  dw_list;
+public:
+	TestingCompanyList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+public:
+	static TestingCompanyList* CreateInstance(void* implPtr, void* hWnd)
+	{
+		TestingCompanyList* pWin = new TestingCompanyList(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int onload()
+	{
+		list::onload();
+		return -1;
+	}
+
+	int ViewUpdate(param pr, xstring updateItem, xaserverarg   arg)
+	{
+		if (updateItem == L"del")
+		{
+			int DelRow = dw_list.GetRow();
+			dw_list.DeleteRow(DelRow);
+
+		}
+
+		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..12a369a
--- /dev/null
+++ b/jrj/project/business/BasicCode/TestingCompanyMaint.cpp
@@ -0,0 +1,321 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) TestingCompanyMaint : public xframe
+{
+public:
+	KXMLDOMDocument m_configDoc;
+	xstring m_userid;
+	xstring m_username;
+	xstring ContactID;
+	xdwtable dw_base;
+	xcell dw_cell;
+public:
+	TestingCompanyMaint(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static TestingCompanyMaint* CreateInstance(void* implPtr, void* hWnd)
+	{
+		TestingCompanyMaint* pWin = new TestingCompanyMaint(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int alert(xstring str)
+	{
+		//win::MessageBox(GetHWND(),str,L"提示22:",0);
+		TApp::alert(this, str);
+		return 0;
+	}
+	int setCellReadOnly()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		dw_cell = new xcell;
+		dw_cell.setNativePointer(dw_base.QueryItem(L"ixcell"));
+		xstring strnew = L"<cellprop celltype='' cellformatex='' cellformat='' cellprotectex='' cellprotect='保护' cellvisibleex='' cellvisible='' cellvalid='' cellinitial=''/>";
+		dw_cell.SetCellProps(2, 2, strnew);
+		return 0;
+	}
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent(L"maint");
+		return 1;
+	}
+	xstring GetGuid()
+	{
+		return publiccode::GetGuid();
+	}
+	int OnClear() {
+		if (m_EntityID == L"") {
+			m_userid = publiccode::GetUser().id;
+			m_username = publiccode::GetUser().name;
+			dw_base = new xdwtable;
+			dw_base.setNativePointer(GetControl(L"dw_base"));
+			dw_base.SetItemString(1, L"PartyID", GetGuid());
+			dw_base.SetItemString(1, L"PStatus", L"1");
+			dw_base.SetItemDisplayString(1, L"PStatus", L"有效");
+			dw_base.SetItemString(1, L"CreatorID", m_userid);
+			dw_base.SetItemString(1, L"PADStatus", L"1");
+			dw_base.SetItemString(1, L"Type", L"20");
+			dw_base.SetItemString(1, L"AddressID", GetGuid());
+			dw_base.SetItemString(1, L"PADIdentifyAddressFlag", L"Y");
+			dw_base.SetItemString(1, L"PrimaryFlag", L"Y");
+			dw_base.SetItemString(1, L"EnterName", m_userid);
+			dw_base.SetItemDisplayString(1, L"EnterName", m_username);
+			dw_base.SetItemString(1, L"CreateDate", publiccode::GetCurrentDate());
+		}
+		else
+		{
+			setCellReadOnly();
+		}
+		return 0;
+	}
+
+	int OnAddrow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			dw.InsertRow(0);
+			int rows = dw.GetRowCount();
+			dw.SetRow(rows);
+		}
+		return 1;
+	}
+	int OnInsertRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			dw.InsertRow(row);
+			dw.SetRow(row);
+		}
+		return 1;
+	}
+
+	int OnDeleteRow()
+	{
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xdwtable dw = new xdwtable;
+		dw.setNativePointer(dw_base.GetCurTable());
+		xstring dw_n = dw.GetDwName();
+		if (dw_n == L"item")
+		{
+			int row = dw.GetRow();
+			if (row < 1) return 0;
+			/*xstring del = dw.GetItemString(row,8);
+			if(del!=L"")
+			{
+				if(m_dels==L"")
+				{
+					m_dels=del;
+				}
+				else
+				{
+					xstring temp=m_dels;
+					m_dels=del + L"|" + temp;
+				//+= L"|"+del;
+				}
+
+			}*/
+			dw.DeleteRow(row);
+			dw.SetRow(row - 1);
+		}
+		return 1;
+	}
+	xstring getGoodsNo()
+	{
+		xml x;
+
+		xaserverarg arg;
+
+		if (getUrl(L"/sale/data/LogisticsCode/pref/shipcompany/PartyNo", arg.GetString(), x) != 1)
+		{
+			trace(x.xml());
+			return L"";
+		}
+		KXMLDOMElement e = x.documentElement();
+		if (e)
+		{
+			xstring code = e.text();
+			trace(code);
+			return L"P" + code;
+		}
+		return L"P1000";
+	}
+	int OnPreSave()
+	{
+		dw_base.AcceptText();
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring ShipNo = dw_base.GetItemString(1, L"ShipNo");
+		if (ShipNo == L"")
+		{
+			dw_base.SetItemString(1, L"ShipNo", getGoodsNo());
+		}
+		xdwtable dwcon = new xdwtable;
+		dwcon.setNativePointer(dw_base.FindDwTable(L"item", 0));
+		int i;
+		for (i = 1; i <= dwcon.GetRowCount(); i++)
+		{
+			xstring aTemp;
+			xstring aName = dwcon.GetItemString(i, L"ContacterName");
+			trace(aName);
+			if (aName == L"" )
+			{
+				aTemp = dwcon.GetItemString(i, L"Mobile") + dwcon.GetItemString(i, L"TEL") + dwcon.GetItemString(i, L"Fax") + dwcon.GetItemString(i, L"Email") + dwcon.GetItemString(i, L"PCRemark");
+				trace(aTemp);
+				if (aTemp != L"")
+				{
+					alert(L"联系人名称必填!");
+					return -1;
+				}
+			}
+			else {
+				xstring ContactID = dwcon.GetItemString(i, L"ContactID");
+				if (ContactID == L"" )
+				{
+					dwcon.SetItemString(i, L"ContactID", GetGuid());
+					dwcon.SetItemString(i, L"PCStatus", L"1");
+					dw_base.SetItemString(1, L"PrimaryContactID", dwcon.GetItemString(1, L"ContactID"));
+				}
+
+
+
+			}
+		}
+		return 1;
+	}
+	int OnSave()
+	{
+
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		xstring SName = dw_base.GetItemString(1, L"Name");
+		if (SName == L"") {
+			alert(L"请输入船公司名称!");
+			return -1;
+		}
+		int rec = OnPreSave();
+		if (rec == -1)	return -1;
+		xml x;
+
+		dw_base.DwUpdateAllTo(x);
+		trace(x.xml());
+		xaserverarg arg;
+
+		arg.AddArg(L"content", x.xml());
+		arg.AddArg(L"dbmap", L"Shipcompany.dbmap");
+		//arg.AddArg(L"m_dels",m_dels);	
+
+		if (getUrl(L"/sale/data/LogisticsCode/entity/shipcompany/save", arg.GetString(), x) != 1)
+		{
+			trace(L"error:" +(xstring)x.xml());
+			alert(L"保存失败!");
+			return 0;
+		}
+		else
+		{
+			trace(x.xml());
+			if (x.selectSingleNode(L"error"))
+			{
+				alert(L"保存出错2!");
+				return 0;
+			}
+			alert(L"保存成功!");
+			dw_base.ResetUpdateStatus();
+			setCellReadOnly();
+		}
+		dw_base.Redraw();
+		//m_dels=L"";				
+		return 0;
+	}
+	int OnCmdDispatch(xstring comdid)
+	{
+		trace(comdid);
+		if (comdid.find(L"action:bill.row.add", 0) >= 0) {
+			OnAddrow();
+		}
+		else if (comdid.find(L"bill.row.insert", 0) >= 0) {
+			OnInsertRow();
+		}
+		else if (comdid.find(L"bill.row.delete", 0) >= 0) {
+			OnDeleteRow();
+		}
+		else if (comdid.find(L"bill.save", 0) >= 0) {
+			//trace(1);
+			dw_base.AcceptText();
+			OnSave();
+		}
+		return 0;
+	}
+
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+	int OnCellChanged(TEvent* evt, LPARAM p)
+	{
+		
+		dw_base = new xdwtable;
+		dw_base.setNativePointer(GetControl(L"dw_base"));
+		DWNMHDR& hdr = *(DWNMHDR*)evt->notify.pnmh;
+		xstring colname = hdr.colname;
+		//trace(colname);
+		if (colname == L"ShipNo")
+		{
+			xstring cspec = dw_base.GetItemString(1, 1);
+			trace(cspec);
+			xstring SpecRule = L"^\\d*$";
+			xaserverarg args;
+
+			args.AddArg(L"CSpec", cspec);
+			args.AddArg(L"SpecRule", SpecRule);
+			xml  x = new xml;
+
+			getUrl(L"/sale/data/LogisticsCode/pref/forwarderno/check", args.GetString(), x);
+			if (x.selectSingleNode(L"root/spec"))
+			{
+				alert(L"请输入数字!");
+				return 0;
+			}
+
+		}
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&TestingCompanyMaint::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&TestingCompanyMaint::OnSetFocus);
+		AttachEvent(L"dw_base", L"DWV_ITEMCHANGED", (FEvent)&TestingCompanyMaint::OnCellChanged);
+		return 1;
+	}
+
+	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..ccb1969
--- /dev/null
+++ b/jrj/project/business/BasicCode/TypeList.maint.supplier.cpp
@@ -0,0 +1,186 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class  __declspec(dllexport) TypeListMaintWin :  public xframe
+	{
+	public:
+		xdwgrid	dw_list;
+		xtreeview tv_folder;
+
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		TypeListMaintWin(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+	public:
+		static TypeListMaintWin* CreateInstance(void* implPtr, void* hWnd)
+		{
+			TypeListMaintWin* pWin = new TypeListMaintWin(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		int OnSave()
+		{
+			xml x;
+			xaserverarg arg ;
+			
+			xml x1;
+			x1.loadXML(L"<root/>");
+			
+			dw_list.DwUpdateAllToEx(x);
+			KXMLDOMNodeList t = x.selectNodes(L"root/Supplier[@update.modify]");
+			KXMLDOMElement e1= x1.documentElement();
+			int len = t.length();
+			for(int i=0;i<len;i++)
+			{
+				e1.appendChild(t.item(i));
+			}
+			arg.AddArg(L"content",x1.xml());
+			if(xurl::get(L"/sale/data/SupplierV3/entity/save/v3", arg.GetString(),x)!=1)
+			{
+				xstring error = x.text();
+				alert(error);
+				return 1;
+			}else
+			{
+				
+				if( x.selectSingleNode(L"ok"))
+				{
+					alert(L"保存成功");
+					dw_list.ResetUpdateStatus();
+				}else
+				{
+					alert(L"保存失败!");
+				}
+			}
+			return 1;
+		}
+				
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmSave")
+				return OnSave();
+			else if(comdid==L"xmSearch")
+				return OnRetrieve();
+			
+			return 0;
+		}
+		
+		int OnRetrieve()
+		{
+			HTREEITEM hItem =tv_folder.GetSelectedItem();
+			xstring typ = tv_folder.GetItemData(hItem);
+			xstring searchStr = xcontrol(GetControl(L"SearchContent")).GetText();
+			
+			HCURSOR hCursor = xutil::SetCursorWait();
+			xml x = ViewObject::RetrieveData(L"/sale/data/SupplierV3/type/list", L"sType",typ,L"SearchText",searchStr);
+			if(x) 
+				dw_list.Retrieve(x);
+			else
+				dw_list.Reset();
+			dw_list.Redraw();
+			xutil::RestoreCursor(hCursor);
+			
+			return 1;
+		}
+		
+		//树选择
+		int OnTreeSelChanged(TEvent* evt, int p)
+		{
+			NMTREEVIEW& nmtv = *(NMTREEVIEW*)evt->notify.pnmh;
+			
+			HTREEITEM hItem = nmtv.itemNew.hItem;
+			return OnRetrieve();
+		}
+			//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&TypeListMaintWin::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&TypeListMaintWin::OnSetFocus);
+			AttachEvent(L"tv_folder", L"TVN_SELCHANGED", (FEvent)&TypeListMaintWin::OnTreeSelChanged);
+			return 1;
+		}
+		
+		/*
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			x.setNativePointer(xml::CreateInstance());
+			xaserverarg arg = new xaserverarg;
+			arg.setNativePointer(arg.CreateInstance());	
+			arg.AddArg(L"xxx",L"xxx");
+			if (getUrl(L"",arg.GetString(),x)!=1)
+			{
+				trace(x.text);
+				return -1;
+			}else	
+			{
+				//dw_list.Retrieve(x);
+				//dw_list.Redraw();
+			}
+			return 1;
+		}
+		*/
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/SupplierV3/template/supplier/mainttypelist");
+			
+			tv_folder = GetControl(L"tv_folder");
+			OnAttachEvent();	
+			tv_folder.ExpandItem(tv_folder.GetRootItem());
+			
+			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..5988861
--- /dev/null
+++ b/jrj/project/business/BasicCode/basicfareTypeList.cpp
@@ -0,0 +1,158 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+#include <xcontrol/xdatetimepick.hpp>
+
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+	class __declspec(dllexport) basicfareTypeList :  public xwin
+	{
+	public:
+		xdwgrid	dw_list;
+		xnode	m_agentNode;	//Agent Condition
+	public:
+		basicfareTypeList(void* implPtr, HWND hWnd) :xwin(implPtr, hWnd) {}
+	public:
+		static basicfareTypeList* CreateInstance(void* implPtr, void* hWnd)
+		{
+			basicfareTypeList* pWin = new basicfareTypeList(implPtr, (HWND)hWnd);
+			return pWin;
+		}
+		int SetAgent()
+		{
+			xstring xfNodeAgentArea  = L"agentarea";
+			xnode anode = GetAgentNode(xfNodeAgentArea);
+			if(m_agentNode)
+			{
+				SetAgentNode (anode,m_agentNode);
+			}
+			else
+			{
+				KXMLDOMElement xframeElement =  GetElement();
+				KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/"+xfNodeAgentArea+L"[1]/*");
+				if(agent)
+				{
+					xstring s = agent.xml();
+					m_agentNode =  SetAgentNode (anode,s);
+				}
+			}
+			return 1;
+		}
+
+		//焦点激活处理函数
+		int OnSetFocus(TEvent* evt, LPARAM param)
+		{
+			//重置工具条
+			SetAgent();
+			return 1;
+		}
+
+		//命令发布函数
+		int OnCmdDispatch(xstring comdid)
+		{
+			if(comdid==L"xmAddRow")
+			{
+				int row =dw_list.GetRowCount();
+				dw_list.InsertRow(0);
+				dw_list.SetItemString(row+1,L"State",L"Y");
+				return 1;
+			}
+			else if(comdid==L"xmDeleteRow")
+			{
+				dw_list.DeleteRow(0);
+				return 1;
+			}
+			else if(comdid==L"xmSave")
+				return OnSave();
+			else if(comdid==L"xmRefresh")
+				return OnRetrieve();
+			return 0;
+		}
+		
+		//命令处理事件
+		int OnXCommand(TEvent* evt, LPARAM param)
+		{
+			return OnCmdDispatch(evt->xcommand.pStrID);
+		}
+		
+		int OnAttachEvent()
+		{
+			//绑定工具条点击事件
+			AttachEvent(L"WM_XCOMMAND", (FEvent)&basicfareTypeList::OnXCommand);
+			//获取焦点事件,用于重置工具条
+			AttachEvent(L"WM_SETFOCUS", (FEvent)&basicfareTypeList::OnSetFocus);
+			return 1;
+		}
+		
+		int OnSave()
+		{
+			xml x;
+			
+			dw_list.DwUpdateAllToEx(x); 
+			xaserverarg arg;
+			
+			arg.AddArg(L"content",x.xml());						
+			if (xurl::get(L"/sale/data/expense3/update/basicfareType",arg.GetString(),x) != 1)
+			{
+				trace(L"error:"+(xstring)x.xml());
+				alert(L"保存失败!");
+				return 0;
+			}						
+			else
+			{	
+				trace(x.xml());
+				if(x.selectSingleNode(L"error"))
+				{
+					alert(L"保存出错2!");
+					return 0;				
+				}
+				MessageBox(GetHWND(),L"保存成功!",L"提示",0);	
+				dw_list.ResetUpdateStatus();							
+			}
+			dw_list.Redraw();	
+			return 1;
+		}
+		
+		
+		int  OnRetrieve()
+		{
+			xml x = new xml;
+			
+			xaserverarg arg;
+			
+			if (xurl::get(L"/sale/data/expense3/basicfareTypeLsit",arg.GetString(),x)!=1)
+			{
+				trace(x.text());
+				return -1;
+			}else	
+			{
+				dw_list.Retrieve(x);
+				dw_list.Redraw();
+			}
+			return 1;
+		}
+		
+		int onload()
+		{
+			dw_list = GetControl(L"dw_list");
+			dw_list.openUrl(L"/sale/view/expense3/basicfareTypeList");
+			dw_list.SetColumnState(L"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..d58a1c3
--- /dev/null
+++ b/jrj/project/business/BasicCode/brand.regtype.cpp
@@ -0,0 +1,161 @@
+#include <wobject/xstring.hpp>
+#include <xcontrol/xtreeview.hpp>
+#include <xcontrol/xdwgrid.hpp>
+#include <wobject/xdouble.hpp>
+#include <xcontrol/xlayersheet.hpp>
+
+#include "vbusiness/vframe/listwin.vframe.vbusiness.hpp"
+#include "viewobject/view.base.hpp"
+
+using xml = KXMLDOMDocument;
+class __declspec(dllexport) brand_regtype : public xframe
+{
+public:
+	xdwtable dw_list;
+	xnode	m_agentNode;
+public:
+	brand_regtype(void* implPtr, HWND hWnd) :xframe(implPtr, hWnd) {}
+public:
+	static brand_regtype* CreateInstance(void* implPtr, void* hWnd)
+	{
+		brand_regtype* pWin = new brand_regtype(implPtr, (HWND)hWnd);
+		return pWin;
+	}
+	int SetAgent()
+	{
+		xstring xfNodeAgentArea = L"agentarea";
+		xnode anode = GetAgentNode(xfNodeAgentArea);
+		if (m_agentNode)
+		{
+			SetAgentNode(anode, m_agentNode);
+		}
+		else
+		{
+			KXMLDOMElement xframeElement = GetElement();
+			KXMLDOMElement agent = xframeElement.selectSingleNode(L"agent/" + xfNodeAgentArea + L"[1]/*");
+			if (agent)
+			{
+				xstring s = agent.xml();
+				m_agentNode = SetAgentNode(anode, s);
+			}
+		}
+		return 1;
+	}
+
+	xdwtable getDw()
+	{
+		xdwtable dw1 = new xdwtable;
+		dw1.setNativePointer(dw_list.FindDwTable(L"item"));
+		return dw1;
+	}
+
+	int addRow()
+	{
+		xdwtable dw = getDw();
+		int row = dw.InsertRow(0);
+		xstring no = L"2";
+		if (row > 1)
+			no = dw.GetItemString(row - 1, L"RegTypeID");
+		int n = no.toInt();
+		int h = n + 1;
+		dw.SetItemString(row, L"RegTypeID", xstring(h));
+		return 1;
+	}
+	int deleteRow()
+	{
+		xdwtable dw = getDw();
+		int row = dw.GetRow();
+		if (row < 1 || row > dw.GetRowCount()) return -1;
+		if (MessageBox(GetHWND(), L"是否删除选择的记录行?", L"提示", 4) == 7)
+			return 1;
+		dw.DeleteRow(row);
+		return 1;
+	}
+	int save()
+	{
+		xml x;
+	
+		xaserverarg arg;
+
+		dw_list.AcceptText();
+		dw_list.DwUpdateAllTo(x);
+		KXMLDOMElement e = x.documentElement();
+		//trace(e.xml);
+		arg.AddArg(L"content", e.xml());
+		if (getUrl(L"/workflow/action/BrandRegType.dbmap/bill.update", arg.GetString(), x) != 1)
+		{
+			alert(L"保存失败!");
+			return -1;
+		}
+		//trace(x.xml());
+		xstring str = x.xml();
+		if (str.find(L"保存成功", 0) > 0)
+		{
+			alert(L"保存成功");
+			dw_list.ResetUpdateStatus();
+			dw_list.Redraw();
+		}
+		else
+			alert(L"保存失败0!");
+		return 1;
+	}
+
+	//命令发布函数
+	int OnCmdDispatch(xstring comdid)
+	{
+		HCURSOR hCursor = xutil::SetCursorWait();
+		if (comdid == L"xmNew") addRow();
+		else if (comdid == L"xmDelete") deleteRow();
+		else if (comdid == L"xmSave") save();
+		xutil::RestoreCursor(hCursor);
+		return 0;
+	}
+
+	//命令处理事件
+	int OnXCommand(TEvent* evt, LPARAM param)
+	{
+		return OnCmdDispatch(evt->xcommand.pStrID);
+	}
+
+	int OnSetFocus(TEvent* evt, LPARAM p)
+	{
+		SetAgent();
+		return 1;
+	}
+	int OnAttachEvent()
+	{
+		AttachEvent(L"WM_XCOMMAND", (FEvent)&brand_regtype::OnXCommand);
+		AttachEvent(L"WM_SETFOCUS", (FEvent)&brand_regtype::OnSetFocus);
+
+		return 1;
+	}
+	int Initail()
+	{
+		xaserverarg arg;
+
+		xml x;
+		if (getUrl(L"/sale/data/brand/entity/regtype", arg.GetString(), x) != 1)
+		{
+			alert(L"初始化查询失败!");
+			return -1;
+		}
+		//trace(x.xml());
+		dw_list.Retrieve(x);
+		dw_list.Redraw();
+		return 1;
+	}
+
+	int onload()
+	{
+		dw_list = new xdwtable;
+		dw_list.setNativePointer(GetControl(L"dw_list"));
+		dw_list.openUrl(L"/sale/view/brand/template/regtype");
+		//dw_list.SetColHeaderHeight(0);
+		dw_list.SetRowSelectorWidth(0);
+
+		OnAttachEvent();
+		SetAgent();
+		Initail();
+		return -1;
+	}
+};
\ No newline at end of file
diff --git a/jrj/project/business/GDN/CustomCodeNew.cpp b/jrj/project/business/GDN/CustomCodeNew.cpp
index 110e378..76b8c83 100644
--- a/jrj/project/business/GDN/CustomCodeNew.cpp
+++ b/jrj/project/business/GDN/CustomCodeNew.cpp
Binary files differ

--
Gitblit v1.9.3