Нумерация полей в таблицах

5 сообщений / 0 новых
Последнее сообщение
ккквд
Аватар пользователя ккквд
Offline
Зарегистрирован: 16/06/2014
Нумерация полей в таблицах

Добрый день!

Помогите, пожалуйста, с таким вопросом:

Возникла необходимость нумеровать строки в объекте "таблица". Никак не могу найти каким способом это сделать. В стандартных журналах нигде не нашел примера использования нумерации. 

Через выражения в свойствах столбца никак не получается (у меня) обратиться к свойствам объекта, стандартных функций медворка нужных я не нашел. Вполне возможно, что делаю что-то не так.

Конечно, есть очевидный рабочий способ пронумеровать строки в SQL-запросе (как источнике данных) и соотнести сответсвующие поля таблицы и результата запроса, но тогда при использовании внутренних фильтров таблицы будет сбиваться нумерация. Потому такой способ не подходит.

Опять же, вижу рабочий вариант не использовать стандартные возможность фильтрации, а фильтровать все через SQL-запросы, которые конечный пользователь будет вызывать нажатием соответствующих кнопок на форме, но тогда увеличится нагрузка на sql-сервер и время отклика, т.к. каждый раз все будет обрабатываться на сервере, что не очень практично. Да и лишнее захламление интерфейса ни к чему.

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

Королев Валентин
Аватар пользователя Королев Валентин
Offline
Зарегистрирован: 13/06/2012
Добрый день! 
Если Вас интересует последовательная нумерация списка(1,2,3...) тогда в запросе  в качестве нумерации, рекомендуем использовать функцию rownumber() и после внесении изменений таблицы журнала (Grid), необходимо обновлять его источник данных (ActiveForm.Grid.ReloadData).
Если же исключительная нумерация значений (1,2,5,10) тогда рекомендуется создать поле [Nomer] для таблицы журнала.
ккквд
Аватар пользователя ккквд
Offline
Зарегистрирован: 16/06/2014

При обновлении источника данных мы можем без проблем сделать нумерацию строк сразу в sql-Запросе (как раз через row_number()), т.е. получить таблицу вида:

№ карты Врач
1 1234 Иванов
2 1233 Петров
3 3214 Иванов
4 5123 Иванов

после этого нам нужно отфильтровать (стандартным фильтром) все записи с врачом Иванов. Получаем:

№ карты Врач
1 1234 Иванов
3 3214 Иванов
4 5123 Иванов
 

Т.е. номера у строк остаются старые (1, 3, 4), т.к. фактически это просто поле с цифровым значением из источника данных. Таже ситуация будет и при различных сортировках.

Соответственно вопрос: Возможна ли корректная нумерация ПОСЛЕ использования фильтра? Т.е. возможно есть какое-то свойство у объекта grid которое возвращает текущий номер строки?

Мансветов Евгений
Аватар пользователя Мансветов Евгений
Offline
Зарегистрирован: 11/03/2012
На событие грида "Отображение ячейки" можно установить следующий обработчик
 
sub GridOnDrawCell
     on error resume next
     with ExecutionParams.Cell
          if .Row>=0 then
               if .Сol=1 then .text=cstr(.Row+1)
          end if
     end with
end sub
 
где .col=1 это первый номер столбца
 
это пример только для ОТОБРАЖЕНИЯ нужной вам нумерации в таблице
ккквд
Аватар пользователя ккквд
Offline
Зарегистрирован: 16/06/2014

Спасибо, почти то, что нужно.

НО! :)

Это будет работать только для данных, которые отображаются непосредственно на экране. Если данные не умещаются на один экран, то про пролистывании вниз/вверх нумероваться (начиная с еденицы опять) всегда будут только строки отображаемые на экране. Т.е. номер каждой конкретной строки будет скакать при скроллинге.

Если я правильно понимаю, ExecutionParams.Cell - это отображаемая непосредственно на экране в данный момент сетка, соответственно с ее помощью нельзя узнать абсолютное значение номера строки в гриде, только лишь относительное.

Для комментирования войдите или зарегистрируйтесь
Заказать звонок
Ваше имя
Номер телефона
?
Обратная связь
+
Форма обратной связи
Тематика обращения
Адрес*
Название конфигурации
ФИО
Номер телефона
Адрес эл. почты
Способ получения ответа
Название организации
Адрес организации
Инструкция по отправке заявки на получение лицензионного ключа MedWork