Програми для обліку

Українське програмне забезпечення з відкритим кодом

Довідники

Дописи

Програми для обліку / Довідники

26.04.2024 11:06 Довідники

Вибірка вказівників довідника

Вибірка елементів довідника

На прикладі довідника Блокнот.

Для вибірки вказівників з довідника Блокнот використовується клас Блокнот_Select
Блокнот_Select блокнот_Select = new Блокнот_Select();

Вибірка вказівників
await блокнот_Select.Select();

Позиціювання і обхід колекції в циклі
while (блокнот_Select.MoveNext()) { ... }

Поточний вказівник в колекції
Блокнот_Pointer? блокнот_Pointer = блокнот_Select.Current;

Вивід унікального ідентифікатора вказівника на консоль
Console.WriteLine(блокнот_Pointer.UnigueID);

C#
async Task Select()
{
    Блокнот_Select блокнот_Select = new Блокнот_Select();
    await блокнот_Select.Select();
    while (блокнот_Select.MoveNext())
    {
        Блокнот_Pointer? блокнот_Pointer = блокнот_Select.Current;
        if (блокнот_Pointer != null)
            Console.WriteLine(блокнот_Pointer.UnigueID);
    }
}
На консоль будуть виведені uid записів:

378672e1-1e06-4b7c-ad9c-b32e7da6b905
1a96ea24-5c6e-469e-b1c3-d8faae455f04


Якщо потрібно включити у вибірку додаткові поля довідника
Додатково включаються поля Код та Назва
блокнот_Select.QuerySelect.Field.AddRange([Блокнот_Const.Код, Блокнот_Const.Назва]);

C#
async Task Select()
{
    Блокнот_Select блокнот_Select = new Блокнот_Select();
    блокнот_Select.QuerySelect.Field.AddRange([Блокнот_Const.Код, Блокнот_Const.Назва]);

    await блокнот_Select.Select();
    while (блокнот_Select.MoveNext())
    {
        Блокнот_Pointer? блокнот_Pointer = блокнот_Select.Current;
        if (блокнот_Pointer != null)
        {
            Console.WriteLine(блокнот_Pointer.UnigueID);

            //Вивід додаткових полів
            if (блокнот_Pointer.Fields != null)
                Console.WriteLine(блокнот_Pointer.Fields[Блокнот_Const.Код] + " " + 
                    блокнот_Pointer.Fields[Блокнот_Const.Назва]);
        }
    }
}

Отримання об'єкту елементу довідника

Об'єкт елементу довідника повертає функція GetDirectoryObject
Блокнот_Objest? блокнот_Objest = await блокнот_Pointer.GetDirectoryObject();

До полів об'єкту вже можна звертатись безпосередньо
блокнот_Objest.Код;
блокнот_Objest.Назва;


На відміну від попереднього прикладу, де поля зразу включалися у вибірку до бази даних виконувався один запит. Отримання об'єкту це додаткове звертання до бази даних кожен раз коли потрібно отримати об'єкт. Але плюс в тому що об'єкт зразу ініціює поля потрібного типу даних і до полів можна звертатись безпосередньо. Також можна модифікувати значення полів об'єкту і записувати зміни функцією Save.

C#
async Task Select()
{
    Блокнот_Select блокнот_Select = new Блокнот_Select();

    await блокнот_Select.Select();
    while (блокнот_Select.MoveNext())
    {
        Блокнот_Pointer? блокнот_Pointer = блокнот_Select.Current;
        if (блокнот_Pointer != null)
        {
            //Отримання об'єкту довідника із вказівника
            Блокнот_Objest? блокнот_Objest = await блокнот_Pointer.GetDirectoryObject();
            if (блокнот_Objest != null)
                Console.WriteLine(блокнот_Objest.Код + " " + блокнот_Objest.Назва);
        }
    }
}

Фільтрування і відбори

Відбори додаються в колекцію відборів
блокнот_Select.QuerySelect.Where.Add(new Where(Блокнот_Const.Назва, Comparison.EQ, "Запис 1"));

Наступний відбір додатково вказує як він поєднується із попереднім Comparison.AND
...Where.Add(new Where(Comparison.AND, Блокнот_Const.Назва, Comparison.EQ, "000001"));

Сформований запит функцією ...QuerySelect.Construct() для аналізу
SELECT uid
FROM tab_a01
WHERE col_a2 = @col_a2_p2 AND col_a1 = @col_a1_p3
ORDER BY col_a2 ASC


C#
async Task Select()
{
    Блокнот_Select блокнот_Select = new Блокнот_Select();

    //Відбір по назві
    блокнот_Select.QuerySelect.Where.Add(new Where(Блокнот_Const.Назва, Comparison.EQ, "Запис 1"));

    //Відбір по коду
    блокнот_Select.QuerySelect.Where.Add(new Where(Comparison.AND, Блокнот_Const.Код, Comparison.EQ, "000001"));

    //Сортувати по коду
    блокнот_Select.QuerySelect.Order.Add(Блокнот_Const.Назва, SelectOrder.ASC);

    //Вивід запиту для аналізу
    Console.WriteLine(блокнот_Select.QuerySelect.Construct());

    await блокнот_Select.Select();
    while (блокнот_Select.MoveNext())
    {
        Блокнот_Pointer? блокнот_Pointer = блокнот_Select.Current;
        if (блокнот_Pointer != null)
            Console.WriteLine(блокнот_Pointer.UnigueID);
    }
}

Пошук по значенню поля

Пошук по значенню поля Код
var блокнот_Pointer = await new Блокнот_Select().FindByField(Блокнот_Const.Код, "000001");

Вибірка колекції по значенню поля Назва
var list = await new Блокнот_Select().FindListByField(Блокнот_Const.Назва, "Запис 1");

C#
async Task Select()
{
    //Пошук по коду одного вказівника (якщо є декілька варіантів вибирається перший)
    Блокнот_Pointer? блокнот_Pointer = await new Блокнот_Select().FindByField(Блокнот_Const.Код, "000001");
    if (блокнот_Pointer != null)
        Console.WriteLine(блокнот_Pointer.UnigueID);

    //Пошук по назві всіх які співпадають
    foreach (Блокнот_Pointer блокнот_Pointer2 in await new Блокнот_Select().FindListByField(Блокнот_Const.Назва, "Запис 1"))
        Console.WriteLine(блокнот_Pointer2.UnigueID);
}

© accounting.org.ua - 2024