Текущее время: Пн, июл 21 2025, 17:07

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


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


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 16:33 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 29 2011, 12:26
Сообщения: 25
Всем добрый день.
Есть таблица БД, например - Z_waybill, через транзакцию Z_WB в нее записываются значение применимые к EO определеного авто- (серия,номер, дата. документа, время поездки, пути и т.д.).нужно добиться чтобы все эти значения можно было просматривать, в случае чего модифицировать, дополнять желательно на другом SELECTION-SCREEN. плюс нужна выгрузка в готовый DOC шаблон. Что вы можете посоветовать начинающему АБАПЕРУ?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 16:47 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
g-relov написал(а):
Всем добрый день.
Есть таблица БД, например - Z_waybill, через транзакцию Z_WB в нее записываются значение применимые к EO определеного авто- (серия,номер, дата. документа, время поездки, пути и т.д.).нужно добиться чтобы все эти значения можно было просматривать, в случае чего модифицировать, дополнять желательно на другом SELECTION-SCREEN. плюс нужна выгрузка в готовый DOC шаблон. Что вы можете посоветовать начинающему АБАПЕРУ?

НАЧИНАЮЩЕМУ абаперу хочу посоветовать
1) Потребовать чёткой постановки задачи с максимальной детализацией
2) Изучить теоретические основы (курсы BCxxx)
3) При появлении более конкретных и детальных вопросов вначале пользоваться поиском
4) Найти документацию и изучить транзакцию Z_WB

_________________
"После" - не значит "вследствие"


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 17:17 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 29 2011, 12:26
Сообщения: 25
sy-uname написал(а):
g-relov написал(а):
Всем добрый день.
Есть таблица БД, например - Z_waybill, через транзакцию Z_WB в нее записываются значение применимые к EO определеного авто- (серия,номер, дата. документа, время поездки, пути и т.д.).нужно добиться чтобы все эти значения можно было просматривать, в случае чего модифицировать, дополнять желательно на другом SELECTION-SCREEN. плюс нужна выгрузка в готовый DOC шаблон. Что вы можете посоветовать начинающему АБАПЕРУ?

НАЧИНАЮЩЕМУ абаперу хочу посоветовать
1) Потребовать чёткой постановки задачи с максимальной детализацией
2) Изучить теоретические основы (курсы BCxxx)
3) При появлении более конкретных и детальных вопросов вначале пользоваться поиском
4) Найти документацию и изучить транзакцию Z_WB



