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