Текущее время: Чт, мар 28 2024, 11:16

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 13:45 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
sonics написал(а):
а как мне сделать идентичных 12 таблиц ? чтобы не создавать все вручную?
только названия разные...

в se11 есть кнопка копирования


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 14:18 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
Я более менее разобрался.
за основу взял:
Цитата:
JOB_OPEN - Создать фоновое задание
JOB_CLOSE - Завершить формирование задания и далее оно по заданным условиям пойдет работать.

но не совсем понял как как сделать запуск каждый месяц ?
EVENT_PERIODIC = ' ';
или PRDMONTHS = '1';
т.е. каждый месяц, верно?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 14:23 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
Kuranov.Dmitry написал(а):
sonics написал(а):
а как мне сделать идентичных 12 таблиц ? чтобы не создавать все вручную?
только названия разные...

в se11 есть кнопка копирования

структуру или данные тоже?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 14:28 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
sonics написал(а):
Я более менее разобрался.
за основу взял:
Цитата:
JOB_OPEN - Создать фоновое задание
JOB_CLOSE - Завершить формирование задания и далее оно по заданным условиям пойдет работать.

но не совсем понял как как сделать запуск каждый месяц ?
EVENT_PERIODIC = ' ';
или PRDMONTHS = '1';
т.е. каждый месяц, верно?

вы хотите программно? или через ГУИ?


увы всех параметров не знаю.
через эти ФМ делал планирование каждые 2 часа пока не обработает все данные.
Там я как джоб завершается, он вычисляет время следующего запуска и если надо, то планирует следующее одноразовое задание.

но у вас как я вижу надо не как у меня, N раза через 2 часа запускать, раз в месяц до скончания времен.


вот мой код планирования задач

Code:
FORM respawn.
DATA  job_param TYPE btcselect.
  DATA jobs TYPE TABLE OF tbtcjob WITH HEADER LINE.
  DATA: gs_indx    TYPE indx,
            gs_tbtcjob TYPE tbtcjob,
            g_job_rels TYPE btch0000-char1.

  IF sy-batch = 'X'.
        WRITE: / '@1T@','Планируем задачу обновления'.
  ENDIF.

*Блокировка от параллельного запуска
  CALL FUNCTION 'ENQUEUE_EZZ_MY_TASK_BLK'
   EXPORTING
*       MODE_ZPY_FTU69_IDOCS       = 'E'
*       MANDT                      = SY-MANDT
     docnum                     = '0'
*       X_DOCNUM                   = ' '
*       _SCOPE                     = '2'
*       _WAIT                      = ' '
*       _COLLECT                   = ' '
   EXCEPTIONS
     foreign_lock               = 1
     system_failure             = 2
     OTHERS                     = 3
            .
  IF sy-subrc = 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    job_param-jobname = job_name. " в глобальной переменной job_name имя таска
    "Получаю список задач
    CALL FUNCTION 'BP_JOB_SELECT'
      EXPORTING
        jobselect_dialog          = 'N'
        jobsel_param_in           = job_param
*     ENDDATE                   = '        '
*     ENDTIME                   = '      '
*     SELECTION                 = 'AL'
*     ADK_MODE                  = ' '
*   IMPORTING
*     JOBSEL_PARAM_OUT          =
*     LOCAL_CLIENT              =
*     NR_OF_JOBS_FOUND          =
      TABLES
        jobselect_joblist         = jobs
*   CHANGING
*     ERROR_CODE                =
     EXCEPTIONS
       invalid_dialog_type       = 1
       jobname_missing           = 2
       no_jobs_found             = 3
       selection_canceled        = 4
       username_missing          = 5
       OTHERS                    = 6
              .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
   "в нашем манданте уже есть задача снимаем блокировку и выходим
    READ TABLE jobs WITH KEY status = 'S' AUTHCKMAN = sy-mandt.
    IF sy-subrc = 0.
      IF sy-batch = 'X' .
        WRITE: / '@1T@','Задача уже запланирована'.
      ENDIF.
        CALL FUNCTION 'DEQUEUE_EZZ_MY_TASK_BLK'
        EXPORTING
          docnum                     = '0'.
      EXIT.
    ENDIF.

   "открываем джоб
    gs_tbtcjob-authcknam = sy-uname.
    gs_tbtcjob-jobname   = job_name.

    CALL FUNCTION 'JOB_OPEN'
      EXPORTING
*   DELANFREP              = ' '
*   JOBGROUP               = ' '
        jobname                = gs_tbtcjob-jobname
*   SDLSTRTDT              = NO_DATE
*   SDLSTRTTM              = NO_TIME
*   JOBCLASS               =
     IMPORTING
              jobcount = gs_tbtcjob-jobcount
