Всем привет.
Проблема больше относится к программированию, но так как provide сугубо эйчарный оператор, решил написать здесь.
в драйвере есть самописная функция для сплитовки wpbp. в ней сплиты добавляются из пользовательского инфотипа 9504. код следующий:
Code:
try.
provide fields * from lt_9504[] into p9504 valid lv_valid1
bounds begda and endda
fields * from wpbp[] into wpbp valid lv_valid2
bounds begda and endda
between aper-begda and aper-endda.
read table wpbp[] with key begda = wpbp-begda
transporting no fields.
if sy-subrc ne 0.
sdates-datum = wpbp-begda. APPEND sdates.
PERFORM split_wpbp_and_it TABLES sdates.
endif.
endprovide.
catch cx_sy_provide_exception.
endtry.
функция вызывается после wpbp rusplt.
Все нормаольно отрабатывает, кроме некоторых случаев:
У одного табельного в 9504-инфотипе следующие записи
01.07.2014 01.07.2014
02.07.2014 04.07.2014
05.07.2014 31.07.2014
и в таблице wpbp после вышесказанных функций приходят 2 сплита
20140701 20140702
20140703 20140731
Как отрабатывает моя функция:
1.в первой итерации цикла с обеих таблиц берется дата 20140701
дальше проверка
Code:
read table wpbp[] with key begda = wpbp-begda
transporting no fields.
if sy-subrc ne 0.
ну и в wpbp ничего не добавлется, потому что в ней есть сплит на 20140701
2. вторая итерация - приходит дата 20140702, в wpbp нет сплита на эту дату, сплит добавляется в перформе.
И в wpbp будут след.сплиты
20140701 20140701
20140702 20140702
20140703 20140731
3. в третьей итерации выходит исключение Provide_overlap и отлавливается cathc. но в этот момент накладывание дат ни в P9504 ни в wpbp нету. не понимаю из-за чего, на какой оверлап система ругается? По этой причине в рабочее место не добавляется сплит на 201407 05. и ЗП неправильно рассчитывается. Если непонятно описал суть проблемы, могу скрины из дебаггера выложить.