Текущее время: Вт, июл 22 2025, 14:11

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Завод => материалы
СообщениеДобавлено: Пн, мар 31 2008, 15:54 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
Добрый день.
Стоит задача выгрузки справочника по материалам завода, а я что-то тубплю и не могу найти как связан завод с материалами.
Не могу найти связь м/у записями таблиц.
Не подскажете, если кто знает, в какой таблице прописаны эти связи?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Завод => материалы
СообщениеДобавлено: Пн, мар 31 2008, 15:59 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Tony-m написал(а):
Добрый день.
Стоит задача выгрузки справочника по материалам завода, а я что-то тубплю и не могу найти как связан завод с материалами.
Не могу найти связь м/у записями таблиц.
Не подскажете, если кто знает, в какой таблице прописаны эти связи?
MARC?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Завод => материалы
СообщениеДобавлено: Пн, мар 31 2008, 19:27 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Alex80 написал:
MARC?
Не, не так. Надо - MARC! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 09:56 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
Спасибо за ответы. То что надо!!!

У меня возник ещё вопрос.
Вот мне требуется у каждого материала указать его класс.
В качестве значений сказано выводить значения RMCLF-CLASS и RMCLF-KLTXT

RMCLF - структура. уже давно сижу и никак не пойму откуда взять данные. Вернее какие поля из каких таблиц используются? (сори если вопрос выразил непонятно)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 10:34 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Tony-m написал(а):
Спасибо за ответы. То что надо!!!

У меня возник ещё вопрос.
Вот мне требуется у каждого материала указать его класс.
В качестве значений сказано выводить значения RMCLF-CLASS и RMCLF-KLTXT

RMCLF - структура. уже давно сижу и никак не пойму откуда взять данные. Вернее какие поля из каких таблиц используются? (сори если вопрос выразил непонятно)

RMCLF-CLASS = KLAH-CLASS
KLAH-CLINT = KSSK-CLINT
KSSK-OBJEK = MARA-MATNR


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 01 2008, 10:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, авг 28 2006, 11:24
Сообщения: 292
Пол: Мужской
Как вариант:
ФМ CLFM_GET_STANDARD_CLASS

OBJECT = MARA-matnr
TABLE = 'MARA'

Вернет наименование, вид, номер класса.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 07 2008, 14:22 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
Хочу проконсультиоваться. может кто встречался с задачей, когда надо под завод вывести все материалы. Вот ниже привожу свою реализацию. Хотел бы узнать, так ли надо делать или нет. Просто возникла двойственная ситуация:

1) Никто не может сказать какие таблицы и как они связаны, чтоб можно было 100% утверждать о том что алгоритм верен. Насколько я понимаю информация о том какому заводу принадлежит материал хранится в таблице MARC. С ней и работаю.

2) Мой алгоритм извлекает для тестового завода 2500 штук материалов. Тестеры говорят что там их 600 гдето, но доказать не могут этого. Но опять же, по причине неопределённости того с какими таблицами нужно работать, нельзя говорить, что чтото работает не так....

поэтому привожу кусок программы, чтобы проконсультироваться, в том ли я направлении рою. Если что не так, критикуйте. Заранее спасибо.

PS: прошу прощения за сумбур в изложении мыслей. Понедельник, понимаети ли :wink:

Code:
DATA: BEGIN OF table_material_t.
        DATA: WERKS like caufvd-werks,
              MAKTX LIKE MAKT-MAKTX, " название материала
              MATNR LIKE MARA-MATNR, " код материала
              ARTXT LIKE TCLAT-ARTXT,
              CLASS LIKE RMCLF-CLASS.
              "CLINT LIKE KSSK-CLINT.
DATA: END OF table_material_t.

DATA table_material LIKE table_material_t OCCURS 0 WITH HEADER LINE.
data: it_MARC LIKE MARC OCCURS 1 WITH HEADER LINE.

types:
  BEGIN OF it_material_class_t,
    ARTXT like TCLAT-ARTXT,
    CLASS LIKE RMCLF-CLASS,
    OBJEK LIKE KSSK-OBJEK,
  end of it_material_class_t.

  types: it_cache_material_class_t type hashed table of
  it_material_class_t with unique key OBJEK.
  data:  it_cache_material_class type it_cache_material_class_t with
  header line.


DATA BEGIN OF it_tcla_t.
  DATA: ARTXT LIKE TCLAT-ARTXT,
        KLART LIKE TCLA-KLART.
