SAPфорум.RU
https://sapboard.ru/forum/

Автоматическое копирование таблицы каждый месяц в новую таблицу
https://sapboard.ru/forum/viewtopic.php?f=13&t=95832
Страница 1 из 5

Автор:  sonics [ Вт, дек 05 2017, 14:38 ]
Заголовок сообщения:  Автоматическое копирование таблицы каждый месяц в новую таблицу

У меня есть 13 таблиц.
Одна таблица, обновляется каждый день и заполняется данными.
Каждый месяц мне нужно 1го числа автоматически обновить таблицу 01_tb, 02_tb, .. , 11_tb, 12_tb.
Code:
REPORT  zcopy_tb12.
data: gt_z_01_tb type table of z_01_tb,
      gl_z_01_tb type z_01_tb,
      lin type i.
select * into corresponding fields of table gt_z_01_tb from ztb .
describe table gt_z_01_tb lines lin.
if lin > 40000.
delete from z_01_tb.
loop at gt_ztb_tmp1 into gl_z_01_tb.
  gl_z_01_tb-data_create = sy-datum.
  insert into z_01_tb values gl_z_01_tb.
endloop.
endif.

таким образом мы копируем таблицу для 1го месяца в z_01_tb.
как я понимаю, мне нужно создать переменную в которой будет массив от z_01_tb до z_12_tb.
но реализовать как это пока что не пойму.
и оператор условия if для сравнения дат, если сегодня месяц отличается от вчерашнего месяца, запустить копирование таблицы в следующий элемент массив ( т.е. в след таблицу )
1. Первый вопрос - это как автоматизировать копирование таблицы на первое число каждого месяца?

