Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема розпочата: Паганель від Жовтень 24, 2009, 09:47:12 ДП

Назва: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Паганель від Жовтень 24, 2009, 09:47:12 ДП
Для некоторых все это очевидно, но вот нам тут понадобилось, вот коллега немного покопался.

Если в чем то ошибся, думаю что коллеги по форуму подправят.  ;)

1. Установливаем значение параметра MBN
SET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "последний созданный документ товара
2. В определении экрана выбора указываем MEMORY ID откуда будет считыватся нужный нам номер.
SELECT-OPTIONS sv_mblnr FOR mkpf-mblnr MEMORY ID MBN. 

Вроде ничего не забыл?
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Uukrul від Жовтень 24, 2009, 11:20:28 ДП
Ну как вам сказать, ну для более полного ответа не мешало бы во-первых, уточнить что такой код будет работать не всегда правильно, так как нумерация документов материала привязана к году, а это значит что кроме номера документа еще нужно указать и год документа. Для этого надо:

1. Установливаем значение параметра MJA
SET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа
2. В определении экрана выбора указываем MEMORY ID откуда будет считыватся нужный нам год.
SELECT-OPTIONS sv_mjahr FOR mkpf-mjahr MEMORY ID MJA.

Теперь о том откуда можно узнать о параметрах, для этого идем в интересующую нас транзакцию, например просмотра документа материала MB03, на первом экране, рисунок MB03.png видим что для идентификации документа нужно знать номер и год документа. Теперь как узнать код параметра для поля, например поле года. Для этого становимся в поле года и нажимаем кнопку F1, попадаем в справку описания к полю, рисунок MB03-F1.png, затем на этом экране нажимаем кнопку перехода к технической информации и попадаем в экран, рисунок MB03-MJA.png. Вот на этом экране и указан код параметра который можно использовать в своих программах. Как видим для поле год материала это MJA.

Аналогичным способом можно узнать параметры для любых полей, но помните, что не каждое поле экрана к сожалению имеет код параметра.

Вот теперь вроде как все  ;)
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Паганель від Жовтень 24, 2009, 12:13:59 ПП
Ну вот, я же говорил что более опытные коллеги с форума, дополнят, спасибо - познавательно
Назва: Экспорт последнего номера документа материала в своей транзакции
Відправлено: Паганель від Листопад 06, 2009, 06:34:38 ПП
Сюда же, что бы не плодить веток....
А как его так сказать экспортнуть? Т.е. в своей проге через бапишку создал документ материала, получил этот номер, теперь хотелось бы его экспортнуть и сделать доступным другим транзакциям?
Назва: Re: Экспорт последнего номера документа материала в своей транзакции
Відправлено: Dmitriy від Листопад 06, 2009, 08:39:35 ПП
Цитата: Паганель від Листопад 06, 2009, 06:34:38 ПП
А как его так сказать экспортнуть? Т.е. в своей проге через бапишку создал документ материала, получил этот номер, теперь хотелось бы его экспортнуть и сделать доступным другим транзакциям?
см. п.1 поста Uukrul...
Установка значений ID-параметров:
SET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа
SET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "№ документа
Получение значений ID-параметров (в своей программе, уже после создания документа и экспорта в память):
GET PARAMETER ID 'MJA' FIELD gv_mjahr. "Год документа
GET PARAMETER ID 'MBN' FIELD gv_mblnr. "№ документа
Значения ID-параметров сохраняются в рамках одной сессии (вне зависимости от кол-ва режимов) и привязаны к конкретному пользователю. Существует также конструкция: EXPORT/IMPORT lt_mkpf TO/FROM MEMORY ID 'ZMKPF', где lt_mkpf - твоя внутренняя таблица. ID-параметры создаются в SE80: "Shift+F5" - "Другой объект", вкладка "Другие" см. рисунок, указатель мыши на кнопочке "Другой объект", а привязываются к ЭД в SE11, вкладка "Дополнительные свойства".
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Паганель від Листопад 06, 2009, 08:42:21 ПП
хм, спасибо ... невнимательно читал ответ Уукрула
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Dmitriy від Листопад 06, 2009, 08:51:59 ПП
Цитата: Паганель від Листопад 06, 2009, 08:42:21 ПП
хм, спасибо ... невнимательно читал ответ Уукрула
нема за что...
Нужно еще учесть, что параметр обновляется после ввода его на экран, т.е. ты создал документ, занес его № в память, зашел в др. транзакцию, ввел там совсем другой номер, он сохранился, т.е. тот который тебе нужен - затерся. ;)
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Паганель від Листопад 06, 2009, 08:55:07 ПП
да нет, все нормально, я понял .... просто тут такая задача, типа куча транзакций, часть самопыисных, а печатаем с другой где куча смартформ забита.... пользователю неудобно как бы провел документ, потом заходит в транзакцию печати, и ищет только что созданный документ.....

