Вернулся к разработке...
Значительно изменил архитектуру проекта. Убрал динамические пользовательские модули. Теперь система больше похоже на Django по своей идеологии.
Сделал ORM - гибрид DAL из Web2py и Django ORM. Форма "элемента справочника" открывается и сохраняется.
Здесь репозиторий.
Тестировал на линукс, но по идее на Винде должно пойти без приключений (если кто хочет посмотреть).
Теперь хочу сделать форму списка справочника (в терминологии 1С). Пожалуйста, посоветуйте как это сделать лучше. Знаю, что народ уже делал что-то подобное.
А если кто-нибудь еще и подскажет как это сделать в помощью Qt - вообще будет замечательно. Я уже
пытался на этй тему проконсультироваться - пока еще еще не сделал выводов.
Итак, если некий view (
QTableView в моем случае), в котором я хочу отображать записи одной из таблиц. На будущее хочу в ней отбражать результаты любого запроса (фильтр WHERE + сортировка ORDER BY, etc.)
Самое простое - сделать запрос к базе даных и весь результат сразу на форму. Я же хочу запрашивать у БД только сколько нужно для отображения. А по мере прокрутки - делать дополнительные запросы. Вопрос, собственно, состоит в том, как эффективно организовать подгрузку.
Допустим, если речь идет обо всем справочнике, то COUNT(*) довольно быстрая (для некоторых БД) операция - поэтому можно корректно установить размер и положение ползунка scrollbar. Если же количество записей в результате неизвестно - как сделать ползунок? Кстати, в 1С 7.7 (не работал с 8) ползунок всегда маленький, т.е. по егу размеру нельзя судить насколько большая часть записей сейчас отображена, и солько записей есть сверху и снизу.
Далее, как подгружать результаты - по паре строк или всегда как-то минимальный набор (например, 255 строк)?
LIMIT для прокрутки всех записей таблицы не буду - хочу ориентироваться по PRIMARY KEY. Т.е., если пользователь прокрутил вниз на 10 строк, сделаю SELECT * FROM catalog WHERE row_id > last_row_id LIMIT 10, где row_id и last_row_id - первичный ключ справочника и ключ последней отображаемой записи на форме. По идее, должно быть очень быстро.
Какие еще нюансы надо учитывать в этом деле?