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

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


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

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


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

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