Sapforum.Biz
Логистика => Техническое обслуживание и ремонт оборудования (PM) => Тема начата: A. от Октябрь 29, 2009, 03:53:07 pm
-
День добрый.
Имеются ли какие-нибудь ФМ или другие средства для замены материала в компонентах операций в инструкциях ТОРО (тр. IA06)? Трассировка не даёт пока что внятных ответов.
-
Ну похоже бачинпут надо рисовать ::)
-
Чего-то у меня плохие воспоминания о бач-инпутах для таких дел... Может, есть какие-нибудь идеи?.. По ST05 смотрю таблицы, проваливаюсь в абап-код, ставлю брек-поинты, запускаю процесс заново. Но там черт ногу сломит...
-
Ну в общем-то я посмотрел, бачинпут сделать в принципе процентов на 90 можно и работать будет. Единственное что похоже надо будет для позиции как на рисунке ниже, если даже надо будет менять один материал, придется делать выделение всего, затем удаление всего и после этого по новой ввод всех позиций, так как скорее всего с позиционировать на позицию которую надо заменить не выйдет. В остальном все вполне решаемо.
-
Не, нифига путного не выходит... Это интерфейс с табличками и поинтером на строку убивает любой бач...
-
Не, нифига путного не выходит... Это интерфейс с табличками и поинтером на строку убивает любой бач...
Да выходит обычно ::).. в общем я на выходных поиграюсь может чего путное выйдет... Я правильно понял, что именно в этом месте нужно произвести замену материала для инструкции?
-
Да выходит обычно ::).. в общем я на выходных поиграюсь может чего путное выйдет... Я правильно понял, что именно в этом месте нужно произвести замену материала для инструкции?
Может... Точнее говоря, хорошо было бы :-)
Да, в этом месте. Я искал возможность отдельной обработки инструкции, без группы, то есть локально на нее выйти — безуспешно...
-
Ну где-то должно быть так, я не делал чтения данных инструкции техкарты, т.е. если рисовать полный функционал то надо прочитать данные позиций операций, это будет первый цикл. затем прочитать данные по материалам для всех позиций операций, это будет второй цикл по позициям материала. Теперь весь прикол в том что всегда удаляем все материалы для операции и затем вносим их по новой точно так же, за исключением той позиции которую надо изменить... и переходим к следующей операции. Для оптимизации само собой наверное не стоит удалять все материалы для позиций в которых не надо ничего менять, ну да это просто нужно тогда жать кнопку перехода к следующей операции, ну и в конце для последней позиции надо вызывать сохранение документа а не переход к следующему компоненту. У себя на вот это инструкции вроде как все корректно работает, т.е написать пакетник реально!
*PLAS - Позиции техкарты
*---
*PLNTY = A - Инструкция ТОРО
*PLNNR = Номер техкарты
*PLNAL = Счетчик группы технологических карт
*PLNFL = Последовательность (Порядок следовани7
*PLPO - Техкарта список операций
DATA: f_run(1) TYPE c,
l_count_m TYPE i,
l_count_o TYPE i,
l_matnr LIKE mara-matnr.
REFRESH: bdcdata, itab.
PERFORM dynpro USING:
'X' 'SAPLCPDI' '3001',
' ' 'BDC_CURSOR' 'RC271-PLNNR',
' ' 'BDC_OKCODE' '=VOUE',
' ' 'RC271-PLNNR' '1', "Номер инструкции техкарты
'X' 'SAPLCPDI' '3400',
' ' 'BDC_CURSOR' 'PLPOD-VORNR(01)',
' ' 'BDC_OKCODE' '=MAAL', "Выделить все позиции
'X' 'SAPLCPDI' '3400',
' ' 'BDC_CURSOR' 'PLPOD-VORNR(01)',
' ' 'BDC_OKCODE' '=MAPM'. "Перейти к изменению компонентов
* Идем по списку операций, само собой надо прочитать их для начала, чтобы знать сколько
* У меня в заказе из было всего 6 позиций так что я поставил как константу.
l_count_o = 0.
DO 6 TIMES.
PERFORM dynpro USING:
'X' 'SAPLCMDI' '3500',
' ' 'BDC_CURSOR' 'RIHSTPX-IDNRK(01)',
' ' 'BDC_OKCODE' '=PMB5', "Выделить все позиции материала
'X' 'SAPLCMDI' '3500',
' ' 'BDC_CURSOR' 'RIHSTPX-IDNRK(01)',
' ' 'BDC_OKCODE' '=PMB3'. "Удалить все позиции материалов
* Записать новые позиции материала, я как констатна ставлю всегда 2 позиции,
* чтобы показать как вводить материалы при позиционировании всегда на первую
* строку позиции!!!
l_count_m = 0.
DO 2 TIMES.
l_count_m = l_count_m + 1.
IF l_count_m = 1.
l_matnr = 'MB-1000'. "Первая строка
ELSE.
l_matnr = 'M1'. "Вторая строка
ENDIF.
PERFORM dynpro USING:
'X' 'SAPLCMDI' '3500',
' ' 'BDC_CURSOR' 'RIHSTPX-IDNRK(01)',
' ' 'BDC_OKCODE' '/00', "Материал + количество и нажать ENTER
' ' 'RIHSTPX-IDNRK(01)' l_matnr,
' ' 'RIHSTPX-MENGE(01)' '1',
'X' 'SAPLCMDI' '3500',
' ' 'BDC_CURSOR' 'RIHSTPX-IDNRK(01)',
' ' 'BDC_OKCODE' '=P++'. "Сместить записи таблицы PgDn
ENDDO.
l_count_o = l_count_o + 1.
IF l_count_o < 6.
PERFORM dynpro USING:
'X' 'SAPLCMDI' '3500',
' ' 'BDC_OKCODE' '=NEPM'. "Перейти к следующей операции
ELSE.
PERFORM dynpro USING:
'X' 'SAPLCMDI' '3500',
' ' 'BDC_OKCODE' '=BU'. "Сохранить данные техкарты
ENDIF.
ENDDO.
* Вызвать транзакцию
BREAK-POINT.
f_run = 'A'.
CALL TRANSACTION 'IA06' USING bdcdata MODE f_run UPDATE 'S'
MESSAGES INTO itab.
BREAK-POINT.
*&---------------------------------------------------------------------*
*& Form DYNPRO
*&---------------------------------------------------------------------*
* Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
FORM dynpro USING dynbegin name value.
IF dynbegin = 'X'.
CLEAR bdcdata.
MOVE: name TO bdcdata-program,
value TO bdcdata-dynpro,
'X' TO bdcdata-dynbegin.
APPEND bdcdata.
ELSE.
CLEAR bdcdata.
MOVE: name TO bdcdata-fnam,
value TO bdcdata-fval.
APPEND bdcdata.
ENDIF.
ENDFORM.
-
Спасибо.
Однако, если имеются подоперации, то как с ними быть? Просто логику я делаю следующую: не удалять все и потом вставлять, а удалять только нужные. Но на экране оперирование производится указателем на номер строки/поле, а у меня таблица. Допустим, можно маппить значение в таблице на номер строки на экране, но подоперации тут портят малину.
Эти самые подоперации видны в списке на экране, но в них материалы не предусмотрены, однако же и в PLAS их нет, если ориентироваться на количество значений в этой таблице как на количество строк операций. Где они лежат — не нашел, к сожалению.
-
С подоперациями вроде понятно: PLPO-SUMNR - вышестоящий.
А что делать, если все записи операций не помещаются на один экран, а нужно обработать только некоторые, да и те в конце? Как определять размер экрана в количестве строк в зависимости от монитора/разрешения?
-
определять размер экрана в количестве строк в зависимости от монитора/разрешения?
Ну как бы тут есть два варианта, один нормальный, второй через одно место, но от разрабочиков SAP :D
Первый, есть переменные
SY-SROWS - Количество строк экрана и SY-SCOLS - Количество знакомест на экране, так вот количество строк в таблице можно рассчитать зная количество строк из SY-SROWS, т.е обычно как, есть какие-то поля ввода и есть таблица которая маштабируется от например минимум 4 строки до... сколько экран. так что можно рассчитать сколько строк в таблице зная значение из этой переменной.
Вариант второй, у SAP есть понятие стандартного экрана это когда SY-SROWS = 23, а SY-SCOLS = 86, при этом количество строк будет уже тоже фиксированное, т.е. проверяешь что SY-SROWS <> 23, и говоришь типа для работы транзакции перейдите в стандартный режим. А как перейти, ну вот пример на экране как это делается, после чего экран станет стандартного размера и ты можешь отработать свой пакетник.
-
Понял, спасибо, попробую. Еще пришло в голову просто глянуть, сколько строк в таблице на экране задано в программе, и не изменяется ли это число от каких-либо операций с окном или других параметров отображения.
-
Понял, спасибо, попробую. Еще пришло в голову просто глянуть, сколько строк в таблице на экране задано в программе, и не изменяется ли это число от каких-либо операций с окном или других параметров отображения.
Ну я думаю что как раз таблица масштабируемая, так что число строк таки зависит от размера окна, но точно есть минимальное число строк, это когда появляются полосы прокрутки на экране.
-
Отладчик выдает для syst, если перед этим вызвать из меню "Стандартный размер" как у вас на скриншоте:
39 SROWS I 4 30
40 SCOLS I 4 83
SAP Logon 6404.4.14.1012, WinXP SP2 Rus. Под вистой и 7.10 логоном тоже самое.
Однако, в операции CALL TRANSACTION обнаружилось OPTIONS FROM, и параметр DEFSIZE — Use standard window size.
-
Ну вполне может эта опция и поможет, я смотрел в 4.6 там кажется такого еще нет или не нашел в справке, но общая мысль я так понимаю ясна.
-
Да, общая мысль понятна, спасибо.
Про опцию вызова транзакции со стандартным размером экрана. Она срабатывает в том случае, когда окно НЕ распахнуто на весь экран соответствующей кнопкой в правом верхнем углу. Если окно немножко подмасштабировать за правый нижний корнер, то срабатывает. Вот интересно, есть ли способ определить — окно распахнуто на весь экран или же нет?
-
Да, общая мысль понятна, спасибо.
Про опцию вызова транзакции со стандартным размером экрана. Она срабатывает в том случае, когда окно НЕ распахнуто на весь экран соответствующей кнопкой в правом верхнем углу. Если окно немножко подмасштабировать за правый нижний корнер, то срабатывает. Вот интересно, есть ли способ определить — окно распахнуто на весь экран или же нет?
Нет никак, ну не знаю может в 6.0 что-то и появилось, но раньше небыло, поэтому я вот таким вот жестким образом заставлял пользователя типа выбрать переход к стандартному экрану перед прогоном программы.
-
А может посмотреть в сторону поиска операции? Дело в том, что хотя в меню этого поиска нет для IA06, в самой программе такая команда обрабатывается. Например, если под отладчиком поставить такую команду (OSEA) вместо какой либо другой, выполняется нормальный поиск операции.
-
Но это только позиционирует курсор и выделение на нужную строчку операции в экранной таблице. Если затем полностью удалять и затем восстанавливать записи материалов, то это получится. Это просто, если спецификации только вида "S". Но там еще и "M"...
Во всяком случае, спасибо за подсказку, очень интересно. Как вы узнали об этой команде?
-
Было бы вообще отлично, если бы такая функция была для материала, точнее, для позиционирования курсора на нужный.
-
Когда-то возникал такой вопрос по единичным техкартам( тр СА02), а программа что для СА02 что IA06 одна и таже. Для матераиала, похоже, подобного механизма нет
-
Жаль, что нет для материала. Я для программы по экрану посмотрел варианты OK-кодов, повводил, но ничего нужного не обнаружил...
-
Остался последний вопрос, надеюсь.
Отдельная программа с парой строк
WRITE: /sy-scols.
WRITE: /sy-srows.
выдаёт значения:
83
30
А если в нужной программе после REPORT поставить такую же конструкцию плюс BREAK-POINT следом, то значения будут такими:
86
22
В чем тут дело? Количество строк зависит от каких-нибудь SET-STATUS и т.п.?
-
В чем тут дело? Количество строк зависит от каких-нибудь SET-STATUS и т.п.?
Может отладчик типа чуток изменяет размеры... я бы не заморачивался на этом и брал то что получается в момент работы программы без отладки.
-
Может отладчик типа чуток изменяет размеры... я бы не заморачивался на этом и брал то что получается в момент работы программы без отладки.
Может и изменяет...
Вариантов я вижу два: либо использовать конструкцию "не меньше, чем" и задавать 86 и 30 как граничные, либо через "ИЛИ" перечислить возможные значения.
Но все равно, непонятно, и потому стрёмно... sdn, гугл порыл — ничего что-то не нарыл...
-
service.sap.com разродился по запросу несколькими нотами. В частности, в Note 1313810 - Batch input sessions: Default screen size does not work говорится о том, что размеры стандартного экрана — 22 lines x 84 columns.
Ишшо лучше... :)
-
Но все равно, непонятно, и потому стрёмно... sdn, гугл порыл — ничего что-то не нарыл...
Да ладно.. будут проблемы тебе сообщат, еще как вариант можно самому рассчитать сколько строк в таблице при разных размерах экрана, зависимость кстати всегда сохраняется и она линейная. А вообще просто этот метод ввода данных устаревший сильно уже... сейчас все типа на бапи разные ориентировано.
-
Да ладно.. будут проблемы тебе сообщат, еще как вариант можно самому рассчитать сколько строк в таблице при разных размерах экрана, зависимость кстати всегда сохраняется и она линейная.
Это точно.
А вообще просто этот метод ввода данных устаревший сильно уже... сейчас все типа на бапи разные ориентировано.
Ничего мне не удалось найти в дереве по ТОРО в тр. BAPI. Может быть, надо действовать как-то иначе для их поиска?
-
Это точно.Ничего мне не удалось найти в дереве по ТОРО в тр. BAPI. Может быть, надо действовать как-то иначе для их поиска?
Да нет иначе вряд ли.. просто не сделали еще.. а посему выкручивайся кто как может... из поискать, надо смотреть тексты программы и там уже искать подходящие ФМ-ки...
-
Да нет иначе вряд ли.. просто не сделали еще.. а посему выкручивайся кто как может... из поискать, надо смотреть тексты программы и там уже искать подходящие ФМ-ки...
Нашел в "Производство: планирование и управление" ФМ для создания: BAPI_ROUTING_CREATE. Это в 4.7. Говорят, в 6.0 есть BAPI_ROUTING_CHANGE. Но покопаю еще BAPI_ROUTING_CREATE, возможно, вручную сделаю из неё CHANGE через Z :)
-
Но покопаю еще BAPI_ROUTING_CREATE, возможно, вручную сделаю из неё CHANGE через Z :)
Не вот это не советую... за это можно потом и по рукам получить, причем очень сильно... и не только от SAP-а
-
Не вот это не советую... за это можно потом и по рукам получить, причем очень сильно... и не только от SAP-а
Почему? Я же не полезу в пространство имен SAP-а, а буду ваять Z.
Кажется, что _CREATE тоже вызывает транзакцию, то есть это пакетник, обернутый в BAPI...
-
Кажется, что _CREATE тоже вызывает транзакцию, то есть это пакетник, обернутый в BAPI...
Ну потому что если это все таки пакетник то на CHANGE он все таки будет другим, чем на CREATE, ну и собственно говоря ты сейчас как бы его сам и делаешь... ну по факту. По поводу что не надо, я имел в виду вариант когда анализируешь как и что пишут CREATE/CHANGE транзакции, и типа пытаешь по аналогии повторить это же сам... вот за это могут по рукам дать больно.
-
вот за это могут по рукам дать больно.
Оффтоп, конечно, но скажите, почему?! Есть практика изменения работы функционала, когда часть стандартного саповского кода не правится напрямую с использованием кодов с sap.com для редактирования объекта, а создается своя Z-часть, в которой и правится что нужно и как нужно.
-
Оффтоп, конечно, но скажите, почему?! Есть практика изменения работы функционала, когда часть стандартного саповского кода не правится напрямую с использованием кодов с sap.com для редактирования объекта, а создается своя Z-часть, в которой и правится что нужно и как нужно.
Потому что вы кончено можете делать, что угодно и как угодно, но при этом помните что это SAP а не 1С, где кто что хочет, тот и пишет, исходя из того, что по его мнению там чего-то не хватает и я это сейчас перепишу... просто SAP запрещает модификацию своих таблиц из своего Z-кода, т.е. дать гарантию что вы все правильно сделаете при обновлении данных в таблицах, я бы не рискнул, так точно и SAP это запрещает, т.е. конечно вы делать можете, но если что-то упадет, в общем это будет или дорого или ваши проблемы.
-
Ага, понял. Правка таблиц из Z — крайняя мера, и применяется ОЧЕНЬ редко. В этом плане все нормально :)