1) Вроде доступно обьяснил...
(Есть таблица БД, например - Z_waybill, через транзакцию Z_WB в нее записываются значение применимые к EO определеного авто- (серия,номер, дата. документа, время поездки, пути и т.д.).нужно добиться чтобы все эти значения можно было просматривать, в случае чего модифицировать, дополнять желательно на другом SELECTION-SCREEN. плюс нужна выгрузка в готовый DOC шаблон, который будет заполняться этими данными,(шаблон к примеру можно реализовать через смартформы))
2) Какие? можно поточней...
3) Без коментариев. если, б нашел, что нужно, я бы не задавал свой вопрос.
4) транзакция Z_WB и отчет, и таблица, все написано мной. с этим то я справился почти без проблем читая форумы, и другие ресурсы.
На форуме есть примеры выгрузки в файл из таблицы., мне же нужен вывод на селекционый экран значений табл. БД . Это нужно для управления документами аля путевыми листами. (то есть ведение, просмотр, изменение,печать, выгрузка в файл - Путевой лист автомобиля.doc) похожих примеров я не нашел(((


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 17:34 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 29 2011, 12:26
Сообщения: 25
ВОТ КОД ВЫГРУЗКИ ДАННЫХ ТАБЛИЦЫ В ФАЙЛ

Code:
TYPE-POOLS: abap.

CONSTANTS: gc_separator      TYPE char3   VALUE '#~#',
           gc_name_rec       TYPE char2   VALUE 'A0',
           gc_header_rec     TYPE char2   VALUE 'A1',
           gc_record_rec     TYPE char2   VALUE 'A2',
           gc_0d_replace     TYPE char6   VALUE '#~0D~#',  " Чем заменить перевод строки
           gc_0a_replace     TYPE char6   VALUE '#~0A~#'.  " Чем заменить перевод строки

TABLES: dd02l.

TYPES: BEGIN OF lty_tabline,
         rectype        TYPE char2,   " Тип записи файла
         line           TYPE string,  " Строка файла, поля разделены разделителями
       END OF lty_tabline,
       BEGIN OF lty_fieldname,
         fieldname   TYPE dd03l-fieldname,
       END OF lty_fieldname.

TYPES: lty_t_tabline     TYPE TABLE OF lty_tabline,
       lty_t_fieldname   TYPE TABLE OF lty_fieldname.

PARAMETERS: p_file    TYPE text255 OBLIGATORY.
SELECT-OPTIONS: s_tables   FOR dd02l-tabname.
PARAMETERS: p_exp     TYPE c RADIOBUTTON GROUP 1 DEFAULT 'X' USER-COMMAND exp,
            p_imp     TYPE c RADIOBUTTON GROUP 1,
            p_del     TYPE c AS CHECKBOX DEFAULT ' '.

SELECTION-SCREEN BEGIN OF BLOCK badd WITH FRAME TITLE text-add.
PARAMETERS: p_cond1   TYPE text50 MODIF ID exp,
            p_cond2   TYPE text50 MODIF ID exp,
            p_cond3   TYPE text50 MODIF ID exp.
SELECTION-SCREEN END OF BLOCK badd.

*----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM open_file_name CHANGING p_file.

*----------------------------------------------------------------------
AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'EXP'.
      PERFORM output.
  ENDCASE.

AT SELECTION-SCREEN OUTPUT.
  PERFORM output.

*----------------------------------------------------------------------
START-OF-SELECTION.
  IF p_exp = abap_true.
    PERFORM main_export.
  ELSE.
    PERFORM main_import.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  output
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM output.
  LOOP AT SCREEN.
    IF screen-name = 'P_DEL'.
      IF p_exp = abap_true.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
    ENDIF.

    IF screen-group1 = 'EXP'.
      IF p_exp = abap_true.
        screen-input = 1.
      ELSE.
        screen-input = 0.
      ENDIF.
    ENDIF.

    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.                    "output

*&---------------------------------------------------------------------*
*&      Form  export_table_to_file
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM add_table_to_file USING value(u_tabname)  TYPE dd02l-tabname
                       CHANGING ct_contents    TYPE lty_t_tabline
                                value(c_rc)    TYPE sysubrc.

  DATA: lt_fields         TYPE TABLE OF lty_fieldname,
        lr_data           TYPE REF TO data,
        lv_value          TYPE string,
        lv_tabix          TYPE sy-tabix,
        lv_dummy          TYPE bapiret2-message.

  FIELD-SYMBOLS: <ls_tabline>        TYPE lty_tabline,
                 <ls_fieldname>      TYPE lty_fieldname,
                 <lt_table>          TYPE table,
                 <ls_line>           TYPE ANY,
                 <lv_value>          TYPE ANY.

* Check if table exists
  SELECT SINGLE tabname
    INTO u_tabname
    FROM dd02l
    WHERE tabname  = u_tabname
      AND tabclass = 'TRANSP'.

  IF sy-subrc <> 0.
    MESSAGE e000(clhp) WITH 'Не найдена в системе таблица'(001) u_tabname
      INTO lv_dummy.
    c_rc = 1.
    RETURN.
  ENDIF.

* Заголовок - имя таблицы
  APPEND INITIAL LINE TO ct_contents ASSIGNING <ls_tabline>.
  <ls_tabline>-rectype = gc_name_rec.
  <ls_tabline>-line    = u_tabname.

* Заголовок таблицы (имена полей)
  PERFORM get_table_fields USING u_tabname CHANGING lt_fields.

  APPEND INITIAL LINE TO ct_contents ASSIGNING <ls_tabline>.
  <ls_tabline>-rectype = gc_header_rec.

  LOOP AT lt_fields ASSIGNING <ls_fieldname>.

    IF sy-tabix > 1.
      CONCATENATE <ls_tabline>-line gc_separator INTO <ls_tabline>-line.
    ENDIF.

    CONCATENATE <ls_tabline>-line <ls_fieldname>-fieldname INTO <ls_tabline>-line.
  ENDLOOP.

* Строки таблицы
  CREATE DATA lr_data TYPE TABLE OF (u_tabname).
  ASSIGN lr_data->* TO <lt_table>.

  " Применяем подходящие условия
  DO 1 TIMES.

    IF p_cond1 IS NOT INITIAL.
      TRY.

          SELECT *
            FROM (u_tabname)
            INTO TABLE <lt_table>
            WHERE (p_cond1).

          EXIT.
        CATCH cx_sy_dynamic_osql_semantics.
      ENDTRY.
    ENDIF.

    IF p_cond2 IS NOT INITIAL.
      TRY.

          SELECT *
            FROM (u_tabname)
            INTO TABLE <lt_table>
            WHERE (p_cond2).

          EXIT.
        CATCH cx_sy_dynamic_osql_semantics.
      ENDTRY.
    ENDIF.

    IF p_cond3 IS NOT INITIAL.
      TRY.

          SELECT *
            FROM (u_tabname)
            INTO TABLE <lt_table>
            WHERE (p_cond3).

          EXIT.
        CATCH cx_sy_dynamic_osql_semantics.
      ENDTRY.
    ENDIF.

    SELECT *
      FROM (u_tabname)
      INTO TABLE <lt_table>.
  ENDDO.

  LOOP AT <lt_table> ASSIGNING <ls_line>.

    APPEND INITIAL LINE TO ct_contents ASSIGNING <ls_tabline>.
    <ls_tabline>-rectype = gc_record_rec.

    LOOP AT lt_fields ASSIGNING <ls_fieldname>.

      lv_tabix = sy-tabix.

      ASSIGN COMPONENT <ls_fieldname>-fieldname OF STRUCTURE <ls_line> TO <lv_value>.
      IF sy-subrc = 0.
        lv_value = <lv_value>.
      ELSE.
        CLEAR lv_value.
      ENDIF.

      REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf(1) IN lv_value
        WITH gc_0d_replace.

      REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf+1(1) IN lv_value
        WITH gc_0a_replace.

      IF lv_tabix > 1.
        CONCATENATE <ls_tabline>-line gc_separator INTO <ls_tabline>-line.
      ENDIF.

      CONCATENATE <ls_tabline>-line lv_value INTO <ls_tabline>-line.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    " export_table_to_file
*&---------------------------------------------------------------------*
*&      Form  get_table_fields
*&---------------------------------------------------------------------*
*       Возвращает имена полей таблицы без mandt
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_table_fields USING value(u_tabname)  TYPE dd02l-tabname
                      CHANGING ct_fields      TYPE lty_t_fieldname.

  SELECT fieldname
    FROM dd03l
    INTO TABLE ct_fields
    WHERE tabname   = u_tabname
      AND precfield = space       " Исключаем include
      AND domname   <> 'MANDT'.   " Исключаем мандант
ENDFORM.                    " get_table_fields
*&---------------------------------------------------------------------*
*&      Form  get_all_tabnames_from_file
*&---------------------------------------------------------------------*
*       Возвращает список таблиц, которые есть в файле
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_all_tabnames_from_file USING    ut_content   TYPE lty_t_tabline
                                CHANGING ct_names     TYPE string_table.

  FIELD-SYMBOLS: <ls_tabline>     TYPE lty_tabline.

  REFRESH ct_names[].

  LOOP AT ut_content ASSIGNING <ls_tabline>
    WHERE rectype = gc_name_rec.

    APPEND <ls_tabline>-line TO ct_names.
  ENDLOOP.
ENDFORM.                    " get_all_tabnames_from_file
*&---------------------------------------------------------------------*
*&      Form  check_table_structure
*&---------------------------------------------------------------------*
*       Выполняет проверку структуры таблицы, возвращает флаг
*       успешности-неуспешности и список ошибок если неуспех
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_table_structure USING value(u_tabname)    TYPE dd02l-tabname
                                 ut_content          TYPE lty_t_tabline
                           CHANGING ct_return        TYPE bapiret2_t
                                    value(c_rc)      TYPE sysubrc.

  DATA: lv_index              TYPE sy-tabix,
        lv_text               TYPE string,
        lt_fields_file        TYPE TABLE OF lty_fieldname,
        lt_fields_sap         TYPE TABLE OF lty_fieldname,
        lv_num_fields_sap     TYPE i,
        lv_num_fields_file    TYPE i,
        lv_not_found          TYPE wdy_boolean.

  FIELD-SYMBOLS: <ls_tabline>      TYPE lty_tabline,
                 <ls_field_file>   TYPE lty_fieldname,
                 <ls_field_sap>    TYPE lty_fieldname.

* Find the table record
  READ TABLE ut_content WITH KEY rectype = gc_name_rec
                                 line    = u_tabname
                                 TRANSPORTING NO FIELDS.

  IF sy-subrc <> 0.

    CONCATENATE 'Таблица'(002) u_tabname 'не найдена в файле'(003) INTO lv_text SEPARATED BY space.
    PERFORM msg_to_ret2_string USING lv_text 'E' CHANGING ct_return[].
    c_rc = 1.
    RETURN.
  ENDIF.

* Look for header description line to compare to the database state
  lv_index = sy-tabix.
  lv_index = lv_index + 1.

  PERFORM get_first_header_after_line
              USING
                  u_tabname
                  ut_content
                  lv_index
              CHANGING
                  lt_fields_file[]
                  c_rc.

  IF c_rc <> 0.
    PERFORM msg_to_ret2_string USING lv_text 'E' CHANGING ct_return[].
    RETURN.
  ENDIF.

* Get fields list from database and perform the comparison
  PERFORM get_table_fields USING u_tabname CHANGING lt_fields_sap.

  DESCRIBE TABLE lt_fields_sap LINES lv_num_fields_sap.
  DESCRIBE TABLE lt_fields_file LINES lv_num_fields_file.

  LOOP AT lt_fields_file ASSIGNING <ls_field_file>.

    lv_index = sy-tabix.
    lv_not_found = abap_false.

    UNASSIGN <ls_field_sap>.
    IF lv_index <= lv_num_fields_sap.
      READ TABLE lt_fields_sap INDEX sy-tabix ASSIGNING <ls_field_sap>.
    ENDIF.

    IF <ls_field_sap> IS ASSIGNED.
      IF <ls_field_sap>-fieldname <> <ls_field_file>-fieldname.
        lv_not_found = abap_true.
      ENDIF.
    ELSE.
      lv_not_found = abap_true.
    ENDIF.

    IF lv_not_found = abap_true.
      CONCATENATE 'В SAP отсутствует (или находится в другой позиции) поле'(004)
        <ls_field_file>-fieldname 'таблицы'(005) u_tabname ', имеющееся в файле'(006)
        INTO lv_text SEPARATED BY space.
      PERFORM msg_to_ret2_string USING lv_text 'E' CHANGING ct_return[].
      c_rc = 1.
    ENDIF.
  ENDLOOP.

  IF lv_num_fields_sap <> lv_num_fields_file.
    LOOP AT lt_fields_sap ASSIGNING <ls_field_sap>.

      READ TABLE lt_fields_file WITH KEY fieldname = <ls_field_sap>-fieldname
        TRANSPORTING NO FIELDS.
      IF sy-subrc <> 0.
        CONCATENATE 'В файле отсутствует поле'(007) <ls_field_sap>-fieldname
          'таблицы'(005) u_tabname ', имеющееся в SAP'(008) INTO lv_text SEPARATED BY space.
        PERFORM msg_to_ret2_string USING lv_text 'E' CHANGING ct_return[].
        c_rc = 1.
      ENDIF.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " check_table_structure
*&---------------------------------------------------------------------*
*&      Form  modify_dbtab_from_file
*&---------------------------------------------------------------------*
*       Выполняет модицикацию таблицы из файла
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM modify_dbtab_from_file USING value(u_tabname)     TYPE dd02l-tabname
                                  ut_content           TYPE lty_t_tabline
                                  value(u_delete)      TYPE wdy_boolean
                            CHANGING value(c_rc)       TYPE sysubrc.

  DATA: lv_dummy           TYPE bapiret2-message,
        lv_tabix           TYPE sy-tabix,
        lr_data            TYPE REF TO data,
        lt_values          TYPE TABLE OF string,
        lv_value           TYPE string,
        lv_clidep          TYPE dd02l-clidep.

  FIELD-SYMBOLS: <ls_tabline>       TYPE lty_tabline,
                 <ls_dbtab_line>    TYPE ANY,
                 <lv_value>         TYPE ANY,
                 <ls_fieldname>     TYPE lty_fieldname.

* Find the table record
  READ TABLE ut_content WITH KEY rectype = gc_name_rec
                                 line    = u_tabname
                                 TRANSPORTING NO FIELDS.

  IF sy-subrc <> 0.
    MESSAGE e000(clhp) WITH 'Таблица'(002) u_tabname 'не найдена в файле'(003)
      INTO lv_dummy.
    c_rc = 1.
    RETURN.
  ENDIF.

  lv_tabix = sy-tabix + 1.

  SELECT SINGLE clidep
    INTO lv_clidep
    FROM dd02l
    WHERE tabname = u_tabname
      AND tabclass = 'TRANSP'.

  CREATE DATA lr_data TYPE (u_tabname).
  ASSIGN lr_data->* TO <ls_dbtab_line>.

  IF u_delete = abap_true.
    DELETE FROM (u_tabname).                            "#EC CI_NOWHERE
  ENDIF.

  LOOP AT ut_content ASSIGNING <ls_tabline>
    FROM lv_tabix.
    "WHERE rectype = gc_record_rec.

    " Началась следующая таблица - выходим
    IF <ls_tabline>-rectype = gc_name_rec.
      EXIT.
    ENDIF.

    CHECK <ls_tabline>-rectype = gc_record_rec.

    SPLIT <ls_tabline>-line AT gc_separator INTO TABLE lt_values.

    LOOP AT lt_values INTO lv_value.

      lv_tabix = sy-tabix.

      " Если таблица зависима от манданта, то номер поля будет на 1 больше
      IF lv_clidep = abap_true.
        lv_tabix = lv_tabix + 1.
      ENDIF.

      ASSIGN COMPONENT lv_tabix OF STRUCTURE <ls_dbtab_line> TO <lv_value>.
      IF sy-subrc = 0.
        <lv_value> = lv_value.
      ENDIF.
    ENDLOOP.

    MODIFY (u_tabname) FROM <ls_dbtab_line>.
  ENDLOOP.
ENDFORM.                    " modify_dbtab_from_file
*&---------------------------------------------------------------------*
*&      Form  get_first_header_after_line
*&---------------------------------------------------------------------*
*       Технический код: возвращает поля первого заголовка файла
*       в загруженном контенте после определенной строки этого файла
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_first_header_after_line USING value(u_tabname)       TYPE dd02l-tabname
                                       ut_content             TYPE lty_t_tabline
                                       value(u_line_from)     TYPE i
                                 CHANGING ct_header_fields    TYPE lty_t_fieldname
                                          value(c_rc)         TYPE sysubrc.

  DATA: lv_dummy        TYPE bapiret2-message.

  FIELD-SYMBOLS: <ls_tabline>     TYPE lty_tabline.

  LOOP AT ut_content ASSIGNING <ls_tabline>
    FROM u_line_from
    WHERE rectype = gc_header_rec.

    EXIT.
  ENDLOOP.

  IF sy-subrc <> 0.
    MESSAGE e000(clhp) WITH 'Для таблицы'(009) u_tabname
      'не найдена строка заголовка в файле'(010) INTO lv_dummy.
    c_rc = 1.
    RETURN.
  ENDIF.

* Parse the header string in order to get field list from it
  SPLIT <ls_tabline>-line AT gc_separator INTO TABLE ct_header_fields.
ENDFORM.                    " get_first_header_after_line
*&---------------------------------------------------------------------*
*&      Form  load_contents_from_file
*&---------------------------------------------------------------------*
*       Загружает файл с диска во внутреннюю таблицу
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM load_contents_from_file USING u_filename
                             CHANGING ct_content     TYPE lty_t_tabline
                                      value(c_rc)    TYPE sysubrc.

  DATA: BEGIN OF lt_data_tab OCCURS 0,
          line(3000)    TYPE c,
        END OF lt_data_tab.

  DATA: lv_filename           TYPE string,
        lv_contents           TYPE string,
        lt_lines              TYPE TABLE OF string,
        lv_text               TYPE string.

  FIELD-SYMBOLS: <ls_tabline>        TYPE lty_tabline.

  lv_filename = u_filename.

  REFRESH ct_content[].

  CALL METHOD cl_gui_frontend_services=>gui_upload
    EXPORTING
      filename                = lv_filename
      read_by_line            = abap_false
    CHANGING
      data_tab                = lt_data_tab[]
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      not_supported_by_gui    = 17
      error_no_gui            = 18
      OTHERS                  = 19.

  c_rc = sy-subrc.

  IF c_rc <> 0.
    RETURN.
  ENDIF.

  LOOP AT lt_data_tab.
    CONCATENATE lv_contents lt_data_tab INTO lv_contents.
  ENDLOOP.

  SPLIT lv_contents AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_lines.

* Каждая строка файла содержит вид записи (2 символа), разделитель, а затем
* уже информацию в зависимости от вида записи
  LOOP AT lt_lines INTO lv_text.

    CHECK lv_text IS NOT INITIAL.
    CHECK STRLEN( lv_text ) >= 5.

    APPEND INITIAL LINE TO ct_content ASSIGNING <ls_tabline>.
    SPLIT lv_text AT gc_separator INTO <ls_tabline>-rectype <ls_tabline>-line.

    REPLACE ALL OCCURRENCES OF gc_0d_replace IN <ls_tabline>-line
      WITH cl_abap_char_utilities=>cr_lf(1).

    REPLACE ALL OCCURRENCES OF gc_0a_replace IN <ls_tabline>-line
      WITH cl_abap_char_utilities=>cr_lf+1(1).
  ENDLOOP.
ENDFORM.                    " load_contents_from_file
*&---------------------------------------------------------------------*
*&      Form  save_contents_to_file
*&---------------------------------------------------------------------*
*       Сохраняет содержимое файла из внутренней таблицы на диск
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM save_contents_to_file USING u_filename
                                 ut_content         TYPE lty_t_tabline
                           CHANGING value(c_rc)     TYPE sysubrc.

  DATA: BEGIN OF lt_data_tab OCCURS 0,
          line(3000)    TYPE c,
        END OF lt_data_tab.

  DATA: lv_string            TYPE string,
        lv_lines             TYPE i,
        lv_filename          TYPE string.

  FIELD-SYMBOLS: <ls_tabline>           TYPE lty_tabline.

  lv_filename = u_filename.

  lv_lines = LINES( ut_content ).

  LOOP AT ut_content ASSIGNING <ls_tabline>.

    IF lv_string IS NOT INITIAL.
      CONCATENATE lv_string cl_abap_char_utilities=>cr_lf INTO lv_string.
    ENDIF.

    CONCATENATE lv_string <ls_tabline>-rectype gc_separator <ls_tabline>-line
      INTO lv_string.
  ENDLOOP.

  CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
    EXPORTING
      text      = lv_string
    TABLES
      ftext_tab = lt_data_tab[].

  CALL METHOD cl_gui_frontend_services=>gui_download
    EXPORTING
      filename                 = lv_filename
      write_lf                 = abap_false
      write_lf_after_last_line = abap_false
    CHANGING
      data_tab                 = lt_data_tab[]      "trunc_trailing_blanks = abap_true
    EXCEPTIONS
      file_write_error         = 1
      no_batch                 = 2
      gui_refuse_filetransfer  = 3
      invalid_type             = 4
      no_authority             = 5
      unknown_error            = 6
      header_not_allowed       = 7
      separator_not_allowed    = 8
      filesize_not_allowed     = 9
      header_too_long          = 10
      dp_error_create          = 11
      dp_error_send            = 12
      dp_error_write           = 13
      unknown_dp_error         = 14
      access_denied            = 15
      dp_out_of_memory         = 16
      disk_full                = 17
      dp_timeout               = 18
      file_not_found           = 19
      dataprovider_exception   = 20
      control_flush_error      = 21
      not_supported_by_gui     = 22
      error_no_gui             = 23
      OTHERS                   = 24.

  c_rc = sy-subrc.
ENDFORM.                    " save_contents_to_file

*&---------------------------------------------------------------------*
*&      Form  open_file_name
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->UC_FILE    text
*----------------------------------------------------------------------*
FORM open_file_name CHANGING uc_file TYPE c.

  DATA: lt_filetable  TYPE filetable,
        ld_str        TYPE string,
        ld_rc         TYPE i.

* Отображаем стандартный диалог открытия файла
  ld_str = 'Выберите файл для загрузки'(011).
  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title   = ld_str
      file_filter    = 'Text files|*.txt'
      multiselection = ' '
    CHANGING
      file_table     = lt_filetable[]
      rc             = ld_rc.                               "#EC NOTEXT

* Записываем имя файла в параметр
  IF sy-subrc = 0.
    READ TABLE lt_filetable INDEX 1 INTO uc_file.
  ENDIF.
ENDFORM.                    "open_file_name
*&---------------------------------------------------------------------*
*&      Form  main_export
*&---------------------------------------------------------------------*
*       Главная процедура, выполняющая экспорт
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM main_export.

  DATA: lt_contents        TYPE TABLE OF lty_tabline,
        lv_rc              TYPE sysubrc,
        lt_log             TYPE TABLE OF bapiret2,
        lv_text            TYPE string.

  FIELD-SYMBOLS: <ls_sel_table>   LIKE LINE OF s_tables.

  IF s_tables[] IS INITIAL.
    MESSAGE e000(clhp) WITH 'Ни одной таблицы не выбрано'(012).
  ENDIF.

* Формируем файл на основе всех таблиц во внутренней таблице
  LOOP AT s_tables ASSIGNING <ls_sel_table>.

    CONCATENATE 'Подготовка таблицы'(013) <ls_sel_table>-low INTO lv_text SEPARATED BY space.
    PERFORM statusbar_message USING 0 lv_text.

    PERFORM add_table_to_file
                USING
                   <ls_sel_table>-low
                CHANGING
                   lt_contents[]
                   lv_rc.

    IF lv_rc <> 0.
      PERFORM log_msg CHANGING lt_log[].
      PERFORM show_log USING lt_log[].
      RETURN.
    ENDIF.
  ENDLOOP.

  lv_text = 'Сохранение данных в файл'(014).
  PERFORM statusbar_message USING 0 lv_text.

* Сохраняем сформированную таблицу в файл
  PERFORM save_contents_to_file
              USING
                 p_file
                 lt_contents[]
              CHANGING
                  lv_rc.

  IF lv_rc <> 0.
    PERFORM log_msg CHANGING lt_log[].
    PERFORM show_log USING lt_log[].
    RETURN.
  ENDIF.

  MESSAGE s000(clhp) WITH 'Данные успешно выгружены в файл'(015) p_file.
ENDFORM.                    " main_export
*&---------------------------------------------------------------------*
*&      Form  main_import
*&---------------------------------------------------------------------*
*       Главная процедура, выполняющая импорт
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM main_import.

  DATA: lt_contents          TYPE TABLE OF lty_tabline,
        lv_rc                TYPE sysubrc,
        lt_names             TYPE TABLE OF string,
        lv_name              TYPE dd02l-tabname,
        lt_log               TYPE TABLE OF bapiret2,
        lt_return            TYPE TABLE OF bapiret2,
        lv_global_rc         TYPE sysubrc,
        lv_text              TYPE string,
        lv_lines             TYPE i,
        lv_ans               TYPE char1.

  lv_text = 'Загрузка данных'(016).
  PERFORM statusbar_message USING 0 lv_text.

* Load file to internal table
  PERFORM load_contents_from_file
              USING
                 p_file
              CHANGING
                 lt_contents
                 lv_rc.

  IF lv_rc <> 0.
    PERFORM log_msg CHANGING lt_log[].
    PERFORM show_log USING lt_log[].
    RETURN.
  ENDIF.

  lv_text = 'Проверка данных'(017).
  PERFORM statusbar_message USING 0 lv_text.

* List tables stored in file
  PERFORM get_all_tabnames_from_file
              USING
                 lt_contents
              CHANGING
                 lt_names.

  IF lt_names[] IS INITIAL.
    PERFORM msg_to_ret2_string USING 'В файле не найдено ни одной таблицы'(018) 'E' CHANGING lt_log[].
    PERFORM show_log USING lt_log[].
    RETURN.
  ENDIF.

* Check each table, table structure must match
  LOOP AT lt_names INTO lv_name.

    PERFORM check_table_structure
                USING
                   lv_name
                   lt_contents[]
                CHANGING
                   lt_return
                   lv_rc.

    IF lv_rc <> 0.
      APPEND LINES OF lt_return TO lt_log.
      lv_global_rc = lv_rc.
    ENDIF.
  ENDLOOP.

  IF lv_global_rc <> 0.
    PERFORM msg_to_ret2_string USING 'При загрузке файла были ошибки'(019) 'E' CHANGING lt_log[].
    PERFORM show_log USING lt_log[].
    RETURN.
  ENDIF.

* Delete tables not matching the selection
  LOOP AT lt_names INTO lv_name.
    IF lv_name NOT IN s_tables.
      DELETE lt_names.
    ENDIF.
  ENDLOOP.

  IF lt_names[] IS INITIAL.
    PERFORM msg_to_ret2_string USING 'Ни один из содержащихся в файле таблиц не подходит под критерии выбора, ничего не загружено'(020) 'W'
          CHANGING lt_log[].
    PERFORM show_log USING lt_log[].
    RETURN.
  ENDIF.

  IF lv_global_rc <> 0.
    PERFORM show_log USING lt_log[].
    RETURN.
  ENDIF.

* Several user asks and dialogs
  lv_lines = LINES( lt_names ).
  lv_text = lv_lines.
  CONDENSE lv_text.
  CONCATENATE 'Всего из файла будет загружено'(022) lv_text 'таблиц. Продолжить загрузку?'(023)
    INTO lv_text SEPARATED BY space.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
*     TITLEBAR                    = ' '
*     DIAGNOSE_OBJECT             = ' '
      text_question               = lv_text
*     TEXT_BUTTON_1               = 'Ja'(001)
*     ICON_BUTTON_1               = ' '
*     TEXT_BUTTON_2               = 'Nein'(002)
*     ICON_BUTTON_2               = ' '
*     DEFAULT_BUTTON              = '1'
*     DISPLAY_CANCEL_BUTTON       = 'X'
*     USERDEFINED_F1_HELP         = ' '
*     START_COLUMN                = 25
*     START_ROW                   = 6
*     POPUP_TYPE                  =
*     IV_QUICKINFO_BUTTON_1       = ' '
*     IV_QUICKINFO_BUTTON_2       = ' '
    IMPORTING
      answer                      = lv_ans
*   TABLES
*     PARAMETER                   =
    EXCEPTIONS
      OTHERS                      = 1.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF lv_ans <> '1'.
    MESSAGE s000(clhp) WITH 'Загрузка отменена пользователем'(024).
    RETURN.
  ENDIF.

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
*     TITLEBAR                    = ' '
*     DIAGNOSE_OBJECT             = ' '
      text_question               = 'Хотите ли вы посмотреть список загружаемых таблиц?'(025)
*     TEXT_BUTTON_1               = 'Ja'(001)
*     ICON_BUTTON_1               = ' '
*     TEXT_BUTTON_2               = 'Nein'(002)
*     ICON_BUTTON_2               = ' '
*     DEFAULT_BUTTON              = '1'
*     DISPLAY_CANCEL_BUTTON       = 'X'
*     USERDEFINED_F1_HELP         = ' '
*     START_COLUMN                = 25
*     START_ROW                   = 6
*     POPUP_TYPE                  =
*     IV_QUICKINFO_BUTTON_1       = ' '
*     IV_QUICKINFO_BUTTON_2       = ' '
    IMPORTING
      answer                      = lv_ans
*   TABLES
*     PARAMETER                   =
    EXCEPTIONS
      OTHERS                      = 1.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF lv_ans = '1'.

    CALL FUNCTION 'POPUP_WITH_TABLE'
      EXPORTING
        endpos_col   = 50
        endpos_row   = 30
        startpos_col = 10
        startpos_row = 10
        titletext    = 'Список загружаемых таблиц'(026)
      TABLES
        valuetab     = lt_names[]
      EXCEPTIONS
        break_off    = 1
        OTHERS       = 2.

    IF sy-subrc <> 0 AND sy-subrc <> 1.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.

* Perform load
  LOOP AT lt_names INTO lv_name.

    CONCATENATE 'Загрузка данных таблицы'(027) lv_name INTO lv_text SEPARATED BY space.
    PERFORM statusbar_message USING 0 lv_text.

    PERFORM modify_dbtab_from_file
                USING
                   lv_name
                   lt_contents[]
                   p_del
                CHANGING
                   lv_rc.

    IF lv_rc <> 0.
      ROLLBACK WORK.                                   "#EC CI_ROLLBACK
      PERFORM log_msg CHANGING lt_log[].
      PERFORM show_log USING lt_log[].
      RETURN.
    ENDIF.
  ENDLOOP.

  COMMIT WORK.

  lv_text = lv_lines.
  CONDENSE lv_text.
  MESSAGE i000(clhp) WITH 'Содержимое'(028) lv_text 'таблиц успешно загружено'(029).
ENDFORM.                    " main_import
*&---------------------------------------------------------------------*
*&      Form  show_log
*&---------------------------------------------------------------------*
*       Показывает лог на экран
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_log USING ut_log  TYPE bapiret2_t.

  CALL FUNCTION 'SUSR_DISPLAY_LOG'
    EXPORTING
      display_in_popup           = abap_true
      log_title                  = 'Журнал обработки программы'(030)
    TABLES
*     IT_LOG_SPROT               =
      it_log_bapiret2            = ut_log[]
    EXCEPTIONS
      OTHERS                     = 1.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " show_log

*&---------------------------------------------------------------------*
*&      Form  statusbar_message
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->UD_PERCENT text
*      -->UD_TEXT    text
*----------------------------------------------------------------------*
FORM statusbar_message USING ud_percent ud_text.
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = ud_percent
      text       = ud_text.
ENDFORM.                    "statusbar_message

*&---------------------------------------------------------------------*
*&      Form  msg_to_ret2_string
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->I_MESSAGE_TEXT  text
*      -->VALUE(I_MSGTY)  text
*      -->CT_RETURN       text
*----------------------------------------------------------------------*
FORM msg_to_ret2_string USING i_message_text
                              value(i_msgty) TYPE symsgty
                        CHANGING ct_return  TYPE bapiret2_t.

  DATA: ls_msg      TYPE symsg,
        lv_len      TYPE i,
        lv_dummy    TYPE bapiret2-message.

  IF i_msgty <> 'I'
    AND i_msgty <> 'S'
    AND i_msgty <> 'W'
    AND i_msgty <> 'E'
    AND i_msgty <> 'A'
    AND i_msgty <> 'X'.

    i_msgty = 'S'.
  ENDIF.

  ls_msg-msgid = 'CLHP'.
  ls_msg-msgno = '000'.
  ls_msg-msgty = i_msgty.

  lv_len = STRLEN( i_message_text ).
  IF lv_len <= 50.
    ls_msg-msgv1 = i_message_text.
  ENDIF.
  IF lv_len > 50 AND lv_len <= 100.
    ls_msg-msgv1 = i_message_text(50).
    ls_msg-msgv2 = i_message_text+50.
  ENDIF.
  IF lv_len > 100 AND lv_len <= 150.
    ls_msg-msgv1 = i_message_text(50).
    ls_msg-msgv2 = i_message_text+50(50).
    ls_msg-msgv3 = i_message_text+100.
  ENDIF.
  IF lv_len > 150.
    ls_msg-msgv1 = i_message_text(50).
    ls_msg-msgv2 = i_message_text+50(50).
    ls_msg-msgv3 = i_message_text+100(50).
    ls_msg-msgv4 = i_message_text+150.
  ENDIF.

  MESSAGE ID ls_msg-msgid TYPE ls_msg-msgty NUMBER ls_msg-msgno
    WITH ls_msg-msgv1 ls_msg-msgv2 ls_msg-msgv3 ls_msg-msgv4 INTO lv_dummy.

  PERFORM log_msg CHANGING ct_return[].
ENDFORM.                    "msg_to_ret2_string

*&---------------------------------------------------------------------*
*&      Form  log_msg
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->CT_RETURN  text
*----------------------------------------------------------------------*
FORM log_msg CHANGING ct_return      TYPE bapiret2_t.

  FIELD-SYMBOLS: <ls_return>    TYPE bapiret2.

  APPEND INITIAL LINE TO ct_return ASSIGNING <ls_return>.
  <ls_return>-id         = sy-msgid.
  <ls_return>-number     = sy-msgno.
  <ls_return>-type       = sy-msgty.
  <ls_return>-message_v1 = sy-msgv1.
  <ls_return>-message_v2 = sy-msgv2.
  <ls_return>-message_v3 = sy-msgv3.
  <ls_return>-message_v4 = sy-msgv4.
ENDFORM.                    "log_msg



Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 18:09 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
g-relov написал(а):
1) Вроде доступно обьяснил...
(Есть таблица БД, например - Z_waybill, через транзакцию Z_WB в нее записываются значение применимые к EO определеного авто- (серия,номер, дата. документа, время поездки, пути и т.д.).

Пока доступно.
Цитата:
нужно добиться чтобы все эти значения можно было просматривать, в случае чего модифицировать, дополнять желательно на другом SELECTION-SCREEN. плюс нужна выгрузка в готовый DOC шаблон, который будет заполняться этими данными,(шаблон к примеру можно реализовать через смартформы))

А вот здесь и требуется детализация:
- что значит "добиться чтобы все эти значения можно было просматривать"?
- что значит "на другом SELECTION-SCREEN"?
- нужна выгрузка в готовый DOC шаблон - что мешает реализовать???
Цитата:
2) Какие? можно поточней...

SAP NetWeaver Programming Core
Обратить внимание на BC405 и BC410
Цитата:
3) Без коментариев. если, б нашел, что нужно, я бы не задавал свой вопрос.

