Электронные счета-фактуры, выгрузка из SAP для портала электронных счетов-фактур www.vat.gov.by

*&---------------------------------------------------------------------*
*& Report  ZHM_ISSUANCE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  ZHM_ISSUANCE.

tables: zissuance, vbrk.
data: it_vbrk type table of vbrk,
      gt_zissuance type table of zissuance,
      ls_zissuance type zissuance,
      gt_zissuance_cnst type sorted table of zissuance_cnst with unique key constname,
      it_t005 type sorted table of t005 with unique key land1,
      it_t005t type sorted table of t005t with unique key land1 spras,
      it_tvko type sorted table of tvko with unique key vkorg,
      it_tvbur type sorted table of tvbur with unique key vkbur,
      it_adrc type sorted table of adrc with unique key addrnumber,
      it_adrv type sorted table of adrv with non-unique key appl_key,
      it_kna1 type sorted table of kna1 with unique key kunnr,
      it_vbrp type sorted table of vbrp with non-unique key vbeln,
      gt_vbrp type standard table of vbrp,
      lt_vbrp type standard table of vbrp,
      it_equi type table of equi,
      it_konv type table of konv,
      ls_vbrp type vbrp,
      ra_fkart type range of fkart,
      ls_fkart like line of ra_fkart,
      appl_key type ad_applkey,
      it_tlines type table of tline.

data: bstkd type bstkd,
      bstdk type bstdk,
      zconstname type zconstname,
      zvalue type zvalue,
      initial_folder type string,
      selected_folder type string,
      lifex type lifex,
      lifexblank type lifex,
      wadat_ist type wadat_ist,
      matnr type matnr,
      uecha type vbrp-uecha,
      normt type mara-normt,
      msbookpartno type mara-msbookpartno,
      vbeln type vbeln,
      tdname type thead-tdname,
      kzwi1 type vbrp-kzwi1,
      lf_adrnr TYPE adrnr,
      end type i,
      first type i,
      i type i,
      vbelv type vbfa-vbelv,
      fkart type vbrk-fkart,
      ffact type tcurf-ffact,
      tfact type tcurf-tfact,
      gdatu type tcurf-gdatu,
      vbtyp_v type vbfa-vbtyp_v,
      waers type t500c-waers,
      valid_begda type p0008-begda,
      valid_endda type  p0008-endda,
      return type sy-subrc,
      currency_source type dd02l-tabname.

data: cl_issuance type ref to zcl_issuance.

field-symbols: <fs_vbrk> type vbrk,
               <fs_vbrp> type vbrp,
               <fs_zissuance> type zissuance,
               <fs_zissuance_cnst> type zissuance_cnst,
               <fs_t005> type t005,
               <fs_t005t> type t005t,
               <fs_tvko> type tvko,
               <fs_tvbur> type tvbur,
               <fs_adrc> type adrc,
               <fs_adrv> type adrv,
               <fs_kna1> type kna1,
               <fs_konv> type konv,
               <fs_tlines> type tline,
               <fs_equi> type equi.
select-options: so_vbeln for vbrk-vbeln obligatory,
                so_fkdat for vbrk-fkdat.
create object cl_issuance.
select single waers into waers from t001 where bukrs = '1000'.
select * from zissuance_cnst into table gt_zissuance_cnst.
select * from t005 into table it_t005.
select * from t005t into table it_t005t.
select * from tvko into table it_tvko.
select * from tvbur into table it_tvbur.
select * from adrc into table it_adrc.
select * from adrv into table it_adrv where appl_table  = 'VBUK' and appl_field = 'VBELN' and addr_group = 'SD01'.

select * from vbrk into table it_vbrk where vbeln in so_vbeln and fkdat in so_fkdat. "and ( vbrk~rfbsk = 'С'  or vbrk~rfbsk = 'E' ).
*select * from vbrp into table it_vbrp where vbeln in so_vbeln.
select * from kna1 into table it_kna1.
loop at gt_zissuance_cnst assigning <fs_zissuance_cnst> where constname(3) = 'DT_'.
    ls_fkart-sign   = 'I'.   "I = include, E = exclude
    ls_fkart-option = 'EQ'.  "EQ, BT, NE ....
    ls_fkart-low    = <fs_zissuance_cnst>-constname+3(4).
    append ls_fkart to ra_fkart.
endloop.
delete it_vbrk where fkart not in ra_fkart.
loop at it_vbrk assigning <fs_vbrk>.
  clear: matnr, msbookpartno, normt, lifex,wadat_ist,vbeln,vbtyp_v,bstkd,bstdk.
  append initial line to gt_zissuance assigning <fs_zissuance>.

*-->>Номер счет-фактуры унп-год-vbeln
  <fs_zissuance>-vbeln = <fs_vbrk>-vbeln.
*{   INSERT         EGPK900161                                       23
* Тип счет-фактуры
  <fs_zissuance>-fkart = <fs_vbrk>-fkart.
*}   INSERT
  select single paval into <fs_zissuance>-sender from t001z where bukrs = <fs_vbrk>-bukrs and party = 'SAPB01'.
  concatenate <fs_zissuance>-sender sy-datum(4) <fs_vbrk>-vbeln into <fs_zissuance>-znumber separated by '-'.
  <fs_zissuance>-datetr = <fs_vbrk>-fkdat.

*-->>Выбор типа документа в зависимости от вида фактуры
  concatenate 'DT_' <fs_vbrk>-fkart into zconstname.
  read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
  if <fs_zissuance_cnst> is assigned.
    <fs_zissuance>-doctype = <fs_zissuance_cnst>-value1.
    unassign <fs_zissuance_cnst>.
    clear: zconstname, zvalue.
  endif.

*-->>Выбор статуса поставщика  из параметров
  concatenate 'PS_' <fs_vbrk>-fkart into zconstname.
  read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
  if <fs_zissuance_cnst> is assigned.
    <fs_zissuance>-provstat = <fs_zissuance_cnst>-value1.
    unassign <fs_zissuance_cnst>.
    clear: zconstname, zvalue.
  else.
    concatenate 'STORNO_' <fs_vbrk>-fkart into zconstname.
    read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
    if <fs_zissuance_cnst> is assigned.
      <fs_zissuance>-provstat = <fs_zissuance_cnst>-value1.
      select single vbelv into vbelv from vbfa where vbeln = <fs_vbrk>-vbeln and vbtyp_v = 'P'.
      select single fkart into fkart from vbrk where vbeln = <fs_vbrk>-vbeln.
      unassign <fs_zissuance_cnst>.
        concatenate 'PS_' fkart into zconstname.
        read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
        if <fs_zissuance_cnst> is assigned.
          <fs_zissuance>-provstat = <fs_zissuance_cnst>-value1.
          unassign <fs_zissuance_cnst>.
          clear: zconstname, zvalue.
        endif.
      clear: zconstname, zvalue.
    endif.
  endif.

