Текущее время: Вс, июл 27 2025, 23:31

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


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


Вопросы по ППМ (MRP) - сюда.
Вопросы по классификации - сюда.
Вопросы по входящим поставкам - сюда.



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Загрузка остатков
СообщениеДобавлено: Вт, май 08 2007, 10:53 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
Здравствуйте, уважаемые коллеги!
Вот был вопрос о загрузке остатков через BAPI, я додел программу и выставляю для всеобщего использования.
================================

* BAPI TO Upload Inventory Data
*
* GMCODE Table T158G - 01 - MB01 - Goods Receipts for Purchase Order
* 02 - MB31 - Goods Receipts for Prod Order
* 03 - MB1A - Goods Issue
* 04 - MB1B - Transfer Posting
* 05 - MB1C - Enter Other Goods Receipt
* 06 - MB11
*
* Domain: KZBEW - Movement Indicator
* Goods movement w/o reference
* B - Goods movement for purchase order
* F - Goods movement for production order
* L - Goods movement for delivery note
* K - Goods movement for kanban requirement (WM - internal only)
* O - Subsequent adjustment of "material-provided" consumption
* W - Subsequent adjustment of proportion/product unit material
*
report zbapi_goodsmovement.

tables mara.

parameters: p-file like rlgrap-filename default
'c:\sapdata\TEST.txt'.
parameters: e-file like rlgrap-filename default
'c:\sapdata\gdsmvterror.txt'.

parameters: xpost like sy-datum default sy-datum.

data: begin of gmhead.
include structure bapi2017_gm_head_01.
data: end of gmhead.

data: begin of gmcode.
include structure bapi2017_gm_code.
data: end of gmcode.

data: begin of mthead.
include structure bapi2017_gm_head_ret.
data: end of mthead.

data: begin of itab occurs 100.
include structure bapi2017_gm_item_create.
data: end of itab.

data: begin of errmsg occurs 10.
include structure bapiret2.
data: end of errmsg.

data: wmenge like iseg-menge,
errflag.

data: begin of pcitab occurs 100,
doc_date(8), "Document Date
post_date(8), "Posting Date
material(18), "Material Number
plant(4), "Plant
lgort(4), "Склад
summa(13), "Сумма
qty(13), "Quantity
charg(10), "Партия
upd_sta(1), "Для статистики
end of pcitab.

data: p_meins like mara-meins.
data: i like mara-matkl.
data: j like mara-matkl.

call function 'WS_UPLOAD'
exporting
filename = p-file
filetype = 'DAT'
* IMPORTING
* FILELENGTH =
tables
data_tab = pcitab
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* OTHERS = 6
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
exit.
endif.

gmhead-pstng_date = sy-datum.
gmhead-doc_date = sy-datum.
gmhead-pr_uname = sy-uname.
gmcode-gm_code = '05'. "05 - MB1C - Goods Receipts for Purchase Order
gmhead-header_txt = 'Stock Upload with 561 mvt'.


loop at pcitab.

select single meins into p_meins from mara where matnr = pcitab-material
.

itab-mvt_ind = ' '.
itab-move_type = '561'.
itab-plant = pcitab-plant.
itab-material = pcitab-material.
itab-entry_qnt = pcitab-qty.
itab-batch = pcitab-charg.
itab-entry_uom = p_meins.
itab-stge_loc = pcitab-lgort.
itab-amount_lc = pcitab-summa.

append itab.
endloop.

loop at itab.
write:/ itab-material, itab-plant, itab-stge_loc,
itab-move_type, itab-entry_qnt, itab-entry_uom,
itab-amount_lc, itab-batch.

endloop.

call function 'BAPI_GOODSMVT_CREATE'
exporting
goodsmvt_header = gmhead
goodsmvt_code = gmcode
* TESTRUN = ' '
* IMPORTING
goodsmvt_headret = mthead
* MATERIALDOCUMENT =
* MATDOCUMENTYEAR =
tables
goodsmvt_item = itab
* GOODSMVT_SERIALNUMBER =
return = errmsg
.
clear errflag.
loop at errmsg.
if errmsg-type eq 'E'.
write:/'Error in function', errmsg-message.
errflag = 'X'.
else.
write:/ errmsg-message.
endif.
endloop.

if errflag = 'X'.
commit work and wait.
if sy-subrc ne 0.
write:/ 'Error in updating'.
exit.
else.
write:/ mthead-mat_doc, mthead-doc_year.
perform upd_sta.
endif.
endif.

