Для обработки табличных данных LabPP_Automat предоставляет мощный инструмент ts_table(...).
Чтобы его использовать необходимо сначала создать объект типа "ts_table" при помощи функции создания объекта.
Эта функция возвращает целое число. Это так называемый дескриптор объекта.
Указывая его при обращении к функциям ts_table(...) мы указываем с каким экземпляром объекта мы хотим выполнить действия.
Здесь мы создадим объект типа ts_table:

    int TableDescr1;  // объявляем переменную типа "целое чиcло".
    object("create","ts_table",TableDescr1);  // создаем объект типа "ts_table" и его дескриптор записываем в переменную TableDescr1
    // Здесь мы работаем с нашим экземпляром объекта ts_table->
    // <-
    object("delete",TableDescr1); // когда экземпляр объекта больше не нужен - удаляем его по его дескриптору.

Благодаря использованию дескрипторов мы можем одновременно работать с большим количеством табличных объектов. А это, в свою очередь, дает нам возможность создавать отчеты и обработки невероятной сложности просто, удобно и понятно.

Для работы с экземпляром объекта "ts_table" используется функция

ts_table(int descriptor, string directive, ....);

Суть строковой директивы определяет список и значение следующих далее аргументов.

add_column   добавить колонку в таблицу
set_first_key   задать колонку, по которой отслеживать уникальность строк (очень удообно)
add_row   добавить строку
add_row_sum  

добавить строку с суммированием числовых значений других колонок,
если значение ключевой колонки совпадает с уже имеющейся строкой

sort   выполнить сортировку строк таблицы по заданной колонке
select_row   сделать текущей заданную строку таблицы
search   быстрый поиск строки по значению в колонке
get_value_of   получить значение из заданной колонки текущей строки
get_rows_count   получить количество строк в таблице
get_columns_count   получить количество колонок в таблице

add_column

Колонки могут быть строковыми или числовыми.
Формат команды:

ts_table(int descriptor, "add_column", int columnnumber, string columnname);

Здесь:
descriptor - дескриптор экземпляра объекта таблицы, у которой добавляется колонка.
columnnumber - номер колонки (можно поставить -1 чтобы программа сама создала номер).
columnname - название (заголовок) колонки.

Пример чтобы добавить текстовую колонку №0:

    ts_table(TableDescr1, "add_column",0,"string","код материала + ед.изм.");

Пример чтобы добавить числовую колонку с вычисляемым номером по значению переменной № = i + 3

    ts_table(TableDescr1, "add_column",i+3,"double",szonename);

set_first_key

Когда нужно избежать дублирования записей в таблице можно использовать удобный механизм. 
Одну из колонок можно задать в качестве так называемого "первичного ключа".
После этого все добавляемые строки будут анализироваться и если в таблице уже есть строка с таким же значением в колонке, то новая строка создаваться не будет.
А если добавление строки производится не простой директивой "add_row" а "add_row_sum" то в обнаруженной строке будут суммированы значения числовых колонок (см. add_row_sum).

Пример, чтобы сделать колонку №1 ключевой:

  ts_table(TableDescr1,"set_first_key",1);

Пример, чтобы сделать колонку с названием "Наименование объекта" ключевой:

  ts_table(TableDescr1,"set_first_key","Наименование объекта");  

add_row

Добавление строки.

   ts_table(TableDescr1,"add_row", 0, objectname, 1, value_to_column_1, 2, value_to_column_2);

Здесь в колонку №0 записываем значение из переменной objectname, в колонку №1 записываем значение value_to_column_1, и в колонку №2 записываем значение переменной value_to_column_2.

Если колонка №0 задана как "первичный ключ" (указана в директиве set_first_key), то можно записывать значения колонок за несколько команд:

   ts_table(TableDescr1,"add_row", 0, objectname, 1, value_to_column_1);
   ts_table(TableDescr1,"add_row", 0, objectname, 2, value_to_column_2);

Данные допишутся в ту же строку со значением в ключевой колонке №0.

add_row_sum

Добавление строки с суммированием в числовых колонках со строкой, у которой совпадает значение ключевой колонки.
Проще всего объяснить на актуальном красивом примере.
Имеются объекты "Доска". В этих объектах есть поле "типоразмер" ("100х40","50х40" и т.п.), "единица измерения" ("пог.м","кв.м","куб.м") и "количество".
Мы хотим получить суммарную таблицу, где бы все объекты типа "Доска", в проекте просуммировались следующим образом:

Материал Ед.изм Кол-во
Доска 100х50 пог.м 1000
Доска 50х40 куб.м. 2000
Доска 50х20 кв.м. 1900

Для этого создаем таблицу с одной ключевой колонкой и колонками для обычных данных

  ts_table(TableDescr1,"add_column",0,"string","имя объекта + типоразмер + ед.изм");
  ts_table("TableDescr, "set_first_key",0);
  ts_table(TableDescr1,"add_column", 1,"string",objectname); 
  ts_table(TableDescr1,"add_column", 2,"
string",tiporazmer);
  ts_table(TableDescr1,"add_column", 3,"
string",edizm);
 
ts_table(TableDescr1,"add_column", 4,"double",kolvo);

Для добавления строки в таблицу просто используем следующую запись:

ts_table(TableDescr1,"add_row_sum",0,objectname+tiporazmer+edizm, 1,objectname, 2, tiporazmer, 3, edizm, 4, kolvo);

В результате в таблице все объекты с одинаковыми значениеми имя+типоразмер+ед.изм. сведутся в единые записи, а в колонке "количество" будет стоять сумма количеств.

sort

Сортировка строк таблицы по заданной колонке или по ключевой колонке (если без аргументов).
Пример. Сортировка таблицы по колонке №0

   ts_table(TableDescr1,"sort",0);

Пример. Сотритовка таблицы по ключевой колонке, указанной ранее.

   ts_table(TableDescr1,"sort");

После добавления новой строки требуется повторная сотрировка.

search

Быстрый поиск в таблице первого совпадающего значения колонки.
Возвращает номер строки или -1, если такая строка отсутствует в таблице.

Пример. Найти строку со значением в колонке №1 "Доска"

    int irow = ts_table(TableDescr1,"search",1,"Доска");

select_row

Сделать текущей указанную строку в таблице.

Пример. Сделать текущей первую строку в таблице (индекс строки - от 0 до n-1):

    int i=0;
    ts_table(TableDescr1,"select_row",i);

get_value_of

Получить значение из заданной колонки текущей строки таблицы

Пример. Получить значение из колонки №0 текущей строки таблицы в переменную objectname:

    string objectname;
    ts_table(TableDescr1,"get_value_of",0,objectname);

get_rows_count

Получить количество строк в таблице в заданную переменную

   int rowcount;
   ts_table(TableDescr1,"get_rows_count", rowcount);

get_columns_count

Получить количество колонок в таблице в заданную переменную

    int colcount;
    ts_table(TableDescr1,"get_columns_count", colcount);