Текущее время: Пн, май 05 2025, 13:06

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как в отчете найти и пометить двойные(не уник.) записи ?
СообщениеДобавлено: Ср, ноя 16 2005, 10:22 
Гость
Есть таблица BSAK.
В отчете необходимо двойным (не уникальным) записям по совокупности 3 полей - lifnr zuonr dmbtr проставить признак не уникальности.
Признак обязательно должен присваиваться переменной, так как этот отчет делается через SQ02.

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

DATA: it_bsak TYPE TABLE OF bsak WITH HEADER LINE.
DATA: dbl_paym(3) TYPE c.
DATA: old_lifnr LIKE bsak-lifnr, old_zuonr LIKE bsak-zuonr, old_dmbtr LIKE bsak-dmbtr.

CLEAR dbl_paym.

SELECT lifnr zuonr dmbtr
INTO CORRESPONDING FIELDS OF it_bsak
FROM bsak
WHERE lifnr IN z_lifnr AND blart <> 'UE'.

SORT it_bsak BY lifnr zuonr dmbtr.

LOOP AT it_bsak.
IF it_bsak-lifnr = old_lifnr and
it_bsak-zuonr = old_zuonr and
it_bsak-dmbtr = old_dmbtr.

dbl_paym = 'DBL'.

ENDIF.

old_lifnr = it_bsak-lifnr.
old_zuonr = it_bsak-zuonr.
old_dmbtr = it_bsak-dmbtr.

ENDLOOP.

Что не так в коде ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 10:37 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
не совсем понял - у вас один признак на всю таблицу, указывающий есть или нет неуникальные записи? Или все таки нужен признак на каждую запись?

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 10:41 
Гость
Признак нужен на каждую не уникальную запись.

Пример:
lifnr zuonr dmbtr dbl_paym
555 1-tr 50 DBL
555 2-64 40
555 1-tr 50 DBL
555 222 10


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: Как в отчете найти и пометить двойные(не уник.) записи ?
СообщениеДобавлено: Ср, ноя 16 2005, 10:43 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, авг 26 2004, 05:04
Сообщения: 922
Откуда: Челябинск
Пол: Мужской
TB написал(а):
Есть таблица BSAK.
В отчете необходимо двойным (не уникальным) записям по совокупности 3 полей - lifnr zuonr dmbtr проставить признак не уникальности.
Признак обязательно должен присваиваться переменной, так как этот отчет делается через SQ02.

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

DATA: it_bsak TYPE TABLE OF bsak WITH HEADER LINE.
DATA: dbl_paym(3) TYPE c.
DATA: old_lifnr LIKE bsak-lifnr, old_zuonr LIKE bsak-zuonr, old_dmbtr LIKE bsak-dmbtr.

CLEAR dbl_paym.

SELECT lifnr zuonr dmbtr
INTO CORRESPONDING FIELDS OF it_bsak
FROM bsak
WHERE lifnr IN z_lifnr AND blart <> 'UE'.

SORT it_bsak BY lifnr zuonr dmbtr.

LOOP AT it_bsak.
IF it_bsak-lifnr = old_lifnr and
it_bsak-zuonr = old_zuonr and
it_bsak-dmbtr = old_dmbtr.

dbl_paym = 'DBL'.

ENDIF.

old_lifnr = it_bsak-lifnr.
old_zuonr = it_bsak-zuonr.
old_dmbtr = it_bsak-dmbtr.

ENDLOOP.

Что не так в коде ?


ну присвоил ты какой-то абстрактной переменной dbl_paym = 'DBL'. и что дальше? Сколько записей во внутренней таблице? я тебе и так могу сказать что если там есть повторяющиеся то dbl_paym = 'DBL'.
Заведи поле во внутренней таблице и присваивай ему, а потом еще modify не забудь.

