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

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

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

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

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

Korvax написал:
Вероятно таблиц станет 24!

Тут надо сразу писать масштабируемое решение. Даешь [s]пакет с пакетами[/s] таблицу с таблицами :mrgreen:

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

Чего вы пристали к человеку?) ему сказали делать 12 таблиц и все тут. Наверное, так и бывает. Все зависит от того, кто "у власти" на проекте :D
Есть люди, которым хоть задоказывайся, что так неправильно или неоптимально. Там просто свой незавершенный гештальт, возможно...
Есть у меня друг, который говорит, что им руководство запрещает замещения использовать. Мол, это скрыто от глаз пользователя, мало ли что вы там назамещаете.
Их концепция - это только open-fi. Вот они и замещают в 1025. Тоже скрыто от пользователя, зато концепции соответствует 8)

Автор, дерзай :pivo: Как сделать-то уже расписали, планируй фоновое и вперед.
Можно без селекционки, но тогда в начале алгоритма нужен простейший обработчик, что наступило первое (или любое последующее) число нового месяца И копирование таблицы еще не выполнялось. Последнего требования в обсуждении не увидел. Фактически нужно где-то хранить информацию о том, выполнялось ли копирование за месяц N. Потому что непустота в таблице за период N еще ничего не говорит (тут два варианта: осталась непустая с прошлого года или уже наполнилась свежими данными недавно). Но народ по природе своей пакостливый. Последующий запуск программы копирования приведет к перетиранию данных в таблице за месяц N, но попадут туда также и записи, которые были созданы после недавнего копирования, то есть должны были пойти уже в N+1.

Также весьма интересно, с какой регулярностью наполняется главная таблица? Если в нее вносятся записи на регулярной и главное очень частой основе, то где гарантия, что:
- в записываемую таблицу попадет все самое нужное, то есть действительно картина на 0.00 часов?
- в записываемую таблицу не попадет лишнее?

Тормознуло фоновое задание - попадет лишнее. Лагнули процессы, записывающие в исходную таблицу, - не попадет нужное.

А так-то да, задача с фантазией :D

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

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


То есть, у вас есть таблица по производству каких-то деталей. Нужно проводить анализ - сколько деталей произведено за месяц, сколько нужно произвести, сравнить ситуацию с прошлыми периодами. Лично я пока не вижу ни одной причины производить копирование таблиц для этой задачи.
Вот например
Цитата:
2. Дальше будет новая программа селекционник, на котором мы выбираем некоторые данные, типа конкретной детали, выбираем сегодняшние данные (таблица с данными каждый день копируется для анализа) и сравниваем с данными, которые мы сохранили в нашей таблице (выбираем через выпадающий список table01..12).

почему это нельзя сделать так
Цитата:
будет программа селекционник, на котором мы выбираем некоторые данные, типа конкретной детали, выбираем сегодняшние данные и сравниваем с данными, которые хранятся в ЭТОЙ ЖЕ таблице, но за другой период

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

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

Честно, запутался....
12 таблиц - могу. В одной все держать - не понимаю как.

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

RoustR написал(а):
Борода с копирование отпадает, места в базе данных занимает меньше, сама выборка-сравнение работать будет примерно столько же, само решение будет более универсальным (нет ограничения на 12 месяцев).

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

Автор:  Sam Stone [ Ср, дек 13 2017, 14:18 ]
Заголовок сообщения:  Re: Автоматическое копирование таблицы каждый месяц в новую таблицу

sonics написал(а):
RoustR написал(а):
Борода с копирование отпадает, места в базе данных занимает меньше, сама выборка-сравнение работать будет примерно столько же, само решение будет более универсальным (нет ограничения на 12 месяцев).

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

Ну хоть какое-то поле с датой ведь есть. Как-то ведь эти данные отбираются, чтобы вставить их в одну из 12 таблиц. А вместо вставки - сразу обрабатывать и выводить в отчет.

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

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

Цитата:
Данных же не будет, если мы не сохраним...

А куда они денутся?

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

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

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

RoustR написал(а):
А куда они денутся?

ну они же есть только сегодняшнего дня и еще вчерашнего, дальше они по новой отрабатывают ночью.

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

sonics написал(а):
в целом, я готов попробовать сделать в одной таблице, если поможете по шагам, что надо сделать?
на данный момент я создал одну таблицу отдельную такой же структуры как и заданная, за исключением последнего поля, там я храню sy-datum на время копирования
таким образом, мне нужно не затирать старые данные, а добавлять и можно прикрепиться к дате, верно?


Да, верно. Затем при любой выборке данных их этой таблицы в разрезе определенного месяца в условиях запроса нужно дописывать условие по дате. Типа DATUM(6) = '201710' (DATUM - имя поля).
Далее, так как предполагается частое использование этого поля в качестве ключа для выборки, имеет смысл построить по нему индекс. В противном случае, по мере заполнения таблицы, будет заметно снижаться скорость выполнения запроса по дате.

Обрати внимание, что если действовать так, при анализе ты не будешь ограничен временными рамками, которые ты заложил в варианте с 12-ю таблицами. Выборку можно производить за произвольный период, глубина истории не ограничена, при этом не нужно каждый раз писать новую программу для работы с данными. Кроме того, можно пользоваться любыми другими средствами работы с данными, например, subquery.

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

sonics написал(а):
ну они же есть только сегодняшнего дня и еще вчерашнего, дальше они по новой отрабатывают ночью.


Что это за процесс, который формирует такую таблицу? Чувствуется определенный почерк, на каждый временной период создавать отдельную таблицу :)

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

Если с этим сейчас ничего нельзя сделать, то придется делать механизм перекладки данных из дневной таблицы в общую. То, что с чего началась эта тема. Но и в этом случае, будет дневная таблица и одна общая таблица. Механизм перекладки настроить в виде процесса по расписанию. Но лучше еще ведение журнала работы этого механизма. Сделать еще одну таблицу, в которой оставлять запись о выполнении работы.

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

Затупил...
Создал таблицу одну, вместо 12.. копировал туда данные.
теперь начал программу, описал необходимые мне: назв материала, цех изг., цех потр.
Дальше... дальше я полагаю мне через left join можно сравнить две таблицы ....или как?

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

sonics написал(а):
Затупил...
Создал таблицу одну, вместо 12.. копировал туда данные.
теперь начал программу, описал необходимые мне: назв материала, цех изг., цех потр.
Дальше... дальше я полагаю мне через left join можно сравнить две таблицы ....или как?





Code:
data prev_month(2).

if sy-datum+4(2) ne '01'.
    prev_month = sy-datum+4(2) - 1.
    SELECT * FROM z_myatab INTO lt_prev_month  WHERE month = prev_month.
endif.

SELECT * FROM z_myatab INTO lt_cur_month  WHERE month = sy-datum+4(2).



в таблице lt_prev_month будут данные за прошлый месяц
в таблице lt_cur_month будут данные за текущий

Для января предыдущий как брать? декабрь прошлого года? ну тогда по аналогии вычислить месяц и год.

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

Kuranov.Dmitry написал(а):
Code:
data prev_month(2).

if sy-datum+4(2) ne '01'.
    prev_month = sy-datum+4(2) - 1.
    SELECT * FROM z_myatab INTO lt_prev_month  WHERE month = prev_month.
endif.

SELECT * FROM z_myatab INTO lt_cur_month  WHERE month = sy-datum+4(2).



в таблице lt_prev_month будут данные за прошлый месяц
в таблице lt_cur_month будут данные за текущий

Для января предыдущий как брать? декабрь прошлого года? ну тогда по аналогии вычислить месяц и год.


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

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