*-->>Выбор кода страны
  read table it_t005 assigning <fs_t005> with table key land1 = <fs_vbrk>-landtx.
  if <fs_t005> is assigned.
    <fs_zissuance>-provcountrycode = <fs_t005>-intcn3.
    unassign <fs_t005>.
  endif.

*-->>УНП поставщика
  <fs_zissuance>-provunp = <fs_zissuance>-sender.

*-->>Наименование поставщика*{   DELETE         EGPK900161                                       19
  read table it_tvko assigning <fs_tvko> with table key vkorg = <fs_vbrk>-vkorg.
  if <fs_tvko> is assigned.
    read table it_adrc assigning <fs_adrc> with table key addrnumber = <fs_tvko>-adrnr.
    if <fs_adrc> is assigned.
      concatenate <fs_adrc>-name1 <fs_adrc>-name2 <fs_adrc>-name3 <fs_adrc>-name4 into <fs_zissuance>-provname separated by space.
*Адрес поставщика и грузоотправителя, адрес грузоотправителя может быть заменен на пункт выгрузки далее
      concatenate <fs_adrc>-post_code1 <fs_adrc>-city1  <fs_adrc>-street  <fs_adrc>-house_num1  into <fs_zissuance>-provaddress separated by ','.
*      <fs_zissuance>-consaddress = <fs_zissuance>-provaddress.
      unassign <fs_adrc>.
    endif.
    unassign <fs_tvko>.
  endif.

*-->>Выбор статуса получателя  из параметров
*-->>Выбор статуса поставщика  из параметров
  concatenate 'RS_' <fs_vbrk>-fkart into zconstname.
  read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
  if <fs_zissuance_cnst> is assigned.
    <fs_zissuance>-recstat = <fs_zissuance_cnst>-value1.
    unassign <fs_zissuance_cnst>.
    clear: zconstname, zvalue.
  else.
    concatenate 'STORNO_' <fs_vbrk>-fkart into zconstname.
    read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
    if <fs_zissuance_cnst> is assigned.
      <fs_zissuance>-recstat = <fs_zissuance_cnst>-value1.
      select single vbelv into vbelv from vbfa where vbeln = <fs_vbrk>-vbeln and vbtyp_v = 'P'.
      select single fkart into fkart from vbrk where vbeln = <fs_vbrk>-vbeln.
      unassign <fs_zissuance_cnst>.
        concatenate 'RS_' fkart into zconstname.
        read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
        if <fs_zissuance_cnst> is assigned.
          <fs_zissuance>-recstat = <fs_zissuance_cnst>-value1.
          unassign <fs_zissuance_cnst>.
          clear: zconstname, zvalue.
        endif.
      clear: zconstname, zvalue.
    endif.
  endif.

*-->>Взаимозависимое лицо
  <fs_zissuance>-recdeppers = ''.
  <fs_zissuance>-provdeppers = ''.

*-->>Сделка с резидентом оффшорной зоны
  <fs_zissuance>-recoffshore = ''.
  <fs_zissuance>-provoffshore = ''.

*-->>Сделка с товарами по перечню, определяемому правительством
  <fs_zissuance>-recspecgoods = ''.
  <fs_zissuance>-provspecgoods = ''.

*-->>Организация в перечне крупных плательщиков
  <fs_zissuance>-recbigcomp = ''.
  <fs_zissuance>-provbigcomp = 'X'.

*-->>Выбор кода страны
  read table it_kna1 assigning <fs_kna1> with table key kunnr = <fs_vbrk>-kunag.
  if <fs_kna1> is assigned.
    read table it_t005 assigning <fs_t005> with table key land1 = <fs_kna1>-land1.
    if <fs_t005> is assigned.
      <fs_zissuance>-reccountrycode = <fs_t005>-intcn3.
      read table it_t005t assigning <fs_t005t> with table key land1 = <fs_kna1>-land1 spras = sy-langu.
      concatenate <fs_t005t>-landx <fs_kna1>-ort01 <fs_kna1>-pstlz <fs_kna1>-stras into <fs_zissuance>-recaddress separated by space.
      unassign: <fs_t005>, <fs_t005t>.
    endif.

*-->>УНП получателя
    <fs_zissuance>-recunp = <fs_kna1>-stcd1.

*-->>Наименование получателя
    concatenate <fs_kna1>-name2 <fs_kna1>-name3 <fs_kna1>-name4 into <fs_zissuance>-recname separated by space.
    unassign <fs_kna1>.
  endif.
*-->>Наименование получателя Получателям  (и Грузполучателям) –физлицам -   *CRL.
  if <fs_vbrk>-kunag cp 'FL*CRL76' or <fs_vbrk>-kunag cp 'FL*CRL' or <fs_vbrk>-kunag cp 'FIZ*CRL'.
    concatenate sy-mandt <fs_vbrk>-vbeln into appl_key.
    read table it_adrv assigning <fs_adrv> with table key appl_key = appl_key.
    if <fs_adrv> is assigned.
      read table it_adrc assigning <fs_adrc> with table key addrnumber = <fs_adrv>-addrnumber.
      if <fs_adrc> is assigned.
        <fs_zissuance>-recname = <fs_adrc>-name2.
      endif.
    endif.
    unassign: <fs_adrv>, <fs_adrc>.
  endif.
  select single bstkd bstdk into (bstkd,bstdk) from vbfa inner join vbkd on vbfa~vbelv = vbkd~vbeln where vbfa~vbtyp_v = 'C'  and vbfa~vbeln = <fs_vbrk>-vbeln.
  select single likp~lifex likp~wadat_ist likp~vbeln vbfa~vbtyp_v into (lifex,wadat_ist,vbeln,vbtyp_v) from vbfa inner join likp on vbfa~vbelv = likp~vbeln
    where vbfa~vbeln = <fs_vbrk>-vbeln and ( vbfa~vbtyp_n = 'M' or vbfa~vbtyp_n = 'P' or vbfa~vbtyp_n = 'O' or vbfa~vbtyp_n = 'N' or vbfa~vbtyp_n = 'S' ).
*Дата и номер договора из заголовка фактуры
  if bstkd is initial or bstdk is initial.
    tdname = vbeln.
    call function 'READ_TEXT'
      exporting
        client = sy-mandt
        id = 'Z005'
        language = sy-langu
        name = tdname
        object = 'VBBK'
      tables
        lines = it_tlines
      exceptions
        id = 1
        language = 2
        name = 3
        not_found = 4
        object = 5
        reference_check = 6
        wrong_access_to_archive = 7.
    if sy-subrc = 0.
      data: moff TYPE i,
            mlen TYPE i,
            datcont(10) type c,
            offset type i,
            string type string.

      loop at it_tlines assigning <fs_tlines>.
        find first occurrence of regex '[0-2]?[0-9].[0-1][0-9].[2][0-3][0-9][0-9]' in <fs_tlines>-tdline
            match offset moff
            match length mlen.
        if sy-subrc = 0.
          offset = moff + mlen.
          <fs_tlines>-tdline = <fs_tlines>-tdline+0(offset).
          datcont = <fs_tlines>-tdline+moff(mlen).
          find first occurrence of '.' in datcont
              match offset moff
              match length mlen.
          offset = 4 + moff.
          <fs_zissuance>-contractdata(4) = datcont+offset(4).
          offset = 1 + moff.
          <fs_zissuance>-contractdata+4(2) = datcont+offset(2).
          <fs_zissuance>-contractdata+6(2) = datcont(offset).
          replace datcont with '' into <fs_tlines>-tdline.
          replace 'ОТ' with '' into <fs_tlines>-tdline.
          <fs_zissuance>-contractnumber = <fs_tlines>-tdline.
        else.
          find first occurrence of regex '[0-2]?[0-9].[0-1][0-9].[0-9][0-9]' in <fs_tlines>-tdline
            match offset moff
            match length mlen.
            if sy-subrc = 0.
              offset = moff + mlen.
              <fs_tlines>-tdline = <fs_tlines>-tdline+0(offset).
              datcont = <fs_tlines>-tdline+moff(mlen).
              find first occurrence of '.' in datcont
                  match offset moff
                  match length mlen.
              offset = 4 + moff.
              <fs_zissuance>-contractdata(2) = '20'.
              <fs_zissuance>-contractdata+2(2) = datcont+offset(2).
              offset = 1 + moff.
              <fs_zissuance>-contractdata+4(2) = datcont+offset(2).
              <fs_zissuance>-contractdata+6(2) = datcont(offset).
              replace datcont with '' into <fs_tlines>-tdline.
              replace 'ОТ' with '' into <fs_tlines>-tdline.
              replace 'от' with '' into <fs_tlines>-tdline.
              string = <fs_tlines>-tdline.
              find first occurrence of regex '[0-9]' in <fs_tlines>-tdline
                match offset moff
                match length mlen.
*              perform find_digits using string.
*              condense string.
              if sy-subrc = 0.
                offset = strlen( <fs_tlines>-tdline ) - moff .
                <fs_zissuance>-contractnumber = <fs_tlines>-tdline+moff(offset).
              else.
                <fs_zissuance>-contractnumber = <fs_tlines>-tdline.
              endif.
            endif.
        endif.
      endloop.
    endif.
  endif.
  lifexblank = lifex.
  condense lifexblank.
  lifexblank+2(1) = '0'.
  translate lifexblank to upper case.
  condense lifex no-gaps.
  translate lifex to upper case.
  if bstkd is not initial.
    <fs_zissuance>-contractnumber = bstkd.
  endif.
  if bstdk is not initial.
    <fs_zissuance>-contractdata = bstdk.
  endif.
  <fs_zissuance>-contractdocdata = wadat_ist .
  <fs_zissuance>-contractblseria = lifex(2).
  <fs_zissuance>-contractblnumber = lifex+2.
*Вид документа и код бланка
  if vbtyp_v = 'J' or vbtyp_v = 'T'.
    select * into corresponding fields of table it_equi from equi where equi~sernr = lifexblank.
    sort it_equi by erdat descending.
    read table it_equi index 1 assigning <fs_equi>.
    if <fs_equi> is assigned.
      matnr = <fs_equi>-matnr.
      select single msbookpartno normt into (msbookpartno,normt) from mara where matnr = matnr.
        if sy-subrc = 0.
          <fs_zissuance>-contractdoct = msbookpartno.
          <fs_zissuance>-contractblcode = normt.
        else.
          clear: msbookpartno, normt, matnr.
        endif.
      unassign <fs_equi>.
    else.
      clear: matnr.
    endif.
  else.
    select single  vbfa~vbtyp_v into vbtyp_v from vbfa  where vbfa~vbeln = <fs_vbrk>-vbeln and ( vbfa~vbtyp_v = 'C' or vbfa~vbtyp_v = 'J' ) and vbfa~vbtyp_n = 'M'.
    if sy-subrc = 0.
      <fs_zissuance>-contractdoct = '608'.
      <fs_zissuance>-contractblcode = ''.
      if <fs_zissuance>-contractnumber is initial.
        <fs_zissuance>-contractnumber = <fs_vbrk>-vbeln.
      endif.
      if <fs_zissuance>-contractdata is initial.
        <fs_zissuance>-contractdata = <fs_vbrk>-fkdat.
      endif.
      <fs_zissuance>-contractdocdata = <fs_vbrk>-fkdat.
      <fs_zissuance>-contractblnumber = <fs_vbrk>-vbeln.
      clear: <fs_zissuance>-cogneaddress, <fs_zissuance>-consaddress.
    endif.
  endif.
  if <fs_zissuance>-contractdoct is initial or vbtyp_v = 'T'.
    <fs_zissuance>-contractdoct = '601'.
  endif.
*Пункт выгрузки

  if <fs_zissuance>-contractdoct = '608'.
  else.
    tdname = vbeln.
*   Пункта отправления
    if <fs_zissuance>-contractdoct = '603'.
      perform read_text using 'Z030'
                              tdname
                              'VBBK'
                        changing <fs_zissuance>-consaddress.
      perform read_text using     'Z031'
                                vbeln
                                'VBBK'
                      changing  <fs_zissuance>-cogneaddress.
    endif.

*   Адрес погрузки, если не заполнен из текста z030
    if <fs_zissuance>-consaddress is initial.
      read table it_tvko assigning <fs_tvko> with table key vkorg = <fs_vbrk>-vkorg.
      if <fs_tvko> is assigned.
        read table it_adrc assigning <fs_adrc> with table key addrnumber = <fs_tvko>-adrnr.
        if <fs_adrc> is assigned.
          concatenate <fs_adrc>-city1 <fs_adrc>-street <fs_adrc>-house_num1 into <fs_zissuance>-consaddress separated by ', '.
        endif.
      endif.
    endif.
*   Пункт назначения  если не заполнен из текста z031

    if <fs_zissuance>-cogneaddress is initial.
      select single adrnr from vbpa into lf_adrnr where vbeln eq <fs_vbrk>-vbeln and parvw EQ 'WE'.
      if sy-subrc = 0.
        read table it_adrc assigning <fs_adrc> with table key addrnumber = lf_adrnr.
        if <fs_adrc> is assigned.
          concatenate <fs_adrc>-city1 <fs_adrc>-street <fs_adrc>-house_num1 into <fs_zissuance>-cogneaddress separated by ', '.
        endif.
      endif.
    endif.
  endif.
  select * from vbrp appending corresponding fields of table it_vbrp where vbeln = <fs_vbrk>-vbeln.
  clear: <fs_zissuance>-totalvat.
  select * from konv into table it_konv where knumv = <fs_vbrk>-knumv.
  gdatu = 99999999 - <fs_vbrk>-fkdat.
  select single ffact tfact  into (ffact,tfact) from tcurf where tcurr = waers and fcurr = <fs_vbrk>-waerk and kurst = 'M' and gdatu <= gdatu.
  if sy-subrc <> 0.
    ffact = 1.
    tfact = 1.
  endif.
  loop at it_vbrp assigning <fs_vbrp> where vbeln = <fs_vbrk>-vbeln.
    select single max( stawn ) into <fs_vbrp>-ean11 from marc where matnr = <fs_vbrp>-matnr. "код ТН ВЭД
    <fs_zissuance>-totalvat = <fs_zissuance>-totalvat + <fs_vbrp>-kzwi5 * <fs_vbrk>-kurrf  * tfact / ffact.
    if <fs_vbrk>-fkart = 'ZF6' or <fs_vbrk>-fkart = 'ZF7'.
      read table it_konv assigning <fs_konv> with key  kposn = <fs_vbrp>-posnr  kschl = 'ZPRM' kinak = ''.
      if <fs_konv> is assigned.
        <fs_vbrp>-netwr = <fs_konv>-kwert.
         unassign <fs_konv>.
      endif.
      read table it_konv assigning <fs_konv> with key kschl = 'ZND1' kposn = <fs_vbrp>-posnr.
      if <fs_konv> is assigned.
        <fs_vbrp>-kzwi1 = <fs_konv>-kbetr / 10.
         unassign <fs_konv>.
      endif.
    else.
      read table it_konv assigning <fs_konv> with key kschl = 'ZWB1' kposn = <fs_vbrp>-posnr.
      if <fs_konv> is assigned.
        <fs_vbrp>-kzwi1 = <fs_konv>-kbetr / 10.
         unassign <fs_konv>.
      endif.
    endif.
    <fs_vbrp>-volum = ffact / tfact.
    <fs_vbrp>-kursk = <fs_vbrk>-kurrf.
    append <fs_vbrp> to gt_vbrp.
  endloop.
   if <fs_vbrk>-fkart = 'ZF6' or <fs_vbrk>-fkart = 'ZF7'.
     <fs_zissuance>-totalcostvat = <fs_vbrk>-netwr * <fs_vbrk>-kurrf  * tfact / ffact.
     <fs_zissuance>-totalcost = <fs_zissuance>-totalcostvat - <fs_zissuance>-totalvat.
   else.
     <fs_zissuance>-totalcost = <fs_vbrk>-netwr * <fs_vbrk>-kurrf  * tfact / ffact.
     <fs_zissuance>-totalcostvat = <fs_zissuance>-totalvat + <fs_zissuance>-totalcost.
   endif.
  unassign: <fs_zissuance>.
endloop.
delete from zissuance.
clear: it_vbrk, it_t005, it_t005t, it_tvko, it_tvbur, it_adrc, it_kna1, it_vbrp.
insert zissuance from table gt_zissuance accepting duplicate keys.
update zissuance from table gt_zissuance.
modify zissuance from table gt_zissuance.

*-->>Выбор начальной папки из параметров
concatenate 'INITIAL' '_FOLDER' into zconstname.
read table gt_zissuance_cnst assigning <fs_zissuance_cnst> with table key constname = zconstname.
if <fs_zissuance_cnst> is assigned.
  initial_folder = <fs_zissuance_cnst>-value1.
  unassign <fs_zissuance_cnst>.
  clear: zconstname, zvalue.
endif.
call method cl_gui_frontend_services=>directory_browse
  exporting
    initial_folder   = initial_folder
    window_title  = 'Каталог выгрузки счетов'
  changing
    selected_folder = selected_folder
  exceptions
    cntl_error = 1
    error_no_gui = 2
    not_supported_by_gui = 3
    others = 4.
if sy-subrc <> 0.
  message id sy-msgid type sy-msgty number sy-msgno
             with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
elseif selected_folder is initial.
  leave screen.
endif.
loop at gt_zissuance assigning <fs_zissuance>.
  clear i.
  i = 1.
  clear: end, lt_vbrp, first.
  sort gt_vbrp by matnr uecha.
  loop at gt_vbrp assigning <fs_vbrp>  where vbeln = <fs_zissuance>-vbeln.
    if <fs_vbrp>-uecha > 0.
    else.
      <fs_vbrp>-uecha = <fs_vbrp>-posnr.
    endif.
    end = end + 1.
  endloop.
  loop at gt_vbrp assigning <fs_vbrp> where vbeln = <fs_zissuance>-vbeln.
    end = end - 1.
    if first = 0.
      first = 1.
      ls_vbrp = <fs_vbrp>.
      i = 1.
      ls_vbrp-fklmg = 0.
      ls_vbrp-netwr = 0.
      ls_vbrp-kzwi5 = 0.
      ls_vbrp-kzwi4 = 0.
      ls_vbrp-uepos = i.
      matnr = <fs_vbrp>-matnr.
      uecha = <fs_vbrp>-uecha.
      kzwi1 = <fs_vbrp>-kzwi1.
    endif.
    if matnr = <fs_vbrp>-matnr and uecha = <fs_vbrp>-uecha.
      if <fs_vbrp>-kzwi1 > kzwi1.
        ls_vbrp-kzwi1 = <fs_vbrp>-kzwi1.
      endif.
      ls_vbrp-fklmg = ls_vbrp-fklmg + <fs_vbrp>-fklmg.
      ls_vbrp-netwr = ls_vbrp-netwr + <fs_vbrp>-netwr.
      ls_vbrp-kzwi5 = ls_vbrp-kzwi5 + <fs_vbrp>-kzwi5.
      ls_vbrp-kzwi4 = ls_vbrp-kzwi4 + <fs_vbrp>-kzwi4.
    else.
      append ls_vbrp to lt_vbrp.
      ls_vbrp = <fs_vbrp>.
      i = i + 1.
      ls_vbrp-uepos = i.
      matnr = <fs_vbrp>-matnr.
      if <fs_vbrp>-uecha > 0.
        uecha = <fs_vbrp>-uecha.
      endif.
    endif.
    if end = 0.
      append ls_vbrp to lt_vbrp.
    endif.
  endloop.
  loop at lt_vbrp assigning <fs_vbrp> where vbeln = <fs_zissuance>-vbeln.
    if <fs_zissuance>-fkart = 'ZS1' "СторноCчетФактуры
     or <fs_zissuance>-fkart = 'S2' " Сторно кредит-авизо
     or <fs_zissuance>-fkart = 'ZRE' "Кредитов. возврата
     or <fs_zissuance>-fkart = 'ZG2'. "Кредитовое авизо
    <fs_vbrp>-fklmg = -1 * <fs_vbrp>-fklmg.
    <fs_vbrp>-netwr = -1 * <fs_vbrp>-netwr.
    <fs_vbrp>-kzwi5 = -1 * <fs_vbrp>-kzwi5.
    <fs_vbrp>-kzwi4 = -1 * <fs_vbrp>-kzwi4.
  endif.
  endloop.
  if <fs_zissuance>-fkart = 'ZS1' "СторноCчетФактуры
     or <fs_zissuance>-fkart = 'S2' " Сторно кредит-авизо
     or <fs_zissuance>-fkart = 'ZRE' "Кредитов. возврата
     or <fs_zissuance>-fkart = 'ZG2'. "Кредитовое авизо
     <fs_zissuance>-totalvat = -1 * <fs_zissuance>-totalvat.
    <fs_zissuance>-totalcost =     -1 * <fs_zissuance>-totalcost.
    <fs_zissuance>-totalcostvat =  -1 * <fs_zissuance>-totalcostvat.
   endif.
   sort lt_vbrp by posnr.
   i = 1.
   loop at lt_vbrp assigning <fs_vbrp>.
     <fs_vbrp>-uepos = i. i = i + 1.
   endloop.
    cl_issuance->export_xml( exporting patch = selected_folder issuance = <fs_zissuance> vbrp = lt_vbrp ).
endloop.
form find_digits changing text type string.
  DATA: text_tab TYPE TABLE OF string,
        str(5) type c,
        result_tab TYPE TABLE OF int2 WITH HEADER LINE.
  split text at space into table text_tab.
  replace all occurrences of regex:
      '[ [:punct:] ]' in table text_tab with '',
      '[ [:alpha:] ]' in table text_tab with '',
      '[ [:blank:] ]' in table text_tab with '',
      '[ [:space:] ]' in table text_tab with ''.
  delete text_tab where table_line is initial.
  append lines of text_tab to result_tab.
  clear text.
  loop at result_tab.
    str = result_tab.
    concatenate text str into text.
  endloop.
  condense text.
endform.
*&---------------------------------------------------------------------*
*&      Form  READ_TEXT
*&---------------------------------------------------------------------*
FORM read_text  USING     p_id
                          p_tdname
                          p_object
                CHANGING  p_text.

* <= 05.10.2015 PIMENOV_SV
*" <= 01.10.2015 PIMENOV_SV
* TYPES: BEGIN OF t_text,
*          text(72) TYPE c,
*        END OF t_text.

* DATA: i_textstream TYPE TABLE OF t_text,
*       w_textstream TYPE t_text.
*" => 01.10.2015 PIMENOV_SV
" => 05.10.2015 PIMENOV_SV

  DATA: lt_tline TYPE TABLE OF tline,
        ls_tline TYPE tline.
*      lf_tdname type tdobname.
  DATA: lf_id     TYPE tdid,
        lf_name   TYPE tdobname,
        lf_object TYPE tdobject.

  lf_id = p_id.
  lf_name = p_tdname.
  lf_object = p_object.

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      client                  = sy-mandt
      id                      = lf_id
      language                = sy-langu
      name                    = lf_name
      object                  = lf_object
    TABLES
      lines                   = lt_tline
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.

  IF sy-subrc EQ 0.
* <= 05.10.2015 PIMENOV_SV
*" <= 01.10.2015 PIMENOV_SV
*   CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
*     EXPORTING
*       language    = sy-langu
*     TABLES
*       itf_text    = lt_tline
*       text_stream = i_textstream.

    LOOP AT lt_tline INTO ls_tline.
      CONCATENATE p_text ls_tline-tdline
*   LOOP AT i_textstream INTO w_textstream.
*     CONCATENATE p_text w_textstream-text
* => 01.10.2015 PIMENOV_SV
      INTO p_text SEPARATED BY space.
    ENDLOOP.
    CONDENSE p_text.
    REPLACE ALL OCCURRENCES OF '<(>&<)>' IN p_text WITH '&' IN CHARACTER MODE.
* => 05.10.2015 PIMENOV_SV
  ENDIF.
ENDFORM.                    " READ_TEXT
*&---------------------------------------------------------------------*
*&      Form  GET_UNLOADING_POINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LF_ADRNR  text
*      <--P_LS_ZTTN1_DATA_UNLOADING  text
*----------------------------------------------------------------------*
FORM get_unloading_point  USING iv_adrnr          TYPE tvko-adrnr
                          CHANGING value(ev_name) TYPE c.

  DATA: itab_adrc             TYPE adrc,
        landx                 TYPE t005t-landx,
        ev_address_house(30)  TYPE c.

** Адреса (центральное управление адресами)
  SELECT SINGLE city1 street
                house_num1 house_num2 house_num3 langu
    FROM  adrc
    INTO CORRESPONDING FIELDS OF itab_adrc
    WHERE addrnumber = iv_adrnr.

  IF itab_adrc IS NOT INITIAL.

* Строка с бла-бла-и-адресами
    CONCATENATE itab_adrc-house_num1
                itab_adrc-house_num2
                itab_adrc-house_num3
    INTO ev_address_house
    SEPARATED BY space.

    CONCATENATE itab_adrc-city1 itab_adrc-street
      INTO ev_name
      SEPARATED BY ', '.

    CONCATENATE ev_name ev_address_house
      INTO ev_name
      SEPARATED BY space.

    CONDENSE ev_name.

  ENDIF.

ENDFORM.
                 " GET_POS_NAME
*}   INSERT
method EXPORT_XML.
*  Вывод xml-файла
  type-pools: ixml.
  types:begin of xml_line,
          data(256) type x,
        end of xml_line.
  data: l_ixml            type ref to if_ixml,
        l_streamfactory   type ref to if_ixml_stream_factory,
        l_ostream         type ref to if_ixml_ostream,
        l_renderer        type ref to if_ixml_renderer,
        l_document        type ref to if_ixml_document,
        l_xml_table       type table of xml_line,
        l_xml_size        type i,
        l_rc              type i.
  data: l_element_general type ref to if_ixml_element,
        l_element_issuance type ref to if_ixml_element,
        l_element_generaltype type ref to if_ixml_element,
        l_element_number type ref to if_ixml_element,
        l_element_dateIssuance type ref to if_ixml_element,
        l_element_dateTransaction type ref to if_ixml_element,
        l_element_documentType type ref to if_ixml_element,
        l_element_provider type ref to if_ixml_element,
        l_element_providerStatus type ref to if_ixml_element,
        l_element_dependentPerson type ref to if_ixml_element,
        l_element_residentsOfOffshore type ref to if_ixml_element,
        l_element_specialDealGoods type ref to if_ixml_element,
        l_element_bigCompany type ref to if_ixml_element,
        l_element_countryCode type ref to if_ixml_element,
        l_element_unp type ref to if_ixml_element,
        l_element_name type ref to if_ixml_element,
        l_element_address type ref to if_ixml_element,
        l_element_taxes type ref to if_ixml_element,
        l_element_number_t type ref to if_ixml_element,
        l_element_date type ref to if_ixml_element,
        l_element_recipient type ref to if_ixml_element,
        l_element_recipientStatus type ref to if_ixml_element,
        l_element_dependentPerson1 type ref to if_ixml_element,
        l_element_residentsOfOffshore1 type ref to if_ixml_element,
        l_element_specialDealGoods1 type ref to if_ixml_element,
        l_element_bigCompany1 type ref to if_ixml_element,
        l_element_countryCode1 type ref to if_ixml_element,
        l_element_unp1 type ref to if_ixml_element,
        l_element_name1 type ref to if_ixml_element,
        l_element_address1 type ref to if_ixml_element,
        l_element_senderReceiver  type ref to if_ixml_element,
        l_element_consignors type ref to if_ixml_element,
        l_element_consignor type ref to if_ixml_element,
        l_element_countruCode2 type ref to if_ixml_element,
        l_element_unp2 type ref to if_ixml_element,
        l_element_name2 type ref to if_ixml_element,
        l_element_address2 type ref to if_ixml_element,
        l_element_consignees type ref to if_ixml_element,
        l_element_consignee type ref to if_ixml_element,
        l_element_countruCode3 type ref to if_ixml_element,
        l_element_unp3 type ref to if_ixml_element,
        l_element_name3 type ref to if_ixml_element,
        l_element_address3 type ref to if_ixml_element,
        l_element_deliveryCondition type ref to if_ixml_element,
        l_element_contract type ref to if_ixml_element,
        l_element_number1 type ref to if_ixml_element,
        l_element_date1 type ref to if_ixml_element,
        l_element_documents type ref to if_ixml_element,
        l_element_document type ref to if_ixml_element,
        l_element_docType type ref to if_ixml_element,
        l_element_code type ref to if_ixml_element,
        l_element_date2 type ref to if_ixml_element,
        l_element_blankCode type ref to if_ixml_element,
        l_element_seria type ref to if_ixml_element,
        l_element_number2 type ref to if_ixml_element,
        l_element_roster type ref to if_ixml_element,
        l_element_rosterItem type ref to if_ixml_element,
        l_element_number3 type ref to if_ixml_element,
        l_element_name4 type ref to if_ixml_element,
        l_element_code1 type ref to if_ixml_element,
        l_element_units type ref to if_ixml_element,
        l_element_count type ref to if_ixml_element,
        l_element_price type ref to if_ixml_element,
        l_element_cost type ref to if_ixml_element,
        l_element_summaExcise type ref to if_ixml_element,
        l_element_vat type ref to if_ixml_element,
        l_element_rate type ref to if_ixml_element,
        l_element_rateType type ref to if_ixml_element,
        l_element_summaVat type ref to if_ixml_element,
        l_element_costVat type ref to if_ixml_element,
        l_element_descriptions type ref to if_ixml_element,
        l_element_description type ref to if_ixml_element.


  data: xmlns type zvalue,
        sender type zvalue,
