FreePainter написал(а):
Необходимо реализовать алгоритм вывода корреспонденции счетов. Проанализировав содержимое таблицы BSEG пришел к выводу что не могу однозначно для конкретных документов определить корреспонденцию счетов, т.к. на один документ может приходиться до сотни записей
Самое смешное, что четкого алгоритма корреспонденции действительно не предусмотрено.
Одно время тоже помучался с этим, работая с ММ. Попробовал такое решение: корреспонденция проводок друг с другом, а также их связь с документами материала устанавливается эмпирически, по косвенным признакам.
Самое удивительное - в 99.9% случаев ММ-ских проводок/движений, работало правильно. Хотя, несложно придумать ситуацию, когда будет глючить, а четкого алгоритма придумать практически невозможно.
Как уже заметили вышел - все зависит от типа документа. Везде логика своя.
Ниже - примерный алгоритм установки этого соответствия. Строго не судите - когда писалось, у меня опыт был всего годик
.
Code:
....
CLEAR BKPF_EXISTS.
CLEAR BKPFS.
READ TABLE BKPFS WITH KEY AWKEY+0(10) = MKPFS-MBLNR
GJAHR = MKPFS-MJAHR.
IF SY-SUBRC < 3. BKPF_EXISTS = 'X'. ENDIF.
....
IF BKPF_EXISTS = 'X'.
CLEAR: C_BSEG1, C_BSEG2, BSEGS, BSIMS.
CLEAR BSIMS.
READ TABLE BSIMS WITH KEY
BELNR = BKPFS-BELNR
MATNR = MKPFS-MATNR
GJAHR = MKPFS-MJAHR
SHKZG = MKPFS-SHKZG
DMBTR = MKPFS-DMBTR
BWKEY = MKPFS-WERKS
MENGE = MKPFS-MENGE
BUDAT = MKPFS-BUDAT
MEINS = MKPFS-MEINS.
IF SY-SUBRC < 3.
BSIM1_CURSOR = SY-TABIX.
CLEAR: C_BSEG1, C_BSEG2, FG1, FG2.
READ TABLE BSEGS WITH KEY BELNR = BSIMS-BELNR
BUZEI = BSIMS-BUZEI
GJAHR = BSIMS-GJAHR
SHKZG = MKPFS-SHKZG
INTO C_BSEG1.
DELETE BSIMS INDEX BSIM1_CURSOR.
IF C_BSEG1-SHKZG EQ 'H'.
SHK = 'S'.
MOVE C_BSEG1 TO FG2 .
ELSE.
SHK = 'H'.
MOVE C_BSEG1 TO FG1 .
ENDIF.
CLEAR: BSEGS, BSIMS. ", fg2, c_bseg2 .
READ TABLE BSEGS WITH KEY
BELNR = BKPFS-BELNR
MATNR = MKPFS-MATNR
GJAHR = MKPFS-MJAHR
SHKZG = SHK
DMBTR = MKPFS-DMBTR
MENGE = MKPFS-MENGE INTO C_BSEG2.
* budat = mkpfs-budat
* meins = mkpfs-meins into c_bseg2.
IF SY-SUBRC < 3.
DELETE BSEGS INDEX SY-TABIX.
IF C_BSEG2-SHKZG EQ 'H'.
MOVE C_BSEG2 TO FG2 .
ELSE.
MOVE C_BSEG2 TO FG1 .
ENDIF.
ENDIF.
....
ENDIF.