powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли быстрее чем COUNT FOR ?
14 сообщений из 14, страница 1 из 1
Можно ли быстрее чем COUNT FOR ?
    #35364418
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю отображение таблицы ДБФ в таблицу на форме (форма сама в 1С)
Страничный обмен.
Таблица упорядочена по индексу (например DocNo - номер документа)
Сами страницы из таблицы считываются практически мгновенно (по индексу)
Но такой код
Код: plaintext
1.
SET ORDER TO
COUNT  FOR  DocNo< 'тут Значение индекса для текущей записи' TO RowCount
Съедает 99% процентов времени.
RowCount нужен для определения положения ползунка в вертикальной прокрутке таблицы на форме.
Грубо говоря это номер записи если бы таблица физически была упорядочена по индексу.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35364447
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Отказаться от прокрутки
2. Считать относительное смещение
3. создать курсор c нужной сортировкой (select ... order by ...) и использовать recno()
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35364476
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Отказаться от прокрутки
- к сожалению не очень неудобно пользователям
2. Считать относительное смещение
- сейчас так и делаю, но так как номера документов меняются - накапливаются ошибки смещения
3. создать курсор c нужной сортировкой (select ... order by ...) и использовать recno()
- для страничного обмена не годится, так как вместо 11 записей считывает всю таблицу,
на порядки медленнней
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35364494
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так попробуй, хотя не намного быстрее будет.
Код: plaintext
select count(*) as nRowCount  where  DocNo< 'тут Значение индекса для текущей записи'

kiruha2. Считать относительное смещение
- сейчас так и делаю, но так как номера документов меняются - накапливаются ошибки смещения
Считай иногда абсолютное для уточнения, например раз минуту или на каждое 10-е изменение
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35364782
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да спасибо - но сильно не спасает...
Странно - сама 1С умеет как то мгновенно определять положение ползунка -
наверно в CDX информация о количестве записей каким то образом содержится -
и вероятно это параметр "Количество существующих ключей" в записи вершины индексного файла(?)
Структура индексного файла (.IDX)

Может есть способы извлечь эту информацию?
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35364859
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiruhaМожет есть способы извлечь эту информацию?
Открывай IDX как файл, читай и парси. Оно тебе надо для позиционирования бегунка?
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35365017
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T kiruhaМожет есть способы извлечь эту информацию?
Открывай IDX как файл, читай и парси. Оно тебе надо для позиционирования бегунка?

Это идея :)
Попробую - надеюсь команды работы с файлами выполняются достаточно быстро

"Оно тебе надо для позиционирования бегунка?"- класс универсальный, заменяет родные формы списков 1С, должен работать не хуже.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35365952
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kiruha Dima T kiruhaМожет есть способы извлечь эту информацию?
Открывай IDX как файл, читай и парси. Оно тебе надо для позиционирования бегунка?

Это идея :)
Попробую - надеюсь команды работы с файлами выполняются достаточно быстро

"Оно тебе надо для позиционирования бегунка?"- класс универсальный, заменяет родные формы списков 1С, должен работать не хуже.
Все проще делается. OffSet выборки у вас есть. Бегунок позиционируется OffSet + смещение на странице. Быстрее не бывает.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35365975
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что есть offset ?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35367139
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov Rinat
Что есть offset ?

OffSet есть количество документов перед первым отображаемым. Обмен-то постраничный. Более того, исходя из размеров страницы (limit), можно перерассчитывать этот offset в момент навигации.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35367478
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kruchinin Pahan Galyamov Rinat
Что есть offset ?

OffSet есть количество документов перед первым отображаемым. Обмен-то постраничный. Более того, исходя из размеров страницы (limit), можно перерассчитывать этот offset в момент навигации.

Приблизительно я так и считаю (более точно : размер запрашиваемой страницы определяется
элементом управления отображающим таблицу и зависит от действий пользователя - но не суть)
Так как работа в реальном времени накапливаются ошибки смещения.
...
Просмотрел CDX в низкоуровневом доступе. Действительно параметр "Число существующих ключей "
содержит количество записей, но, к сожалению, только для листов. Для узлов не явлющихся
листами указывается количество подчиненных узлов.

В листе 10-50 записей. Т.е. теоретически можно ускорить ~30 раз но не больше.
В моем случае это ~10000 узлов и 300 000 записей. Т.е. для подсчета кол. записей
все равно придется в среднем прочитать 5000 узлов что на порядки больше чем просто дать необходимые записи (обычно 10-50).

Видимо придется работать с приблизительным количеством.
Всем спасибо.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35368532
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>kiruha
>Делаю отображение таблицы ДБФ...
Если 1С 7.7, то посмотри вариант 1Сpp + Табличное_Поле.
Документация здесь .

С уважением, Владимир.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35369330
kiruha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВМоисеев>kiruha
>Делаю отображение таблицы ДБФ...
Если 1С 7.7, то посмотри вариант 1Сpp + Табличное_Поле.
Документация здесь .

С уважением, Владимир.

Да, спасибо - как раз для адаптации данного элементу управления к чтению ДБФ файлов при помощи vfpoledb возник этот вопрос.
...
Рейтинг: 0 / 0
Можно ли быстрее чем COUNT FOR ?
    #35369605
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>kiruha
>Да, спасибо ...
В своих работах использовую страницы >= 250 строк (больше 10 "экранов"). Для перехода к новой странице использую дополнительные графические элементы (и PgUp/PgDn). Просмотр страницы в гриде "зацикливаю". Возможно и этот вариант Вас устроит?

С уважением, Владимир.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли быстрее чем COUNT FOR ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]