yaoyu há 2 dias atrás
pai
commit
ccaa614121

+ 9 - 0
hr/hr/src/client/nc/bs/hr/plugin/GetDataUtil.java

@@ -94,6 +94,15 @@ public class GetDataUtil {
 		}
 		return pk_busitype;
 	}
+	//业务流程
+	public static String getBusitypePKs(String code,String pk_group) throws Exception {
+		String sql = "select pk_busitype from bd_busitype where  busicode = '"+code+"' and  pk_group = '"+pk_group+"' and validity = '1' and nvl(dr,0) = 0";
+		String pk_busitype = (String) iuap.executeQuery(sql, new ColumnProcessor());
+		if (pk_busitype == null) {
+			throw new Exception("获取业务流程信息失败,未找到与参数" + code + "有关的数据!");
+		}
+		return pk_busitype;
+	}
 	
 	// 币种
 	public static String getCurrtypePK(String code) throws Exception {

+ 60 - 30
hr/hr/src/client/nc/ui/hr/baod_orders/view/AccumulationFundAllocationUI.java

@@ -56,6 +56,7 @@ import nc.vo.arap.receivable.ReceivableBillItemVO;
 import nc.vo.arap.receivable.ReceivableBillVO;
 import nc.vo.fipub.exception.ExceptionHandler;
 import nc.vo.fipub.freevalue.Module;
+import nc.vo.fipub.freevalue.util.BigAssMD5Util;
 import nc.vo.gl.pubvoucher.DetailVO;
 import nc.vo.gl.pubvoucher.OperationResultVO;
 import nc.vo.gl.pubvoucher.VoucherVO;
@@ -330,7 +331,8 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 				VoucherVO voucher = getVoucherVO(voucheramount);
 				for (DetailVO detail : voucher.getDetails()) {
 					if (detail.getAss() != null && detail.getAss().length > 0) {
-						String assIDs = GLPubProxy.getRemoteFreevaluePub().getAssID_RequiresNew(detail.getAss(), false, "", InvocationInfoProxy.getInstance().getGroupId(), Module.GL);
+						String smd5 = new BigAssMD5Util().getMD5ByAssvos(detail.getAss(), InvocationInfoProxy.getInstance().getGroupId());
+						String assIDs = GLPubProxy.getRemoteFreevaluePub().getAssID_RequiresNew(detail.getAss(), false, smd5, InvocationInfoProxy.getInstance().getGroupId(), Module.GL);
 						detail.setAssid(assIDs);
 					}
 				}
@@ -520,8 +522,8 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 				staffMoney = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
 				orgMoney = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
 			}
-			int staffMoneyLength = staffMoney.substring(staffMoney.indexOf(".") + 1).length();// 个人部分小数位数
-			int orgMoneyLength = orgMoney.substring(orgMoney.indexOf(".") + 1).length();// 公司部分小数位数
+			int staffMoneyLength = getDecimalLength(staffMoney);// 个人部分小数位数
+			int orgMoneyLength = getDecimalLength(orgMoney);// 公司部分小数位数
 			// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 			if (staffMoneyLength > 2 || orgMoneyLength > 2) {
 				UFDouble beforePsgStaffMoney = new UFDouble(staffMoney);
@@ -577,9 +579,9 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			String clerkcode = map.get("clerkcode");
 			String clerkname = map.get("clerkname");
 			String orgName = map.get("orgname");
-			String basicssum = MathTool.nvl(ValueUtils.getUFDouble(map.get("basicssum"))).toString();
-			String staffsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
-			String orgsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
+			String basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("basicssum")))).toString();
+			String staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("staffsum")))).toString();
+			String orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("orgsum")))).toString();
 			String mark = map.get("mark");
 			// orgName可能存在为空的情况,拼接的时候会把null拼接到新的字符串,使用三目运算处理改问题
 			String combinedField = title + (orgName == null ? "" : orgName) + clerkcode + clerkname;
@@ -590,16 +592,16 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			Map<String, String> middleTableMap = middleTableData.get(combinedField);
 			// middleTableMap不为空使用中间表数据
 			if (middleTableMap != null) {
-				basicssum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("basicssum"))).toString();
-				staffsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("staffsum"))).toString();
-				orgsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("orgsum"))).toString();
+				basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("basicssum")))).toString();
+				staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("staffsum")))).toString();
+				orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("orgsum")))).toString();
 				mark = middleTableMap.get("mark");
 			}
 			basicsMoney = nvl(basicssum, 2);
 			staffMoney = nvl(staffsum, 2);
 			orgMoney = nvl(orgsum, 2);
