Odin | База знаний 1С

Как выполнить поиск...
 

Как выполнить поиск в динамическом списке 1С и вернуть строку или Неопределено?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Приведи пример программного кода 1с выполняющего поиск по одной из колонок динамического списка и возвращающего найденную строку или Неопределено .



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

boosleek, приветствую!

Вот пример кода на 1С (8.3), который выполняет поиск по одной из колонок динамического списка и возвращает найденную строку или Неопределено, если совпадений нет.

1C
Функция НайтиСтрокуВДинамическомСписке(ДинамическийСписок, ИмяПоля, ЗначениеДляПоиска) Экспорт
    // ДинамическийСписок - объект динамического списка
    // ИмяПоля - строка, имя колонки для поиска
    // ЗначениеДляПоиска - значение, по которому ищем

    Если ДинамическийСписок = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;

    ТекущиеДанные = ДинамическийСписок.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;

    Для Каждого Строка Из ТекущиеДанные Цикл
        Если Строка[ИмяПоля] = ЗначениеДляПоиска Тогда
            Возврат Строка;
        КонецЕсли;
    КонецЦикла;

    Возврат Неопределено;
КонецФункции

Пример вызова из модуля формы:

1C
Процедура ПоискПоКоду()
    Результат = НайтиСтрокуВДинамическомСписке(ЭтаФорма.ДинамическийСписок, "Код", "12345");
    Если Результат = Неопределено Тогда
        Сообщить("Строка с таким кодом не найдена");
    Иначе
        Сообщить("Найдена строка: " + Результат.Наименование);
    КонецЕсли;
КонецПроцедуры

Обратите внимание, что поиск происходит по уже загруженным в динамический список данным (ТекущиеДанные). Если данных много, и нужно искать по всей базе, лучше использовать запрос к базе.

Рекомендую посмотреть здесь: https://infostart.ru/public/1056842/ (статья про динамические списки и поиск).

Если нужно — могу помочь с примером поиска через запрос.

Оценка ответа: 9/10.



   
ОтветитьЦитата