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

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


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

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


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

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