How to change column set of a table on a form programmatically

Understanding basics of 1C:Enterprise platform. To start working with 1C:Enterprise platform visit Getting started page

#1
People who like this:0Yes/0No
Interested
Rating: 27
Joined: Apr 5, 2012
Company: 1TÇ Şirketi - Merv Bilgi İşlem Otomasyonu Yazılım Ltd. Şti.

Hi.

I did not see how to add Columns in FormDataCollection type. Is there way to add Columns in formdatacollection by script?

 
#2
People who like this:0Yes/0No
Timofey Bugaevsky
Guest

Joined:
Company:

Columns are form items too. Which columns do you want to add?

 
#3
People who like this:0Yes/0No
Interested
Rating: 27
Joined: Apr 5, 2012
Company: 1TÇ Şirketi - Merv Bilgi İşlem Otomasyonu Yazılım Ltd. Şti.

In managed form I have a form attribute, type is ValueTable. So, in backgound working some algorithms in which content of columns may change (in some moments there may be 5 colums, in some moment 7 or 9..). So I need to change content of columns in type "formdatacollection". But there I couldn't find in FomrDataCollection property like "Columns" in which I could add columns which I really need to show to user.

 
#4
People who like this:0Yes/0No
Interested
Rating: 27
Joined: Apr 5, 2012
Company: 1TÇ Şirketi - Merv Bilgi İşlem Otomasyonu Yazılım Ltd. Şti.

Is there any possibility to control columns in FormDataCollection? Or it's "Impossible" as uncle James says :)

Edited: Murat Yazlıyev - Jun 19, 2013 12:27 PM
 
#5
People who like this:0Yes/0No
Timofey Bugaevsky
Guest

Joined:
Company:

I can recommend to change visibility of predefined items on form.

But if you are sure that you want to use non static query for your list with different column set, you can use the following script as an example:

Code
   // obtaining the data
   Query = New Query;
   Query.Text = QueryText;

   QueryResult = Query.Execute();

   SelectionDetailRecords = QueryResult.Choose();

   QueryResultTableObject = New ValueTable;
   QueryResultTableObject.Clear();
   QueryResultTableObject.Columns.Clear();
   
   For Each Column In QueryResult.Columns Do
      QueryResultTableObject.Columns.Add(Column.Name, Column.ValueType, Column.Name, Column.Width);
   EndDo;

   While SelectionDetailRecords.Next() Do
      Row = QueryResultTableObject.Add();
      FillPropertyValues(Row, SelectionDetailRecords);
   EndDo;

   // removing form items
   QueryResultTableItem = Items.Find("QueryResultTable");
   If QueryResultTableItem <> Undefined Then
      Items.Delete(QueryResultTableItem);
   EndIf;
   
   // creating and filling form attributes
   AttributesToAdd = New Array();
   AttributesToDelete = New Array();
   
   RootAttributes = GetAttributes();
   For Each Attribute In RootAttributes Do
      If Attribute.Path = "" And Attribute.Name = "QueryResultTable" Then
         AttributesToDelete.Add("QueryResultTable");
         Break;
      EndIf;
   EndDo;
   
   QueryResultTableType = New TypeDescription("ValueTable");
   QueryResultTableAttribute = New FormAttribute("QueryResultTable", QueryResultTableType);
   AttributesToAdd.Add(QueryResultTableAttribute);
   For Each Column In QueryResultTableObject.Columns Do
      ColumnAttribute = New FormAttribute(Column.Name, Column.ValueType, "QueryResultTable");
      AttributesToAdd.Add(ColumnAttribute);
   EndDo;
   
   ChangeAttributes(AttributesToAdd, AttributesToDelete);
   ValueToFormAttribute(QueryResultTableObject, "QueryResultTable");
   
   // creating form items
   QueryResultTableItem = Items.Add("QueryResultTable", Type("FormTable"), Items.ResultOutputGroup);
   QueryResultTableItem.DataPath = "QueryResultTable";
   
   For Each Column In QueryResultTableObject.Columns Do
      ColumnItem = Items.Add("QueryResultTable" + Column.Name, 
              Type("FormField"), QueryResultTableItem);
      ColumnItem.Type = FormFieldType.InputField;
      ColumnItem.DataPath = "QueryResultTable." + Column.Name;
   EndDo;

 
Subscribe
Users browsing this topic (guests: 1, registered: 0, hidden: 0)
Be the first to know tips & tricks on business application development!

A confirmation e-mail has been sent to the e-mail address you provided .

Click the link in the e-mail to confirm and activate the subscription.