Получает физический порядковый номер текущей записи в таблице базы данных, начиная с единицы. Результат не зависит от установки текущего индекса.
Синтаксис
НомерЗаписи()Примеры платформы
Если xB.ЗаписьУдалена() Тогда
Сообщить("Удаленная запись: " + xB.НомерЗаписи());
КонецЕсли;Полное описание, параметры и ограничения
XBase.НомерЗаписи (XBase.RecNo)
XBase (XBase)
НомерЗаписи (RecNo)
Доступен, начиная с версии 8.0.
Синтаксис:
НомерЗаписи()
Возвращаемое значение:
Тип: Число.
Номер текущей записи.
Описание:
Получает физический порядковый номер текущей записи в таблице базы данных, начиная с единицы. Результат не зависит от установки текущего индекса.
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.
Пример:
Если xB.ЗаписьУдалена() Тогда
Сообщить("Удаленная запись: " + xB.НомерЗаписи());
КонецЕсли;
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Сжать только новый учебный DBF и увидеть перенумерацию
Этот урок намеренно физически удаляет помеченную книгу из собственного временного файла. Обратного восстановления после Сжать нет.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Запускайте только в учебной базе на сервере. XBase работает с DBF, а не с таблицами вашей информационной базы; доступ к временному каталогу сервера должен быть разрешён.
Код сам создаёт уникальный новый каталог. В нём только собственные goods.dbf и goods.cdx: имена файлов соответствуют ограничению 8.3, имена полей и индексов латинские, не длиннее 10 символов.
Не подставляйте путь к существующему DBF. В каждой задаче новый набор: A-01 / Книга / 3 / 250 и B-02 / Ручка / 1 / 50. Сумма количества на цену равна 800.
Файлы закрываются перед удалением двух точных собственных путей. Пустой уникальный каталог остаётся; его путь выводится, чтобы при необходимости удалить именно его вручную.
УчебныйКаталог = ПолучитьИмяВременногоФайла();
ПроверкаКаталога = Новый Файл(УчебныйКаталог);
Если ПроверкаКаталога.Существует() Тогда
ВызватьИсключение "Учебный путь уже существует; существующие файлы не используем";
КонецЕсли;
СоздатьКаталог(УчебныйКаталог);
Сообщить("Собственный временный каталог: " + УчебныйКаталог);
Имя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 = Истина;
База.Записать();
Если Не База.Перейти(1) Тогда
ВызватьИсключение "Не найдена собственная книга";
КонецЕсли;
База.Удалить();
База.Записать();
Сообщить(База.КоличествоЗаписей() = 2);
База.Сжать();
Сообщить(База.КоличествоЗаписей() = 1);
Если Не База.Первая() Тогда
ВызватьИсключение "Не найдена оставшаяся ручка";
КонецЕсли;
Сообщить(СокрЛП(База.CODE) = "B-02");
Сообщить(База.НомерЗаписи() = 1);
Сообщить(Не База.ЗаписьУдалена());
Исключение
Если База.Открыта() Тогда
База.ЗакрытьФайл();
КонецЕсли;
Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
Если СобственныйФайл.Существует() Тогда
УдалитьФайлы(ИмяСобственногоФайла);
КонецЕсли;
КонецЦикла;
ВызватьИсключение;
КонецПопытки;
Если База.Открыта() Тогда
База.ЗакрытьФайл();
КонецЕсли;
Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
Если СобственныйФайл.Существует() Тогда
УдалитьФайлы(ИмяСобственногоФайла);
КонецЕсли;
КонецЦикла;Разбор по шагам
Создаём собственную структуру DBF и записываем два товара с явным Записать.
До сжатия помеченная книга входит в физические две записи.
Сжать убирает её физически; этот шаг нельзя отменить Восстановить.
Ручка остаётся одна и получает физический номер 1 вместо прежнего 2.
Закрываем DBF и удаляем только два собственных файла; информационная база не изменяется.
Как проверить результат
Пять сообщений Истина.
После сжатия остаётся B-02, количество записей 1, запись не помечена.
Ожидаемый результат
На собственной копии показаны необратимость сжатия и нестабильность физических номеров.
На что обратить внимание
Не запускайте операции изменения, Сжать или ОчиститьФайл на чужом либо рабочем DBF.
Для настоящего обмена сначала резервная копия и проверка правил обработки удалённых строк.
Не используйте Сжать как средство исправления неизвестного повреждения DBF.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Пройти записи назад и отличить номер строки от индекса поля
Без текущего индекса записи идут в физическом порядке. Перейти принимает номер от единицы, а не код товара или индекс поля.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Запускайте только в учебной базе на сервере. XBase работает с DBF, а не с таблицами вашей информационной базы; доступ к временному каталогу сервера должен быть разрешён.
Код сам создаёт уникальный новый каталог. В нём только собственные goods.dbf и goods.cdx: имена файлов соответствуют ограничению 8.3, имена полей и индексов латинские, не длиннее 10 символов.
Не подставляйте путь к существующему DBF. В каждой задаче новый набор: A-01 / Книга / 3 / 250 и B-02 / Ручка / 1 / 50. Сумма количества на цену равна 800.
Файлы закрываются перед удалением двух точных собственных путей. Пустой уникальный каталог остаётся; его путь выводится, чтобы при необходимости удалить именно его вручную.
УчебныйКаталог = ПолучитьИмяВременногоФайла();
ПроверкаКаталога = Новый Файл(УчебныйКаталог);
Если ПроверкаКаталога.Существует() Тогда
ВызватьИсключение "Учебный путь уже существует; существующие файлы не используем";
КонецЕсли;
СоздатьКаталог(УчебныйКаталог);
Сообщить("Собственный временный каталог: " + УчебныйКаталог);
Имя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 = Истина;
База.Записать();
Если Не База.Последняя() Тогда
ВызватьИсключение "Собственный DBF пуст";
КонецЕсли;
Сообщить(СокрЛП(База.CODE) = "B-02");
Сообщить(База.НомерЗаписи() = 2);
Если Не База.Предыдущая() Тогда
ВызватьИсключение "Не найдена предыдущая учебная запись";
КонецЕсли;
Сообщить(СокрЛП(База.CODE) = "A-01");
Сообщить(База.НомерЗаписи() = 1);
База.Предыдущая();
Сообщить(База.ВНачале());
Если Не База.Перейти(2) Тогда
ВызватьИсключение "Не найдена физическая запись 2";
КонецЕсли;
Сообщить(СокрЛП(База.CODE) = "B-02");
Исключение
Если База.Открыта() Тогда
База.ЗакрытьФайл();
КонецЕсли;
Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
Если СобственныйФайл.Существует() Тогда
УдалитьФайлы(ИмяСобственногоФайла);
КонецЕсли;
КонецЦикла;
ВызватьИсключение;
КонецПопытки;
Если База.Открыта() Тогда
База.ЗакрытьФайл();
КонецЕсли;
Для Каждого ИмяСобственногоФайла Из СтрРазделить(ИмяDBF + "|" + ИмяCDX, "|") Цикл
СобственныйФайл = Новый Файл(ИмяСобственногоФайла);
Если СобственныйФайл.Существует() Тогда
УдалитьФайлы(ИмяСобственногоФайла);
КонецЕсли;
КонецЦикла;Разбор по шагам
Создаём собственную структуру DBF и записываем два товара с явным Записать.
Последняя выбирает B-02, физический номер 2.
Предыдущая выбирает A-01, затем следующий переход назад достигает начала.
После достижения начала восстанавливаем позицию через Перейти(2); поля читаем только при успехе.
Закрываем DBF и удаляем только два собственных файла; информационная база не изменяется.
Как проверить результат
Шесть логических сообщений Истина.
У PRICE индекс поля 3, у B-02 физический номер записи 2: это разные нумерации.
Ожидаемый результат
Курсор безопасно возвращён к собственной второй записи.
На что обратить внимание
Не запускайте операции изменения, Сжать или ОчиститьФайл на чужом либо рабочем DBF.
При текущем индексе Последняя/Предыдущая идут по ключу, но НомерЗаписи остаётся физическим.
После Сжать физические номера могут измениться; не используйте их как постоянные идентификаторы товара.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.