Текущее время: Пн, май 05 2025, 10: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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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