КоллекцияИндексовXBase.Индекс

Методы · IndexOf

Получает индекс индекса в коллекции индексов XBase.

Синтаксис

Индекс(<ИндексXBase>)
Полное описание, параметры и ограничения

КоллекцияИндексовXBase.Индекс (XBaseIndexesCollection.IndexOf)

КоллекцияИндексовXBase (XBaseIndexesCollection)

Индекс (IndexOf)

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

Синтаксис:
Индекс(<ИндексXBase>)
Параметры:

<ИндексXBase> (обязательный)
Тип: ИндексXBase.
Искомый индекс XBase.
Возвращаемое значение:
Тип: Число.
Индекс указанного элемента в коллекции. Если не найдено, то возвращается -1.
Описание:

Получает индекс индекса в коллекции индексов XBase.

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

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

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

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

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

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

Проверить имя, выражение и позицию индекса

Коллекция индексов после создания CDX содержит описания, а не найденные записи. Проверяем свойства единственного BYCODE и отсутствие неизвестного имени.

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

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

Подготовка

  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) Тогда
        ВызватьИсключение "Не создан собственный индекс";
    КонецЕсли;
    Сообщить(База.Индексы.Количество() = 1);
    ОписаниеИндекса = База.Индексы.Найти("BYCODE");
    Если ОписаниеИндекса = Неопределено Тогда
        ВызватьИсключение "Не найден BYCODE";
    КонецЕсли;
    Сообщить(ОписаниеИндекса.Имя = "BYCODE");
    Сообщить(ОписаниеИндекса.Выражение = "TRIM(CODE)");
    Сообщить(Не ОписаниеИндекса.Уникальность);
    Сообщить(Не ОписаниеИндекса.Убыв);
    Сообщить(ОписаниеИндекса.Фильтр = ".T.");
    Сообщить(База.Индексы.Индекс(ОписаниеИндекса) = 0);
    Сообщить(База.Индексы.Получить(0).Имя = "BYCODE");
    Сообщить(База.Индексы.Найти("MISSING") = Неопределено);
Исключение
    Если База.Открыта() Тогда
        База.ЗакрытьФайл();
    КонецЕсли;
    Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
        СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
        Если СобственныйФайл.Существует() Тогда
            УдалитьФайлы(ИмяСобственногоФайла);
        КонецЕсли;
    КонецЦикла;
    ВызватьИсключение;
КонецПопытки;
Если База.Открыта() Тогда
    База.ЗакрытьФайл();
КонецЕсли;
Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
    СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
    Если СобственныйФайл.Существует() Тогда
        УдалитьФайлы(ИмяСобственногоФайла);
    КонецЕсли;
КонецЦикла;

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

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

  2. До создания/открытия индексного файла коллекция может иметь нулевое количество: сначала создаём CDX.

  3. ОписаниеИндекса не является товаром; Выражение описывает вычисление ключа.

  4. Индекс и Получить используют позицию от нуля. Неизвестное имя проверяем, не обращаясь к его свойствам.

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

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

  1. Девять сообщений Истина.

  2. Неуникальный индекс BYCODE возрастающий, включает все записи по .T.

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

Проверен контракт собственного индекса без изменения его свойств.

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

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

  2. Количество индексов и количество товаров не совпадают по смыслу.

  3. Не присваивайте свойства описания ИндексXBase; нужное описание задаётся через Добавить.

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

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

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

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

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