1 package com.kingdee.eas.custom;
2 import java.io.File;
3 import java.io.FileNotFoundException;
4 import java.io.FileOutputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.PrintWriter;
8 import java.io.StringWriter;
9 import java.math.BigDecimal;
10 import java.sql.SQLException;
11 import java.text.ParseException;
12 import java.text.SimpleDateFormat;
13 import java.util.ArrayList;
14 import java.util.Date;
15 import java.util.HashMap;
16 import java.util.Iterator;
17 import java.util.Map;
18 import javax.swing.JFileChooser;
19 import javax.swing.JOptionPane;
20 import org.mozilla.javascript.Context;
21 import jxl.Cell;
22 import jxl.Sheet;
23 import jxl.Workbook;
24 import jxl.format.Alignment;
25 import jxl.format.Border;
26 import jxl.format.BorderLineStyle;
27 import jxl.format.Colour;
28 import jxl.read.biff.BiffException;
29 import jxl.write.Label;
30 import jxl.write.WritableCellFormat;
31 import jxl.write.WritableSheet;
32 import jxl.write.WritableWorkbook;
33 import jxl.write.WriteException;
34 import bsh.This;
35 import com.kingdee.bos.BOSException;
36 import com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox;
37 import com.kingdee.bos.ctrl.kdf.table.ICell;
38 import com.kingdee.bos.ctrl.kdf.table.IColumn;
39 import com.kingdee.bos.ctrl.kdf.table.KDTDefaultCellEditor;
40 import com.kingdee.bos.ctrl.kdf.table.KDTMergeManager;
41 import com.kingdee.bos.ctrl.kdf.table.KDTSelectBlock;
42 import com.kingdee.bos.ctrl.kdf.table.KDTable;
43 import com.kingdee.bos.ctrl.kdf.table.util.KDTableUtil;
44 import com.kingdee.bos.ctrl.swing.KDDatePicker;
45 import com.kingdee.bos.dao.IObjectCollection;
46 import com.kingdee.bos.dao.IObjectPK;
47 import com.kingdee.bos.dao.IObjectValue;
48 import com.kingdee.bos.metadata.bot.BOTMappingCollection;
49 import com.kingdee.bos.metadata.bot.BOTMappingFactory;
50 import com.kingdee.bos.metadata.bot.BOTMappingInfo;
51 import com.kingdee.bos.metadata.bot.BOTRelationCollection;
52 import com.kingdee.bos.metadata.entity.EntityViewInfo;
53 import com.kingdee.bos.metadata.entity.FilterInfo;
54 import com.kingdee.bos.metadata.entity.FilterItemInfo;
55 import com.kingdee.bos.metadata.query.util.CompareType;
56 import com.kingdee.bos.sql.ParserException;
57 import com.kingdee.bos.ui.face.CoreUIObject;
58 import com.kingdee.bos.ui.face.IUIWindow;
59 import com.kingdee.bos.ui.face.UIException;
60 import com.kingdee.bos.ui.face.UIFactory;
61 import com.kingdee.bos.util.BOSUuid;
62 import com.kingdee.eas.base.btp.BTPManagerFactory;
63 import com.kingdee.eas.base.btp.BTPTransformResult;
64 import com.kingdee.eas.base.btp.IBTPManager;
65 import com.kingdee.eas.base.codingrule.CodingRuleManagerFactory;
66 import com.kingdee.eas.base.codingrule.ICodingRuleManager;
67 import com.kingdee.eas.base.message.BMCMessageFactory;
68 import com.kingdee.eas.base.message.BMCMessageInfo;
69 import com.kingdee.eas.base.message.IBMCMessage;
70 import com.kingdee.eas.base.message.MsgBizType;
71 import com.kingdee.eas.base.message.MsgPriority;
72 import com.kingdee.eas.base.message.MsgStatus;
73 import com.kingdee.eas.base.message.MsgType;
74 import com.kingdee.eas.base.netctrl.IMutexServiceControl;
75 import com.kingdee.eas.base.netctrl.MutexParameter;
76 import com.kingdee.eas.base.netctrl.MutexServiceControlFactory;
77 import com.kingdee.eas.base.permission.UserInfo;
78 import com.kingdee.eas.basedata.master.auxacct.GeneralAsstActTypeGroupCollection;
79 import com.kingdee.eas.basedata.master.auxacct.GeneralAsstActTypeGroupFactory;
80 import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
81 import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
82 import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
83 import com.kingdee.eas.basedata.org.CtrlUnitCollection;
84 import com.kingdee.eas.basedata.org.CtrlUnitFactory;
85 import com.kingdee.eas.basedata.org.CtrlUnitInfo;
86 import com.kingdee.eas.basedata.org.PositionInfo;
87 import com.kingdee.eas.basedata.person.PersonCollection;
88 import com.kingdee.eas.basedata.person.PersonFactory;
89 import com.kingdee.eas.basedata.person.PersonInfo;
90 import com.kingdee.eas.common.client.OprtState;
91 import com.kingdee.eas.common.client.SysContext;
92 import com.kingdee.eas.common.client.UIContext;
93 import com.kingdee.eas.common.client.UIFactoryName;
94 import com.kingdee.eas.fm.common.FMIsqlFacadeFactory;
95 import com.kingdee.eas.fm.common.IFMIsqlFacade;
96 import com.kingdee.eas.framework.CoreBillBaseInfo;
97 import com.kingdee.eas.framework.client.CoreBillEditUI;
98 import com.kingdee.eas.framework.client.EditUI;
99 import com.kingdee.eas.hr.emp.PersonPositionFactory;
100 import com.kingdee.eas.hr.emp.PersonPositionInfo;
101 import com.kingdee.eas.util.SysUtil;
102 import com.kingdee.eas.util.client.EASResource;
103 import com.kingdee.eas.util.client.MsgBox;
104 import com.kingdee.jdbc.rowset.IRowSet;
105 import com.kingdee.util.Uuid;
106 /***
107 * EAS开发工具类
108 * @author 赵戬
109 *
110 */
111 public class UtilClass {
112 /***
113 * 信息提示框
114 * @param value 提示内容
115 */
116 public static void alert(String value){
117 MsgBox.showInfo(value);
118 SysUtil.abort();
119 }
120
121 /***
122 * 信息提示框(带详细信息)
123 * @param value 提示内容
124 */
125 public static void alert2(String Title,String info){
126 MsgBox.showDetailAndOK(null, Title, info, 0);
127 SysUtil.abort();
128 }
129
130 /***
131 * 信息提示框(带提示)
132 * @return value 提示内容
133 */
134 public static boolean alertReturn(String value){
135 return MsgBox.isYes(MsgBox.showConfirm2(value));
136 }
137
138 /***
139 * 程序停止运行
140 */
141 public static void Stop(){
142 SysUtil.abort();
143 }
144
145 /**
146 * 单据数据加锁
147 * @param billId 单据ID
148 */
149 public static void addBillDataLock(String BillFID){
150 IMutexServiceControl mutex = MutexServiceControlFactory.getRemoteInstance();
151 mutex.requestBizObjIDForUpdate(BillFID);
152 }
153
154 /**
155 * 单据数据解锁
156 * @param billId 单据ID
157 */
158 public static void removeBillDataLock(String BillFID){
159 IMutexServiceControl mutex = MutexServiceControlFactory.getRemoteInstance();
160 mutex.releaseObjIDForUpdate(BillFID);
161 }
162
163 /**
164 * 根据ID获取数据是否加锁
165 * @param id 单据编号
166 * @return true 已加锁 or false 未加锁
167 */
168 public static boolean getBillDataLockStatus(String BillFID){
169 IMutexServiceControl mutex = MutexServiceControlFactory.getRemoteInstance();
170 boolean returnvalue = false;
171 HashMap map = mutex.getObjIDForUpdateList();
172 for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
173 String key = iter.next().toString();
174 if(BillFID.equals(key.substring(0, 28))){
175 returnvalue = true;
176 }
177 }
178 return returnvalue;
179 }
180
181 /**
182 * 表格获取选中行某列值
183 * 返回ArrayList集合
184 * @param tblMain 列表对象
185 * @param CellName 列名
186 * @return ArrayList集合
187 *
188 * 返回遍历
189 try {
190 ArrayList list = UtilClass.getTableCellsValue(kDTable1, "cell1");
191 if(list.size()>0){
192 for (Iterator iter = list.iterator(); iter.hasNext();) {
193 System.out.println((String)iter.next());
194 }
195 }else{
196 UtilClass.alert("请选择要操作的记录");
197 }
198 } catch (Exception e1) {
199 }
200 */
201 public static ArrayList getTableCellsValue(KDTable tblMain, String CellName){
202 ICell cellstr;
203 Object strObj = null;
204 KDTSelectBlock block = null;
205 ArrayList returnValue = new ArrayList();
206 int size = tblMain.getSelectManager().size();
207 for (int i = 0; i < size; i++) {
208 block = tblMain.getSelectManager().get(i);
209 for (int j = block.getTop(); j <= block.getBottom(); j++) {
210 cellstr = tblMain.getRow(j).getCell(CellName);
211 strObj = cellstr.getValue();
212 returnValue.add(strObj);
213 }
214 }
215 return returnValue;
216 }
217
218 /**
219 * 设置List默认查询条件
220 * @param mainQuery List MainQuery
221 * @param Filter 条件
222 * 例:UtilClass.setListQueryFilter(mainQuery, "orderid.batchnum is not null");
223 */
224 public static void setListQueryFilter(EntityViewInfo mainQuery,String Filter){
225 try {
226 mainQuery.setFilter(Filter);
227 } catch (ParserException e) {
228 alert2("设置List默认查询条件出错!",e.getMessage());
229 }
230 }
231 /**
232 * 获取KDTable选择行的行号(选择行的第一行)
233 * @param tblMain
234 * @return 行号
235 */
236 public static int getRowNumFirst(KDTable tblMain){
237 return tblMain.getSelectManager().get(0).getTop();
238 }
239 /**
240 * 获取KDTable选择行的行号
241 * @param tblMain
242 * @return 行号
243 */
244 public static int[] getRowNum(KDTable tblMain){
245 return KDTableUtil.getSelectedRows(tblMain);
246 }
247 /**
248 * 导出KDTable表格数据到Excel文件
249 * @param table KDTable
250 * @param RowNums 行号集合 如果RowNums行数为0,导出全部数据
251 * return 生成文件目录
252 * 例:UtilClass.TableExpot(kDTable1, new int[0], null);
253 */
254 public static String TableExpot(KDTable table,int[] RowNums,String FileName){
255 String returnvaleu = "";
256 String Filepath = "";
257 //打开目录选择器
258 try {
259 Filepath = UtilClass.OpenPathSelect();
260 String File = "";
261 if("".equals(Filepath)){
262 return returnvaleu;
263 }else{
264 if(FileName==null||"".equals(FileName)){
265 FileName = "temp";
266 }
267 File = Filepath+"\\"+FileName+".xls";
268 }
269 File file = new File(File);
270 //如果找到相同的文件,执行删除
271 if(file.exists() && file.isFile()){
272 file.delete();
273 }
274 WritableWorkbook wwb = Workbook.createWorkbook(new File(File));
275 //创建工作表
276 wwb.createSheet("sheet1", 0);
277 //获取工作表
278 WritableSheet ws = wwb.getSheet(0);
279
280 //表头行样式
281 WritableCellFormat TableHead = new WritableCellFormat();
282 TableHead.setBorder(Border.ALL, BorderLineStyle.THIN);
283 TableHead.setAlignment(Alignment.CENTRE);
284 TableHead.setBackground(Colour.GRAY_25);
285
286 //表体数据行样式
287 WritableCellFormat TableRow = new WritableCellFormat();
288 TableRow.setAlignment(Alignment.CENTRE);
289
290 if(RowNums==null){
291 //生成表头
292 for(int i=0;i<table.getColumnCount();i++){
293 if(table.getHeadRow(0).getCell(i).getValue()!=null){
294 ws.addCell(new Label(i,0,table.getHeadRow(0).getCell(i).getValue().toString(),TableHead));
295 }
296 }
297 //生成表体数据
298 for(int i=0;i<table.getRowCount();i++){
299 for(int j=0;j<table.getColumnCount();j++){
300 if(table.getRow(i).getCell(j).getValue()!=null){
301 ws.addCell(new Label(j,i+1,table.getRow(i).getCell(j).getValue().toString(),TableRow));
302 }
303 }
304 }
305 }else{
306 //生成表头
307 for(int i=0;i<table.getColumnCount();i++){
308 if(table.getHeadRow(0).getCell(i).getValue()!=null){
309 ws.addCell(new Label(i,0,table.getHeadRow(0).getCell(i).getValue().toString(),TableHead));
310 }
311 }
312 //生成表体数据
313 for(int z=0;z<RowNums.length;z++){
314 int i = RowNums[z];
315 for(int j=0;j<table.getColumnCount();j++){
316 if(table.getRow(i).getCell(j).getValue()!=null){
317 ws.addCell(new Label(j,z+1,table.getRow(i).getCell(j).getValue().toString(),TableRow));
318 }
319 }
320 }
321 }
322 wwb.write();
323 wwb.close();
324 returnvaleu = File;
325 } catch (Exception e) {
326 alert2("生成Excel文件出错",Filepath);
327 }
328 return returnvaleu;
329 }
330 /***
331 * 设置表格列名
332 * @param Table Table名称
333 * @param Colunm 列名
334 * @param name 值
335 *
336 */
337 public static void setTableColumnName(KDTable Table,String ColunmID,String ColunmName){
338 KDTable kt = new KDTable();
339 kt = Table;
340 kt.getHeadRow(0).getCell(ColunmID).setValue(ColunmName);
341 Table = kt;
342 }
343 /**
344 * 设置表格融合方式
345 * @param tblMain 表格
346 * @param type 融合方式 0 :行融合 1:列融合 2:自由融合
347 */
348 public static void setTableMergeMode(KDTable tblMain,int type){
349 if(type==0){
350 tblMain.getMergeManager().setMergeMode(KDTMergeManager.FREE_ROW_MERGE);
351 }
352 if(type==1){
353 tblMain.getMergeManager().setMergeMode(KDTMergeManager.FREE_COLUMN_MERGE);
354 }
355 if(type==2){
356 tblMain.getMergeManager().setMergeMode(KDTMergeManager.FREE_MERGE);
357 }
358 }
359 /***
360 * 表格行选择器,从第R1行选到R2行
361 * @param tblMain 表格
362 * @param R1 开始行号
363 * @param R2 结束行号
364 */
365 public static void setTableSelectRows(KDTable tblMain,int R1,int R2){
366 tblMain.getSelectManager().select(R1-1, 0, R2-1, 0);
367 }
368
369
370 /**
371 * 设置按钮图片名称
372 * @param btnName 按钮名称
373 * @param imgName 图片名称
374 * EAS图片名称保存位置:BOS环境下 工程\lib\client\eas\eas_resource_common_ico.jar
375 */
376 public static void setButtonImg(com.kingdee.bos.ctrl.swing.KDWorkButton ButtonName,String imgName){
377 ButtonName.setIcon(EASResource.getIcon(imgName));
378 ButtonName.setEnabled(true);
379 }
380 /**
381 * 设置F7
382 * @param F7Name F7名称
383 * @param ConditionSQL 过滤条件SQL(如果输入值不等于"",则添加条件)
384 * 例 " fbilltypestatr = '1' and (entrys.id is null or entrys.seq = 1)"
385 * @param Query 属性 例:"com.kingdee.eas.cmt.basedata.app.OperatorOrgQuery"
386 * @param EditFrmat 属性 例:"$number$"
387 * @param DisplayFormat 属性 例:"$name$"
388 * @param CommitFormat 属性 例:"$number$"
389 * @throws BOSException
390 */
391 public static void setF7(KDBizPromptBox F7Name,String ConditionSQL ,String Query,String EditFrmat,String DisplayFormat,String CommitFormat){
392 //添加分录过滤条件
393 try {
394 EntityViewInfo view = new EntityViewInfo();
395 if(ConditionSQL != ""){
396 view.setFilter(ConditionSQL);
397 }
398 //设置F7属性
399 F7Name.setQueryInfo(Query);//关联Query
400 F7Name.setEditFormat(EditFrmat);//编辑样式
401 F7Name.setDisplayFormat(DisplayFormat);//展现样式
402 F7Name.setCommitFormat(CommitFormat);//提交样式
403 F7Name.setEntityViewInfo(view);
404 F7Name.setEnabledMultiSelection(false);
405 } catch (Exception e) {
406 alert2("F7["+F7Name+"]初始化出错,请联系管理员!",e.getMessage());
407 }
408 }
409 /**
410 * 设置分录F7
411 * @param col 列名 kdtEntrys.getColumn("boxType")
412 * @param ConditionSQL 过滤条件SQL(如果输入值不等于"",则添加条件)
413 * 例 " fbilltypestatr = '1' and (entrys.id is null or entrys.seq = 1)"
414 * @param Query 属性 例:"com.kingdee.eas.cmt.basedata.app.OperatorOrgQuery"
415 * @param EditFrmat 属性 例:"$number$"
416 * @param DisplayFormat 属性 例:"$name$"
417 * @param CommitFormat 属性 例:"$number$"
418 */
419 public static void setEntryF7(IColumn col,String ConditionSQL ,String Query,String EditFrmat,String DisplayFormat,String CommitFormat){
420 try {
421 KDBizPromptBox prmt = new KDBizPromptBox();
422 EntityViewInfo view = new EntityViewInfo();
423 if(ConditionSQL != ""){
424 view.setFilter(ConditionSQL);
425 }
426 prmt.setQueryInfo(Query);
427 prmt.setEditFormat(EditFrmat);
428 prmt.setCommitFormat(CommitFormat);
429 prmt.setDisplayFormat(DisplayFormat);
430 prmt.setEntityViewInfo(view);
431 prmt.setEnabledMultiSelection(false);
432 KDTDefaultCellEditor editor = new KDTDefaultCellEditor(prmt);
433 col.setEditor(editor);
434 } catch (ParserException e) {
435 alert2("分录F7初始化出错,请联系管理员!",e.getMessage());
436 }
437
438 }
439 /**
440 * 日期转换字符串
441 * @param date 日期
442 * @param type 显示格式 yyyy-MM-dd yyyy-MM-dd HH:mm:ss
443 * String returnvalue = UtilClass.DateToString(this.Startdatetest.getValue(), "yyyy-MM-dd");
444 */
445 public static String DateToString (Object date,String type){
446 String returnvalue = "";
447 if(date != null){
448 try{
449 SimpleDateFormat sdf = new SimpleDateFormat(type);
450 returnvalue = sdf.format(date);
451 }
452 catch(Exception ex){
453 alert("日期格式转换出错");
454 }
455 }
456 return returnvalue;
457 }
458 /**
459 * 字符串转为日期
460 * @param DateStr 字符串
461 * @param type 类型 "yyyy-MM-dd HH:mm:ss"
462 * @return Date java.util.Date
463 */
464 public static Date StringToDate(String DateStr,String type){
465 Date returnvalue = null;
466 try {
467 SimpleDateFormat sdf = new SimpleDateFormat(type);
468 returnvalue = sdf.parse(DateStr);
469 } catch (ParseException e) {
470 alert2("日期转换出错",DateStr+"-->"+type);
471 }
472 return returnvalue;
473 }
474 /**
475 * 设置DKDatePicker控件显示格式
476 * @param date 日期控制
477 * @param dateType 格式样式 例:"yyyy-MM-dd HH:mm:ss" "yyyy-MM-dd"
478 */
479 public static void setKDDatePicker(KDDatePicker date,String dateType){
480 date.setDatePattern(dateType);
481 }
482 /**
483 * 获取当前时间(KDDatePicker控件)默认值 例如:创建时间 修改时间 审核时间
484 * @return java.sql.Timestamp 当前时间
485 */
486 public static java.sql.Timestamp getTime(){
487 java.sql.Timestamp time = new java.sql.Timestamp(new java.util.Date().getTime());
488 return time;
489 }
490
491 /**
492 * 打开文件
493 * @param FilePath 文件路径
494 */
495 public static void OpenFile(String FilePath){
496 try {
497 Runtime.getRuntime().exec("cmd /c start \"\" \""+FilePath.replaceAll("\\\\", "\\\\\\\\")+"\"");
498 } catch (IOException e) {
499 alert2("打开文件出错",FilePath);
500 }
501 }
502 /**
503 * 打开文件选择器
504 * @return 文件路径
505 */
506 public static String OpenFilesSelect(){
507 String returnvalue = "";
508 JFileChooser chooser = new JFileChooser();
509 chooser.setDialogTitle("请选择文件");
510 chooser.showDialog(null, "确定");
511 if(chooser.getSelectedFile()!=null){
512 File file = chooser.getSelectedFile();
513 returnvalue = file.getPath();
514 }
515 return returnvalue;
516 }
517
518 /**
519 * 打开目录选择器
520 * @return
521 */
522 public static String OpenPathSelect(){
523 String returnvalue = "";
524 JFileChooser chooser = new JFileChooser();
525 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
526 chooser.setDialogTitle("请选择目录");
527 chooser.showDialog(null,"保存");
528 if(chooser.getSelectedFile()!=null){
529 File file = chooser.getSelectedFile();
530 returnvalue = file.getPath();
531 }
532 return returnvalue;
533 }
534 /**
535 * 向Excel文件插入数据
536 * @param File
537 * @param sheetNum 工作表序号
538 * @param y 行
539 * @param x 列
540 * @param value 内容
541 */
542 public static void setExcelValue(String File,int sheetNum,int x,int y,String value){
543 try {
544 File file = new File(File);
545 //如果找到相同的文件,执行删除
546 if(!file.exists() && !file.isFile()){
547 return;
548 }
549 //Excel获得文件
550 Workbook wb = Workbook.getWorkbook(new File(File));
551 //打开一个文件的副本,并且指定数据写回到原文件
552 WritableWorkbook book = Workbook.createWorkbook(new File(File),wb);
553 //获取工作表
554 WritableSheet sheet=book.getSheet(sheetNum);
555 sheet.addCell(new Label(y,x,value));
556 book.write();
557 book.close();
558 } catch (Exception e) {
559 }
560 }
561 /**
562 * 读取Excel文件
563 * @param File 文件名
564 * @param sheetNum 工作表序号
565 * @param y 行
566 * @param x 列
567 */
568 public static String getExcelValue(String File,int sheetNum,int y,int x){
569 String result = "";
570 try {
571 File file = new File(File);
572 //如果找到相同的文件,执行删除
573 if(!file.exists() && !file.isFile()){
574 alert(File+"文件没找到!");
575 }
576 Workbook book= Workbook.getWorkbook(new File(File));
577 //获得第一个工作表对象
578 Sheet sheet=book.getSheet(sheetNum);
579 //得到第一列第一行的单元格
580 Cell cell1=sheet.getCell(x,y);
581 result=cell1.getContents().toString();
582 book.close();
583 } catch (FileNotFoundException e) {
584 alert2("读取Excel文件出错","请关闭当前打开的Excel文件");
585 } catch (BiffException e) {
586 alert2("读取Excel文件出错",e.toString());
587 } catch (IOException e) {
588 alert2("读取Excel文件出错",e.toString());
589 }
590 return result;
591 }
592
593 /**
594 * 读取Excel文件(第一sheet页中的内容)
595 * @param File 文件路径
596 * @param sheetNum sheet页号
597 * @return 二维数组
598 *
599 */
600 public static Object[][] getExcelValue(String File,int sheetNum){
601 Object [][] returnvalue = null;
602 try {
603 Workbook book= Workbook.getWorkbook(new File(File));
604 Sheet sheet=book.getSheet(sheetNum);
605 returnvalue = new Object[sheet.getRows()][sheet.getColumns()];
606 for(int i=1;i<sheet.getRows();i++){
607 for(int j=0;j<sheet.getColumns();j++){
608 returnvalue[i][j]=sheet.getCell(j,i).getContents();
609 }
610 }
611 } catch (FileNotFoundException e) {
612 alert2("读取Excel文件出错","请关闭当前打开的Excel文件");
613 } catch (BiffException e) {
614 alert2("读取Excel文件出错",e.toString());
615 } catch (IOException e) {
616 alert2("读取Excel文件出错",e.toString());
617 }
618 return returnvalue;
619 }
620
621 /***
622 * 发送即时消息
623 * @param FSuser 发送人ID
624 * @param JSuser 接收人ID
625 * @param MessageTitle 标题
626 * @param Messages 内容
627 */
628 public static void addMessage(String FSuser,String JSuser,String MessageTitle,String Messages){
629 try {
630 IBMCMessage i = BMCMessageFactory.getRemoteInstance();
631 BMCMessageInfo info = new BMCMessageInfo();
632 info.setType(MsgType.ONLINE);// 消息类型,例如通知消息,任务消息,状态更新消息
633 info.setBizType(MsgBizType.ONLINE);// 业务类型,例如工作流,预警平台
634 info.setPriority(MsgPriority.HIGH); // 优先级
635 info.setStatus(MsgStatus.UNREADED); // 消息状态
636 info.setReceiver(JSuser); // 接收人ID (User的ID,不是Person的ID)
637 info.setSender(FSuser);// 消息发送人
638 info.setTitle(MessageTitle); // 消息标题
639 info.setBody(Messages);// 消息内容
640 i.submit(info);
641 } catch (Exception e) {
642 alert2("发送即时消息出错","标题:"+MessageTitle+" 内容:"+Messages);
643 }
644 }
645
646
647
648 /**
649 * 列转行
650 * @param list 数据集合
651 * @param delimiter 分隔符 例:","
652 * @param bracketsLeft 左括号符号
653 * @param bracketsRight 右括号符号
654 * @return String
655 */
656 public static String CellToRow(ArrayList list,String delimiter,String bracketsLeft,String bracketsRight){
657 String returnvalue = "";
658 for (Iterator iter = list.iterator(); iter.hasNext();){
659 if(!"".equals(bracketsLeft) && bracketsLeft != null && !"".equals(bracketsRight) && bracketsRight != null){
660 returnvalue += bracketsLeft + (String)iter.next() + bracketsRight;
661 }
662 returnvalue+=delimiter;
663 }
664 return returnvalue.substring(0, returnvalue.length()-1);
665 }
666
667 /**
668 * 打开窗口
669 * @param URL UI地址
670 * @param ctx 参数集合
671 * @param openType 打开窗口类型 例:UIFactoryName.MODEL
672 * @param billStatus 单据状态 例:OprtState.ADDNEW
673 *
674 *
675 打开普通UI页面
676 HashMap cix = new HashMap();
677 String orderid = "asiofjlqkjwfklaslkasdf="
678 cix.put("orderid", orderid);
679 UtilClass.openUI("com.kingdee.eas.cmt.commission.client.GoodsUI", cix, UIFactoryName.MODEL, OprtState.ADDNEW);
680
681 打开单据EditUI页面
682 HashMap cix = new HashMap();
683 cix.put("ID", fid);
684 UtilClass.openUI("com.kingdee.eas.cmt.commission.client.CmtTranConsignEditUI", cix, UIFactoryName.NEWWIN, OprtState.VIEW);
685
686
687 在打开的单据获取前面页面传来的参数
688 this.getUIContext().get("orderid").toString()
689 *
690 *
691 */
692 public static void openUI(String URL,HashMap ctx,String openType,String billStatus){
693 try {
694 IUIWindow ui = UIFactory.createUIFactory(openType).create(URL, ctx, null, billStatus);
695 ui.show();
696 } catch (UIException e) {
697 alert2("弹出UI程序出错:",URL);
698 }
699 }
700
701 /**
702 * 发送参数
703 * @param ContextID 参数编号
704 * @param values 参数值
705 */
706 public static void setSysContext(String ContextID,Object values){
707 SysContext.getSysContext().setProperty(ContextID, values);
708 }
709
710 /**
711 * 获取参数
712 * @param ContextID 参数编号
713 * @return 参数值(Object)
714 */
715 public static Object getSysContext(String ContextID){
716 return SysContext.getSysContext().getProperty(ContextID);
717 }
718
719 /**
720 * 获取UI参数
721 * @param UI
722 * @return
723 */
724 public static String getUIContext(CoreUIObject UI){
725 String returnvalue = "";
726 if(UI.getUIContext().get("UIClassParam")!=null){
727 returnvalue = UI.getUIContext().get("UIClassParam").toString();
728 }
729 return returnvalue;
730 }
731
732 /**
733 * 创建单据编号
734 * @param Parameter 规则参数
735 * 参数说明:
736 * logo 编号头标示
737 * date 日期时间
738 * Delimiter 分隔符
739 * digit 序号位数
740 * isTissueIsolation 是否组织隔离(0:不隔离1:隔离)
741 * table 表名
742 * @return String 单据编号
743 *
744 * HashMap Parameter = new HashMap();
745 //编号头标示符号
746 Parameter.put("logo", "CMT");
747 //日期
748 Parameter.put("date", UtilClass.DateToString(UtilClass.getTime(), "yyyyMMdd"));
749 //分隔符
750 Parameter.put("Delimiter", "-");
751 //序号位数
752 Parameter.put("digit", "5");
753 //是否隔离组织0为不隔离1为隔离
754 Parameter.put("isTissueIsolation", "0");
755 //单据表名
756 Parameter.put("table", "T_BAS_VehicleType");
757 String billNum = UtilClass.createrBillNumber(Parameter);
758 *
759 */
760 public static String createrBillNumber(HashMap Parameter){
761 StringBuffer returnvalue = new StringBuffer();
762 //编号头Logo
763 if(Parameter.get("logo")!=null){
764 returnvalue.append(Parameter.get("logo"));
765 }
766 //添加时间
767 if(Parameter.get("date")!=null){
768 if(Parameter.get("Delimiter")!=null){
769 returnvalue.append(Parameter.get("Delimiter"));
770 }
771 returnvalue.append(Parameter.get("date"));
772 }
773 //创建序号位(digit:序号位数)
774 if(Parameter.get("digit")!=null){
775 StringBuffer getDigitSQL = new StringBuffer();
776 Integer digit = new Integer(Parameter.get("digit").toString());
777 StringBuffer digitValue = new StringBuffer();
778 for(int i=0;i<digit.intValue();i++){
779 digitValue.append("0");
780 }
781 getDigitSQL.append("select trim(to_char(count(*)+1,'"+digitValue+"')) from "+Parameter.get("table")+" ");
782 //是否组织隔离
783 if("1".equals(Parameter.get("isTissueIsolation"))){
784 getDigitSQL.append(" where FControlUnitID = '"+getCU().getId()+"'");
785 }
786 if(Parameter.get("Delimiter")!=null){
787 returnvalue.append(Parameter.get("Delimiter"));
788 }
789 //获取数据库记录数
790 returnvalue.append(executeQueryString(getDigitSQL.toString()));
791 }
792 return returnvalue.toString();
793 }
794
795 /**
796 * 当前登录组织
797 * @return
798 */
799 public static CtrlUnitInfo getCU(){
800 return SysContext.getSysContext().getCurrentCtrlUnit();
801 }
802
803 /**
804 * 判断当前组织是否为集团要目录
805 * @return boolean
806 */
807 public static boolean isRootCU(){
808 if("1".equals(executeQueryString("select tc.flevel from t_org_baseunit tc where tc.fid = '"+getCU().getId()+"'"))){
809 return true;
810 }else{
811 return false;
812 }
813 }
814
815 /**
816 * 获取集团组织ID
817 * @return
818 */
819 public static CtrlUnitInfo getRootCU(){
820 CtrlUnitInfo cinfo = new CtrlUnitInfo();
821 try {
822 CtrlUnitCollection cinfos = CtrlUnitFactory.getRemoteInstance().getCtrlUnitCollection("select * where level = 1 ");
823 cinfo = cinfos.get(0);
824 } catch (BOSException e) {
825 alert2("获取集团组织ID出错",e.getMessage());
826 }
827 return cinfo;
828 }
829 /**
830 * 当前登录用户
831 * @return
832 */
833 public static UserInfo getUser(){
834 return SysContext.getSysContext().getCurrentUserInfo();
835 }
836 /**
837 * 当前登陆人员
838 * @return
839 */
840 public static PersonInfo getPerson(){
841 PersonInfo personinfo = null;
842 try {
843 PersonCollection Personcollection = PersonFactory.getRemoteInstance().getPersonCollection(" select * where name = '" + SysContext.getSysContext().getCurrentUserInfo().getName() +"'");
844 personinfo=Personcollection.get(0);
845 } catch (Exception e1) {
846 }
847 return personinfo;
848 }
849 /**
850 * 当前登录人员部门
851 * @return
852 */
853 public static AdminOrgUnitInfo getDepartment(){
854 AdminOrgUnitInfo returnvalue = null;
855 try {
856 PersonPositionInfo PersonPosition = PersonPositionFactory.getRemoteInstance().getPersonPositionInfo("select primaryPosition.* where person = '" + getPerson().getId() + "'");
857 PositionInfo Position = PersonPosition.getPrimaryPosition();
858 AdminOrgUnitCollection collection = AdminOrgUnitFactory.getRemoteInstance().getAdminOrgUnitCollection(" select * where id= '" + Position.getAdminOrgUnit().getId() +"'");
859 returnvalue = collection.get(0);
860 } catch (Exception e2) {
861 }
862 return returnvalue;
863 }
864
865 /**
866 * 通过fid获取表名
867 * @param fid
868 * @return 表名
869 */
870 public static String getDBTableName(String fid){
871 String Tablename = "";
872 com.kingdee.bos.util.BOSObjectType bosType = BOSUuid.read(fid).getType();
873 try {
874 Tablename = FMIsqlFacadeFactory.getRemoteInstance().getTableNameByBosType(bosType);
875 } catch (BOSException e) {
876 alert2("获取表名出错",fid);
877 }
878 return Tablename;
879 }
880
881 /**
882 * 执行SQL(查询,返回集合)
883 * @param sql
884 * @return
885 IRowSet rs = UtilClass.executeQuery(sql.toString());
886 while(rs.next()){
887 rs.getObject(1).toString();
888 }
889 */
890 public static IRowSet executeQuery(String sql){
891 IRowSet returnvalue = null;
892 try {
893 IFMIsqlFacade db = com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
894 returnvalue = db.executeQuery(" /*dialect*/ "+sql, null);
895 } catch (Exception e) {
896 alert2("执行SQL出错",sql);
897 }
898 return returnvalue;
899 }
900 /**
901 * 执行SQL(查询,返回单看值)
902 * @param sql
903 * @return String
904 */
905 public static String executeQueryString(String sql){
906 String returnvalue = null;
907 try {
908 IFMIsqlFacade db = com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
909 IRowSet rs = db.executeQuery(" /*dialect*/ "+sql, null);
910 while(rs.next()){
911 if(rs.getObject(1)!=null){
912 returnvalue = rs.getObject(1).toString();
913 }
914 }
915 } catch (Exception e) {
916 alert2("执行SQL出错",sql);
917 }
918 return returnvalue;
919 }
920 /**
921 * 执行SQL(新增,修改)
922 * @param sql
923 */
924 public static void executeSql(String sql){
925 try {
926 IFMIsqlFacade db = com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
927 db.executeSql(" /*dialect*/ "+sql);
928 } catch (Exception e) {
929 alert2("执行SQL出错",sql);
930 }
931 }
932
933 /**
934 * SQL数据导出到Excel文件
935 * @param sql
936 * @param FileName 文件名
937 */
938 public static String SQLExpot(String sql,String FileName){
939 String returnvalue ="";
940 try {
941 if("".equals(sql)||sql==null){
942 return returnvalue;
943 }
944 if(FileName==null||"".equals(FileName)){
945 FileName = "temp";
946 }
947 String Filepath = UtilClass.OpenPathSelect();
948 String File = "";
949 if("".equals(Filepath)){
950 return returnvalue;
951 }else{
952 File = Filepath+"\\"+FileName+".xls";
953 }
954 File file = new File(File);
955 //如果找到相同的文件,执行删除
956 if(file.exists() && file.isFile()){
957 file.delete();
958 }
959 WritableWorkbook wwb = Workbook.createWorkbook(new File(File));
960 //创建工作表
961 wwb.createSheet("sheet1", 0);
962 //获取工作表
963 WritableSheet ws = wwb.getSheet(0);
964
965 //表头行样式
966 WritableCellFormat TableHead = new WritableCellFormat();
967 TableHead.setBorder(Border.ALL, BorderLineStyle.THIN);
968 TableHead.setAlignment(Alignment.CENTRE);
969 TableHead.setBackground(Colour.GRAY_25);
970
971 //表体数据行样式
972 WritableCellFormat TableRow = new WritableCellFormat();
973 TableRow.setAlignment(Alignment.CENTRE);
974
975 IRowSet rs = UtilClass.executeQuery(sql);
976 //生成列名
977 for(int i=0;i<rs.getRowSetMetaData().getColumnCount();i++){
978 String columnName = rs.getRowSetMetaData().getColumnName(i+1);
979 ws.addCell(new Label(i,0,columnName,TableHead));
980 }
981 int z=1;
982 while(rs.next()){
983 for(int j=1;j<=rs.getRowSetMetaData().getColumnCount();j++){
984 if(rs.getObject(j)!=null){
985 ws.addCell(new Label(j-1,z,rs.getObject(j).toString(),TableRow));
986 }
987 }
988 z++;
989 }
990 wwb.write();
991 wwb.close();
992 } catch (Exception e) {
993 alert2("导出数据生成Excel文件出错",sql);
994 }
995 return returnvalue;
996 }
997
998
999 /**
1000 * 集装箱箱号正确性验证
1001 * @param BoxNum 箱号
1002 * @return Boolean
1003 if(!UtilClass.BoxVerification(boxnum)){
1004 if(!UtilClass.alertReturn("箱号:"+boxnum+" 不是国际标准箱号,是否保存?")){
1005 UtilClass.Stop();
1006 }
1007 }
1008 */
1009 public static boolean BoxVerification(String BoxNum){
1010 HashMap bj = new HashMap();
1011 bj.put("0", 0);
1012 bj.put("1", 1);
1013 bj.put("2", 2);
1014 bj.put("3", 3);
1015 bj.put("4", 4);
1016 bj.put("5", 5);
1017 bj.put("6", 6);
1018 bj.put("7", 7);
1019 bj.put("8", 8);
1020 bj.put("9", 9);
1021 bj.put("A", 10);
1022 bj.put("B", 12);
1023 bj.put("C", 13);
1024 bj.put("D", 14);
1025 bj.put("E", 15);
1026 bj.put("F", 16);
1027 bj.put("G", 17);
1028 bj.put("H", 18);
1029 bj.put("I", 19);
1030 bj.put("J", 20);
1031 bj.put("K", 21);
1032 bj.put("L", 23);
1033 bj.put("M", 24);
1034 bj.put("N", 25);
1035 bj.put("O", 26);
1036 bj.put("P", 27);
1037 bj.put("Q", 28);
1038 bj.put("R", 29);
1039 bj.put("S", 30);
1040 bj.put("T", 31);
1041 bj.put("U", 32);
1042 bj.put("V", 34);
1043 bj.put("W", 35);
1044 bj.put("X", 36);
1045 bj.put("Y", 37);
1046 bj.put("Z", 38);
1047
1048 //去掉箱号两边空格
1049 String newBoxNum = BoxNum.trim();
1050
1051 //判断箱号是否为国际标准11位
1052 if(newBoxNum.length() != 11){
1053 return false;
1054 }
1055
1056 //判断前四位为字母 區別小寫
1057 for(int i=0;i<4;i++){
1058 String Nums = newBoxNum.substring(i, i+1);
1059 char chs[] = Nums.toCharArray();
1060 if((int)chs[0]<65 || (int)chs[0]>90){
1061 return false;
1062 }
1063 }
1064
1065 //判断后7位为数字
1066 for(int i=4;i<11;i++){
1067 String Nums = newBoxNum.substring(i, i+1);
1068 char chs[] = Nums.toCharArray();
1069 if((int)chs[0]<48 || (int)chs[0]>57){
1070 return false;
1071 }
1072 }
1073
1074 //判断第11数验证码是否正确
1075 double VerificationNumSum = 0;
1076 for(int i=0;i<10;i++){
1077 //获取当前位字母或数字对应的数值
1078 double bjdata = ((Integer)bj.get(newBoxNum.substring(i, i+1))).doubleValue();
1079 //获取当前位对应的2的i次方
1080 double jfdata = Math.pow(2,i);
1081 VerificationNumSum+=bjdata*jfdata;
1082 }
1083 int VerificationNum =(int)VerificationNumSum%11;
1084 int sub11 = new Integer(newBoxNum.substring(10)).intValue();
1085 //如果计算结果与第11位数是否相等
1086 if(VerificationNum!=sub11){
1087 return false;
1088 }
1089 return true;
1090 }
1091
1092 /**
1093 * 从oracle数据读取图片字节码生成图片文件
1094 * @param img_num 图片编号(参数表编号)
1095 * @param file 文件地址 "c://bmw.png"
1096
1097 系统参数表
1098 -- 创建表
1099 create table T_SYS_FUTVAN
1100 (
1101 FNUMBER NVARCHAR2(55),
1102 FNAME NVARCHAR2(256),
1103 PARAMETER_STRING NVARCHAR2(256),
1104 PARAMETER_NUMBER NUMBER,
1105 PARAMETER_DATE DATE,
1106 PARAMETER_TIMESTAMP TIMESTAMP(6),
1107 PARAMETER_BLOB BLOB
1108 )
1109 -- 创建字段说明
1110 comment on column T_SYS_FUTVAN.FNUMBER
1111 is '参数编号';
1112 comment on column T_SYS_FUTVAN.FNAME
1113 is '参数名称';
1114 comment on column T_SYS_FUTVAN.PARAMETER_STRING
1115 is '文本型参数';
1116 comment on column T_SYS_FUTVAN.PARAMETER_NUMBER
1117 is '数据型参数';
1118 comment on column T_SYS_FUTVAN.PARAMETER_DATE
1119 is '日期型参数';
1120 comment on column T_SYS_FUTVAN.PARAMETER_TIMESTAMP
1121 is '时间型参数';
1122 comment on column T_SYS_FUTVAN.PARAMETER_BLOB
1123 is '字节型参数';
1124 *
1125 */
1126 public static void getImgFromOracle(String img_num,String file){
1127 try {
1128 IRowSet rs = executeQuery("select parameter_blob from t_sys_futvan where fnumber = '"+img_num+"'");
1129 while(rs.next()){
1130 java.sql.Blob blob = rs.getBlob(1);
1131 InputStream ins = blob.getBinaryStream();
1132 File f = new File(file);
1133 FileOutputStream fout = new FileOutputStream(f);
1134 byte[]b = new byte[10244];
1135 int len = 0;
1136 while((len = ins.read(b)) != -1){
1137 fout.write(b,0,len);
1138 }
1139 fout.close();
1140 ins.close();
1141 }
1142 } catch (Exception e) {
1143 System.out.println();
1144 }
1145 }
1146
1147 /**
1148 * BOTP单据转换
1149 * @param botpNum 转换规则编号
1150 * @param BillInfo 原单据
1151 */
1152 public static void BOTP(String botpNum,CoreBillBaseInfo BillInfo){
1153 String error = "";
1154 try {
1155 // 取得BOPT的映射
1156 BOTMappingCollection botmapping = BOTMappingFactory.getRemoteInstance().getBOTMappingCollection("select * where name = '"+botpNum+"' ");
1157 BOTMappingInfo btpMappingInfo = null;
1158 if (botmapping !=null && botmapping.size() == 1) {
1159 btpMappingInfo = botmapping.get(0);
1160 } else {
1161 if(botmapping==null || botmapping.size()<1){
1162 error = "未找到转换规则 规则编号:"+botpNum;
1163 }
1164 if(botmapping.size()>1){
1165 error = "找到多条转换规则,请删除重复规则。 规则编号:"+botpNum;
1166 }
1167 throw new Exception();
1168 }
1169 //执行单据转换
1170 BTPTransformResult transformResult = BTPManagerFactory.getRemoteInstance().transform(BillInfo, btpMappingInfo);
1171
1172 //取得目标单据列表
1173 IObjectCollection toBillList = transformResult.getBills();
1174
1175 //保存目标单据
1176 for (int i = 0; i < toBillList.size(); i++) {
1177 CoreBillBaseInfo destBillInfo = (CoreBillBaseInfo) toBillList.getObject(i);
1178 BTPManagerFactory.getRemoteInstance().saveRelations(destBillInfo, transformResult.getBOTRelationCollection());
1179 }
1180
1181 } catch (Exception e) {
1182 if("".equals(error) || error == null){
1183 alert2("单据转换出错",e.getMessage());
1184 }else{
1185 alert2("单据转换出错",error);
1186 }
1187 }
1188 }
1189
1190 /**
1191 * 分摊功能
1192 * @param Total 总数
1193 * @param Allocations 分摊明细
1194 * @param newScale 小数位数
1195 * @return 分摊分集合
1196 String [][]Allocations = new String[3][2];
1197 Allocations[0][0] = "001";
1198 Allocations[0][1] = "3";
1199 Allocations[1][0] = "002";
1200 Allocations[1][1] = "3";
1201 Allocations[2][0] = "003";
1202 Allocations[2][1] = "3";
1203 String [][] rv = UtilClass.mathAllocation(new BigDecimal("100"), Allocations,2);
1204 */
1205 public static String[][] mathAllocation(BigDecimal Total,String[][] Allocations,int newScale){
1206 String[][] returnvalue = new String[Allocations.length][2];
1207 BigDecimal sum = new BigDecimal("0");
1208 BigDecimal Allocationsum = new BigDecimal("0");
1209 try {
1210 //获取明细总数
1211 for(int i=0;i<Allocations.length;i++){
1212 if(Allocations[i][1]!=null&&!"".equals(Allocations[i][1])){
1213 sum = sum.add(new BigDecimal(Allocations[i][1]));
1214 }
1215 }
1216
1217 //按比例分摊
1218 for(int i=0;i<Allocations.length;i++){
1219 if(Allocations[i][1]!=null&&!"".equals(Allocations[i][1])){
1220 BigDecimal thisValue = new BigDecimal(Allocations[i][1]);
1221 BigDecimal AllocationValue = thisValue.divide(sum,16, BigDecimal.ROUND_HALF_UP).multiply(Total).setScale(newScale, BigDecimal.ROUND_HALF_UP);
1222 returnvalue[i][0] = Allocations[i][0];
1223 returnvalue[i][1] = AllocationValue.toString();
1224 }else{
1225 returnvalue[i][0] = Allocations[i][0];
1226 returnvalue[i][1] = "0";
1227 }
1228 }
1229
1230 //判断分摊后每条记录数据是否与总数相同
1231 for(int i=0;i<returnvalue.length;i++){
1232 if(returnvalue[i][1]!=null&&!"".equals(returnvalue[i][1])){
1233 Allocationsum = Allocationsum.add(new BigDecimal(returnvalue[i][1]));
1234 }
1235 }
1236
1237 //如果分摊后结果与分摊前总数不一等。在分摊记录最后一条。加上。分摊后总数与分摊总数的差值
1238 if(Allocationsum.compareTo(Total)!=0){
1239 BigDecimal xz = new BigDecimal(returnvalue[returnvalue.length-1][1]).subtract(Allocationsum.subtract(Total));
1240 returnvalue[returnvalue.length-1][1] = xz.toString();
1241 }
1242 } catch (Exception e) {
1243 StringBuffer er = new StringBuffer();
1244 for(int i=0;i<Allocations.length;i++){
1245 er.append("| "+Allocations[i][0]+" "+Allocations[i][1]+" |");
1246 }
1247 alert2("分摊出错","分摊总数:"+Total.toString()+" 明细:"+er.toString());
1248 }
1249 return returnvalue;
1250 }
1251
1252 }
1253
1254 /*
1255
1256 --BOTP单据查询
1257 select tbotpm.fname 转换规则编号,
1258 tbotpm.fsrcentityalias_l2 源单据名称,
1259 tbotpm.FSrcEntityFullName 源单据对象,
1260 tbotpd.FSrcObjectID 源单据fid,
1261 tbotpm.fdestentityalias_l2 目录单据名称,
1262 tbotpm.FDestEntityFullName 目标单据对象,
1263 tbotpd.FDestObjectID 目标单据fid
1264 from T_BOT_Relation tbotpc
1265 inner join t_bot_mapping tbotpm
1266 on tbotpc.FBOTMappingID = tbotpm.fid
1267 inner join t_bot_relationentry tbotpd
1268 on tbotpc.fid = tbotpd.FKeyID
1269
1270
1271
1272 --凭证查询
1273 SELECT
1274 DISTINCT VOUCHER.Fid 主表FID,
1275 VOUCHER.Fnumber 凭证号,
1276 TO_CHAR(VOUCHER.FBookedDate, 'YYYY-MM-DD') 记账日期,
1277 ENTRIES.Fid 分录fid
1278
1279 FROM T_GL_Voucher VOUCHER
1280
1281 LEFT OUTER JOIN T_PM_User CASHIER
1282 ON VOUCHER.FCashierID = CASHIER.FID
1283
1284 LEFT OUTER JOIN T_BD_VoucherTypes VOUCHERTYPE
1285 ON VOUCHER.FVoucherTypeID = VOUCHERTYPE.FID
1286
1287 LEFT OUTER JOIN T_BD_Period PERIOD
1288 ON VOUCHER.FPeriodID = PERIOD.FID
1289
1290 LEFT OUTER JOIN T_PM_User AUDITOR
1291 ON VOUCHER.FAuditorID = AUDITOR.FID
1292
1293 LEFT OUTER JOIN T_PM_User HANDLER
1294 ON VOUCHER.FHandlerID = HANDLER.FID
1295
1296 LEFT OUTER JOIN T_PM_User CREATOR
1297 ON VOUCHER.FCreatorID = CREATOR.FID
1298
1299 LEFT OUTER JOIN T_PM_User POSTER
1300 ON VOUCHER.FPosterID = POSTER.FID
1301
1302 LEFT OUTER JOIN T_PM_User CANCELLER
1303 ON VOUCHER.FCancellerID = CANCELLER.FID
1304
1305 INNER JOIN T_GL_VoucherEntry ENTRIES
1306 ON VOUCHER.FID = ENTRIES.FBillID
1307
1308 LEFT OUTER JOIN T_ORG_BaseUnit COMPANY
1309 ON VOUCHER.FCompanyID = COMPANY.FID
1310
1311 left JOIN (SELECT
1312
1313 DISTINCT VOUCHER.FID ID,
1314 ASSISTRECORDS.FDescription FDescriptions,
1315 ASSGRP.fnumbergroup_l2 fnumbergroup_l2s,
1316 ASSISTRECORDS.FSettlementCode FSettlementCodes,
1317 ASSISTRECORDS.Fid assFid
1318 VOUCHER.FIsCheck ISCHECK,
1319 VOUCHER.FCompanyID COMPANY.ID,
1320 COMPANY.FName_l2 COMPANY.NAME,
1321 PERIOD.FNumber PERIOD.NUMBER,
1322 ((TO_CHAR(PERIOD.FPeriodYear) || '.') ||
1323 TO_CHAR(PERIOD.FPeriodNumber)) PERIOD,
1324 VOUCHERTYPE.FName_l2 VOUCHERTYPE.NAME,
1325 VOUCHERTYPE.FNumber VOUCHERTYPE.NUMBER,
1326 VOUCHER.FNumber NUMBER,
1327 VOUCHER.FBookedDate BOOKEDDATE,
1328 VOUCHER.FBizDate BIZDATE,
1329 VOUCHER.FSourceSys SOURCESYS,
1330 VOUCHER.FSourceType SOURCETYPE,
1331 CASHIER.FName_l2 CASHIER.NAME,
1332 AUDITOR.FName_l2 AUDITOR.NAME,
1333 CREATOR.FName_l2 CREATOR.NAME,
1334 POSTER.FName_l2 POSTER.NAME,
1335 VOUCHER.FBizStatus BIZSTATUS,
1336 VOUCHER.FEntryCount ENTRYCOUNT,
1337 ENTRIES.FID ENTRIES.ID,
1338 ENTRIES.FSeq ENTRIES.SEQ,
1339 ENTRIES.FDescription ENTRIES.DESCRIPTION,
1340 ACCOUNT.FNumber ACCOUNT.NUMBER,
1341 ACCOUNT.FLongName_l2 ACCOUNT.LONGNAME,
1342 CURRENCY.FName_l2 CURRENCY.NAME,
1343 CURRENCY.FPrecision CURRENCY.PRECISION,
1344 ENTRIES.FOriginalAmount ENTRIES.ORIGINALAMOUNT,
1345 CASE ENTRIES.FEntryDC
1346 WHEN 1 THEN
1347 ENTRIES.FLocalAmount
1348 ELSE
1349 NULL
1350 END AS LOCALAMOUNTDEBIT,
1351 CASE ENTRIES.FEntryDC
1352 WHEN 1 THEN
1353 NULL
1354 ELSE
1355 ENTRIES.FLocalAmount
1356 END AS LOCALAMOUNTCREDIT,
1357 CASE ENTRIES.FEntryDC
1358 WHEN 1 THEN
1359 ENTRIES.FReportingAmount
1360 ELSE
1361 NULL
1362 END AS REPORTINGAMOUNTDEBIT,
1363 CASE ENTRIES.FEntryDC
1364 WHEN 1 THEN
1365 NULL
1366 ELSE
1367 ENTRIES.FReportingAmount
1368 END AS REPORTINGAMOUNTCREDIT,
1369 VOUCHER.FHasCashAccount AS HASCASHACCOUNT,
1370 VOUCHER.FDescription AS DESCRIPTION,
1371 ENTRIES.FIsCussent AS ENTRIES.CUSSENT,
1372 ASSGRP.FLongNameGroup_l2 AS ASSGRP.LONGNAMEGROUP,
1373 VOUCHER.FAttachments AS ATTACHMENTS,
1374 VOUCHER.FCreateTime AS CREATETIME,
1375 ASSISTRECORDS.FDescription AS ASSISTRECORDS.DESCRIPTION,
1376 ASSISTRECORDS.FOriginalAmount AS ASSISTRECORDS.ORIGINALAMOUNT,
1377 ASSISTRECORDS.FLocalAmount AS ASSISTRECORDS.LOCALAMOUNT,
1378 ASSISTRECORDS.FReportingAmount AS ASSISTRECORDS.REPORTINGAMOUNT,
1379 ASSISTRECORDS.FQuantity AS ASSISTRECORDS.QUANTITY,
1380 ENTRIES.FQuantity AS ENTRIES.QUANTITY,
1381 VOUCHER.FIsCussent AS ISCUSSENT,
1382 VOUCHER.FIsMgCtrl AS ISMGCTRL,
1383 ASSISTRECORDS.FSettlementCode AS ASSISTRECORDS.SETTLEMENTCODE,
1384 ASSISTRECORDS.FBizNumber AS ASSISTRECORDS.BIZNUMBER,
1385 ASSISTRECORDS.FInvoiceNumber AS ASSISTRECORDS.INVOICENUMBER,
1386 ASSISTRECORDS.FTicketNumber AS ASSISTRECORDS.TICKETNUMBER,
1387 CUSTOMER.FNumber AS CUSTOMER.NUMBER,
1388 SETTLEMENTTYPE.FNumber AS SETTLEMENTTYPE.NUMBER,
1389 MATERIAL.FNumber AS MATERIAL.NUMBER,
1390 ORGUNIT.FNumber AS ORGUNIT.NUMBER,
1391 SUPPLIER.FNumber AS SUPPLIER.NUMBER,
1392 ASSISTRECORDS.FHasEffected AS ASSISTRECORDS.HASEFFECTED,
1393 ASSISTRECORDS.FFeeType AS ASSISTRECORDS.FEETYPE
1394
1395 FROM T_GL_Voucher VOUCHER
1396
1397 LEFT OUTER JOIN T_PM_User CASHIER
1398 ON VOUCHER.FCashierID = CASHIER.FID
1399
1400 LEFT OUTER JOIN T_BD_VoucherTypes VOUCHERTYPE
1401 ON VOUCHER.FVoucherTypeID = VOUCHERTYPE.FID
1402
1403 LEFT OUTER JOIN T_BD_Period PERIOD
1404 ON VOUCHER.FPeriodID = PERIOD.FID
1405
1406 LEFT OUTER JOIN T_PM_User AUDITOR
1407 ON VOUCHER.FAuditorID = AUDITOR.FID
1408
1409 LEFT OUTER JOIN T_PM_User HANDLER
1410 ON VOUCHER.FHandlerID = HANDLER.FID
1411
1412 LEFT OUTER JOIN T_PM_User CREATOR
1413 ON VOUCHER.FCreatorID = CREATOR.FID
1414
1415 LEFT OUTER JOIN T_PM_User POSTER
1416 ON VOUCHER.FPosterID = POSTER.FID
1417
1418 LEFT OUTER JOIN T_PM_User CANCELLER
1419 ON VOUCHER.FCancellerID = CANCELLER.FID
1420
1421 INNER JOIN T_GL_VoucherEntry ENTRIES
1422 ON VOUCHER.FID = ENTRIES.FBillID
1423
1424 LEFT OUTER JOIN T_ORG_BaseUnit COMPANY
1425 ON VOUCHER.FCompanyID = COMPANY.FID
1426
1427 LEFT OUTER JOIN T_BD_Currency CURRENCY
1428 ON ENTRIES.FCurrencyID = CURRENCY.FID
1429
1430 LEFT OUTER JOIN T_BD_AccountView ACCOUNT
1431 ON ENTRIES.FAccountID = ACCOUNT.FID
1432
1433 LEFT OUTER JOIN T_GL_VoucherAssistRecord ASSISTRECORDS
1434 ON ENTRIES.FID = ASSISTRECORDS.FEntryID
1435
1436 LEFT OUTER JOIN T_BD_AssistantHG ASSGRP
1437 ON ASSISTRECORDS.FAssGrpID = ASSGRP.FID
1438
1439 LEFT OUTER JOIN T_BD_Customer CUSTOMER
1440 ON ASSISTRECORDS.FCustomerID = CUSTOMER.FID
1441
1442 LEFT OUTER JOIN T_BD_SettlementType SETTLEMENTTYPE
1443 ON ASSISTRECORDS.FSettlementTypeID = SETTLEMENTTYPE.FID
1444
1445 LEFT OUTER JOIN T_BD_Material MATERIAL
1446 ON ASSISTRECORDS.FMaterialID = MATERIAL.FID
1447
1448 LEFT OUTER JOIN T_ORG_Company ORGUNIT
1449 ON ASSISTRECORDS.FOrgUnitID = ORGUNIT.FID
1450
1451 LEFT OUTER JOIN T_BD_Supplier SUPPLIER
1452 ON ASSISTRECORDS.FSupplierID = SUPPLIER.FID
1453
1454 LEFT OUTER JOIN T_PM_User HANDLER1
1455 ON ASSISTRECORDS.FHandlerID = HANDLER1.FID) VCHIDQUERY
1456 ON VOUCHER.FID = VCHIDQUERY.ID
1457
1458 LEFT OUTER JOIN T_BD_Currency CURRENCY
1459 ON ENTRIES.FCurrencyID = CURRENCY.FID
1460
1461 LEFT OUTER JOIN T_BD_AccountView ACCOUNT
1462 ON ENTRIES.FAccountID = ACCOUNT.FID
1463 where COMPANY.Fname_L2 = '中床国际物流集团有限公司'
1464 and TO_DATE(TO_CHAR(VOUCHER.FBookedDate, 'YYYY-MM-DD'), 'YYYY-MM-DD') >=
1465 TO_DATE('2009-01-01', 'YYYY-MM-DD')
1466 AND TO_DATE(TO_CHAR(VOUCHER.FBookedDate, 'YYYY-MM-DD'), 'YYYY-MM-DD') <=
1467 TO_DATE('2009-12-31', 'YYYY-MM-DD')
1468
1469
1470 */