Posted: Sat Jan 21, 2012 1:16 pm Post subject: Диапазон номеров
Здравствуйте, уважаемые эксперты. С прошедшими праздниками!
Сам вопрос. - Есть диапазон номеров 00001-20000. В этом диапазоне большинство номеров занято значениями. Например номера с 00010 по 00100, или с 10000 по 15000 заняты значениями, а остальные свободны.
И номеров с 16000 по 20000 нет в системе.
Как сделать выборку свободных номеров из этого диапазона (00001-20000)?
Age: 37 Joined: 18 Jan 2008 Posts: 71 Location: Tashkent-Astana-Moscow
Posted: Wed Jan 25, 2012 1:39 pm Post subject: Re: Диапазон номеров
peleken wrote:
Здравствуйте, уважаемые эксперты. С прошедшими праздниками!
Сам вопрос. - Есть диапазон номеров 00001-20000. В этом диапазоне большинство номеров занято значениями. Например номера с 00010 по 00100, или с 10000 по 15000 заняты значениями, а остальные свободны.
И номеров с 16000 по 20000 нет в системе.
Как сделать выборку свободных номеров из этого диапазона (00001-20000)?
советую разобраться с чем связано такое поведение ибо это не есть гут или более подробно расписать, может будут более дельные советы.
на вскидку :
1) через изменение статуса диапазона , но крайне не советую. диапазоны штука тонкая особенно в продуктиве .
2) badi badi_number_get_next (если у вас какая то своя логика нумерации, то эту логику можете тут реализовать) _________________ Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)
советую разобраться с чем связано такое поведение ибо это не есть гут или более подробно расписать, может будут более дельные советы.
Согласен.
Если подробнее, то так.
Есть таблица. В этой таблице есть диапазон номеров с 00001 по 16000 (тип данных CHAR(5), ключевое поле). Некоторые диапазоны номеров имееют данные, например: ключевое слово, описание, кол-во, номер материала, производитель и тд.Это диапазоны, например с 00010 по 00020, с 00023 по 00025, с 00030 по 00100 и тд, до 16000.
Номера, например с 00001 по 00009 и т.д. то же заняты данными, но эти номера не используются, так как имеют определенные метки (ключевое слово), например DELETE, но планируются в дальнейшем для использования под другие данные. Диапазона с 16001 по 20000 вообще еще нет в таблице.
Необходимо вычислить все свободные номера с 00001 по 20000.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Jan 26, 2012 11:09 am Post subject:
Это неправильное использование диапазона номеров.
Создайте для каждого объекта свой объект нумерации, как это реализовано в стандартной функциональности SAP. И проблема отпадет сама собой.
--
ЗЫ: а простой перебор религия не позволяет использовать? _________________ С уважением,
Удав.
Это неправильное использование диапазона номеров.
Создайте для каждого объекта свой объект нумерации, как это реализовано в стандартной функциональности SAP. И проблема отпадет сама собой.
--
ЗЫ: а простой перебор религия не позволяет использовать?
Сделаю я, наверное все через SELECT-OPTIONS, а там посмотрим.
Age: 34 Joined: 12 Dec 2011 Posts: 47 Location: Рязань
Posted: Mon Jan 30, 2012 1:44 am Post subject:
peleken wrote:
Удав wrote:
Это неправильное использование диапазона номеров.
Создайте для каждого объекта свой объект нумерации, как это реализовано в стандартной функциональности SAP. И проблема отпадет сама собой.
--
ЗЫ: а простой перебор религия не позволяет использовать?
Сделаю я, наверное все через SELECT-OPTIONS, а там посмотрим.
Спасибо, вопрос закрыт!
Если речь идет о домене...то это кривое использование.
но если уж прет делать так
Code:
REPORT z_so.
*TABLES gtable. " Это твоя таблица словаря
TYPES: BEGIN OF tab_t, " вместо этого создаешь таблицу типа своей таблицы
id(4), " DATA lt_tab TYPE TABLE OF gtable.
key(10), " только потом проверяй в условии (*) по своим полям
END OF tab_t.
DATA lt_tab TYPE SORTED TABLE OF tab_t with unique default key.
DATA: BEGIN OF wa_so, "структура таблицы СО
sign(1),
option(2),
low(10),
high(10),
END OF wa_so,
interval TYPE int4. " индикатор интервала или постоянного значения
FIELD-SYMBOLS: <ls_tab> TYPE tab_t.
*создаем СО
data lv_so(4) TYPE c,
lv_idx1 type i,
lv_idx2 type i.
SELECT-OPTIONS so_1 FOR lv_so no-display.
" коп. во внутр. табл. свою таблицу словаря
SELECT * FROM gtable INTO CORRESPONDING FIELDS OF TABLE lt_tab.
DO 2000 TIMES. " 2000 твой интервал (в данном случае сделал цикл так)
wa_so-high = sy-index.
LOOP AT lt_tab ASSIGNING <ls_tab>.
" условие (*)
IF <ls_tab>-id <> wa_so-high OR <ls_tab>-key = 'DELETE'."Или еще любые условия на неиспользуемость значения в таблице
IF wa_so-low IS INITIAL. " если еще не присвоил нижний интервал
wa_so-low = wa_so-high.
lv_idx1 = sy-index.
ENDIF.
ELSEIF wa_so-low IS NOT INITIAL. " если значение не подходит по условие (*) и есть хотя бы одно значение
lv_idx2 = sy-index.
wa_so-high = wa_so-high - 1.
interval = wa_so-high - wa_so-low.
IF interval = 0. " если всего одно пихаем в постоянные
wa_so-sign = 'I'.
wa_so-option = 'EQ'.
delete lt_tab index lv_idx1.
ELSE.
wa_so-sign = 'I'. " иначе в диапазон
wa_so-option = 'BT'.
delete lt_tab FROM lv_idx1 TO lv_idx2.
ENDIF.
APPEND wa_so TO so_1. "добавляем в СО
CLEAR wa_so.
ENDIF.
ENDLOOP.
ENDDO.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.