-			int staffsumLength = staffsum.substring(staffsum.indexOf(".") + 1).length();// 个人部分小数位数
-			int orgsumLength = orgsum.substring(orgsum.indexOf(".") + 1).length();// 公司部分小数位数
+			int staffsumLength = getDecimalLength(staffsum);// 个人部分小数位数
+			int orgsumLength = getDecimalLength(orgsum);// 公司部分小数位数
 			// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 			if (staffsumLength > 2 || orgsumLength > 2) {
 				UFDouble afterPsgStaffMoney = staffMoney;
@@ -816,7 +818,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" SELECT orgname,clerkcode,clerkname,sum(basicssum) as basicssum,sum(staffsum) as staffsum,sum(orgsum) as orgsum,max(mark) as mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
-		sql.append(" salocation AS orgname,");
+		sql.append(" costorgname AS orgname,");
 		sql.append(" clerkcode,");
 		sql.append(" clerkname,");
 		sql.append(" CAST(housing_fund_base AS VARCHAR2 ( 50 ) ) AS basicssum,");
@@ -825,15 +827,33 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		sql.append(" mark");
 		sql.append(" FROM");
 		sql.append(" (SELECT");
-		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t.c_23 AS salocation,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t1.housing_fund_base,t1.mark");
+		sql.append(" t.CLERKCODE,T1.CLERKNAME,t.ym,sum( nvl( t.VALUE, 0 ) ) AS sum_per_cost,t.c_23 AS salocation,");
+		sql.append(" T13.Name AS costorgname,sum( nvl( t.VALUE, 0 ) ) AS HOUSING_FUND_STAFF,");
+		sql.append(" t1.HOUSING_FUND_ORG - nvl( t15.sum_per_cost, 0 ) - nvl( t16.HOUSING_FUND_ORG, 0 ) AS HOUSING_FUND_ORG,");
+		sql.append(" t1.housing_fund_base,");
+		sql.append(" t1.mark");
 		sql.append(" FROM");
 		sql.append(" NC6337.v_data_xz_gjjshare t");
 		sql.append(" LEFT JOIN NC6337.V_SUM_TB_HR_SOCIAL_SECURITY t1 ON t1.CLERKCODE = t.CLERKCODE");
 		sql.append(" AND t1.PAY_MONTH || '-01' = t.ym");
+		sql.append(" LEFT JOIN (");
+		sql.append(" SELECT");
+		sql.append(" t12.CLERK_CODE,t12.NC_PK_POST");
+		sql.append(" FROM");
+		sql.append(" nc6337.monthly_position_gjj t12");
+		sql.append(" WHERE");
+		sql.append(" t12.month = to_char( last_day( to_date( '"+period+"', 'yyyy-mm' ) ), 'yyyy-mm-dd' ) ");
+		sql.append(" ) T12 ON t12.CLERK_CODE = t.CLERKCODE");
+		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
+		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
+		sql.append(" LEFT JOIN nc6337.person_afford_sbgjj_g t15 ON t15.CLERKCODE = t.CLERKCODE AND t.YM = t15.ym");
+		sql.append(" LEFT JOIN nc6337.DEPT_AFFORD_SBGJJ t16 ON t16.CLERKCODE = t.CLERKCODE AND t.YM = t16.PAY_MONTH");
 		sql.append(" WHERE");
-		sql.append(" t.key = '社保个人合计' AND t.VALUE <> 0 AND t.ym = '"+period+"' || '-01' AND t1.ORGCODE_HOUSE = '"+orgCode+"' AND t1.HOUSING_FUND_PAY_ORG <> t.c_23");
-		sql.append(" GROUP BY ROWNUM,t.CLERKCODE,T1.CLERKNAME,t.ym,t1.housing_fund_base,t1.HOUSING_FUND_ORG,t1.HOUSING_FUND_STAFF,t.c_23,t1.mark");
-		sql.append(" ORDER BY t.c_23)");
+		sql.append(" t.key IN ( '公积金个人合计', '费用调整公积金', '公积金个人扣款', '费用调整公积金t' ) AND t.VALUE <> 0 ");
+		sql.append(" AND t.ym = '"+period+"' || '-01' AND t1.ORGCODE_HOUSE = '"+orgCode+"' ");
+		sql.append(" AND t1.HOUSING_FUND_PAY_ORG <> t.c_23");
+		sql.append(" GROUP BY t.CLERKCODE,T1.CLERKNAME,t.ym,t.c_23,T13.Name,t1.HOUSING_FUND_STAFF,");
+		sql.append(" t1.HOUSING_FUND_ORG - nvl( t15.sum_per_cost, 0 ) - nvl( t16.HOUSING_FUND_ORG, 0 ),t1.housing_fund_base,t1.mark)");
 		sql.append(jointSql(title, orgCode, period));
 		sql.append("  )GROUP BY orgname,clerkcode,clerkname ORDER BY orgname,clerkcode");
 		return (List<Map<String, String>>) iuap.executeQuery(sql.toString(), new MapListProcessor());
