SAPфорум.RU https://sapboard.ru/forum/ |
|
Автоматическое копирование таблицы каждый месяц в новую таблицу https://sapboard.ru/forum/viewtopic.php?f=13&t=95832 |
Страница 2 из 5 |
Автор: | Kuranov.Dmitry [ Пт, дек 08 2017, 13:45 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
sonics написал(а): а как мне сделать идентичных 12 таблиц ? чтобы не создавать все вручную? только названия разные... в se11 есть кнопка копирования |
Автор: | sonics [ Пт, дек 08 2017, 14:18 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
Я более менее разобрался. за основу взял: Цитата: JOB_OPEN - Создать фоновое задание JOB_CLOSE - Завершить формирование задания и далее оно по заданным условиям пойдет работать. но не совсем понял как как сделать запуск каждый месяц ? EVENT_PERIODIC = ' '; или PRDMONTHS = '1'; т.е. каждый месяц, верно? |
Автор: | sonics [ Пт, дек 08 2017, 14:23 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
Kuranov.Dmitry написал(а): sonics написал(а): а как мне сделать идентичных 12 таблиц ? чтобы не создавать все вручную? только названия разные... в se11 есть кнопка копирования структуру или данные тоже? |
Автор: | Kuranov.Dmitry [ Пт, дек 08 2017, 14:28 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
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. |
Автор: | sonics [ Пт, дек 08 2017, 15:31 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
Дело в том, что моя программка не имеет gui, т.к. она просто копирует данные из одной таблицы раз в месяц, в одну из 12 таблиц, в зависимости от месяца и все. Дальше я уже буду брать другую программу с селектами, которая берет текущую мою таблицу (одну из 12) и сравнивает с таблицей к сегодняшней день(она есть и копируется ежедневно), сравнивается по определенным 6 ключам и происходит суммирования по определенным столбцам. Я пока что имею лишь теорию, начал с копирования, добью копирование и займусь селективным экраном с GUI, который будет для начала выводить нужные поля из одной таблицы на внутреннюю и дальше буду пробовать рядом добавлять из другой таблицы такие же поля, чтобы видеть разницу между ними. В теории, задача выглядит так. Как через GUI зарезервировать запуск программы я нашел где почитать, а вот через программу я нашел на другом форуме. Обратил внимание, что все можно делать без gui вовсе Попробую модифицировать ваш способ под свою задачу, спасибо, что поделились кодом. |
Автор: | Kuranov.Dmitry [ Пт, дек 08 2017, 15:38 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
если у программы нет селекционника через SM36 можно запланировать. Пожалуй правильный вариант в вашем случае |
Автор: | LKU [ Пт, дек 08 2017, 16:25 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
sonics, кажется вы сначала создаете себе трудности, а потом героически их преодолеваете. Вам уже рекомендовали сделать одну таблицу вместо 12и. Но если хотите 12 - делайте 12. Можно сделать полностью одну таблицу со всеми полями, а потом в se11 воспользоваться кнопкой "копировать". Минуты за 2-3 раскопируете |
Автор: | UKY [ Пт, дек 08 2017, 16:36 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
Я бы ещё порекомендовал сделать общую структуру, которую бы добавил в каждую таблицу. Чтобы после изменений структуры все изменения автоматически переносились в другие таблицы. |
Автор: | sonics [ Пт, дек 08 2017, 16:44 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
Структура общая ? это как ? она одинаковая действительно. Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это. Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше) я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове |
Автор: | Kuranov.Dmitry [ Пт, дек 08 2017, 16:57 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
sonics написал(а): Структура общая ? это как ? она одинаковая действительно. открываете Se11. радиобаттн тип данных вводите название Z_COMMON_STRUC ( ну или свое не суть важно, главное чтоб смысл был). набиваете её полями таблицы. далее назад в se11. Радиобаттн таблица БД создаете таблицу на экране редактирования полей таблицы выбираете: Обработать->Include-> Вставить. вписываете имя структуры. теперь при изменении структуры, все таблицы будут автоматом адаптироваться под структуру |
Автор: | Kuranov.Dmitry [ Пт, дек 08 2017, 17:04 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
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'. И еще, что с данными в ваших таблицах будет при переходе через год? |
Автор: | RoustR [ Пн, дек 11 2017, 14:59 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
sonics написал(а): Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это. Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше) я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове Как вместо 12 таблиц сделать одну уже рассказали. Нужно просто в таблицу копию добавить поле "месяц". Вот только сдается мне, что и эта одна таблица-копия не нужна Какие задачи вы решаете копированием? Я могу допустить, что для задачи нужно сохранять некий временной снимок данных. Тогда да, идея копирования имеет право на существование. Но для задачи, где сравнивается по определенным 6 ключам и происходит суммирования по определенным столбцам, создание таблицы-копии не является необходимым. Почему сравнение и суммирование должно происходить по копии, а не по исходной таблице? Если вы расскажете немного о своей задаче, то вполне возможно ничего копировать в принципе не нужно. |
Автор: | sonics [ Вт, дек 12 2017, 08:18 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
RoustR написал(а): sonics написал(а): Про одну таблицу вместо 12 - я здесь не понимаю, как мне разграничить все данные, я бы с удовольствием так сделал. Но мой порог знаний и понимания не позволяет сделать это. Если бы вы чисто логически пояснили как мне это сделать и как мне по частям таблицу обновлять, я бы с удовольствием рассмотрел бы этот вариант, но к сожалению, я уже описал выше) я не понимаю как можно все разграничить и поэтому я шагаю маленькими шажками к решению, которые у меня уже созрело в голове Как вместо 12 таблиц сделать одну уже рассказали. Нужно просто в таблицу копию добавить поле "месяц". Вот только сдается мне, что и эта одна таблица-копия не нужна Какие задачи вы решаете копированием? Я могу допустить, что для задачи нужно сохранять некий временной снимок данных. Тогда да, идея копирования имеет право на существование. Но для задачи, где сравнивается по определенным 6 ключам и происходит суммирования по определенным столбцам, создание таблицы-копии не является необходимым. Почему сравнение и суммирование должно происходить по копии, а не по исходной таблице? Если вы расскажете немного о своей задаче, то вполне возможно ничего копировать в принципе не нужно. 1. За каждый месяц хранить данные в таблице. Программа будет копировать каждый месяц данные в таблицу с идентичной нумерацией месяца (типа table01, table02, ... , table12) 2. Дальше будет новая программа селекционник, на котором мы выбираем некоторые данные, типа конкретной детали, выбираем сегодняшние данные (таблица с данными каждый день копируется для анализа) и сравниваем с данными, которые мы сохранили в нашей таблице (выбираем через выпадающий список table01..12). 3. На выходе мы получаем временную таблицу, в которой собраны данные с двух таблиц, название детали, сколько нужно произвести и сколько произведено на данный момент и сколько нужно было произвести и произведено на начало месяца из сохраненной нашей таблицы. Цель, получить данные для сравнительного анализа и аналитики. Почему нужна программа - данных, минимум 2,5 млн строк. |
Автор: | Kengur [ Вт, дек 12 2017, 09:46 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
sonics написал(а): Почему нужна программа - данных, минимум 2,5 млн строк. А у вас что SQLite? У меня некоторые таблицы уже больше 1млрд |
Автор: | Besa [ Вт, дек 12 2017, 09:51 ] |
Заголовок сообщения: | Re: Автоматическое копирование таблицы каждый месяц в новую таблицу |
sonics написал(а): 3. На выходе мы получаем временную таблицу, в которой собраны данные с двух таблиц, название детали, сколько нужно произвести и сколько произведено на данный момент и сколько нужно было произвести и произведено на начало месяца из сохраненной нашей таблицы. Цель, получить данные для сравнительного анализа и аналитики. Почему нужна программа - данных, минимум 2,5 млн строк. Может Вам посмотреть в сторону стандартного функционала ММ - резервирование + ППМ и/или функционал PP планирование производственных мощностей? Ну просто, сильно похоже на какой-то огород, часто такой путь оборачивается проблемами. |
Страница 2 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |