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/ |