DATA END   OF it_tcla_t.
DATA it_tcla like it_tcla_t OCCURS 0 WITH HEADER LINE.

select TCLAT~ARTXT TCLAT~KLART
  from TCLAT
  JOIN TCLA ON TCLAT~KLART = TCLA~KLART
  INTO CORRESPONDING FIELDS OF TABLE it_tcla
  Where TCLA~OBTAB = 'MARA'
    and TCLAT~SPRAS = sy-LANGU.



select TCLAT~ARTXT KLAH~CLASS KSSK~OBJEK
  from TCLAT
  JOIN TCLA ON TCLAT~KLART  = TCLA~KLART
  JOIN KLAH  ON TCLA~KLART = KLAH~KLART
  JOIN KSSK  ON KLAH~CLINT = KSSK~CLINT
  INTO CORRESPONDING FIELDS OF TABLE it_cache_material_class
  where TCLA~OBTAB = 'MARA'
    and TCLAT~SPRAS = sy-LANGU.

data zavod_name like t001w-name1.

  select *  from t001w up to 1 rows where WERKS in so_iwerm.
      "PERFORM fill_parameter TABLES pt_params USING 'ZAVOD' t001w-name1.
      move t001w-name1 to zavod_name.
      WRITE / zavod_name.

  ENDSELECT.




select MARC~WERKS MARC~MATNR MAKT~MAKTX INTO CORRESPONDING FIELDS OF TABLE table_material
   from MARC
    JOIN MAKT on MARC~MATNR = MAKT~MATNR
   where MARC~WERKS in so_iwerm.



data idx type i.
loop at table_material." FROM 1 to 20.
idx = sy-tabix.
read table it_cache_material_class with table key OBJEK = table_material-MATNR.
    if sy-subrc eq 0.
      MOVE  it_cache_material_class-ARTXT  to table_material-ARTXT.
      MOVE  it_cache_material_class-CLASS to table_material-CLASS.
    else.
      MOVE  'Класс не назначен' to table_material-ARTXT.
      MOVE  '' to table_material-CLASS.
    endif.


modify table_material index idx.
  "write: / table_material-WERKS, table_material-MATNR, table_material-MAKTX, table_material-ARTXT, table_material-CLASS.
endloop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 07 2008, 14:43 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Code:
JOIN MAKT on MARC~MATNR = MAKT~MATNR

Может быть есть ещё тексты на разных языках к одному материалу?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 07 2008, 14:56 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
Alex80 написал:
Code:
JOIN MAKT on MARC~MATNR = MAKT~MATNR

Может быть есть ещё тексты на разных языках к одному материалу?


Очень ценное замечание. Спасибо. Учёл.
Хотя сути не поменяло, т к там просто друхих данных не было
)))

А в плане использования таблиц (те или не те) есть соображения?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 07 2008, 19:17 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
MARC / MAKT - таблицы правильные, правда лучше добавить MAKT-SPRAS, как правильно заметил(а) Alex80. Отмечу такие моменты:
1) выбираются данные не для одного завода, а для всех заводов в so_iwerm - думаю вы в курсе, но так, на всякий случай;
2) некоторые материалы могут быть помечены к удалению (MARC-LVORM = 'X')и, возможно, их надо исключить.

Насчет количества записей - так просто проверьте в SE16 (MARC) по номеру завода.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, апр 13 2008, 17:40 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, июн 16 2005, 10:29
Сообщения: 336
Откуда: Минск->Москва
Пол: Мужской
Я бы пошел от таблицы MARC с выборкой только по нужным заводам (по условию с экрана выбора), проверив на метку удаления. Достал названия и классы с наименованиями. Так выборки будут поменьше.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 14 2008, 09:09 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2008, 13:41
Сообщения: 22
Откуда: Moscow
Я сделал вот так.
Код привожу ниже. может кому-нибудь понадобится.
Вроде работает :wink:
Code:
DATA: BEGIN OF table_material_t.
        DATA: WERKS like caufvd-werks,
              MAKTX LIKE MAKT-MAKTX, " название материала
              MATNR LIKE MARA-MATNR, " код материала
              KSCHL LIKE SWOR-KSCHL,
              CLASS LIKE RMCLF-CLASS.
              "CLINT LIKE KSSK-CLINT.
DATA: END OF table_material_t.

DATA table_material LIKE table_material_t OCCURS 0 WITH HEADER LINE.

