add_row_sum
Добавление строки с суммированием в числовых колонках со строкой, у которой совпадает значение ключевой колонки.
Если для суммирования назначена текстовая колонка, то данные в ней будут складываться через символ "перенос строки" ("\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 элементов.