* CHANGING
*   RET                    =
     EXCEPTIONS
       cant_create_job        = 1
       invalid_job_data       = 2
       jobname_missing        = 3
       OTHERS                 = 4
              .
    IF sy-subrc <> 0.
         IF sy-batch = 'X' .
        WRITE: / '@1T@','Ошибка планирования'.
      ENDIF.
        CALL FUNCTION 'DEQUEUE_EZZ_MY_TASK_BLK'
        EXPORTING
          docnum                     = '0'.
      EXIT.
    ENDIF.

    CALL FUNCTION 'JOB_SUBMIT'
      EXPORTING
        authcknam               = gs_tbtcjob-authcknam
        jobcount                = gs_tbtcjob-jobcount
        jobname                 = gs_tbtcjob-jobname
        report                  = 'ZPY_UPDATE_DAEMON'
      EXCEPTIONS
        bad_priparams           = 1
        bad_xpgflags            = 2
        invalid_jobdata         = 3
        jobname_missing         = 4
        job_notex               = 5
        job_submit_failed       = 6
        lock_failed             = 7
        program_missing         = 8
        prog_abap_and_extpg_set = 9
        OTHERS                  = 10.
    IF sy-subrc <> 0.
       IF sy-batch = 'X' .
        WRITE: / '@1T@','Ошибка планирования'.
      ENDIF.
        CALL FUNCTION 'DEQUEUE_EZZ_MY_TASK_BLK'
        EXPORTING
          docnum                     = '0'.
      EXIT.
    ENDIF.
    DATA ttime LIKE sy-uzeit .
    DATA tdate LIKE sy-datum .

    tdate = sy-datum.
    ttime = sy-uzeit.
    ttime = ttime + job_time.
    IF ttime < sy-uzeit.
      tdate = tdate + 1.
    ENDIF.
     IF sy-batch = 'X' .
        WRITE: / '@1T@','Задача запланирована на ', tdate, ttime.
     ENDIF.
    CALL FUNCTION 'JOB_CLOSE'
          EXPORTING
            jobcount         = gs_tbtcjob-jobcount
            jobname          = gs_tbtcjob-jobname
            strtimmed        = 'X'
            sdlstrtdt = tdate
            sdlstrttm = ttime
*            IMPORTING
*              job_was_released = g_job_rels
          EXCEPTIONS
            cant_start_immediate = 1
            invalid_startdate    = 2
            jobname_missing      = 3
            job_close_failed     = 4
            job_nosteps          = 5
            job_notex            = 6
            lock_failed          = 7
            invalid_target       = 8
            OTHERS               = 9.

    CALL FUNCTION 'DEQUEUE_EZZ_MY_TASK_BLK'
        EXPORTING
          docnum                     = '0'.


  ENDIF.
endform.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 15:31 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
Дело в том, что моя программка не имеет gui, т.к. она просто копирует данные из одной таблицы раз в месяц, в одну из 12 таблиц, в зависимости от месяца и все.
Дальше я уже буду брать другую программу с селектами, которая берет текущую мою таблицу (одну из 12) и сравнивает с таблицей к сегодняшней день(она есть и копируется ежедневно), сравнивается по определенным 6 ключам и происходит суммирования по определенным столбцам.
Я пока что имею лишь теорию, начал с копирования, добью копирование и займусь селективным экраном с GUI, который будет для начала выводить нужные поля из одной таблицы на внутреннюю и дальше буду пробовать рядом добавлять из другой таблицы такие же поля, чтобы видеть разницу между ними.
В теории, задача выглядит так.
Как через GUI зарезервировать запуск программы я нашел где почитать, а вот через программу я нашел на другом форуме. Обратил внимание, что все можно делать без gui вовсе :)
Попробую модифицировать ваш способ под свою задачу, спасибо, что поделились кодом.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 15:38 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
если у программы нет селекционника через SM36 можно запланировать.

Пожалуй правильный вариант в вашем случае


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 16:25 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
sonics, кажется вы сначала создаете себе трудности, а потом героически их преодолеваете.
Вам уже рекомендовали сделать одну таблицу вместо 12и.

Но если хотите 12 - делайте 12.
Можно сделать полностью одну таблицу со всеми полями, а потом в se11 воспользоваться кнопкой "копировать".
Минуты за 2-3 раскопируете :)

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 16:36 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 179
Я бы ещё порекомендовал сделать общую структуру, которую бы добавил в каждую таблицу.
Чтобы после изменений структуры все изменения автоматически переносились в другие таблицы.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 16:44 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
Структура общая ? это как ?
она одинаковая действительно.
Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это.
Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше)
я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 16:57 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
sonics написал(а):
Структура общая ? это как ?
она одинаковая действительно.


