Содержание:
1. Поиск или отбор по списку значений
2. Как найти строки в табличной части по списку значений при использовании программ 1С
3. Отбор строк в табличной части по списку значений
4. Использование стандартного механизма отбора в системе программ 1С:Предприятие
Поиск или отбор по списку значений
Предположим, у нас есть документ с табличной частью, и требуется найти или отобрать строки, которые соответствуют списку значений, например, кодам или ссылкам на справочник Номенклатура.
Пример задачи:
Есть список кодов товаров, и нужно найти все строки табличной части, в которых номенклатура соответствует одному из кодов из этого списка.
СписокТоваров = Новый Массив;
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“001”));
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“002”));
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“003”));
Как найти строки в табличной части по списку значений при использовании программ 1С
Для поиска строк в табличной части по списку значений мы можем использовать цикл для обхода всех строк и проверять, содержит ли строка одно из значений из списка.
СписокТоваров = Новый Массив;
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“001”));
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“002”));
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“003”));
// Перебираем строки табличной части
Для Каждого Строка Из ЭтотОбъект.Товары Цикл
Если СписокТоваров.Найти(Строка.Номенклатура) <> Неопределено Тогда
Сообщить(“Найден товар: ” + Строка.Номенклатура.Наименование);
КонецЕсли;
КонецЦикла;
Описание логики:
- Создается массив
СписокТоваров
, содержащий ссылки на нужные элементы справочника Номенклатура. - В цикле перебираются строки табличной части документа.
- Метод Найти проверяет, содержится ли номенклатура строки в списке.
- Если номенклатура есть в списке, выполняются необходимые действия (например, вывод сообщения или обработка данных).
Отбор строк в табличной части по списку значений
Если требуется не просто найти строки, а отобрать их для дальнейшей работы, можно сформировать новую таблицу значений на основе отбора строк по списку значений.
// Создаем новую таблицу для отбора
ОтобранныеСтроки = Новый ТаблицаЗначений;
ОтобранныеСтроки.Колонки.Добавить(“Номенклатура”);
ОтобранныеСтроки.Колонки.Добавить(“Количество”);
ОтобранныеСтроки.Колонки.Добавить(“Цена”);
СписокТоваров = Новый Массив;
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“001”));
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“002”));
СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоКоду(“003”));
// Перебираем строки табличной части и отбираем нужные
Для Каждого Строка Из ЭтотОбъект.Товары Цикл
Если СписокТоваров.Найти(Строка.Номенклатура) <> Неопределено Тогда
// Добавляем отобранную строку в новую таблицу
НоваяСтрока = ОтобранныеСтроки.Добавить();
НоваяСтрока.Номенклатура = Строка.Номенклатура;
НоваяСтрока.Количество = Строка.Количество;
НоваяСтрока.Цена = Строка.Цена;
КонецЕсли;
КонецЦикла;
// Вывод отобранных строк
Для Каждого Строка Из ОтобранныеСтроки Цикл
Сообщить(Строка.Номенклатура.Наименование + “: ” + Строка.Количество + ” шт.”);
КонецЦикла;
Описание логики:
- Создается новая таблица значений, в которую будут добавляться строки, соответствующие критериям отбора.
- В цикле перебираются строки табличной части.
- Если номенклатура строки содержится в списке, строка добавляется в новую таблицу значений.
- В конце производится вывод всех отобранных строк.
Использование стандартного механизма отбора в системе программ 1С:Предприятие
В некоторых случаях можно воспользоваться стандартными механизмами отбора табличной части через запросы. Это особенно актуально, если необходимо обработать большое количество данных и оптимизировать производительность.
Пример запроса:
Если требуется отобрать строки табличной части через запрос, то можно использовать следующий подход:
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
Товары.Номенклатура,
Товары.Количество,
Товары.Цена
ИЗ
Документ.ПоступлениеТоваров.Товары КАК Товары
ГДЕ
Товары.Номенклатура В (&СписокТоваров)”;
Запрос.УстановитьПараметр(“СписокТоваров”, СписокТоваров);
// Выполняем запрос
Результат = Запрос.Выполнить();
// Обрабатываем результат
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Номенклатура + “: ” + Выборка.Количество + ” шт.”);
КонецЦикла;
Специалист компании ООО “Кодерлайн”,
Дубровина Елена
Добавить комментарий