@@ -1277,8 +1297,9 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		/** 借方:其他应收款/个人往来/个人明细/人员档案 **/
 		UFDouble bygs = objgs == null ? UFDouble.ZERO_DBL : new UFDouble(objgs.toString());
 		UFDouble blgr = objblgr == null ? UFDouble.ZERO_DBL : new UFDouble(objblgr.toString());
-		// 金额=表一公司部分合计+表六个人部分合计
-		UFDouble byblhj = bygs.add(blgr);
+		UFDouble bygr = objgr == null ? UFDouble.ZERO_DBL : new UFDouble(objgr.toString());
+		// 金额=表一公司部分合计+表六个人部分合计+表一个人部分合计
+		UFDouble byblhj = bygs.add(blgr).add(bygr);
 
 		/** 借方:应付账款/预估成本/办公费/部门:对应部门 项目:其他 项目专业:不涉及 **/
 		UFDouble bmgs = objbmgs == null ? UFDouble.ZERO_DBL : new UFDouble(objbmgs.toString());
@@ -1378,7 +1399,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			if ("管理费用/住房公积金".equals(key)) {
 				km_code = "660206";// 管理费用/住房公积金
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金");
@@ -1393,7 +1414,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			} else if ("其他应收款/五险一金".equals(key)) {
 				km_code = "122104";// 其他应收款/五险一金
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金");
@@ -1411,7 +1432,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 						String checkCode = checkCode_name.split(",")[0];
 						String userName = checkCode_name.split(",")[1];
 						UFDouble debitamountOrg = tableOneOrgEntry.getValue();// 借方发生额
-						if (debitamountOrg.doubleValue() != 0) {
+						if (debitamountOrg != null && debitamountOrg.doubleValue() != 0) {
 							debitamounttotal = debitamounttotal.add(debitamountOrg);
 							DetailVO itemVO = new DetailVO();
 							getDetailvo(itemVO, pk_accasoa, creditamount, debitamountOrg, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 " + userName);
@@ -1432,7 +1453,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 						String checkCode = checkCode_name.split(",")[0];
 						String userName = checkCode_name.split(",")[1];
 						UFDouble debitamountSelf = tableSixSelfEntry.getValue();// 借方发生额
-						if (debitamountSelf.doubleValue() != 0) {
+						if (debitamountSelf != null && debitamountSelf.doubleValue() != 0) {
 							debitamounttotal = debitamounttotal.add(debitamountSelf);
 							DetailVO itemVO = new DetailVO();
 							getDetailvo(itemVO, pk_accasoa, creditamount, debitamountSelf, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 " + userName + "-实际已缴个人未扣");
@@ -1449,7 +1470,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			} else if ("应付账款/预估成本/办公费".equals(key)) {
 				km_code = "22020205";// 应付账款/预估成本/办公费
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 ");
@@ -1473,7 +1494,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			} else if ("其他应收款/单位往来".equals(key)) {
 				km_code = "122101";// 其他应收款/单位往来
 				debitamount = entry.getValue();// 借方发生额
-				if(debitamount.doubleValue() != 0){// 判断外部公司承担表公司部分是否为0(龙咏杰特殊处理)
+				if(debitamount != null && debitamount.doubleValue() != 0){// 判断外部公司承担表公司部分是否为0(龙咏杰特殊处理)
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 尤咏杰");
@@ -1514,7 +1535,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			else if ("应付职工薪酬/住房公积金".equals(key)) {
 				km_code = "221106";// 应付职工薪酬/住房公积金 无辅助核算
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 ");
@@ -1522,10 +1543,10 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 				}
 				
 			} else if ("预付账款/待摊费用/贷方".equals(key)) {
-				// km_code = "220201";
+				//km_code = "220201";
 				km_code = "11230101";// 预付账款/待摊费用
 				creditamount = entry.getValue();// 贷方发生额
-				if (creditamount.doubleValue() != 0) {
+				if (creditamount != null && creditamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 ");
@@ -1549,7 +1570,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 						String checkCode = checkCode_name.split(",")[0];
 						String userName = checkCode_name.split(",")[1];
 						UFDouble creditamountOrg = tableSevenSelfEntry.getValue();// 贷方发生额
-						if (creditamountOrg.doubleValue() != 0) {
+						if (creditamountOrg != null && creditamountOrg.doubleValue() != 0) {
 							debitamounttotal = debitamounttotal.add(creditamountOrg);
 							DetailVO itemVO = new DetailVO();
 							getDetailvo(itemVO, pk_accasoa, creditamountOrg, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 " + userName + "-实际未缴个人已扣");
@@ -1566,7 +1587,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			} else if ("应付职工薪酬/住房公积金/贷方".equals(key)) {
 				km_code = "221106";// 应付职工薪酬/住房公积金 无辅助核算
 				creditamount = entry.getValue();// 贷方发生额
-				if (creditamount.doubleValue() != 0) {
+				if (creditamount != null && creditamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 公积金 ");
@@ -1921,7 +1942,7 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 			receivableBillVO.setMoney(bsgr);// 原币金额
 			String pk_bankaccsub = GetDataUtil.getBankaccsubPK("310066218018000420123");
 			receivableBillVO.setRecaccount(pk_bankaccsub);// 收款银行账户
-			receivableBillVO.setPk_busitype(GetDataUtil.getBusitypePK("AR01"));// 业务流程:选择收款
+			receivableBillVO.setPk_busitype(GetDataUtil.getBusitypePKs("AR01", pk_group));// 业务流程:选择收款
 			receivableBillVO.setBillclass("ys");// 单据大类:应收单
 			String year = period.substring(0, 4);// 会计年度
 			String month = period.substring(5, 7);// 会计月份
@@ -2030,5 +2051,14 @@ public class AccumulationFundAllocationUI extends ToftPanel {
 		}
 		return billNO;
 	}
+	
+	//获取金额字符串的小数位数(无小数点时返回0)
+	private static int getDecimalLength(String money) {
+	    if (money == null || money.isEmpty()) {
+	        return 0;
+	    }
+	    int dotIndex = money.indexOf('.');
+	    return dotIndex >= 0 ? money.substring(dotIndex + 1).length() : 0;
+	}
 
 }

+ 35 - 24
hr/hr/src/client/nc/ui/hr/baod_orders/view/ServiceChargeAllocationUI.java

@@ -50,6 +50,7 @@ import nc.ui.pub.beans.ValueChangedListener;
 import nc.ui.pub.link.BillLinkOneNodeCenter;
 import nc.vo.fipub.exception.ExceptionHandler;
 import nc.vo.fipub.freevalue.Module;
+import nc.vo.fipub.freevalue.util.BigAssMD5Util;
 import nc.vo.gl.pubvoucher.DetailVO;
 import nc.vo.gl.pubvoucher.OperationResultVO;
 import nc.vo.gl.pubvoucher.VoucherVO;
@@ -319,7 +320,8 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				VoucherVO voucher = getVoucherVO(voucheramount);
 				for (DetailVO detail : voucher.getDetails()) {
 					if (detail.getAss() != null && detail.getAss().length > 0) {
-						String assIDs = GLPubProxy.getRemoteFreevaluePub().getAssID_RequiresNew(detail.getAss(), false, "", InvocationInfoProxy.getInstance().getGroupId(), Module.GL);
+						String smd5 = new BigAssMD5Util().getMD5ByAssvos(detail.getAss(), InvocationInfoProxy.getInstance().getGroupId());
+						String assIDs = GLPubProxy.getRemoteFreevaluePub().getAssID_RequiresNew(detail.getAss(), false, smd5, InvocationInfoProxy.getInstance().getGroupId(), Module.GL);
 						detail.setAssid(assIDs);
 					}
 				}
@@ -363,25 +365,25 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				String clerkcode = map.get("clerkcode");
 				String clerkname = map.get("clerkname");
 				String orgName = map.get("orgname");
-				String basicssum = MathTool.nvl(ValueUtils.getUFDouble(map.get("basicssum"))).toString();
-				String staffsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
-				String orgsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
+				String basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("basicssum")))).toString();
+				String staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("staffsum")))).toString();
+				String orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("orgsum")))).toString();
 				String mark = map.get("mark");
 				String combinedField = title + clerkcode + clerkname;
 				// 取中间表数据
 				Map<String, String> middleTableMap = middleTableData.get(combinedField);
 				// middleTableMap不为空使用中间表数据
 				if (middleTableMap != null) {
-					basicssum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("basicssum"))).toString();
-					staffsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("staffsum"))).toString();
-					orgsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("orgsum"))).toString();
+					basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("basicssum")))).toString();
+					staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("staffsum")))).toString();
+					orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("orgsum")))).toString();
 					mark = middleTableMap.get("mark");
 				}
 				UFDouble basicsMoney = nvl(basicssum, 2);
 				UFDouble staffMoney = nvl(staffsum, 2);
 				UFDouble orgMoney = nvl(orgsum, 2);