Думаю проблем не будет...
Назва: Резюме: Подстановка последнего номера доl
Відправлено: Паганель від Листопад 11, 2009, 01:47:03 ПП
Краткое резюме для себя (тут снова понадобилось, вот читал пост и сидел, вспоминал где же эти куски кода прописывать)

Экспорт последнего номера документа материала в своей транзакции
SET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа
SET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "№ документа


Импорт последнего номера документа материала в своей транзакции

Перед объявлением select-options вставляем код:
GET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "последний созданный документ товара
GET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа


Пример:

SET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "последний созданный документ товара
SET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа

SELECTION-SCREEN BEGIN OF BLOCK choice WITH FRAME TITLE text-001.
  SELECT-OPTIONS:  p_belnr   FOR mkpf-mblnr MEMORY ID MBN.
  PARAMETERS:      p_gjahr   TYPE mkpf-mjahr MEMORY ID MJA. "DEFAULT '2009'.
  PARAMETERS:      p_budat   TYPE mkpf-budat. "OBLIGATORY.
SELECTION-SCREEN END OF BLOCK choice.

Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Uukrul від Листопад 11, 2009, 01:57:46 ПП
Не это явно какую-то фигню написал, так как если ты в своей первой программе сделал SET, то вот это вот ниже.. явная пурга, так как получается что ты в другой программе перетираешь переменные памяти какими-то значениями из mkpf-mblnr и mkpf-mjahr., после чего у тебя в SELECT-OPTIONS будет пустота.


SET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "последний созданный документ товара
SET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа

SELECTION-SCREEN BEGIN OF BLOCK choice WITH FRAME TITLE text-001.
  SELECT-OPTIONS:  p_belnr   FOR mkpf-mblnr MEMORY ID MBN.
  PARAMETERS:      p_gjahr   TYPE mkpf-mjahr MEMORY ID MJA. "DEFAULT '2009'.
  PARAMETERS:      p_budat   TYPE mkpf-budat. "OBLIGATORY.
SELECTION-SCREEN END OF BLOCK choice.
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Dmitriy від Листопад 11, 2009, 02:01:39 ПП
Перед объявлением select-options ничего вставлять не нужно.
SELECT-OPTIONS:  p_belnr   FOR mkpf-mblnr MEMORY ID MBN.
PARAMETERS:        p_gjahr   TYPE mkpf-mjahr MEMORY ID MJA.
То, что выделено жирным и дает нам нужный эффект:
1. Подстановка из памяти перед выводом
2. Занесение в память после ввода на СЭ.
Поэтому и написал чуть выше, чтобы внимательно последовательность при цепочке операций соблюдал. Попробуй, открой 2 режима и в обоих поиграй с MB03, например.

Update 4 Uukrul: ну дык это ж Паганель, что бы мы вообще тут без него делали! :D  
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Паганель від Листопад 11, 2009, 02:02:27 ПП
Спасибо, ошибся в посте, мало того, я эту пургу и в код проги прописал.

Спасибо, подправил .....
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Dmitriy від Листопад 11, 2009, 02:08:17 ПП
Кстати, рекомендую на СЭ использовать следующие обозначения:
p_* - параметр, so_* - select-options, сам использую просто s_ для последних.
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Паганель від Листопад 11, 2009, 02:15:42 ПП
Цитата: Dmitriy від Листопад 11, 2009, 02:08:17 ПП
Кстати, рекомендую на СЭ использовать следующие обозначения:
p_* - параметр, so_* - select-options, сам использую просто s_ для последних.

ну всегда так и делаю, просто данную прогу делал другой человек, я лишь подправлял, и переименовывать  не стал (зачем лишняя работа).

Т.е.  все просто и достаточно этого:
Экспорт последнего номера документа материала в своей транзакции
SET PARAMETER ID 'MJA' FIELD mkpf-mjahr. "Год документа
SET PARAMETER ID 'MBN' FIELD mkpf-mblnr. "№ документа


Импорт последнего номера документа материала в своей транзакции
Пример:

SELECTION-SCREEN BEGIN OF BLOCK choice WITH FRAME TITLE text-001.
  SELECT-OPTIONS:  p_belnr   FOR mkpf-mblnr MEMORY ID MBN.
  PARAMETERS:      p_gjahr   TYPE mkpf-mjahr MEMORY ID MJA. "DEFAULT '2009'.
  PARAMETERS:      p_budat   TYPE mkpf-budat. "OBLIGATORY.
SELECTION-SCREEN END OF BLOCK choice.
Назва: Re: Подстановка последнего номера документа материала в своей транзакции
Відправлено: Dmitriy від Листопад 11, 2009, 02:26:06 ПП
Именно. ;)