Pavlik написал(а):
Молю, расшифруйте поэтапно, что тут происходит?
DATA ITEM TYPE 0CMMT_ITEM.
определение переменной для выборки значений по признаку 0CMMT_ITEM - Финансовая позицияDATA FISCPER TYPE 0FISCPER.
определение переменной для выборки значений по признаку 0FISCPER - Фин.год/период DATA FISCPER2 TYPE 0FISCPER.
определение переменной для выборки значений по признаку 0FISCPER - Фин.год/период DATA FISCPER3 TYPE 0FISCPER.
определение переменной для выборки значений по признаку 0FISCPER - Фин.год/период DATA FPS TYPE STRING.
строковая переменнаяDATA GOD1 TYPE STRING.
строковая переменнаяDATA GOD2 TYPE STRING.
строковая переменнаяDATA B TYPE F.
переменная для хранения значений показателяFOREACH FISCPER IN SELECTION.
цикл по Фин.году/периоду. IN SELECTION - указывает на то, что цикл будет осуществлен по данным, у которых 0FISCPER будет совпадать с 0FISCPER указанными в фильтре (помимо этого на выборку влияют прочие ограничения фильтра и формулы).FPS=SUBSTR( FISCPER, 5, 2 ).
выделение периода из Фин.года/периодаGOD1=SUBSTR( FISCPER, 0, 4 ).
выделение года из Фин.года/периодаIF FPS > '00' AND FPS < '13' .
проверка того, что период попадает в диапазон от 01 до 12 включительноFISCPER3= VARV( 'ZV_BP_FISCPER013' ).
присвоение внутренней переменной FISCPER3 значения внешней Bex-переменной ZV_BP_FISCPER013FISCPER3=TMVL(FISCPER3, -1).
смещение временного период на -1 от текущего значения переменнойFISCPER2=TMVL(FISCPER, 1).
смещение временного период на +1 от текущего значения переменнойFOREACH ITEM.
цикл данным с фин.позициями попавшими в выборку и возможными к изменениюIF ITEM ='BB_DEP'.
если фин.позиция = 'BB_DEP', то выполняем следующий кодIF FISCPER=FISCPER3.
если FISCPER=FISCPER3, то....B=B+{0AMOUNT, ITEM ,FISCPER}.
.....аккумулируем значение показателя 0AMOUNT в переменной B, при этом 0CMMT_ITEM = BB_DEP , а 0FISCPER = значению из переменной ZV_BP_FISCPER013 -1 период*MESSAGE I001(BB) WITH FISCPER .
ENDIF.
ENDIF.
IF ITEM <> 'BB_DEP'.
если фин.позиция <> 'BB_DEP', то выполняем следующий кодB=B+{0AMOUNT, ITEM ,FISCPER}.
.....аккумулируем значение показателя 0AMOUNT в переменной B, при этом 0CMMT_ITEM <> BB_DEP , а 0FISCPER = текущему значению из первого цикла*MESSAGE I001(FISC_NEBB) WITH FISCPER ITEM .
ENDIF.
ENDFOR.
GOD2=SUBSTR( FISCPER2, 0, 4 ).
выделение года из Фин.года/периодаIF GOD1=GOD2.
если год1 = год2, т.е. обработка не выходит за рамки одного года, то....{0AMOUNT,'BB_DEP', FISCPER2}=B.
....присваиваем накопленное в переменной В значение показателю 0AMOUNT, при этом 0CMMT_ITEM = 'BB_DEP', а 0FISCPER = текущий FISCPER из цикла +1 *MESSAGE I001(B) WITH FISCPER2 B .
ENDIF.
ENDIF.
ENDFOR.