*{   INSERT         EGPK900316                                        2
        str(16) type c,
*}   INSERT
        string type string,
        zconstname type zconstname,
        zvalue type zvalue,
        str20(20) type c,
        it_vbrp type table of vbrp.
  field-symbols: <fs_vbrp> type vbrp.

  it_vbrp[] = vbrp[].

*  <-----вывод xml-файла
  me->select_parameter( exporting constname = 'xmlns' importing value = xmlns ).
  me->select_parameter( exporting constname = 'sender' importing value = sender ).
  l_ixml = cl_ixml=>create( ).
  l_document = l_ixml->create_document( ).

  l_element_issuance = l_document->create_simple_element( name = 'issuance' parent = l_document ).
  clear string.
  string = xmlns.
  translate string to lower case.
  l_rc = l_element_issuance->set_attribute( name = 'xmlns' value = string ).
  clear string.
  string = sender.
  l_rc = l_element_issuance->set_attribute( name = 'sender' value = string ).

*  Общий раздел
  l_element_general = l_document->create_simple_element( name = 'general' parent = l_element_issuance ).
  clear string.
  string = issuance-znumber.
  l_element_number = l_document->create_simple_element( name = 'number' value = string parent = l_element_general ).
  clear string.
*  string = sy-datum.
  concatenate sy-datum(4) '-' sy-datum+4(2) '-' sy-datum+6(2) into string.
  l_element_dateIssuance = l_document->create_simple_element( name = 'dateIssuance' value = string parent = l_element_general ).
  clear string.