Автор:  Kuranov.Dmitry [ Вт, дек 05 2017, 15:20 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

Написать программу копирования и запихнуть её в плановое задание ( нажать Ф9 , настроить спул, и далее настроить периоды запуска).

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

так же можете посмотреть ФМ JOB_OPEN JOB_SUBMIT JOB_CLOSE

Автор:  LKU [ Вт, дек 05 2017, 15:35 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

А потом однажды время выполнения фонового задания по копированию таблиц попадет на даунтайм сервера и ничего не выйдет.
Лучше конечно иметь одну таблицу со всеми данными. Если скорость доступа критична и в селекте всегда известен месяц, к конце, концов, можно использовать партиционирование на уровне Oracle.

Если все же останетесь со своими табличками, то надо делать отказоустойчивую систему.
Например, фоновое задание по копированию работает каждый день и копирует все, что должно было быть скопировано, но этого ранее не произошло.

Автор:  sonics [ Вт, дек 05 2017, 15:39 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

LKU написал:
А потом однажды время выполнения фонового задания по копированию таблиц попадет на даунтайм сервера и ничего не выйдет.
Лучше конечно иметь одну таблицу со всеми данными. Если скорость доступа критична и в селекте всегда известен месяц, к конце, концов, можно использовать партиционирование на уровне Oracle.

Если все же останетесь со своими табличками, то надо делать отказоустойчивую систему.
Например, фоновое задание по копированию работает каждый день и копирует все, что должно было быть скопировано, но этого ранее не произошло.


в самой плохой ситуации, у нас есть резервные таблицы на сегодня и вчера, которыми мы можем воспользоваться.
сейчас вопрос у меня стоит как сделать копирование автоматическим. Здесь мне просто не хватает знаний и информации.

Автор:  LKU [ Вт, дек 05 2017, 15:42 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

sonics, вам уже Kuranov.Dmitry написал, что надо:
1. Написать программу копирования
2. Запланировать ее регулярное выполнение в фоновом режиме

У вас конкретно с каким шагом и что именно не получается сделать?

Автор:  sonics [ Вт, дек 05 2017, 15:44 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

LKU написал:
sonics, вам уже Kuranov.Dmitry написал, что надо:
1. Написать программу копирования
2. Запланировать ее регулярное выполнение в фоновом режиме

У вас конкретно с каким шагом и что именно не получается сделать?

прошу прощения, я когда открывал, было 2 сообщения и я автоматом посмотрел на последнее... )

проблема в том, программу копирования я написал, для одной таблицы.
это ладно, но запланировать выполнение в фоновом режиме? я еще такого не делал, подскажите как такое делается ?

Автор:  Kuranov.Dmitry [ Вт, дек 05 2017, 15:50 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

sonics написал(а):
LKU написал:
sonics, вам уже Kuranov.Dmitry написал, что надо:
1. Написать программу копирования
2. Запланировать ее регулярное выполнение в фоновом режиме

У вас конкретно с каким шагом и что именно не получается сделать?

прошу прощения, я когда открывал, было 2 сообщения и я автоматом посмотрел на последнее... )

проблема в том, программу копирования я написал, для одной таблицы.
это ладно, но запланировать выполнение в фоновом режиме? я еще такого не делал, подскажите как такое делается ?


Самое простое. запусти программу.
Заполни селекционник если надо.
нами F9.
Спросит про принтер, нажми зеленую кнопку
появится окошко, там кнопка Дата/Время. нажми её.
в поля
ЗапланирЗапуск Дата Время
укажи первое число следующего месяца
время, ну скажем 1 минута первого.
Внизу чекбокс выполнять задание периодически
снизу кнопка значения периодов
откроется окно там нажми нужный период.

далее проверка и дискетка

увы на работе инет ограничен,скриншоты не покажу.

для других таблиц:
из переменной sy-datum получаешь текущую дату.
далее два варианта:
1) IF /ELSE или CASE
2) динамический селект/инсерт

Автор:  sonics [ Вт, дек 05 2017, 16:05 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

Так, понял, спасибо.
Попробую уже завтра.
Но вот логику немного не продумал я через case...
если сегодняшний месяц больше, чем прошлый?
как это можно сравнить именно по месяцам? Мы можем достать именно месяц из sy-datum?
тогда мы выбираем след таблицу.

Автор:  LKU [ Вт, дек 05 2017, 16:11 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

Дата хранится в формате ГГГГММДД
Поэтому sy-datum+4(2) - это ММ, то есть номер месяца.

Автор:  LKU [ Вт, дек 05 2017, 16:13 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

Имя таблицы в операторе insert может быть динамическим, то есть нет нужды через case двенадцать веток кода писать.

Автор:  Kengur [ Ср, дек 06 2017, 12:51 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

LKU написал:
А потом однажды время выполнения фонового задания по копированию таблиц попадет на даунтайм сервера и ничего не выйдет.

Праведливости ради стоит сказать что все задания отработают после запуска сервера если были запланированны.

Автор:  sonics [ Чт, дек 07 2017, 08:23 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

Kengur написал(а):
Праведливости ради стоит сказать что все задания отработают после запуска сервера если были запланированны.

Сервер работает круглосуточно :) производство не стоит ... даже в третью смену ...

Автор:  sonics [ Чт, дек 07 2017, 08:33 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

LKU написал:
Имя таблицы в операторе insert может быть динамическим, то есть нет нужды через case двенадцать веток кода писать.

не совсем понял как это сделать, если не через if и сравнивать месяц, название месяца - будет идентичная таблица...

Автор:  Kuranov.Dmitry [ Чт, дек 07 2017, 09:19 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

sonics написал(а):
LKU написал:
Имя таблицы в операторе insert может быть динамическим, то есть нет нужды через case двенадцать веток кода писать.

не совсем понял как это сделать, если не через if и сравнивать месяц, название месяца - будет идентичная таблица...

Ваша таблица имеет шаблон: Z_<MM>_tb?
Code:
DATA l_tabname(20).

CONCATENATE 'Z_' sy-datum+4(2) '_TB' INTO l_tabname.

INSERT INTO (l_tabname) FROM TABLE lt_data.

Автор:  sonics [ Пт, дек 08 2017, 12:57 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

а как мне сделать идентичных 12 таблиц ? чтобы не создавать все вручную?
только названия разные...

Страница 1 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/