asbir Опубликовано 7 февраля, 2007 Жалоба Share Опубликовано 7 февраля, 2007 Доброго времени суток! Возникла проблема с формированием отчета. Есть база данных с номерами бланков... номера в формате хх(серия) хххххх(номер) например: АБ 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 Как это реализовать? голову уже сломал... В таблице при списании проставляется признак того что с произошло с бланком (испорчен, израсходован и т.п.)... Очень надеюсь на помощь... Ссылка на комментарий Поделиться на другие сайты More sharing options...
AL-GALI Опубликовано 7 февраля, 2007 Жалоба Share Опубликовано 7 февраля, 2007 quick and dirty solution Преобразуй 000131,000149 и т.п. в числа, отсортируй по возрастанию (000131, 000132 и т.д.) Возможно, что строки 000131 и тп в числа преобразовывать не надо - смотри сам по ситуации, как они у тебя по смыслу идут. На первый взгляд, сортировка таких строк кажется, даст нормальный результат и без преобразований. Далее определяем диапазоны - смотрим, меняется ли признак следующего бланка по сравнению с текущим. Как только признак меняется - текущий бланк становится концом диапазона. Если признак не меняется - текущий бланк добавляем в диапазон и переходим на следующий (следующий становится текущим)ю В итоге получим как раз нужные диапазоны. Далее берем первый и последний элемент каждого диапазона, выводим и пишем что с ним произошло (признак) Ссылка на комментарий Поделиться на другие сайты More sharing options...
asbir Опубликовано 7 февраля, 2007 Автор Жалоба Share Опубликовано 7 февраля, 2007 худо-бедно с диапазонами номеров разобрался... возникла следующая проблема... отчет формируется за предыдущий месяц... НЕ все полученые бланки могут быть израсходованы... следовательно поле "Дата списания" для некоторых будет пустое... если в запрос включить date is not null, то теряется вся нумерация, потому что списание может производится не по порядку... Ссылка на комментарий Поделиться на другие сайты More sharing options...
AL-GALI Опубликовано 7 февраля, 2007 Жалоба Share Опубликовано 7 февраля, 2007 Так в чем проблема? Загружаете к себе в массив/список/куда-то еще все бланки за прошлый месяц, отсортированные как вам надо, после чего программно бежим по массиву и выдергиваем как я писал выше. Дата списания null - это тоже признак. Ссылка на комментарий Поделиться на другие сайты More sharing options...
HeToC Опубликовано 8 февраля, 2007 Жалоба Share Опубликовано 8 февраля, 2007 Загружаете к себе в массив/список/куда-то еще все бланки за прошлый месяц а SELECT'ом побаловаться нельзя??? экономия памяти + быстродействие будет повыше имхо SQL вешь полезная... Ссылка на комментарий Поделиться на другие сайты More sharing options...
AL-GALI Опубликовано 8 февраля, 2007 Жалоба Share Опубликовано 8 февраля, 2007 HeToC Да сколько угодно. Важен результат. Я не в курсе, что там за база данных, а предложенный вариант подойдет в любом случае. Ссылка на комментарий Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.