|

1С пример отбора, поиска в табличной части по списку из нескольких значений


Содержание:

1. Поиск или отбор по списку значений

    2. Как найти строки в табличной части по списку значений при использовании программ 1С

    3. Отбор строк в табличной части по списку значений

    4. Использование стандартного механизма отбора в системе программ 1С:Предприятие

    Поиск или отбор по списку значений

    Предположим, у нас есть документ с табличной частью, и требуется найти или отобрать строки, которые соответствуют списку значений, например, кодам или ссылкам на справочник Номенклатура.

    Пример задачи:

    Есть список кодов товаров, и нужно найти все строки табличной части, в которых номенклатура соответствует одному из кодов из этого списка.

    СписокТоваров = Новый Массив;

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“001”));

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“002”));

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“003”));

    Как найти строки в табличной части по списку значений при использовании программ 1С

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

    СписокТоваров = Новый Массив;

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“001”));

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“002”));

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“003”));

    // Перебираем строки табличной части

    Для Каждого Строка Из ЭтотОбъект.Товары Цикл

        Если СписокТоваров.Найти(Строка.Номенклатура) <> Неопределено Тогда

            Сообщить(“Найден товар: ” + Строка.Номенклатура.Наименование);

        КонецЕсли;

    КонецЦикла;

    Описание логики:

    • Создается массив СписокТоваров, содержащий ссылки на нужные элементы справочника Номенклатура.
    • В цикле перебираются строки табличной части документа.
    • Метод Найти проверяет, содержится ли номенклатура строки в списке.
    • Если номенклатура есть в списке, выполняются необходимые действия (например, вывод сообщения или обработка данных).

    Отбор строк в табличной части по списку значений

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

    // Создаем новую таблицу для отбора

    ОтобранныеСтроки = Новый ТаблицаЗначений;

    ОтобранныеСтроки.Колонки.Добавить(“Номенклатура”);

    ОтобранныеСтроки.Колонки.Добавить(“Количество”);

    ОтобранныеСтроки.Колонки.Добавить(“Цена”);

    СписокТоваров = Новый Массив;

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“001”));

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“002”));

    СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“003”));

    // Перебираем строки табличной части и отбираем нужные

    Для Каждого Строка Из ЭтотОбъект.Товары Цикл

        Если СписокТоваров.Найти(Строка.Номенклатура) <> Неопределено Тогда

            // Добавляем отобранную строку в новую таблицу

            НоваяСтрока = ОтобранныеСтроки.Добавить();

            НоваяСтрока.Номенклатура = Строка.Номенклатура;

            НоваяСтрока.Количество = Строка.Количество;

            НоваяСтрока.Цена = Строка.Цена;

        КонецЕсли;

    КонецЦикла;

    // Вывод отобранных строк

    Для Каждого Строка Из ОтобранныеСтроки Цикл

        Сообщить(Строка.Номенклатура.Наименование + “: ” + Строка.Количество + ” шт.”);

    КонецЦикла;

    Описание логики:

    • Создается новая таблица значений, в которую будут добавляться строки, соответствующие критериям отбора.
    • В цикле перебираются строки табличной части.
    • Если номенклатура строки содержится в списке, строка добавляется в новую таблицу значений.
    • В конце производится вывод всех отобранных строк.

    Использование стандартного механизма отбора в системе программ 1С:Предприятие

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

    Пример запроса:

    Если требуется отобрать строки табличной части через запрос, то можно использовать следующий подход:

    Запрос = Новый Запрос;

    Запрос.Текст =

    “ВЫБРАТЬ

        Товары.Номенклатура,

        Товары.Количество,

        Товары.Цена

    ИЗ

        Документ.ПоступлениеТоваров.Товары КАК Товары

    ГДЕ

        Товары.Номенклатура В (&СписокТоваров)”;

    Запрос.УстановитьПараметр(“СписокТоваров”, СписокТоваров);

    // Выполняем запрос

    Результат = Запрос.Выполнить();

    // Обрабатываем результат

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

        Сообщить(Выборка.Номенклатура + “: ” + Выборка.Количество + ” шт.”);

    КонецЦикла;

    Специалист компании ООО “Кодерлайн”,

    Дубровина Елена


    Помогла ли вам статья? Оставьте свой комментарий:

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Блог про 1С:Предприятие

    Copyright © 2024 TopKoder

    Мы занимаемся внедрением и обслуживанием программных продуктов 1С.