Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема розпочата: Skif від Липень 04, 2017, 12:00:51 ПП

Назва: BEGDA-ENDDA не перекрывались для PERNR
Відправлено: Skif від Липень 04, 2017, 12:00:51 ПП
Привет,
Чисто программистская задачка. Наверняка сто раз решена - где-то - Ткните пальцем, плз :)
Не дать сохранить дублирующую PERNR запись с перекрывающимся интервалом. В смысле, т.к. они ключевые, то конечно матюкнётся на update. Но хотелось бы проверить до сохранения, выдать сообщение об ошибке с требованием проверить интервалы.
Назва: Re: BEGDA-ENDDA не перекрывались для PERNR
Відправлено: Uukrul від Липень 04, 2017, 09:41:42 ПП
Цитата: Skif від Липень 04, 2017, 12:00:51 ПП
хотелось бы проверить до сохранения, выдать сообщение об ошибке с требованием проверить интервалы.
Сделать переменную типа RANGES в нее загнать интервалы? которые существуют (sign = I, option = BT, low = <начало>, high = <конец>), а дальше новый интервал проверить вхождение начала интервала и конца в этот RANGES если начало или конец входят в проверку то значит есть пересечение, т.е. типа if BEGDA-ENDDA in RANGES. <значит дата входит в один из диапазонов>. elseif BEGDA-BGNDA in RANGES. <дата входит в пересечение диапазона>. else. <все в порядке пересечения нет>.
Назва: Re: BEGDA-ENDDA не перекрывались для PERNR
Відправлено: ysichov від Липень 07, 2017, 10:58:38 ДП
Добрый день! Подсмотрел алгоритм у самого SAP  когда-то :)

... where begda <= p_end
        and endda >= p_beg.

где p_beg , p_end - период нашей новой записи.


Назва: Re: BEGDA-ENDDA не перекрывались для PERNR
Відправлено: Uukrul від Липень 07, 2017, 11:33:50 ДП
Цитата: ysichov від Липень 07, 2017, 10:58:38 ДП
Добрый день! Подсмотрел алгоритм у самого SAP  когда-то :)
Юра, там условие, было следующее. Так что твой вариант мимо кассы получается, базу то трогать не хотят лишними нагрузками.
Цитата
Но хотелось бы проверить до сохранения, выдать сообщение об ошибке
Назва: Re: BEGDA-ENDDA не перекрывались для PERNR
Відправлено: ysichov від Липень 07, 2017, 01:16:27 ПП
Олег, в варианте с RANGE используется  SELECT к таблице? или вся таблица загружена во внутреннюю память?

Назва: Re: BEGDA-ENDDA не перекрывались для PERNR
Відправлено: Uukrul від Липень 07, 2017, 01:49:26 ПП
Цитата: ysichov від Липень 07, 2017, 01:16:27 ПП
Олег, в варианте с RANGE используется  SELECT к таблице? или вся таблица загружена во внутреннюю память?
Так я так понял данные по существующим интервалам у него уже где-то есть в переменных., так что RANGE просто используется для проверки без запроса к базе, хотя если конечно там HANA, то как бы все равно  8)