var table = project.Tables["table1"];//таблица
int first = table.ContainsHeaderLine?-1:0;//определяю первую строку в зависимости от настройки таблицы 'первая строка - заголовки'
string today = DateTime.Now.ToShortDateString();//определяю сегодняшнюю дату
bool showinposter = false;//не показывать лог в постере
//наполняю таблицу тестовыми данными
table.Clear();
string[][] testData = new string[][]{
new string[]{"Id","Name","Tag","12.02.2022","13.02.2022","14.02.2022","15.02.2022","16.02.2022","17.02.2022","18.02.2022"},
new string[]{"1","Door", "black"},
new string[]{"1","Door", "white"},
new string[]{"2","Table", "big"},
new string[]{"2","Table", "yellow"}
};
foreach(string[] testRow in testData){
table.AddRow(testRow);
}
//можно закомментировать весь блок после первого выполнения
//проверяю, существует ли сегодняшняя дата в таблице и добавляю колонку, если ее до сих пор нет
if(!table.GetRow(first).Last().Equals(today)){
table.SetCell(table.ColCount, first, today);
project.SendInfoToLog($"добавил колонку с сегодняшним числом '{today}'", showinposter);
}
//имитирую парсинг. нужно будет подставить свои значения из переменных
string id = "1";//project.Variables["id"].Value
string name = "Door";
string tag = "white";
//например, получаю остаток на складе по позиции
string newvalue = Enumerable.Range(10,20).Shuffle().First().ToString();
//...
//определяю номер строки в таблице, куда надо записать результат парсинга
for(int i = first+1; i < table.RowCount; i++){
if(table.GetColumn(0).ToList()[i].Equals(id)){//первичная проверка позиции по id
for(int n = i; n < table.RowCount; n++){
if(table.GetColumn(1).ToList()[n].Equals(name)){//затем проверка по name
for(int t = n; t < table.RowCount; t++){
if(table.GetColumn(2).ToList()[t].Equals(tag)){//и еще проверка по tag
//если этот товар уже есть в таблице
table.SetCell(table.ColCount-1, t, newvalue);//инъецирую 'newvalue' для этого товара в столбец с сегодняшней датой
project.SendInfoToLog($"установил '{newvalue}' в столбец '{today}' для '{string.Join("_", new[]{id,name,tag})}'", showinposter);
return true;//и выхожу из кубика
//иначе
}
}
}
}
}
}
table.AddRow(new string[]{id,name,tag});//добавляю новый товар
table.SetCell(table.ColCount - 1, table.RowCount - 1, newvalue);//устанавливаю ему спаршенное значение
//напоследок, отсортирую таблицу по первому столбцу
foreach(IEnumerable<string> row in table.GetItems($"{first+1}-end", true).OrderBy(x=>x.First())){
table.AddRow(row);
}
project.SendInfoToLog($"добавил новую позицию '{string.Join("_", new[]{id,name,tag})}' и установил '{newvalue}' в столбец '{today}'", showinposter);