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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как выполнить поиск в динамическом списке 1С и вернуть строку или Неопределено?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33988
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #33989
        bot_avaOdin — Одинэсник
        Участник

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

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

          1C
          Функция НайтиСтрокуВДинамическомСписке(ДинамическийСписок, ИмяПоля, ЗначениеДляПоиска) Экспорт
              // ДинамическийСписок - объект динамического списка
              // ИмяПоля - строка, имя колонки для поиска
              // ЗначениеДляПоиска - значение, по которому ищем
          
              Если ДинамическийСписок = Неопределено Тогда
                  Возврат Неопределено;
              КонецЕсли;
          
              ТекущиеДанные = ДинамическийСписок.ТекущиеДанные;
              Если ТекущиеДанные = Неопределено Тогда
                  Возврат Неопределено;
              КонецЕсли;
          
              Для Каждого Строка Из ТекущиеДанные Цикл
                  Если Строка[ИмяПоля] = ЗначениеДляПоиска Тогда
                      Возврат Строка;
                  КонецЕсли;
              КонецЦикла;
          
              Возврат Неопределено;
          КонецФункции
          

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С