SAPфорум.RU
https://sapboard.ru/forum/

ФМ для получения значения признака классификации поставщика
https://sapboard.ru/forum/viewtopic.php?f=13&t=99316
Страница 1 из 2

Автор:  riki11 [ Пт, янв 29 2021, 15:57 ]
Заголовок сообщения:  ФМ для получения значения признака классификации поставщика  Тема решена

Добрый день.

Для начала опишу нашу задачу, может, кто-то предложит вариант попроще.

Перед нами стоит задача - вытащить в SQ-отчет поле, введенное в XK02. Поля, которое хотят, разумеется, нет в карточке контрагента, в нашей задаче это поле номера контрагента из немецкой системы.

Так вот, добавить поле я не могу, поскольку не знаю, как это сделать в стандарте XK02.
Мы добавили в классификацию новый класс и к нему признак, в котором и будут прописываться вручную нужные номера контрагентов.

Каким стандартным ФМ-ом это можно сделать? Или, может, можно код какой написать?

Автор:  LKU [ Сб, янв 30 2021, 10:50 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

1. Использование классификации ведет к проблемам с производительностью и куче лишнего кода для её чтения.
Поэтому лучше подберите какое-нибудь стандартное поле для этой цели (можно его даже переименовать в CMOD)
Скажем LFA1-EMNFR или на худой конец заведите отдельный тип налогового номера.

2. Если уж уперлись в классификацию, то, то запустив транзакцию BAPI, вы можете найти стандартный ФМ BAPI_OBJCL_GETDETAIL_KEY.
Про его тормознутость я уже предупредил в п.1

Автор:  riki11 [ Пн, фев 01 2021, 10:22 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

Подскажите, пожалуйста, а возможно ли соединить таблицы AUSP-OBJEK и LFA1-LIFNR?

Я нашел, где хранится введенный признак, было проще всего вытащить из этой таблицы его в SQ-отчет.

Автор:  LKU [ Пн, фев 01 2021, 10:30 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

Я уже не помню, что пишется в AUSP-OBJEK для кредиторов. Но обычно соединить таблицы конечно можно, но не через прямой join, а при помощи кодировки в query с select single к каждой строчке.

Автор:  riki11 [ Пн, фев 01 2021, 12:13 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

Если не сложно, пришлите пожалуйста примерчик любой кодировки (может под рукой светится у кого-то), где соединяют 2 таблицы?

Автор:  riki11 [ Пн, фев 01 2021, 13:49 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

Набросал вот такой код, но он почему то ругается и пишет, подскажите где ошибка?
"Здесь ожидается 'FROM'."

Code:
DATA:
OBJEK LIKE AUSP-OBJEK,
LIFNR LIKE LFA1-LIFNR.
   clear: LV_OBJEK.
SELECT SINGLE AUSP~OBJEK LFA1~LIFNR INTO TABLE LV_OBJEK
  FROM LFA1 AS LIFNR
  LEFT JOIN AUSP AS OBJEK
    ON AUSP~OBJEK = LFA1~LIFNR
WHERE LIFNR~LFA1 IN LV_OBJEK.
ENDSELECT.

Автор:  LKU [ Пн, фев 01 2021, 14:33 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

1. Секция INTO должна идти после FROM.
2. Раз вы считываете одну строку (select single), то и целевая переменная должна быть структурой, а не таблицей и вместо into table должно быть просто into
3. Если пишите select single, то end select вообще не нужен.

Автор:  riki11 [ Пн, фев 01 2021, 15:14 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

Ну вроде поправил, LKU подскажите пожалуйста, а как прописать целевую переменную структурой?

Code:
DATA:
OBJEK LIKE AUSP-OBJEK,
LIFNR LIKE LFA1-LIFNR.
   clear: LV_OBJEK.
SELECT SINGLE AUSP~OBJEK LFA1~LIFNR
  FROM LFA1 AS LIFNR
    LEFT JOIN AUSP AS OBJEK
      ON AUSP~OBJEK = LFA1~LIFNR
  INTO LV_OBJEK
WHERE LIFNR~LFA1 IN LV_OBJEK.

Автор:  LKU [ Пн, фев 01 2021, 15:56 ]
Заголовок сообщения:  Re: ФМ чтобы вытащить признак присвоенного к классу в SQ отчет

Ну вы все-таки F1 начинайте смотреть по ключевому слову SELECT.

У вас объявлена не структура, а две отдельные переменные.
Заполнить их можно примерно так:

Code:
DATA:
OBJEK LIKE AUSP-OBJEK,
LIFNR LIKE LFA1-LIFNR.
   clear: LV_OBJEK.
SELECT SINGLE AUSP~OBJEK LFA1~LIFNR
  FROM LFA1 AS LIFNR
    LEFT JOIN AUSP AS OBJEK
      ON AUSP~OBJEK = LFA1~LIFNR
[b] INTO (LV_OBJEK, LIFNR)[/b]
WHERE LIFNR~LFA1 IN LV_OBJEK

Автор:  riki11 [ Вт, фев 02 2021, 11:59 ]
Заголовок сообщения:  Re: ФМ для получения значения признака классификации поставщика

Все поправил, немного код неправильно построил изначально, получилось вот так вот

Code:
DATA:
OBJEK LIKE AUSP-OBJEK,
ATWRT LIKE AUSP-ATWRT,
LIFNR LIKE LFA1-LIFNR.
   clear: LV_OBJEK.
SELECT SINGLE AUSP~OBJEK AUSP~ATWRT LFA1~LIFNR
  INTO (LV_OBJEK, LIFNR,ATWRT)
  FROM LFA1 AS LIFNR
    LEFT JOIN AUSP AS OBJEK
      ON AUSP~OBJEK = LFA1~LIFNR
WHERE AUSP~ATWRT IN LV_OBJEK.


Теперь ошибок по коду нет, но выходит вот такое вот сообщение, с чем он связано, никто не знает?

Цитата:
Couldn't find Error Message: R SELECT 682 because the system is running with the database objects from release 750. The system has not completely upgraded to

Автор:  riki11 [ Ср, фев 03 2021, 07:09 ]
Заголовок сообщения:  Re: ФМ для получения значения признака классификации поставщика

Проверил в тесте, там уже другая ошибка связанная с полем AUSP
Цитата:
"AUSP" is unknown in the current FROM clause (obscured by an alias name or unknown in this position).

Code:
DATA:
OBJEK LIKE AUSP-OBJEK,
ATWRT LIKE AUSP-ATWRT,
LIFNR LIKE LFA1-LIFNR.
   clear: LV_OBJEK.
SELECT SINGLE AUSP~OBJEK AUSP~ATWRT LFA1~LIFNR
  INTO (LV_OBJEK, LIFNR,ATWRT)
  FROM LFA1 AS LIFNR
    LEFT JOIN AUSP AS OBJEK
      ON AUSP~OBJEK = LFA1~LIFNR
WHERE AUSP~ATWRT IN LV_OBJEK.


Нашел на форуме иностранном, вот такую информацию по этому полю
Цитата:
Это никогда не сработает в запросе. причина в том, что это поле OBJEK не имеет того же формата / длины (впереди два символа), что и LIFNR. Назначение таблицы AUSP в EXTRAS, как я уже писал, - не имеет смысла, так как вы можете иметь 1-n AUSP-записей для одного OBJEK. Если вы этого хотите, у вас должно быть «настоящее соединение», а для этого требуется абзац.


Кто-то может подсказать, как решить эту проблему? Что нужно чудесное сделать в коде чтобы все таки соединить их?

Автор:  DED_MOROZ [ Чт, фев 04 2021, 10:26 ]
Заголовок сообщения:  Re: ФМ для получения значения признака классификации поставщика

Для начала - изучить синтаксис ABAP.

Автор:  riki11 [ Пт, фев 05 2021, 13:52 ]
Заголовок сообщения:  Re: ФМ для получения значения признака классификации поставщика

Изучил, пришлось глубже понять, спасибо всем за помощь.

В итоге пришлось создать ФМ, код выглядит таким образом сейчас.

Code:
DATA: lt_s_lfa1 LIKE LFA1.
DATA: lt_s_AUSP LIKE AUSP.
DATA: ls_lifnr LIKE LFA1-LIFNR.
DATA: ls_objek LIKE AUSP-OBJEK.

CALL FUNCTION 'ZZMD_VENDORS'
  EXPORTING
    LIFNR                 = LFA1-LIFNR
  IMPORTING
   LS_OBJEK              = LT_s_AUSP-OBJEK.
SELECT SINGLE ATWRT
  INTO LV_ATWRT
  FROM AUSP
    WHERE objek EQ LT_s_AUSP-OBJEK.

Автор:  riki11 [ Пт, фев 05 2021, 16:08 ]
Заголовок сообщения:  Re: ФМ для получения значения признака классификации поставщика

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

Code:
DATA: lt_s_lfa1 LIKE LFA1.
DATA: lt_s_AUSP LIKE AUSP.
DATA: ls_lifnr LIKE LFA1-LIFNR.
DATA: ls_objek LIKE AUSP-OBJEK.
CALL FUNCTION 'ZZMD_VENDORS'
  EXPORTING
    LIFNR                = LFA1-LIFNR
  IMPORTING
   LS_OBJEK              = LT_s_AUSP-OBJEK.
  CLEAR: LV_ATWRT.
SELECT SINGLE ATWRT
  INTO LV_ATWRT
  FROM AUSP
      WHERE objek EQ LT_s_AUSP-OBJEK.

Автор:  Удав [ Сб, фев 06 2021, 10:48 ]
Заголовок сообщения:  Re: ФМ для получения значения признака классификации поставщика

Посмотрите в отладке, чему равны LFA1-LIFNR и LT_s_AUSP-OBJEK для каждой записи в цикле.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/