А ответов на вопрос "сделайте за меня всё" на форуме нет
Цитата:
4) транзакция Z_WB и отчет, и таблица, все написано мной. с этим то я справился почти без проблем читая форумы, и другие ресурсы.
На форуме есть примеры выгрузки в файл из таблицы., мне же нужен вывод на селекционый экран значений табл. БД .

И опять возвращаемся к п.2
Цитата:
Это нужно для управления документами аля путевыми листами. (то есть ведение, просмотр, изменение,печать, выгрузка в файл - Путевой лист автомобиля.doc) похожих примеров я не нашел(((

_________________
"После" - не значит "вследствие"


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 18:40 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 29 2011, 12:26
Сообщения: 25
sy-uname написал(а):
g-relov написал(а):
1) Вроде доступно обьяснил...
(Есть таблица БД, например - Z_waybill, через транзакцию Z_WB в нее записываются значение применимые к EO определеного авто- (серия,номер, дата. документа, время поездки, пути и т.д.).

Пока доступно.
Цитата:
нужно добиться чтобы все эти значения можно было просматривать, в случае чего модифицировать, дополнять желательно на другом SELECTION-SCREEN. плюс нужна выгрузка в готовый DOC шаблон, который будет заполняться этими данными,(шаблон к примеру можно реализовать через смартформы))

А вот здесь и требуется детализация:
- что значит "добиться чтобы все эти значения можно было просматривать"?
- что значит "на другом SELECTION-SCREEN"?
- нужна выгрузка в готовый DOC шаблон - что мешает реализовать???
Цитата:
2) Какие? можно поточней...

SAP NetWeaver Programming Core
Обратить внимание на BC405 и BC410
Цитата:
3) Без коментариев. если, б нашел, что нужно, я бы не задавал свой вопрос.