*  string = issuance-datetr.
  concatenate issuance-datetr(4) '-' issuance-datetr+4(2) '-' issuance-datetr+6(2) into string.
  l_element_dateTransaction = l_document->create_simple_element( name = 'dateTransaction' value = string parent = l_element_general ).
  clear string.
  string = issuance-doctype.
  l_element_documentType = l_document->create_simple_element( name = 'documentType' value = string parent = l_element_general ).

*  Реквизиты поставщика
  l_element_provider = l_document->create_simple_element( name = 'provider' parent = l_element_issuance ).
  clear string.
  string = issuance-provstat.
  l_element_providerStatus = l_document->create_simple_element( name = 'providerStatus' value = string parent = l_element_provider ).
  if issuance-provdeppers = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_dependentPerson = l_document->create_simple_element( name = 'dependentPerson' value = string parent = l_element_provider ).
  if issuance-provoffshore = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_residentsOfOffshore = l_document->create_simple_element( name = 'residentsOfOffshore' value = string parent = l_element_provider ).
  if issuance-provspecgoods = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_specialDealGoods = l_document->create_simple_element( name = 'specialDealGoods' value = string parent = l_element_provider ).
  if issuance-provbigcomp = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_bigCompany = l_document->create_simple_element( name = 'bigCompany' value = string parent = l_element_provider ).
  clear string.
  string = issuance-provcountrycode.
  l_element_countryCode = l_document->create_simple_element( name = 'countryCode' value = string parent = l_element_provider ).
  clear string.
  string = issuance-provunp.
  l_element_unp = l_document->create_simple_element( name = 'unp' value = string parent = l_element_provider ).
  clear string.
  string = issuance-provname.
  l_element_name = l_document->create_simple_element( name = 'name' value = string parent = l_element_provider ).
  clear string.
  string = issuance-provaddress.
  l_element_address = l_document->create_simple_element( name = 'address' value = string parent = l_element_provider ).