-				int staffsumLength = staffsum.substring(staffsum.indexOf(".") + 1).length();// 个人部分小数位数
-				int orgsumLength = orgsum.substring(orgsum.indexOf(".") + 1).length();// 公司部分小数位数
+				int staffsumLength = getDecimalLength(staffsum);// 个人部分小数位数
+				int orgsumLength = getDecimalLength(orgsum);// 公司部分小数位数
 				// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 				if (staffsumLength > 2 || orgsumLength > 2) {
 					UFDouble afterPsgStaffMoney = staffMoney;
@@ -457,9 +459,9 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				String clerkcode = map.get("clerkcode");
 				String clerkname = map.get("clerkname");
 				String orgName = map.get("orgname");
-				String basicssum = MathTool.nvl(ValueUtils.getUFDouble(map.get("basicssum"))).toString();
-				String staffsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
-				String orgsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
+				String basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("basicssum")))).toString();
+				String staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("staffsum")))).toString();
+				String orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("orgsum")))).toString();
 				String mark = map.get("mark");
 				String combinedField = null;
 				if (null == orgName) {
@@ -471,16 +473,16 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				Map<String, String> middleTableMap = middleTableData.get(combinedField);
 				// middleTableMap不为空使用中间表数据
 				if (middleTableMap != null) {
-					basicssum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("basicssum"))).toString();
-					staffsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("staffsum"))).toString();
-					orgsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("orgsum"))).toString();
+					basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("basicssum")))).toString();
+					staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("staffsum")))).toString();
+					orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("orgsum")))).toString();
 					mark = middleTableMap.get("mark");
 				}
 				UFDouble basicsMoney = nvl(basicssum, 2);
 				UFDouble staffMoney = nvl(staffsum, 2);
 				UFDouble orgMoney = nvl(orgsum, 2);
