Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.17;
Скачать: CL | DM;

Вниз

Как проставить №п/п?   Найти похожие ветки 

 
deras   (2008-07-14 19:36) [0]

Есть FB2.0
Таблица Т1 имеет поля ID, Date, Num. Заполнены только поля ID и Date. Есть около 3 тыс. записей.
Как проставить в поле Num номер п/п записей, отсортированых по дате?
Спасибо


 
Smile   (2008-07-14 19:48) [1]

Ну, на первый взгляд, в этом нет никакой необходимости. По-скольку это "поле" может понадобиться лишь при визуализации таблицы (каким-либо образом) или при формировании отчета.
Ну, а в этих случаях есть множество вариантов.
Уточните потребность в №п/п.


 
deras   (2008-07-14 19:54) [2]

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


 
Тын-Дын ©   (2008-07-14 19:57) [3]


> deras   (14.07.08 19:36)  


Пробежать в цикле по таблице, последовательно увеличивая и записывая число.


 
deras   (2008-07-14 20:12) [4]

я тож так хотел делать...  Но думал, есть менее ресурсоемкий вариант.. Но все равно спасибо!


 
Тын-Дын ©   (2008-07-14 20:37) [5]


> deras   (14.07.08 20:12) [4]
> я тож так хотел делать...  Но думал, есть менее ресурсоемкий
> вариант.. Но все равно спасибо!


Одноразовая задача. Зачем её оптимизировать?


 
Desdechado ©   (2008-07-14 20:43) [6]

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


 
Loginov Dmitry ©   (2008-07-14 22:35) [7]

> Как проставить в поле Num номер п/п записей, отсортированых
> по дате?


Используй конструкцию EXECUTE BLOCK. Имхо, самый простой способ. Пример:


execute block returns (ID integer,  "DATE" timestamp, Num integer)
as
begin
 :Num = 0;
 for select t.id, t.ADATE from MyTable t order by t.ADATE
 into :ID, :ADATE
 do
 begin
   :Num = :Num + 1;
   suspend;
 end
end


 
Johnmen ©   (2008-07-14 22:39) [8]

Удалено модератором
Примечание: Выражения выбираем, не в пивной


 
Sergey13 ©   (2008-07-15 09:39) [9]

> [0] deras   (14.07.08 19:36)
> отсортированых по дате

> [2] deras   (14.07.08 19:54)
> со ссылкой на первый отчет именно по полю №п/п

А почему бы не сделать ссылку на дату? №п/п получается лишним.


 
Johnmen ©   (2008-07-15 11:10) [10]

Самый простой, и самый верный, способ - это использовать стандартную функциональность генератора отчетов. И не маятся ...й.

> Примечание: Выражения выбираем, не в пивной

Так нормально?


 
Тын-Дын ©   (2008-07-15 11:17) [11]

Удалено модератором
Примечание: Верно подмечено


 
Тын-Дын ©   (2008-07-15 11:29) [12]

Удалено модератором
Примечание: Обсуждение модерирования


 
Johnmen ©   (2008-07-15 11:36) [13]

Удалено модератором


 
Тын-Дын ©   (2008-07-15 11:37) [14]

Удалено модератором


 
Johnmen ©   (2008-07-15 11:39) [15]

Удалено модератором


 
Тын-Дын ©   (2008-07-15 11:40) [16]

Удалено модератором


 
Тын-Дын ©   (2008-07-15 11:43) [17]


> Desdechado ©   (14.07.08 20:43) [6]
>
> Не нужно хранить то, что может быть сгенерировано налету.
>


Твердые копии должна при повторной распечатке должны быть идентичными. Гарантии при "формировании на лету" - никакой


 
Anatoly Podgoretsky ©   (2008-07-15 11:46) [18]

То есть есть данные в отчете будут совсем другие, тогда какая разница на лету номер генерируется или нет.


 
Тын-Дын ©   (2008-07-15 11:59) [19]


> Anatoly Podgoretsky ©   (15.07.08 11:46) [18]
>
> То есть есть данные в отчете будут совсем другие, тогда
> какая разница на лету номер генерируется или нет.


Номер отчета будет другой, если его на лету генерировать.
Потому и фиксируется в отдельном поле.
Единственное, что это должно быть предусмотрено до, а не после формирования строки все-таки.


 
Desdechado ©   (2008-07-15 12:04) [20]


> Твердые копии должна при повторной распечатке должны быть
> идентичными.

Такие отчеты сохраняются в сформированном виде в стеке распечатанных отчетов, чтобы их потом можно было повторно распечатать без мурыженья базы.


 
Desdechado ©   (2008-07-15 12:05) [21]


> Номер отчета будет другой, если его на лету генерировать.
> Потому и фиксируется в отдельном поле.

Не путай номер отчета с номером пункта в списке, содержащемся в отчете.


 
Smile   (2008-07-15 12:11) [22]


> Тын-Дын ©   (15.07.08 11:43) [17]
> Твердые копии должна при повторной распечатке должны быть
> идентичными. Гарантии при "формировании на лету" - никакой
/I>
Не считаю это верным подходом (здесь может "спасти" и ксерокс)
Поддерживаю
> Desdechado ©   (14.07.08 20:43) [6]
> Не нужно хранить то, что может быть сгенерировано налету.
>

Тем более, что это вполне согласуется с
> Smile   (14.07.08 19:48) [1]
> Ну, на первый взгляд, в этом нет никакой необходимости.


 
Anatoly Podgoretsky ©   (2008-07-15 12:57) [23]

> Тын-Дын  (15.07.2008 11:59:19)  [19]

Но речь то не про номер отчета, а про порядковый номер строчки в отчете. Номер отчета отдельная от отчета вещь, она конечно фиксируется отдельно от отчета, если конечно она есть.


 
MsGuns ©   (2008-07-15 16:13) [24]

В таблицах БД должны храниться реальные объекты с реальными же свойствами. Номер пп, очевидно, не является ни характеристикой объекта, ни тем более РЕАЛЬНОЙ характеристикой.
Он используется лишь для удобства работы с таблицами или отчетами (в конечном счете являющимися "твердой копией" таблиц) и формируется, как здесь было совершенно справедливо отмечено, "на лету", т.е. при формировании КОНКРЕТНОГО списка, отображаемого (печатаемого) в виде таблицы. Очевидно, что номер пп для каждой записи ОДНОГО И ТОГО ЖЕ списка может быть разным, например, при разных сортировках.

Для отображения номера пп в таблице (гриде) достаточно следующее:
В самую левую колонку грида положить поле датасета, не предназначенное для отображения - чаще всего для этого идеально подходит поле идентификатора, если же его нет, то в запрос надо добавить любое поле, например просто как константу (Select "1" as NPP, * FROM TABLE), которое и "уляжется" в самую первую колонку сетки.
В обработчике OnGetText этого поля написать
 Text := IntToStr(RecNo);
После этого как бы не был пересортирован на клиента датасет, в самой левой колонке сетки будет "правильная" нумерация строк-записей. (Исключение составляет эффект "дырок", появляющийся в следствие фильтрации - в этом случае следует вместо фильтра самого датасета использовать дополнительные условия выборки в запросе) - т.е. "фильтацию" заменить новой выборкой

Для того, чтобы поместить номер в отчет можно просто положить это поле как колонку отчета либо воспользоваться для нумерации записей средствами самого же компонента репорта


 
Sergey13 ©   (2008-07-15 16:21) [25]

> [24] MsGuns ©   (15.07.08 16:13)
> Номер пп, очевидно, не является ни характеристикой объекта,
> ни тем более РЕАЛЬНОЙ характеристикой.

Номер позиции в накладной.

ЗЫ: это не наезд (в остальном я с тобой полностью согласен), просто бывают разные случаи. ИМХО.


 
Anatoly Podgoretsky ©   (2008-07-15 16:36) [26]

> Sergey13  (15.07.2008 16:21:25)  [25]

Накладные формируются по строгому закону и повторямость 100 процентная, кроме случая повреждения данных.


 
MsGuns ©   (2008-07-15 16:50) [27]

> [24] MsGuns ©   (15.07.08 16:13)
>Номер позиции в накладной.

И нафиг не нужен. Если накладная отпускная, то она формируется на ПК и только после этого печатается КАК ЕСТЬ. Как правило, сортированная по наименованию товара (товарной группы). И в дальнейшем порядок НЕ МЕНЯЕТСЯ.

Если накладная приходная, то таки да, введенные записи располагаются не в том порядке, как в бумаге. Но это не является нарушением ! Ни один налоговик не придерется к такой чепухе. Главному же вообще по барабану.

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


 
Тын-Дын ©   (2008-07-15 17:36) [28]

Почему-то все решили, что это накладная, а № - номер строки в ней.
В топике было про связку по номеру. Т.е. это именно порядковый номер отчета.


 
Anatoly Podgoretsky ©   (2008-07-15 19:30) [29]

Ни о каком номере отчета не идет речь, а именно о номерах записей

> Num номер п/п записей,


 
Тын-Дын ©   (2008-07-15 19:32) [30]


> Anatoly Podgoretsky ©   (15.07.08 19:30) [29]



> deras   (14.07.08 19:54) [2]
>а остальные отчеты
> будут детализировать первый (со ссылкой на первый отчет именно по полю №п/п)


 
MsGuns ©   (2008-07-15 20:03) [31]

>Тын-Дын ©   (15.07.08 17:36) [28]
>Почему-то все решили, что это накладная, а № - номер строки в ней.
>В топике было про связку по номеру. Т.е. это именно порядковый номер >отчета.

Из фразы топика
Как проставить в поле Num номер п/п записей, отсортированых по дате?

рождается "именно порядковый номер отчета" ?



Страницы: 1 вся ветка

Текущий архив: 2008.08.17;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.018 c
15-1214850954
blazerad
2008-06-30 22:35
2008.08.17
Индексация базы


2-1215703846
buzb
2008-07-10 19:30
2008.08.17
Как узнать текущую папку проэкта?


2-1215801511
Чайник
2008-07-11 22:38
2008.08.17
Редактирование записи в базе


2-1215754141
Новичек
2008-07-11 09:29
2008.08.17
Посылка сообщения внутри DLL.


15-1214737779
Галинка
2008-06-29 15:09
2008.08.17
Reactable - будущее электронной музыки