*  l_element_taxes = l_document->create_simple_element( name = 'taxes' parent = l_element_provider ).
*  string =
*  l_element_number_t = l_document->create_simple_element( name = 'number_t' value = '6317191120150002' parent = l_element_taxes ).
*  l_element_date = l_document->create_simple_element( name = 'date' value = '2015-11-19' parent = l_element_taxes ).

*  Реквизиты получателя
  l_element_recipient = l_document->create_simple_element( name = 'recipient' parent = l_element_issuance ).
  clear string.
  string = issuance-recstat.
  l_element_recipientStatus = l_document->create_simple_element( name = 'recipientStatus' value = string parent = l_element_recipient ).
  clear string.
  if issuance-recdeppers = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_dependentPerson1 = l_document->create_simple_element( name = 'dependentPerson' value = string parent = l_element_recipient ).
  clear string.
  if issuance-recoffshore = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_residentsOfOffshore1 = l_document->create_simple_element( name = 'residentsOfOffshore' value = string parent = l_element_recipient ).
  clear string.
  if issuance-recspecgoods = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_specialDealGoods1 = l_document->create_simple_element( name = 'specialDealGoods' value = string parent = l_element_recipient ).
  clear string.
  if issuance-recbigcomp = 'X'. string = 'true'. else. string = 'false'. endif.
  l_element_bigCompany1 = l_document->create_simple_element( name = 'bigCompany' value = string parent = l_element_recipient ).
  clear string.
  string = issuance-reccountrycode.
  l_element_countryCode1 = l_document->create_simple_element( name = 'countryCode' value = string parent = l_element_recipient ).
  clear string.
  string = issuance-recunp.
  l_element_unp1 = l_document->create_simple_element( name = 'unp' value = string parent = l_element_recipient ).
  clear string.
  string = issuance-recname.
  l_element_name1 = l_document->create_simple_element( name = 'name' value = string parent = l_element_recipient ).
  clear string.
  string = issuance-recaddress.
  l_element_address1 = l_document->create_simple_element( name = 'address' value = string parent = l_element_recipient ).

*  Реквизиты грузопоотправителя и грузополучателя
  l_element_senderReceiver = l_document->create_simple_element( name = 'senderReceiver' parent = l_element_issuance ).

*  Список грузоотправителей
  l_element_consignors = l_document->create_simple_element( name = 'consignors' parent = l_element_senderReceiver ).
*{   REPLACE        EGPK900316                                       10
*\
if issuance-consaddress is not initial.
*}   REPLACE
*  Грузоотправитель
  l_element_consignor = l_document->create_simple_element( name = 'consignor' parent = l_element_consignors ).
  clear string.
  string = issuance-provcountrycode.
  l_element_countruCode2 = l_document->create_simple_element( name = 'countryCode' value = string parent = l_element_consignor ).
  clear string.
  string = issuance-provunp.
  l_element_unp2 = l_document->create_simple_element( name = 'unp' value = string parent = l_element_consignor ).
  clear string.
  string = issuance-provname.
  l_element_name2 = l_document->create_simple_element( name = 'name' value = string parent = l_element_consignor ).
  clear string.
  string = issuance-consaddress.
  l_element_address2 = l_document->create_simple_element( name = 'address' value = string parent = l_element_consignor ).

*{   INSERT         EGPK900316                                        9
endif.
*}   INSERT
*  Список грузополучателей
  l_element_consignees = l_document->create_simple_element( name = 'consignees' parent = l_element_senderReceiver ).