-				int staffsumLength = staffsum.substring(staffsum.indexOf(".") + 1).length();// 个人部分小数位数
-				int orgsumLength = orgsum.substring(orgsum.indexOf(".") + 1).length();// 公司部分小数位数
+				int staffsumLength = getDecimalLength(staffsum);// 个人部分小数位数
+				int orgsumLength = getDecimalLength(orgsum);// 公司部分小数位数
 				// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 				if (staffsumLength > 2 || orgsumLength > 2) {
 					UFDouble afterPsgStaffMoney = staffMoney;
@@ -673,8 +675,8 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				staffMoney = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
 				orgMoney = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
 			}
-			int staffMoneyLength = staffMoney.substring(staffMoney.indexOf(".") + 1).length();// 个人部分小数位数
-			int orgMoneyLength = orgMoney.substring(orgMoney.indexOf(".") + 1).length();// 公司部分小数位数
+			int staffMoneyLength = getDecimalLength(staffMoney);// 个人部分小数位数
+			int orgMoneyLength = getDecimalLength(orgMoney);// 公司部分小数位数
 			// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 			if (staffMoneyLength > 2 || orgMoneyLength > 2) {
 				UFDouble beforePsgStaffMoney = new UFDouble(staffMoney);
@@ -1112,7 +1114,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 			if ("管理费用/办公费".equals(key)) {
 				km_code = "660209";// 管理费用/办公费
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher,  "缴纳" + yearperiod + "年" + monthperiod + "月 人事代理服务费");
@@ -1126,7 +1128,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 			} else if ("其他应收款/个人往来".equals(key)) {
 				km_code = "122102";// 其他应收款/个人往来
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					// 查询表一员工明细
 					List<String> ycode = querygcode(orgCode, period);
@@ -1144,7 +1146,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 			} else if ("应付账款/预估成本/办公费".equals(key)) {
 				km_code = "22020205";// 应付账款/预估成本/办公费
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher,  "缴纳" + yearperiod + "年" + monthperiod + "月 人事代理服务费");
@@ -1162,7 +1164,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 			} else if ("其他应收款/单位往来".equals(key)) {
 				km_code = "122101";// 其他应收款/单位往来
 				debitamount = entry.getValue();// 借方发生额
-				if(debitamount.doubleValue() != 0){// 判断外部公司承担表公司部分是否为0(龙咏杰特殊处理)
+				if(debitamount != null && debitamount.doubleValue() != 0){// 判断外部公司承担表公司部分是否为0(龙咏杰特殊处理)
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher,  "缴纳" + yearperiod + "年" + monthperiod + "月 人事代理服务费-尤咏杰");
@@ -1186,7 +1188,7 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 				// km_code= "220201";
 				km_code = "11230101";// 预付账款/待摊费用
 				creditamount = entry.getValue();// 贷方发生额
-				if (creditamount.doubleValue() != 0) {
+				if (creditamount != null && creditamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher,  "缴纳" + yearperiod + "年" + monthperiod + "月 人事代理服务费");
@@ -1498,4 +1500,13 @@ public class ServiceChargeAllocationUI extends ToftPanel {
 		}
 		return resultDate;
 	}
+	
+	//获取金额字符串的小数位数(无小数点时返回0)
+	private static int getDecimalLength(String money) {
+	    if (money == null || money.isEmpty()) {
+	        return 0;
+	    }
+	    int dotIndex = money.indexOf('.');
+	    return dotIndex >= 0 ? money.substring(dotIndex + 1).length() : 0;
+	}
 }

+ 39 - 26
hr/hr/src/client/nc/ui/hr/baod_orders/view/SocialInsuranceAllocationUI.java

@@ -56,6 +56,7 @@ import nc.vo.arap.receivable.ReceivableBillItemVO;
 import nc.vo.arap.receivable.ReceivableBillVO;
 import nc.vo.fipub.exception.ExceptionHandler;
 import nc.vo.fipub.freevalue.Module;
+import nc.vo.fipub.freevalue.util.BigAssMD5Util;
 import nc.vo.gl.pubvoucher.DetailVO;
 import nc.vo.gl.pubvoucher.OperationResultVO;
 import nc.vo.gl.pubvoucher.VoucherVO;
@@ -329,7 +330,9 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 				VoucherVO voucher = getVoucherVO(voucheramount);
 				for (DetailVO detail : voucher.getDetails()) {
 					if (detail.getAss() != null && detail.getAss().length > 0) {
-						String assIDs = GLPubProxy.getRemoteFreevaluePub().getAssID_RequiresNew(detail.getAss(), false, "", InvocationInfoProxy.getInstance().getGroupId(), Module.GL);
+						String smd5 = new BigAssMD5Util().getMD5ByAssvos(detail.getAss(), InvocationInfoProxy.getInstance().getGroupId());
+						String assIDs = GLPubProxy.getRemoteFreevaluePub().getAssID_RequiresNew(detail.getAss(), false,
+								smd5, InvocationInfoProxy.getInstance().getGroupId(), Module.GL);
 						detail.setAssid(assIDs);
 					}
 				}
@@ -519,8 +522,8 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 				staffMoney = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
 				orgMoney = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
 			}