types:
  BEGIN OF it_material_class_tt,
    KSCHL like SWOR-KSCHL,
    CLASS LIKE RMCLF-CLASS,
    OBJEK LIKE KSSK-OBJEK,
    clint like SWOR-CLINT,
  end of it_material_class_tt.

  types: it_cache_material_class_tt type hashed table of
  it_material_class_tt with unique key OBJEK.
  data:  it_cache_material_class_c type it_cache_material_class_tt with
  header line.


Code:
SELECT klah~class klah~clint Inob~OBJEK swor~KSCHL FROM inob
INNER JOIN kssk ON kssk~objek = inob~cuobj
INNER JOIN klah ON klah~clint = kssk~clint
INNER JOIN swor on swor~clint = klah~clint
  INTO CORRESPONDING FIELDS OF table it_cache_material_class_c
WHERE inob~klart = 'Z02'
AND inob~obtab = 'MARA'
AND kssk~klart = 'Z02'
AND kssk~mafid = 'O'.



Code:
select MARC~WERKS MARC~MATNR MAKT~MAKTX  INTO CORRESPONDING FIELDS OF TABLE table_material
   from MARC
    JOIN MAKT on MARC~MATNR = MAKT~MATNR
   where MARC~WERKS in so_iwerm
        and MAKT~SPRAS = sy-LANGU
     order by MARC~WERKS ASCENDING.



* определяем класс для материала
SELECT klah~class klah~clint Inob~OBJEK swor~KSCHL FROM inob
INNER JOIN kssk ON kssk~objek = inob~cuobj
INNER JOIN klah ON klah~clint = kssk~clint
INNER JOIN swor on swor~clint = klah~clint
  INTO CORRESPONDING FIELDS OF table it_cache_material_class_c
WHERE inob~klart = 'Z02'
"AND inob~objek = '1000020' "материал на входе
AND inob~obtab = 'MARA'
AND kssk~klart = 'Z02'
AND kssk~mafid = 'O'.







  CLEAR l_lines.
  DESCRIBE TABLE table_material LINES l_lines.
"WRITE: / 'lines', l_lines.
"exit.
IF l_lines = 0.
    MESSAGE s398(00) WITH 'Таблица ''Данные завода по материалу'' пуста.'.
    EXIT.
    ENDIF.


data: zclass like Klah-class,
      zclint like KLAH-CLINT.

data idx type i.
data  tmp_class like it_cache_material_class_c-CLASS.
loop at table_material ."FROM 1 to 50.
idx = sy-tabix.

read table it_cache_material_class_c with table key OBJEK = table_material-MATNR.
    if sy-subrc eq 0.
      CLEAR tmp_class.
      CONCATENATE '№' it_cache_material_class_c-CLASS INTO tmp_class.
      MOVE  it_cache_material_class_c-KSCHL  to table_material-KSCHL.
      MOVE  tmp_class to table_material-CLASS.
    else.
      MOVE  'Класс не назначен' to table_material-KSCHL.
      MOVE  '0' to table_material-CLASS.
    endif.
    CLEAR tmp_class.
modify table_material index idx.
  "write: / table_material-WERKS, table_material-MATNR, table_material-MAKTX, table_material-KSCHL, table_material-CLASS.
endloop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 14 2008, 19:03 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
А может лучше так?

Code:
IF table_material[] IS NOT INITIAL.

SELECT klah~class klah~clint Inob~OBJEK swor~KSCHL FROM inob
INNER JOIN kssk ON kssk~objek = inob~cuobj
INNER JOIN klah ON klah~clint = kssk~clint
INNER JOIN swor on swor~clint = klah~clint
  INTO CORRESPONDING FIELDS OF table it_cache_material_class_c
[b]  FOR ALL ENTRIES IN table_material[/b]
WHERE inob~klart = 'Z02'
[b]AND inob~objek = table_material-matnr [/b]AND inob~obtab = 'MARA'
AND kssk~klart = 'Z02'
AND kssk~mafid = 'O'.

ENDIF.


Или хотя бы сделайте таблицу с классификацией HASHED или используйте SORT / READ ... BINARY SEARCH. Еще в SE38 -> menu Environment -> Examples -> Performance Examples есть несколько примеров отпимизации. Иначе связка LOOP / READ будет тормозить IMHO.

Работать, конечно, и без этого будет, но почему бы не сделать сразу нормально? :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

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


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

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


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

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