*{   INSERT         EGPK900316                                        8

if issuance-cogneaddress is not  initial.
*}   INSERT

*  Грузополучатель
  l_element_consignee = l_document->create_simple_element( name = 'consignee' parent = l_element_consignees ).
  clear string.
  string = issuance-reccountrycode.
  l_element_countruCode3 = l_document->create_simple_element( name = 'countryCode' value = string parent = l_element_consignee ).
  clear string.
  string = issuance-recunp.
  l_element_unp3 = l_document->create_simple_element( name = 'unp' value = string parent = l_element_consignee ).
  clear string.
  string = issuance-recname.
  l_element_name3 = l_document->create_simple_element( name = 'name' value = string parent = l_element_consignee ).
  clear string.
*{   REPLACE        EGPK900316                                        6
*\  string = issuance-recaddress.
  string = issuance-cogneaddress.
*}   REPLACE
  l_element_address3 = l_document->create_simple_element( name = 'address' value = string parent = l_element_consignee ).
*{   INSERT         EGPK900316                                        7
 endif.
*}   INSERT

*  Условия поставки
  l_element_deliveryCondition = l_document->create_simple_element( name = 'deliveryCondition' parent = l_element_issuance ).

*  Договор (контракт) на поставку товаров (выполнения работ, оказания услуг), передачу имущественных прав
  l_element_contract = l_document->create_simple_element( name = 'contract' parent = l_element_deliveryCondition  ).
  clear string.
  string = issuance-contractnumber.
  l_element_number1 = l_document->create_simple_element( name = 'number' value = string parent = l_element_contract ).
  clear string.
  string = issuance-contractdata.
  concatenate issuance-contractdata(4) '-' issuance-contractdata+4(2) '-' issuance-contractdata+6(2) into string.
  l_element_date1 = l_document->create_simple_element( name = 'date' value = string parent = l_element_contract ).

*  Документы, подтверждающие поставку товаров (работ, услуг), передачу имущественных прав
  l_element_documents = l_document->create_simple_element( name = 'documents' parent = l_element_contract ).
  l_element_document = l_document->create_simple_element( name = 'document' parent = l_element_documents ).
  l_element_docType = l_document->create_simple_element( name = 'docType' parent = l_element_document ).
  clear string.
  string = issuance-contractdoct.
  l_element_code = l_document->create_simple_element( name = 'code' value = string parent = l_element_docType ).
  clear string.
