Перейти к содержанию

Отчеты в Delphi


asbir

Рекомендуемые сообщения

Доброго времени суток!

Возникла проблема с формированием отчета.

Есть база данных с номерами бланков... номера в формате хх(серия) хххххх(номер)

например:

АБ 000100

..

АБ 000200

их этого диапазона израсходованы

АБ 000105

АБ 000107

АБ 000110-АБ 000130

испорчено

АБ 000150

АБ 000170

в отчете мне нужно вывести информацию

израсходовано

АБ 000105,000105,000110-000130

испорчено

АБ 000150,000170

остаток

АБ 000100-000104,000106,000108-000109,000131-000149, 000151-000169,000171-000200

Как это реализовать?

голову уже сломал...

В таблице при списании проставляется признак того что с произошло с бланком (испорчен, израсходован и т.п.)...

Очень надеюсь на помощь...

Ссылка на комментарий
Поделиться на другие сайты

quick and dirty solution

 

Преобразуй 000131,000149 и т.п. в числа, отсортируй по возрастанию (000131, 000132 и т.д.)

 

Возможно, что строки 000131 и тп в числа преобразовывать не надо - смотри сам по ситуации, как они у тебя по смыслу идут. На первый взгляд, сортировка таких строк кажется, даст нормальный результат и без преобразований.

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

В итоге получим как раз нужные диапазоны. Далее берем первый и последний элемент каждого диапазона, выводим и пишем что с ним произошло (признак)

Ссылка на комментарий
Поделиться на другие сайты

худо-бедно с диапазонами номеров разобрался...

возникла следующая проблема...

отчет формируется за предыдущий месяц... НЕ все полученые бланки могут быть израсходованы... следовательно поле "Дата списания" для некоторых будет пустое... если в запрос включить date is not null, то теряется вся нумерация, потому что списание может производится не по порядку...

Ссылка на комментарий
Поделиться на другие сайты

Так в чем проблема? Загружаете к себе в массив/список/куда-то еще все бланки за прошлый месяц, отсортированные как вам надо, после чего программно бежим по массиву и выдергиваем как я писал выше. Дата списания null - это тоже признак.

Ссылка на комментарий
Поделиться на другие сайты

Загружаете к себе в массив/список/куда-то еще все бланки за прошлый месяц

а SELECT'ом побаловаться нельзя???

экономия памяти + быстродействие будет повыше

имхо SQL вешь полезная...

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.

×
×
  • Создать...