Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.048 c
15-1214850088
hmel
2008-06-30 22:21
2008.08.17
Глубокоувожаемые мастера помогите! Делаю программу,где нужно использовать круговые регуляторы...


2-1216197740
Костик
2008-07-16 12:42
2008.08.17
Как потушить монитор?


15-1214825497
йцукен
2008-06-30 15:31
2008.08.17
Вопрос по SQL


10-1148780842
y307
2006-05-28 05:47
2008.08.17
Вызов GetActiveOleObject или CreateOleObject


15-1213957352
AlexDan
2008-06-20 14:22
2008.08.17
Полетел принтер..





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский