Текущее время: Вт, июл 22 2025, 04:59

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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