_________________
Все будет хорошо...
http://sap-blog.ru/


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 11:02 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
вот тебе пример как можно определить it_bsak:
Code:
DATA: BEGIN OF IT_BSAK OCCURS 100.
INCLUDE STRUCTURE BSAK.
DATA:   DBL_PAYM(3) TYPE C,
          END OF IT_BSAK.


дальше - как сказал artyom

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 11:07 
Гость
Я переопределила it_bsak . Но все-равно в отчете у всех строк, даже у уникальных заполняется признак не уникальности . Ниже привожу кусок кода. Что там не так ?

LOOP AT it_bsak
IF it_bsak= old_lifnr and
it_bsak= old_zuonr and
it_bsak= old_wrbtr.

it_bsak-dbl = 'D'.
modify it_bsak.

dbl_paym = it_bsak-dbl.

ENDIF.

old_lifnr = result-lifnr.
old_zuonr = result-zuonr.
old_wrbtr = result-wrbtr.

ENDLOOP.


Где еще ошибки ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 11:19 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
Code:
IF it_bsak= old_lifnr and
it_bsak= old_zuonr and
it_bsak= old_wrbtr.


названия полей бы к it_bsak добавить... а так вроде все верно

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:   Тема решена
СообщениеДобавлено: Ср, ноя 16 2005, 11:22 
Гость
Прошу прощения, при копировании случайно стерла. В реальном коде это все есть, но не работает, вернее работает неправильно.
Во всех всех всех строках ставится признак 'D', а должен ставиться только у "двойных". Может нужно где-нибудь очищать
it-bsak-dbl и dbL_paym ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 11:35 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, авг 26 2004, 05:04
Сообщения: 922
Откуда: Челябинск
Пол: Мужской
а зачем тебе двоиное присвоение сделай it_bsak-dbl = 'D'. и все, заголовок сам в лупе затираться будет - в таблице то это поле пустое.

_________________
Все будет хорошо...
http://sap-blog.ru/


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 11:46 
Гость
У меня инфосет и dbl_paym - это additional field , поэтому обязательно нужно присваивать dbl_paym, иначе в отчете ничего не будет.
А в каком месте сделать очистку переменнной ?
У меня получился вот такой код, но результат - в отчете dbl_paym пустая вообще.


data: BEGIN OF it_bsak occurs 0,
dbl(1) type C,
lifnr like bsak-lifnr,
zuonr like bsak-zuonr,
wrbtr like bsak-wrbtr,
END OF it_bsak.
data: old_lifnr like bsak-lifnr, old_zuonr like bsak-zuonr,
old_wrbtr like bsak-wrbtr.

CLEAR dbl_paym.

SELECT lifnr zuonr wrbtr
INTO corresponding fields of TABLE it_bsak
FROM bsak
WHERE lifnr IN z_lifnr
AND blart = 'KA'.

SORT it_bsak BY lifnr zuonr wrbtr.

LOOP AT it_bsak.

IF it_bsak-lifnr = old_lifnr and
it_bsak-zuonr = old_zuonr and
it_bsak-wrbtr = old_wrbtr.

it_bsak-dbl = 'D'.
modify it_bsak.

dbl_paym = it_bsak-dbl.

ENDIF.

clear dbl_paym.
old_lifnr = it_bsak-lifnr.
old_zuonr = it_bsak-zuonr.
old_wrbtr = it_bsak-wrbtr.

ENDLOOP.

Может лишнее CLEAR ? Подскажите, что можно еще сделать ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 12:05 
Специалист
Специалист

Зарегистрирован:
Пт, апр 08 2005, 10:27
Сообщения: 125
Пол: Мужской
а если будет так:
Code:
555 1-tr 50
555 1-tr 50
555 2-64 40
555 2-64 40
555 2-64 40
555 2-64 30
555 2-64 30
555 2-64 10

основная задача то какая, получить набор полей одного класса:
Code:
555 1-tr 50
555 2-64 40
555 2-64 30
555 2-64 10

или, только уникальных:
Code:
555 2-64 10

???


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 12:16 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
А объявление переменных
Code:
data: BEGIN OF it_bsak occurs 0,
  lifnr like bsak-lifnr,
  zuonr like bsak-zuonr,
  wrbtr like bsak-wrbtr,
  [color=blue]dbl(1) type C,[/color]
END OF it_bsak.
data: old_lifnr like bsak-lifnr,
        old_zuonr like bsak-zuonr,
        old_wrbtr like bsak-wrbtr.

делается в фрагменте кодировки "Обработка записей" или "DATA"?
Тут нужно использовать такой алгоритм:
В фрагменте "DATA" объявить
Code:
data: BEGIN OF it_bsak occurs 0,
  lifnr like bsak-lifnr,
  zuonr like bsak-zuonr,
  wrbtr like bsak-wrbtr,
        END OF it_bsak.

В фрагменте "Обработка записей" сделать следующий алгоритм.
Code:
READ table it_bsak with key lifnr   = bsak-lifnr
                                         zuonr = bsak-zuonr
                                         wrbtr = bsak-wrbtr
  BINARY SEARCH.

IF sy-subrc = 0. "Уже есть такая запись
  dbl_paym = 'D'.
ELSE. "Записи с таким ключом нет - очищаем DBL_PAYM
  CLEAR dbl_paym.
  move-corresponding bsak to it_bsak.
  APPEND it_bsak SORTED BY lifnr zuonr wrbtr.
ENDIF.

Единственное, что смущает - это использование поля wrbtr без поля waers...

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 12:44 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Может, как-нибудь так:
Code:
DATA:
  BEGIN OF gs_bsak,
    lifnr TYPE lifnr,
    zuonr TYPE dzuonr,
    wrbtr TYPE wrbtr,
    waers TYPE waers,
    dblfl TYPE xfeld,
  END OF gs_bsak,
  gs_old_bsak LIKE gs_bsak
.
DATA:
  gt_bsak LIKE STANDARD TABLE OF gs_bsak
.
SELECT lifnr zuonr wrbtr waers
  UP TO 1000 ROWS
  INTO CORRESPONDING FIELDS OF TABLE gt_bsak
  FROM bsak.
"where....
IF sy-subrc <> 0.
  RETURN.
ENDIF.

SORT gt_bsak BY lifnr zuonr wrbtr waers.
READ TABLE gt_bsak INTO gs_old_bsak INDEX 1.
LOOP AT gt_bsak INTO gs_bsak FROM 2.
  IF gs_bsak-dblfl IS INITIAL AND gs_bsak = gs_old_bsak.
    gs_bsak-dblfl = 'X'.
    MODIFY gt_bsak FROM gs_bsak TRANSPORTING dblfl
      WHERE lifnr = gs_bsak-lifnr AND
            zuonr = gs_bsak-zuonr AND
            wrbtr = gs_bsak-wrbtr AND
            waers = gs_bsak-waers.
  ENDIF.
  gs_old_bsak = gs_bsak.
ENDLOOP.

LOOP AT gt_bsak INTO gs_bsak.
  WRITE: / gs_bsak-lifnr,
           gs_bsak-zuonr,
           gs_bsak-wrbtr,
           gs_bsak-waers,
           gs_bsak-dblfl.
ENDLOOP.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 15:24 
Гость
Большое спасибо всем за ответы.
Эх! Если бы можно было сразу писать отчет на ABAP, а не через инфосет - проблем бы не было.

Предпоследний вариант заполняется также не корректно, а там select не нужен ?

В самом последнем варианте кода у меня корректно заполняется таблица gt_bsak с нужными признаками для не уникальных записей
.
НО ! Как в этом случае передать значение internal table gt_bsak-dblfl или work area gs_bsak-dblfl моей переменной dbl_paym, которая в рамках инфосета выступает как additional field ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 16 2005, 15:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Вообще, раз уж стоит задача все это делать в SAPQuery, причем написание программы выборки для SAPQuery тоже исключается, то может попробовать освоить статистические и ранговые списки?

_________________
С уважением, Сергей Королев


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB