XBase.Найти

Методы · Find

Осуществляет поиск записи, соответствующей указанному значению ключа по текущему индексу и режиму поиска, переданному в качестве параметра. Указатель устанавливается на найденную запись.

Синтаксис

Найти(<Ключ>, <Режим>)

Примеры платформы

xB.ТекущийИндекс = xB.Индексы.IDXCODE;
ЗаписьНайдена = xB.Найти("00001", ">=");
Полное описание, параметры и ограничения

XBase.Найти (XBase.Find)

XBase (XBase)

Найти (Find)

Доступен, начиная с версии 8.0.

Синтаксис:
Найти(<Ключ>, <Режим>)
Параметры:

<Ключ> (обязательный)
Тип: Строка.
Значение выражения текущего индекса.

<Режим> (обязательный)
Тип: Строка.
Режим поиска записей:
"=" - ищет запись на точное соответствие ключу;

">=" - ищет запись на точное соответствие с ключом или большую;

">" - ищет запись с большим ключом;

"<=" - ищет запись на точное соответствие с ключом или меньшую;

"<" - ищет запись с меньшим ключом.

Возвращаемое значение:
Тип: Булево.
Истина - запись найдена; Ложь в противном случае.
Описание:

Осуществляет поиск записи, соответствующей указанному значению ключа по текущему индексу и режиму поиска, переданному в качестве параметра. Указатель устанавливается на найденную запись.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Примечание:
Следует отметить, что вычисление значения индекса при работе XBase-объекта с таблицей базы данных производится объектом самостоятельно на основании выражения, переданного ему при создании ключа. При вызове данного метода значение Ключ должно быть вычислено средствами встроенного языка, что может представлять определенные трудности, если индекс составной, поля, включенные в выражение индекса, отличны от строковых и т.д. Поэтому применимость данного метода ограничена случаем использования простых строковых выражений индекса. В более сложных случаях следует применять универсальный метод НайтиПоКлючу.
Пример:

// Поиск записи по значению ключа

xB.ТекущийИндекс = xB.Индексы.IDXCODE; // индекс CODE

ЗаписьНайдена = xB.Найти("00001", ">=");

См. также:
XBase, свойство ТекущийИндекс

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Добавить индекс к своему DBF и найти товар по коду

Строка TRIM(CODE) — выражение языка XBase, не вызов функции 1С. Индекс создаётся отдельным собственным CDX после записи товаров.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Запускайте только в учебной базе на сервере. XBase работает с DBF, а не с таблицами вашей информационной базы; доступ к временному каталогу сервера должен быть разрешён.

  2. Код сам создаёт уникальный новый каталог. В нём только собственные goods.dbf и goods.cdx: имена файлов соответствуют ограничению 8.3, имена полей и индексов латинские, не длиннее 10 символов.

  3. Не подставляйте путь к существующему DBF. В каждой задаче новый набор: A-01 / Книга / 3 / 250 и B-02 / Ручка / 1 / 50. Сумма количества на цену равна 800.

  4. Файлы закрываются перед удалением двух точных собственных путей. Пустой уникальный каталог остаётся; его путь выводится, чтобы при необходимости удалить именно его вручную.

УчебныйКаталог = ПолучитьИмяВременногоФайла();
ПроверкаКаталога = Новый Файл(УчебныйКаталог);
Если ПроверкаКаталога.Существует() Тогда
    ВызватьИсключение "Учебный путь уже существует; существующие файлы не используем";
КонецЕсли;
СоздатьКаталог(УчебныйКаталог);
Сообщить("Собственный временный каталог: " + УчебныйКаталог);
ИмяDBF = УчебныйКаталог + "/goods.dbf";
ИмяCDX = УчебныйКаталог + "/goods.cdx";
База = Новый XBase;
Попытка
    База.Кодировка = КодировкаXBase.ANSI;
    База.АвтоСохранение = Ложь;
    База.Поля.Добавить("CODE", "S", 10);
    База.Поля.Добавить("TITLE", "S", 40);
    База.Поля.Добавить("QTY", "N", 9, 0);
    База.Поля.Добавить("PRICE", "N", 12, 2);
    База.Поля.Добавить("ONDATE", "D");
    База.Поля.Добавить("ACTIVE", "L");
    База.СоздатьФайл(ИмяDBF);
    Если Не База.Открыта() Тогда
        ВызватьИсключение "Собственный DBF не открыт";
    КонецЕсли;
    База.Добавить();
    База.CODE = "A-01";
    База.TITLE = "Книга";
    База.QTY = 3;
    База.PRICE = 250;
    База.ONDATE = Дата(2026, 10, 3);
    База.ACTIVE = Истина;
    База.Записать();
    База.Добавить();
    База.CODE = "B-02";
    База.TITLE = "Ручка";
    База.QTY = 1;
    База.PRICE = 50;
    База.ONDATE = Дата(2026, 10, 3);
    База.ACTIVE = Истина;
    База.Записать();
    База.Индексы.Добавить("BYCODE", "TRIM(CODE)", Ложь, Ложь, ".T.");
    Если Не База.СоздатьИндексныйФайл(ИмяCDX) Тогда
        ВызватьИсключение "Не создан собственный CDX; код: " + Строка(База.КодОшибки());
    КонецЕсли;
    База.Переиндексировать();
    ИндексПоКоду = База.Индексы.Найти("BYCODE");
    Если ИндексПоКоду = Неопределено Тогда
        ВызватьИсключение "Не найден собственный индекс BYCODE";
    КонецЕсли;
    База.ТекущийИндекс = ИндексПоКоду;
    Если Не База.Найти("B-02", "=") Тогда
        ВызватьИсключение "Не найдена собственная ручка";
    КонецЕсли;
    Сообщить(СокрЛП(База.CODE) = "B-02");
    Сообщить(База.PRICE = 50);
    Сообщить(Не База.Найти("Z-99", "="));
Исключение
    Если База.Открыта() Тогда
        База.ЗакрытьФайл();
    КонецЕсли;
    Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
        СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
        Если СобственныйФайл.Существует() Тогда
            УдалитьФайлы(ИмяСобственногоФайла);
        КонецЕсли;
    КонецЦикла;
    ВызватьИсключение;
КонецПопытки;
Если База.Открыта() Тогда
    База.ЗакрытьФайл();
КонецЕсли;
Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
    СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
    Если СобственныйФайл.Существует() Тогда
        УдалитьФайлы(ИмяСобственногоФайла);
    КонецЕсли;
КонецЦикла;

Разбор по шагам

  1. Создаём собственную структуру DBF и записываем два товара с явным Записать.

  2. Добавить создаёт описание индекса, СоздатьИндексныйФайл создаёт CDX; результат последнего проверяем.

  3. Переиндексировать пересчитывает ключи собственного файла. Обычно обновление при записи выполняется автоматически; здесь пересчёт учебный.

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

  5. Закрываем DBF и удаляем только два собственных файла; информационная база не изменяется.

Как проверить результат

  1. Три сравнения Истина: найдена ручка с ценой 50, отсутствующий Z-99 не найден.

  2. Создан только goods.cdx в собственном новом каталоге.

Ожидаемый результат

Построен строковый индекс и безопасно проверены найденный и отсутствующий код.

На что обратить внимание

  1. Не запускайте операции изменения, Сжать или ОчиститьФайл на чужом либо рабочем DBF.

  2. Уникальность индекса не заменяет все проверки уникальности бизнес-данных.

  3. КодОшибки показан только при отказе последней операции; не считаем любой код заранее успешным.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.