-			int staffMoneyLength = staffMoney.substring(staffMoney.indexOf(".") + 1).length();// 个人部分小数位数
-			int orgMoneyLength = orgMoney.substring(orgMoney.indexOf(".") + 1).length();// 公司部分小数位数
+			int staffMoneyLength = getDecimalLength(staffMoney);// 个人部分小数位数
+			int orgMoneyLength = getDecimalLength(orgMoney);// 公司部分小数位数
 			// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 			if (staffMoneyLength > 2 || orgMoneyLength > 2) {
 				UFDouble beforePsgStaffMoney = new UFDouble(staffMoney);
@@ -576,9 +579,9 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			String clerkcode = map.get("clerkcode");
 			String clerkname = map.get("clerkname");
 			String orgName = map.get("orgname");
-			String basicssum = MathTool.nvl(ValueUtils.getUFDouble(map.get("basicssum"))).toString();
-			String staffsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("staffsum"))).toString();
-			String orgsum = MathTool.nvl(ValueUtils.getUFDouble(map.get("orgsum"))).toString();
+			String basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("basicssum")))).toString();
+			String staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("staffsum")))).toString();
+			String orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(map.get("orgsum")))).toString();
 			String mark = map.get("mark");
 			// orgName可能存在为空的情况,拼接的时候会把null拼接到新的字符串,使用三目运算处理改问题
 			String combinedField = title + (orgName == null ? "" : orgName) + clerkcode + clerkname;
@@ -589,16 +592,16 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			Map<String, String> middleTableMap = middleTableData.get(combinedField);
 			// middleTableMap不为空使用中间表数据
 			if (middleTableMap != null) {
-				basicssum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("basicssum"))).toString();
-				staffsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("staffsum"))).toString();
-				orgsum = MathTool.nvl(ValueUtils.getUFDouble(middleTableMap.get("orgsum"))).toString();
+				basicssum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("basicssum")))).toString();
+				staffsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("staffsum")))).toString();
+				orgsum = MathTool.nvl(ValueUtils.getUFDouble(ValueUtils.getString(middleTableMap.get("orgsum")))).toString();
 				mark = middleTableMap.get("mark");
 			}
 			basicsMoney = nvl(basicssum, 2);
 			staffMoney = nvl(staffsum, 2);
 			orgMoney = nvl(orgsum, 2);
