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

Часовой пояс: 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 часа


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

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


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

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