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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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