А ответов на вопрос "сделайте за меня всё" на форуме нет
Цитата:
4) транзакция Z_WB и отчет, и таблица, все написано мной. с этим то я справился почти без проблем читая форумы, и другие ресурсы.
На форуме есть примеры выгрузки в файл из таблицы., мне же нужен вывод на селекционый экран значений табл. БД .

И опять возвращаемся к п.2
Цитата:
Это нужно для управления документами аля путевыми листами. (то есть ведение, просмотр, изменение,печать, выгрузка в файл - Путевой лист автомобиля.doc) похожих примеров я не нашел(((



я просил совета))))) а не готового решения...


а получилось так...
ччч- не знаете,как мне испечь пирог?
sy-uname- чтобы испечь пирог, нужно постичь вселенскую мудрость, пройти курс, кулинарии, отучиться в кулинарном,техникуме,и т.д.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 18:43 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 29 2011, 12:26
Сообщения: 25
если, найду решение, напишу)))))))спасибо за ссылку на курсы.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: учет документов транспортировки  Тема решена
СообщениеДобавлено: Чт, фев 02 2012, 18:48 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
g-relov написал(а):
я просил совета))))) а не готового решения...

Читайте курсы
Смотрите примеры из тр. ABAPDOCU
Смотрите что и как реализована в стандарте

Что до пирогов - то пироги бывают разные и соответственно "как" для разных пирогов разный - т.е. опять возвращаемся к необходимости максимально детализировать свои вопросы.

_________________
"После" - не значит "вследствие"


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: учет документов транспортировки
СообщениеДобавлено: Чт, фев 02 2012, 18:59 
Ассистент
Ассистент

Зарегистрирован:
Вт, ноя 29 2011, 12:26
Сообщения: 25
sy-uname написал(а):

Что до пирогов - то пироги бывают разные и соответственно "как" для разных пирогов разный - т.е. опять возвращаемся к необходимости максимально детализировать свои вопросы.




спасибо, буду стараться в дальнейшем...


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

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


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

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


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

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