открываете Se11.
радиобаттн тип данных вводите название Z_COMMON_STRUC ( ну или свое не суть важно, главное чтоб смысл был).
набиваете её полями таблицы.

далее назад в se11.
Радиобаттн таблица БД создаете таблицу
на экране редактирования полей таблицы выбираете:
Обработать->Include-> Вставить.
вписываете имя структуры.

теперь при изменении структуры, все таблицы будут автоматом адаптироваться под структуру


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пт, дек 08 2017, 17:04 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
sonics написал(а):
Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это.
Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше)
я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове :)


пример:
у вас есть исходная таблица :
Code:
MANDT(x) |FIELD1 (x) | FIELD2  (x) |  FIELD3 | FIELD4


(x) - означает ключевое поле.

модифицируете таблицу:
Code:
MANDT(x) |JAHR(x)|MONAT(x)|FIELD1 (x) | FIELD2  (x) |  FIELD3 | FIELD4


Когда нужны данные за май, делаем селект

SELECT * INTO TABLE lt_mytab FROM Z_TAB WHERE monat = '05' and jahr = '2017'.

И еще, что с данными в ваших таблицах будет при переходе через год?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Пн, дек 11 2017, 14:59 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1392
sonics написал(а):
Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это.
Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше)
я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове :)

Как вместо 12 таблиц сделать одну уже рассказали. Нужно просто в таблицу копию добавить поле "месяц".
Вот только сдается мне, что и эта одна таблица-копия не нужна :)
Какие задачи вы решаете копированием? Я могу допустить, что для задачи нужно сохранять некий временной снимок данных. Тогда да, идея копирования имеет право на существование.
Но для задачи, где сравнивается по определенным 6 ключам и происходит суммирования по определенным столбцам, создание таблицы-копии не является необходимым. Почему сравнение и суммирование должно происходить по копии, а не по исходной таблице?
Если вы расскажете немного о своей задаче, то вполне возможно ничего копировать в принципе не нужно.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Вт, дек 12 2017, 08:18 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, июл 17 2017, 14:11
Сообщения: 375
RoustR написал(а):
sonics написал(а):
Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это.
Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше)
я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове :)

Как вместо 12 таблиц сделать одну уже рассказали. Нужно просто в таблицу копию добавить поле "месяц".
Вот только сдается мне, что и эта одна таблица-копия не нужна :)
Какие задачи вы решаете копированием? Я могу допустить, что для задачи нужно сохранять некий временной снимок данных. Тогда да, идея копирования имеет право на существование.
Но для задачи, где сравнивается по определенным 6 ключам и происходит суммирования по определенным столбцам, создание таблицы-копии не является необходимым. Почему сравнение и суммирование должно происходить по копии, а не по исходной таблице?
Если вы расскажете немного о своей задаче, то вполне возможно ничего копировать в принципе не нужно.

1. За каждый месяц хранить данные в таблице.
Программа будет копировать каждый месяц данные в таблицу с идентичной нумерацией месяца (типа table01, table02, ... , table12)
2. Дальше будет новая программа селекционник, на котором мы выбираем некоторые данные, типа конкретной детали, выбираем сегодняшние данные (таблица с данными каждый день копируется для анализа) и сравниваем с данными, которые мы сохранили в нашей таблице (выбираем через выпадающий список table01..12).
3. На выходе мы получаем временную таблицу, в которой собраны данные с двух таблиц, название детали, сколько нужно произвести и сколько произведено на данный момент и сколько нужно было произвести и произведено на начало месяца из сохраненной нашей таблицы.
Цель, получить данные для сравнительного анализа и аналитики.
Почему нужна программа - данных, минимум 2,5 млн строк.


Последний раз редактировалось sonics Вт, дек 12 2017, 08:25, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Вт, дек 12 2017, 09:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
sonics написал(а):
Почему нужна программа - данных, минимум 2,5 млн строк.

А у вас что SQLite? :shumlol:

У меня некоторые таблицы уже больше 1млрд

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Автоматическое копирование таблицы каждый месяц в новую таблицу
СообщениеДобавлено: Вт, дек 12 2017, 09:51 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
sonics написал(а):
3. На выходе мы получаем временную таблицу, в которой собраны данные с двух таблиц, название детали, сколько нужно произвести и сколько произведено на данный момент и сколько нужно было произвести и произведено на начало месяца из сохраненной нашей таблицы.
Цель, получить данные для сравнительного анализа и аналитики.
Почему нужна программа - данных, минимум 2,5 млн строк.

:roll:
Может Вам посмотреть в сторону стандартного функционала ММ - резервирование + ППМ и/или функционал PP планирование производственных мощностей?

Ну просто, сильно похоже на какой-то огород, часто такой путь оборачивается проблемами.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

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


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

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


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

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