XBase.Ключ

Свойства · Key

Тип: КлючXBase. Предоставляет доступ к объекту КлючXBase. Состав свойств объекта повторяет набор свойств полей объекта XBase. Значения свойств используются для вычисления выражения индекса при использовании метода НайтиПоКлючу.

Полное описание, параметры и ограничения

XBase.Ключ (XBase.Key)

XBase (XBase)

Ключ (Key)

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

Использование:
Только чтение.
Описание:
Тип: КлючXBase.
Предоставляет доступ к объекту КлючXBase. Состав свойств объекта повторяет набор свойств полей объекта XBase. Значения свойств используются для вычисления выражения индекса при использовании метода НайтиПоКлючу.
Доступность:

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

См. также:
XBase, метод НайтиПоКлючу

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

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

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

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

Найти строку по составному ключу CODE и QTY

Не воспроизводим строковое представление числа вручную в 1С: заполняем поля объекта Ключ, а выражение CODE + STR(QTY, 9, 0) вычисляет XBase.

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

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

Подготовка

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

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

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

  2. Создаём составной индекс из строкового CODE и числового QTY.

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

  4. НайтиПоКлючу самостоятельно вычисляет выражение индекса; пара A-01 / 99 отсутствует.

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

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

  1. Три сравнения Истина; найдена только A-01 / 3.

  2. Задание База.Ключ.QTY = 99 не меняет количество в записи DBF.

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

Составной поиск выполнен без ручного расчёта числового строкового ключа.

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

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

  2. Ключ и текущие значения полей — разные объекты.

  3. STR здесь часть строки выражения XBase, а не Строка или Формат встроенного языка 1С.

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

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

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

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

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