commit work.

*---------------------------------------------------------------------*
* FORM UPD_STA *
*---------------------------------------------------------------------*
* Выставляем в pcitab X если запись в файле содержит ошибки *
* и не может быть загружена *
*---------------------------------------------------------------------*
form upd_sta.
i = 1. "Индексы таблицы pcitab
j = 1. "Индексы таблицы errmsg

read table errmsg index j.
loop at pcitab.
if errmsg-row = i.
pcitab-upd_sta = 'X'.
modify pcitab.
j = j + 1.
read table errmsg index j.
endif.
i = i + 1.
endloop.

call function 'WS_DOWNLOAD'
exporting
filename = e-file
filetype = 'DAT'
* IMPORTING
* FILELENGTH =
tables
data_tab = pcitab
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* OTHERS = 6
.

write:/.
write:/ 'Ошибки загрузки'.
loop at pcitab.
if pcitab-upd_sta = 'X'.
write:/ pcitab-doc_date, pcitab-post_date, pcitab-material,
pcitab-plant, pcitab-lgort, pcitab-summa,
pcitab-qty, pcitab-charg, pcitab-upd_sta.
endif.
endloop.


endform.

*--- End of Program


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 11:03 
Специалист
Специалист

Зарегистрирован:
Пн, май 07 2007, 17:20
Сообщения: 192
Большое спасибо ! а где в программе определяется формат текстового файла подскажите пожалуйста ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 12:15 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
doc_date(8), "Document Date
post_date(8), "Posting Date
material(18), "Material Number
plant(4), "Plant
lgort(4), "Склад
summa(13), "Сумма
qty(13), "Quantity
charg(10), "Партия

Вот формат файла, запись пишется в одну строчку во внешнем файле по пути 'c:\sapdata\TEST.txt', поля отделяются друг от друга табом.

При выкладывании файла у меня поломались значения в скобках - были заменены на смайлы - это восьмерки


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 12:23 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 14:35
Сообщения: 1519
Откуда: В ВЕЧНОМ БАНЕ
KAA написал(а):
summa(13), "Сумма

А если сумма в двух валютах?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 13:57 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
Сумма по строке - по одной записи, а не по всем записям


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 14:04 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
Ну, тогда не знаю, в рубли все пересчитать ... Я делал для своей задачи, а у меня в проекте все запасы учтены в рублях


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 14:05 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
А если в бапи есть поле валюта, то лекго учесть и этот нюанс


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 14:16 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 14:35
Сообщения: 1519
Откуда: В ВЕЧНОМ БАНЕ
KAA написал(а):
А если в бапи есть поле валюта, то лекго учесть и этот нюанс

Ну имелось в виду сумма не только в рублях но и зеленых для параллельного учета...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 14:39 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
Цитата:
gmhead-pstng_date = sy-datum.
gmhead-doc_date = sy-datum.


А разве остатки грузят на текущую дату?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 16:30 
Гость
если регистр активирован, то делали так:
грузили все в рублях, проводка в баксах все равно идет по курсу на дату проводки. Потом делали mr21 в баксах и корректировали баксовой покрытие в соответсвии с историческим курсом


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 08 2007, 18:07 
Специалист
Специалист

Зарегистрирован:
Пн, май 07 2007, 17:20
Сообщения: 192
А не хватает ещё особого запаса ? например особый запас поставщика (O) ведь также нужно загружать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 10 2007, 09:28 
Специалист
Специалист

Зарегистрирован:
Чт, май 19 2005, 10:10
Сообщения: 202
У нас не применяется особый запас, так что это можно сделать, наверное, с использованием другого вида движения ... В данной программе 561 вд используется


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, май 10 2007, 11:13 
Специалист
Специалист

Зарегистрирован:
Пн, май 07 2007, 17:20
Сообщения: 192
Это тоже 561 вид движения но с кодом особого запаса O
А у Вас есть постановка задачи на эту разработку ? пришлите если не жалко на 55555-55555@mail.ru


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, май 14 2007, 12:24 
Специалист
Специалист

Зарегистрирован:
Пн, сен 20 2004, 10:55
Сообщения: 228
Откуда: Москва, Hamburg, Prague, Brussels
а не проще написать LSMW на эту бапишку?


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

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


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

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


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

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