Добавление строки с суммированием в числовых колонках со строкой, у которой совпадает значение ключевой колонки.

Если для суммирования назначена текстовая колонка, то данные в ней будут складываться через символ "перенос строки" ("\n").

Для обычных текстовых полей используется правило - если в таблице уже есть строка и данные будут в ней складываться, то новое значение в обычном текстовом поле обновляется только не пустым текстом.

Т.е. если в поле уже есть текст, то пустым оно не забивается.

Для обычных числовых полей используется правиль - если в таблице уже есть строка и данные будут в ней складываться, то новое значение в обычном чиловом поле обновляется большим числом.


int ires = ts_table(int TableDescr,"add_row_sum", int column1index/string column1name, bool/int/double/string column1value, ...  , int columnNindex/string columnNname, bool/int/double/string columnNvalue);


Здесь:

column1index или column1name - индекс (от 0) или название колонки, в которую нужно записать значение column1value;

Возвращает в ires -1 в случае ошибки, или индекс добавленной или найденной строки (индексы строк от 0 до n-1).

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


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


Материал

Ед.изм

Кол-во

Доска 100х50

пог.м

1000

Доска 50х40

куб.м.

2000

Доска 50х20

кв.м.

1900



Пример. 

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

При этом собрать для дальнейшего анализа все ID одинаковых элементов в отдельную колонку.


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

int TableDescr1;
object("create", "ts_table", TableDescr1);
ts_table(TableDescr1,"add_column",0,"string","имя объекта + типоразмер + ед.изм");
ts_table(TableDescr1, "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_column", 5,"string","ID list");
ts_table(TableDescr1,"set_columns_to_add_sum", "kolvo", "ID list");

string objectname, tiporazmer, edizm, ID;
double kolvo;

// Для добавления строки в таблицу просто используем следующие инструкции:
objectname = "Мой объект 1";
tiporazmer = "Типоразмер 1";
edizm = "шт";
kolvo = 1;

ID = "O-1";
ts_table(TableDescr1,"add_row_sum",0,objectname+tiporazmer+edizm, 1,objectname, 2, tiporazmer, 3, edizm, 4, kolvo, "ID list", id);

ID = "O-2";
ts_table(TableDescr1,"add_row_sum",0,objectname+tiporazmer+edizm, 1,objectname, 2, tiporazmer, 3, edizm, 4, kolvo, "ID list", id);

string str;
ts_table(TableDescr1,"print_to_str",str);
coutvar << str;

object("create", "ts_table", TableDescr1);




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