*  string = issuance-contractdocdata.
  concatenate issuance-contractdocdata(4) '-' issuance-contractdocdata+4(2) '-' issuance-contractdocdata+6(2) into string.
  l_element_date2 = l_document->create_simple_element( name = 'date' value = string parent = l_element_document ).
  clear string.
  string = issuance-contractblcode.
  l_element_blankCode = l_document->create_simple_element( name = 'blankCode' value = string parent = l_element_document ).
  clear string.
  string = issuance-contractblseria.
  l_element_seria = l_document->create_simple_element( name = 'seria' value = string parent = l_element_document ).
  clear string.
  string = issuance-contractblnumber.
  l_element_number2 = l_document->create_simple_element( name = 'number' value = string parent = l_element_document ).

*  Данные по товарам (работам, услугам), имущественным правам
  l_element_roster = l_document->create_simple_element( name = 'roster' parent = l_element_issuance ).
  clear string.
  string = issuance-totalcostvat.
*{   INSERT         EGPK900316                                       19
  call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
  l_rc = l_element_roster->set_attribute( name = 'totalCostVat' value = string ).
  clear string.
  string = issuance-totalexcise.
*{   INSERT         EGPK900316                                       18
  call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
  l_rc = l_element_roster->set_attribute( name = 'totalExcise' value = string ).
  clear string.
  string = issuance-totalvat.
*{   INSERT         EGPK900316                                       17
  call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
  l_rc = l_element_roster->set_attribute( name = 'totalVat' value = string ).
  clear string.
  string = issuance-totalcost.
*{   INSERT         EGPK900316                                       16
  call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
  l_rc = l_element_roster->set_attribute( name = 'totalCost' value = string ).
  loop at it_vbrp assigning <fs_vbrp> where vbeln = issuance-vbeln.
    l_element_rosterItem = l_document->create_simple_element( name = 'rosterItem' parent = l_element_roster ).
    clear string.
*{   REPLACE        EGPK900316                                        5
*\    if <fs_vbrp>-posnr = 0.
    if <fs_vbrp>-uepos = 0.
*}   REPLACE
      string = '0'.
    else.
*{   REPLACE        EGPK900316                                        4
*\      write <fs_vbrp>-posnr to str20 no-zero.
      write <fs_vbrp>-uepos to str20 no-zero.
*}   REPLACE
      string = str20.
    endif.
    condense string.
    l_element_number3 = l_document->create_simple_element( name = 'number' value = string parent = l_element_rosterItem ).
    concatenate <fs_vbrp>-matnr <fs_vbrp>-arktx into string.
*{   INSERT         EGPK900316                                        3
    string = zcl_sd_item_name_generator=>print_item_name( i_document_number = <fs_vbrp>-vbeln
                                                          i_position_number = <fs_vbrp>-posnr ).
*}   INSERT
    l_element_name4 = l_document->create_simple_element( name = 'name' value = string parent = l_element_rosterItem ).
    if <fs_vbrp>-kzwi1 = 0 or <fs_vbrp>-kzwi1 = 10.
      string = <fs_vbrp>-ean11.
      l_element_code1 = l_document->create_simple_element( name = 'code' value = string parent = l_element_rosterItem ).
    endif.
    clear string.
    select single okei into string from j_3rj_uom_conv where uom = <fs_vbrp>-vrkme.
    l_element_units = l_document->create_simple_element( name = 'units' value = string parent = l_element_rosterItem ).
    clear string.
    string = <fs_vbrp>-fklmg.
    condense string.
*{   INSERT         EGPK900316                                       11
    call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
    l_element_count = l_document->create_simple_element( name = 'count' value = string parent = l_element_rosterItem ).
    l_element_price = l_document->create_simple_element( name = 'price' value = '0' parent = l_element_rosterItem ).
    clear string.
*{   REPLACE        EGPK900316                                        1
*\    string = <fs_vbrp>-netwr.
    string = <fs_vbrp>-netwr * <fs_vbrp>-kursk / <fs_vbrp>-volum.
    write string to str decimals 2.
*}   REPLACE
    condense string.
*{   INSERT         EGPK900316                                       12
    call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
    l_element_cost = l_document->create_simple_element( name = 'cost' value = string parent = l_element_rosterItem ).
    l_element_summaExcise = l_document->create_simple_element( name = 'summaExcise' value = '0' parent = l_element_rosterItem ).

*    НДС
    l_element_vat = l_document->create_simple_element( name = 'vat' parent = l_element_rosterItem ).
    string = <fs_vbrp>-kzwi1.
*{   INSERT         EGPK900316                                       15
    call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
    l_element_rate = l_document->create_simple_element( name = 'rate' value = string parent = l_element_vat ).
    if <fs_vbrp>-kzwi1 = 0.
      string = 'ZERO'.
    else.
      string = 'DECIMAL'.
    endif.
    l_element_rateType = l_document->create_simple_element( name = 'rateType' value = string parent = l_element_vat ).
    clear string.
    string = <fs_vbrp>-kzwi5 * <fs_vbrp>-kursk / <fs_vbrp>-volum.
    condense string.
*{   INSERT         EGPK900316                                       13
    call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
    l_element_summaVat = l_document->create_simple_element( name = 'summaVat' value = string parent = l_element_vat ).
    clear string.
    string = <fs_vbrp>-kzwi4 * <fs_vbrp>-kursk / <fs_vbrp>-volum.
    condense string.
*{   INSERT         EGPK900316                                       14
    call function 'CLOI_PUT_SIGN_IN_FRONT' changing value = string.
*}   INSERT
    l_element_costVat = l_document->create_simple_element( name = 'costVat' value = string parent = l_element_rosterItem ).

*    Дополнительные сведения
*    l_element_descriptions = l_document->create_simple_element( name = 'descriptions' parent = l_element_rosterItem ).
*    l_element_description = l_document->create_simple_element( name = 'description' value = '' parent = l_element_descriptions ).
  endloop.
*     Creating a stream factory
  l_streamfactory = l_ixml->create_stream_factory( ).
*     Connect internal XML table to stream factory
  l_ostream = l_streamfactory->create_ostream_itable( table = l_xml_table ).

*     Rendering the document
  l_renderer = l_ixml->create_renderer( ostream  = l_ostream
                                            document = l_document ).
  l_rc = l_renderer->render( ).

*     Saving the XML document
  l_xml_size = l_ostream->get_num_written_raw( ).
  concatenate patch '\' issuance-znumber '.xml' into string.
  call method cl_gui_frontend_services=>gui_download
    exporting
      bin_filesize = l_xml_size
      filename     = string
      filetype     = 'BIN'
    changing
      data_tab     = l_xml_table
    exceptions
      others       = 24.
  if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno
               with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  endif.
endmethod.
method SELECT_PARAMETER.
  data constname_u type zconstname.
  constname_u = constname.
  translate constname_u to upper case.
  select single value1 from zissuance_cnst into value where constname = constname_u.
endmethod.

Добавить комментарий