Hi Huong Tram!
On ListForm of Document, I add a button name "AppoveAll".
On event "FormActionsApproveAll": I call a DataProcessors including one Form name "FormMain", DocFiler-Attributes type Filter, DocumentName-Attributes type String, ColumnsList-Attributes contain list of columns presentation on ListForm; On This DataProcessors, I design a TableBox control with dataName "DocumentListEx" type ValueTable (blank cloumns).
On event FormMain - OnOpen(), I code:
Qs= New Query;
OrgConditon="";
If PostKind = Enums.LkTinhTrangChungTu.Approved Then
ThisForm.Caption="Bộ xử lý Duyệt nhiều chứng từ cùng lúc (chỉ xử lý những phiếu chưa duyệt)";
OrgConditon="a.Posted";
ElsIf PostKind = Enums.LkTinhTrangChungTu.InProcess Then
ThisForm.Caption="Bộ xử lý Xét lại nhiều chứng từ cùng lúc (chỉ xử lý những phiếu đã duyệt)";
OrgConditon="a.Posted=FALSE";
ElsIf PostKind = Enums.LkTinhTrangChungTu.Closed Then
ThisForm.Caption="Bộ xử lý Đóng khóa nhiều chứng từ cùng lúc (chỉ xử lý những phiếu đã duyệt và đang mở)";
OrgConditon="a.Posted";
ElsIf PostKind = Enums.LkTinhTrangChungTu.Open Then
ThisForm.Caption="Bộ xử lý Mở lại nhiều chứng từ cùng lúc (chỉ xử lý những phiếu đã duyệt và đang đóng)";
OrgConditon="a.Posted";
EndIf;
StrCols="";
For i=0 to ColumnsList.Count()-1 Do
ColName = ColumnsList.Get(i).Value;
ColHeader = ColumnsList.Get(i).Presentation;
StrCols = StrCols +",a."+ColName;
DocumentListEx.Columns.Add(ColName);
cColumn = Controls.DocumentListEx.Columns.Add();
cColumn.Name = ColName;
cColumn.HeaderText = ColHeader;
cColumn.SetControl(Type("TextBox"));
EndDo;
StrSQL = "SEL ECT
| a.Ref " ;
StrSQL = StrSQL + StrCols;
StrSQL = StrSQL +" FR OM
| Document.ChứngTừ AS a
| WH ERE ";
StrSQL = StrSQL + OrgConditon;
StrPara = "";
For each sFilter in DocListFilter Do
If sFilter.Use Then
if sFilter.ComparisonType = "Bằng" or sFilter.ComparisonType = "=" then
StrPara = StrPara + " AND a."+sFilter.Name+" = &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Khác" or sFilter.ComparisonType = "<>" then
StrPara = StrPara + " AND a."+sFilter.Name+" <> &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Nhỏ hơn" or sFilter.ComparisonType = "<" then
StrPara = StrPara + " AND a."+sFilter.Name+" < &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Nhỏ hơn hoặc bằng" or sFilter.ComparisonType = "<=" then
StrPara = StrPara + " AND a."+sFilter.Name+" <= &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Lớn hơn" or sFilter.ComparisonType = ">" then
StrPara = StrPara + " AND a."+sFilter.Name+" > &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Lớn hơn hoặc bằng" or sFilter.ComparisonType = "<=" then
StrPara = StrPara + " AND a."+sFilter.Name+" >= &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif find(sFilter.ComparisonType,"(>, <)") then
StrPara = StrPara + " AND a."+sFilter.Name+" > &"+sFilter.Name+"F AND a."+sFilter.Name+" < &"+sFilter.Name+"T";
Qs.SetParameter(sFilter.Name+"F",sFilter.ValueFrom);
Qs.SetParameter(sFilter.Name+"T",sFilter.ValueTo);
elsif find(sFilter.ComparisonType,"(>=, <=)") then
StrPara = StrPara + " AND a."+sFilter.Name+" >= &"+sFilter.Name+"F AND a."+sFilter.Name+" <= &"+sFilter.Name+"T";
Qs.SetParameter(sFilter.Name+"F",sFilter.ValueFrom);
Qs.SetParameter(sFilter.Name+"T",sFilter.ValueTo);
elsif find(sFilter.ComparisonType,"(>=, <)") then
StrPara = StrPara + " AND a."+sFilter.Name+" >= &"+sFilter.Name+"F AND a."+sFilter.Name+" < &"+sFilter.Name+"T";
Qs.SetParameter(sFilter.Name+"F",sFilter.ValueFrom);
Qs.SetParameter(sFilter.Name+"T",sFilter.ValueTo);
elsif find(sFilter.ComparisonType,"(>, <=)") then
StrPara = StrPara + " AND a."+sFilter.Name+" > &"+sFilter.Name+"F AND a."+sFilter.Name+" <= &"+sFilter.Name+"T";
Qs.SetParameter(sFilter.Name+"F",sFilter.ValueFr om);
Qs.SetParameter(sFilter.Name+"T",sFilter.ValueTo);
elsif sFilter.ComparisonType = "Có chứa" then
StrPara = StrPara + " AND a."+sFilter.Name+" LIKE %&"+sFilter.Name+"%";
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Không chứa" then
StrPara = StrPara + " AND a."+sFilter.Name+" NOT LIKE %&"+sFilter.Name+"%";
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Trong danh sách" or sFilter.ComparisonType = "Trong nhóm từ danh sách" then
StrPara = StrPara + " AND a."+sFilter.Name+" IN (&"+sFilter.Name+")";
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "không trong danh sách" or sFilter.ComparisonType = "Không trong nhóm từ danh sách" then
StrPara = StrPara + " AND a."+sFilter.Name+" NOT IN (&"+sFilter.Name+")";
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif sFilter.ComparisonType = "Trong nhóm" then
StrPara = StrPara + " AND a."+sFilter.Name+" LIKE &"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
elsif find(sFilter.ComparisonType,"%") then
StrPara = StrPara + " AND a."+sFilter.Name+" LIKE %&"+sFilter.Name;
Qs.SetParameter(sFilter.Name,sFilter.Value);
endif;
EndIf;
EndDo;
StrSQL = StrSQL + StrPara;
StrSQL = StrReplace(StrSQL, "ChứngTừ", DocumentName);
Qs.Text = StrSQL;
KQ = Qs.Execute().Unload();
For i=1 To KQ .Count() Do
DocumentListEx.Add();
EndDo;
For each Column In KQ.Columns Do
ColumnValue = KQ.UnloadColumn(Column.Name);
DocumentListEx.LoadColumn(ColumnValue, Column.Name);
EndDo;
Controls.DocumentListEx.RefreshRows();
---------------
On runtime
Result Query return a ValueTable with data as List of TableBox-DocumentList with Filter used on ListForm.
FormMain show but Controls.DocumentListEx is blank, no any row data show on tablebox!