Ежедневное обновление таблицы.

LiMe

Client
Регистрация
10.12.2015
Сообщения
596
Благодарностей
316
Баллы
63
Утро доброе, подскажите пожалуйста, как можно организовать подобное, есть таблица с статичными данными, и мне нужно ежедневно собирать данные по этим данным. Таблица выглядит вот так:

IDNameTag12.02.202213.02.202214.02.202215.02.202216.02.202217.02.2022
1​
DoorBlack
1​
DoorWhite
2​
TableBig
2​
TabeYellow

Не очень понимаю, как без изобретение велосипеда, можно ежедневно добавлять колонку данных. Товаров может быть просто 200+, и собирать данные по всем товарам и добавлять столбец с помощью стандартного функционал такая себе идея, по-любому где-то что-то поедет, хочет добавлять каждый товар по отдельности.
Заранее благодарен за помощь.
 

bitardenko

Client
Регистрация
27.12.2020
Сообщения
90
Благодарностей
73
Баллы
18
Как вариант можно хранить данные в джейсоне
DateData
12.02.2022{1:[{"Name":"Door","Tag":"Black"}]}
13.02.2022{1:[{"Name":"Door","Tag":"Black"}]}
Либо наоборот в джейсоне хранить то что добавляется каждый день
IDNameTagDate
1DoorBlack{"12.02.2022":123}
 
  • Спасибо
Реакции: Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
если все сделать аккуратно, то ничего не поедет.
1645228432730.png
C#:
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);
 
Последнее редактирование:
  • Спасибо
Реакции: braycho и LiMe

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)