-			int staffsumLength = staffsum.substring(staffsum.indexOf(".") + 1).length();// 个人部分小数位数
-			int orgsumLength = orgsum.substring(orgsum.indexOf(".") + 1).length();// 公司部分小数位数
+			int staffsumLength = getDecimalLength(staffsum);// 个人部分小数位数
+			int orgsumLength = getDecimalLength(orgsum);// 公司部分小数位数
 			// 个人部分或者公司部分小数位数大于2位需要进行金额处理
 			if (staffsumLength > 2 || orgsumLength > 2) {
 				UFDouble afterPsgStaffMoney = staffMoney;
@@ -999,7 +1002,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		sql.append(" ) T12 ON t12.CLERK_CODE = t1.CLERKCODE");
 		sql.append(" LEFT JOIN nc6337.om_post t14 ON t14.pk_post = t12.NC_PK_POST");
 		sql.append(" LEFT JOIN nc6337.org_corp T13 ON T13.Pk_Corp = t14.pk_org");
-		sql.append(" LEFT JOIN nc6337.person_deduction_sbgjj t16 ON t16.CLERKCODE = t1.CLERKCODE AND t1.pay_month || '-01' = t16.ym");
+		sql.append(" LEFT JOIN nc6337.person_deduction_sbgjj t16 ON t16.CLERKCODE = t1.CLERKCODE AND t1.pay_month || '-01' = t16.ym and t16.c_23=t1.PAY_SOS_ORG");
 		sql.append(" WHERE");
 		sql.append(" t1.CLERKCODE IN (SELECT t2.CLERKCODE FROM (SELECT t.CLERKCODE,sum( nvl( t.VALUE, 0 ) ) AS sumVALUE FROM");
 		sql.append(" NC6337.v_data_xz_gjjshare t WHERE t.key IN ( '社保个人扣款', '社保个人合计' ) AND t.ym = '" + period + "' || '-01'");
@@ -1276,8 +1279,9 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		/** 借方:其他应收款/个人往来/个人明细/人员档案 **/
 		UFDouble bygs = objgs == null ? UFDouble.ZERO_DBL : new UFDouble(objgs.toString());
 		UFDouble blgr = objblgr == null ? UFDouble.ZERO_DBL : new UFDouble(objblgr.toString());
-		// 金额=表一公司部分合计+表六个人部分合计
-		UFDouble byblhj = bygs.add(blgr);
+		UFDouble bygr = objgr == null ? UFDouble.ZERO_DBL : new UFDouble(objgr.toString());
+		// 金额=表一公司部分合计+表六个人部分合计+表一个人部分合计
+		UFDouble byblhj = bygs.add(blgr).add(bygr);
 
 		/** 借方:应付账款/预估成本/办公费/部门:对应部门 项目:其他 项目专业:不涉及 **/
 		// 金额=表三(由部门承担) 姜艳 个人+公司合计 jiangyanOrg
@@ -1385,7 +1389,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			if ("管理费用/社会保险费".equals(key)) {
 				km_code = "660203";// 管理费用/社会保险费
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保");
@@ -1399,7 +1403,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			} else if ("管理费用/社会保险费/残疾".equals(key)) {
 				km_code = "660203";// 管理费用/社会保险费
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 残疾员工");
@@ -1413,7 +1417,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			} else if ("其他应收款/五险一金".equals(key)) {
 				km_code = "122104";// 其他应收款/五险一金
 				debitamount = entry.getValue();// 借方发生额
-				if (debitamount.doubleValue() != 0) {
+				if (debitamount != null && debitamount.doubleValue() != 0) {
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保");
@@ -1430,7 +1434,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 						String checkCode = checkCode_name.split(",")[0];
 						String userName = checkCode_name.split(",")[1];
 						UFDouble debitamountOrg = tableOneOrgEntry.getValue();// 借方发生额
-						if (debitamountOrg.doubleValue() != 0) {// 2025-03-13
+						if (debitamountOrg != null && debitamountOrg.doubleValue() != 0) {// 2025-03-13
 							debitamounttotal = debitamounttotal.add(debitamountOrg);
 							DetailVO itemVO = new DetailVO();
 							getDetailvo(itemVO, pk_accasoa, creditamount, debitamountOrg, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 " + userName);
@@ -1451,7 +1455,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 						String checkCode = checkCode_name.split(",")[0];
 						String userName = checkCode_name.split(",")[1];
 						UFDouble debitamountSelf = tableSixSelfEntry.getValue();// 借方发生额
-						if (debitamountSelf.doubleValue() != 0) {
+						if (debitamountSelf != null && debitamountSelf.doubleValue() != 0) {
 							debitamounttotal = debitamounttotal.add(debitamountSelf);
 							DetailVO itemVO = new DetailVO();
 							getDetailvo(itemVO, pk_accasoa, creditamount, debitamountSelf, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 " + userName + "-实际已缴个人未扣");
@@ -1468,7 +1472,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			} else if ("应付账款/预估成本/办公费".equals(key)) {
 				km_code = "22020205";// 应付账款/预估成本/办公费
 				debitamount = entry.getValue();// 借方发生额
-				if(debitamount.doubleValue() != 0){
+				if(debitamount != null && debitamount.doubleValue() != 0){
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 姜艳-全额代付");
@@ -1491,7 +1495,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			} else if ("其他应收款/单位往来".equals(key)) {
 				km_code = "122101";// 其他应收款/单位往来
 				debitamount = entry.getValue();// 借方发生额
-				if(debitamount.doubleValue() != 0){// 判断外部公司承担表公司部分是否为0(龙咏杰特殊处理)
+				if(debitamount != null && debitamount.doubleValue() != 0){// 判断外部公司承担表公司部分是否为0(龙咏杰特殊处理)
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 尤咏杰");
@@ -1532,7 +1536,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			else if ("应付职工薪酬/社会保险费".equals(key)) {
 				km_code = "221103";// 应付职工薪酬/社会保险费 无辅助核算
 				debitamount = entry.getValue();// 借方发生额
-				if(debitamount.doubleValue() != 0){
+				if(debitamount != null && debitamount.doubleValue() != 0){
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 ");
@@ -1542,7 +1546,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 				//km_code = "220201";// 应付账款/实际应付款
 				km_code = "11230101";// 预付账款/待摊费用
 				creditamount = entry.getValue();// 贷方发生额
-				if(creditamount.doubleValue() != 0){
+				if(creditamount != null && creditamount.doubleValue() != 0){
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 ");
@@ -1565,7 +1569,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 						String checkCode = checkCode_name.split(",")[0];
 						String userName = checkCode_name.split(",")[1];
 						UFDouble creditamountOrg = tableSevenSelfEntry.getValue();// 贷方发生额
-						if (creditamountOrg.doubleValue() != 0) {
+						if (creditamountOrg != null && creditamountOrg.doubleValue() != 0) {
 							debitamounttotal = debitamounttotal.add(creditamountOrg);
 							DetailVO itemVO = new DetailVO();
 							getDetailvo(itemVO, pk_accasoa, creditamountOrg, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 " + userName + "-实际未缴个人已扣");
@@ -1582,7 +1586,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			} else if ("应付职工薪酬/社会保险费/贷方".equals(key)) {
 				km_code = "221103";// 应付职工薪酬/社会保险费 无辅助核算
 				creditamount = entry.getValue();// 贷方发生额
-				if(creditamount.doubleValue() != 0){
+				if(creditamount != null && creditamount.doubleValue() != 0){
 					pk_accasoa = tranKm(km_code, pk_accountGlbook);// 科目
 					DetailVO itemVO = new DetailVO();
 					getDetailvo(itemVO, pk_accasoa, creditamount, debitamount, voucher, "缴纳" + yearperiod + "年" + monthperiod + "月 社保 ");
@@ -1935,7 +1939,7 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 			receivableBillVO.setMoney(bsgr);// 原币金额
 			String pk_bankaccsub = GetDataUtil.getBankaccsubPK("310066218018000420123");
 			receivableBillVO.setRecaccount(pk_bankaccsub);// 收款银行账户
-			receivableBillVO.setPk_busitype(GetDataUtil.getBusitypePK("AR01"));// 业务流程:选择收款
+			receivableBillVO.setPk_busitype(GetDataUtil.getBusitypePKs("AR01", pk_group));// 业务流程:选择收款
 			receivableBillVO.setBillclass("ys");// 单据大类:应收单
 			String year = period.substring(0, 4);// 会计年度
 			String month = period.substring(5, 7);// 会计月份
@@ -2044,4 +2048,13 @@ public class SocialInsuranceAllocationUI extends ToftPanel {
 		}
 		return billNO;
 	}
+	
+	//获取金额字符串的小数位数(无小数点时返回0)
+	private static int getDecimalLength(String money) {
+	    if (money == null || money.isEmpty()) {
+	        return 0;
+	    }
+	    int dotIndex = money.indexOf('.');
+	    return dotIndex >= 0 ? money.substring(dotIndex + 1).length() : 0;
+	}
 }