Текущее время: Пн, июл 21 2025, 02:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка в provide endprovide
СообщениеДобавлено: Пн, авг 11 2014, 08:55 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 08:43
Сообщения: 53
Всем привет.
Проблема больше относится к программированию, но так как 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. и ЗП неправильно рассчитывается. Если непонятно описал суть проблемы, могу скрины из дебаггера выложить.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide
СообщениеДобавлено: Пн, авг 11 2014, 12:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 23 2005, 12:50
Сообщения: 942
Пол: Мужской
используйте PERFORM split_wpbp_and_it, на вход подается таблица с датами с нужного инфотипа.

_________________
Нет таких денег, за которые кто-то будет работать лучше, чем энтузиасты бесплатно. Пол Грэм.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide
СообщениеДобавлено: Пн, авг 11 2014, 13:04 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 08:43
Сообщения: 53
Цитата:
используйте PERFORM split_wpbp_and_it, на вход подается таблица с датами с нужного инфотипа.


Для вставки нового сплита в wpbp это форма используется.
Code:
if sy-subrc ne 0.
          sdates-datum = wpbp-begda. APPEND sdates.
          PERFORM split_wpbp_and_it TABLES sdates.
        endif.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide  Тема решена
СообщениеДобавлено: Пн, авг 11 2014, 13:54 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122
Что-то мне подсказывает, что делать provide и одновременно добавлять записи в таблицу wpbp не очень хорошо.
Может попробовать добавлять записи в промежуточную таблицу, а после provide просто делать append в основную wpbp?

Почему во второй итерации на 20140702 нет сплита в wpbp? Первая же строка входит в этот интервал 20140701 20140702.
Если Вы в таблицу wpbp добавляете запись 20140702 20140702, то получается перекрытие интервалов с первой записью таблицы.
А как известно в provide не должно быть перекрытий интервалов в рамках одной таблицы.

_________________
Поздравляю тебя, Шарик, ты - балбес!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide
СообщениеДобавлено: Пн, авг 11 2014, 14:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 23 2005, 12:50
Сообщения: 942
Пол: Мужской
Какой смысл провайде для этой задачи? Или поясните чего добиваетесь.
Нужно же просто собрать все даты по вашему инфотипу в таблицу и в конце передать в split_wpbp_and_it.

_________________
Нет таких денег, за которые кто-то будет работать лучше, чем энтузиасты бесплатно. Пол Грэм.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide
СообщениеДобавлено: Пн, авг 11 2014, 14:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 23 2005, 12:50
Сообщения: 942
Пол: Мужской
Вот похожая тема:
viewtopic.php?f=11&t=85936&p=507499&hilit=WPBP#p507499
там пример кода есть

_________________
Нет таких денег, за которые кто-то будет работать лучше, чем энтузиасты бесплатно. Пол Грэм.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide
СообщениеДобавлено: Пн, авг 11 2014, 14:17 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 08:43
Сообщения: 53
Цитата:
Нужно же просто собрать все даты по вашему инфотипу в таблицу и в конце передать в split_wpbp_and_it.

Цитата:
Что-то мне подсказывает, что делать provide и одновременно добавлять записи в таблицу wpbp не очень хорошо.
Может попробовать добавлять записи в промежуточную таблицу, а после provide просто делать append в основную wpbp?

Кажется вы правы. Но до этого в более сложных примерах тестировал, вроде все работало, и в продуктиве уже 2 месяца работаем:(
Цитата:
Какой смысл провайде для этой задачи? Или поясните чего добиваетесь.

Инфотип 9504 должен сплитовать рабочее место, собственно это инфотип для сдельной ЗП. Сплитую чтобы удалить оклад или тариф в период когда сотрудник работал в сделке и добавляю сдельную оплату.

Так и сделаю тогда: соберу даты во внутреннюю таблицу, и в конце вызову PERFORM split_wpbp_and_it.
Всем спасибо.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка в provide endprovide
СообщениеДобавлено: Вт, авг 12 2014, 06:43 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, окт 05 2011, 08:43
Сообщения: 53
Цитата:
Почему во второй итерации на 20140702 нет сплита в wpbp? Первая же строка входит в этот интервал 20140701 20140702.
Если Вы в таблицу wpbp добавляете запись 20140702 20140702, то получается перекрытие интервалов с первой записью таблицы.
А как известно в provide не должно быть перекрытий интервалов в рамках одной таблицы.

Нету записи в wpbp, начинающаяся на 20140702, вот это имел в виду. когда стандартным перформом добавляю запись на 0702, запись 20140701-20140702 ограничивается.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB