Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема розпочата: sonicby від Серпень 23, 2013, 12:53:44 ПП

Назва: Select в фоновом задании.
Відправлено: sonicby від Серпень 23, 2013, 12:53:44 ПП
Запускаю  программу как в теме.
http://sapforum.biz/index.php/topic,388.0.html
есть код

  gv_matdoc = '4900000214'.
  gv_matyear = '2013'.
SELECT SINGLE * FROM mkpf  INTO is_mkpf
    WHERE mblnr EQ gv_matdoc
    AND mjahr EQ gv_matyear     .


Так вот селект дает ошибку в чем может быть проблема ? Если запустить  в диалоговом режиме то все ок.
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 23, 2013, 12:59:57 ПП
Цитата: sonicby від Серпень 23, 2013, 12:53:44 ПП
Так вот селект дает ошибку в чем может быть проблема ? Если запустить  в диалоговом режиме то все ок.
Какую ошибку? Что ничего не найдено?
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 23, 2013, 01:03:40 ПП
Да, ничего не найдено.  sy-subr = 4.
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 23, 2013, 01:06:43 ПП
Цитата: sonicby від Серпень 23, 2013, 01:03:40 ПП
Да, ничего не найдено.  sy-subr = 4.
Это вы константы для примера забили, а в реальной работе там правильные номера документов стоят правильно? Ну если так, тогда читаем документацию про задержки обновления данных и как с этим бороться, точнее правильно анализировать. Ну например тема про оптимизацию абапа.. там есть вот такая вот темка: http://sapforum.biz/index.php/topic,174.msg1252.html#msg1252
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 23, 2013, 01:33:54 ПП
Проблема в том , я взял для проверки старый документ. Если тестовая программа вызывается в диалоге или фоновое выполнение - немедленно в SE38.
ВСЕ ОК.
Если программа вызывается в фоне через событие тогда  дает ошибку.
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 23, 2013, 01:37:31 ПП
Цитата: sonicby від Серпень 23, 2013, 01:33:54 ПП
Если программа вызывается в фоне через событие тогда  дает ошибку.
Не вЭрю... я в потусторонние силы и барабашек.
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 23, 2013, 01:47:55 ПП
вот я тоже не понимаю, чувствую себя оленем.  :(
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 23, 2013, 02:09:43 ПП
Цитата: sonicby від Серпень 23, 2013, 01:47:55 ПП
вот я тоже не понимаю, чувствую себя оленем.  :(
Ну поставь там бесконечный цикл перед запросом.. вызови событие.. перейди в SM51 и там по найди в списке твой процесс и по меню программа - перейти к отладке. Попадешь в отладку вызова и узнаешь что не так.
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 23, 2013, 04:29:49 ПП
не в тот раздел тему поставил, можешь перенести. По самой проблеме пока ничего нашел.
Назва: Re: Select в фоновом задании.
Відправлено: Dmitriy від Серпень 23, 2013, 06:10:42 ПП
Цитата: Uukrul від Серпень 23, 2013, 02:09:43 ПП
Ну поставь там бесконечный цикл перед запросом.. вызови событие.. перейди в SM51 и там по найди в списке твой процесс и по меню программа - перейти к отладке. Попадешь в отладку вызова и узнаешь что не так.
Я тоже в барабашек не верю, но они есть, это совершенно реальные сущности, мешающие продуктивному труду абап-разработчиков. Иногда сам абапер превращается в оное. :)
Что показывает отладка фона? Не может быть, чтобы "старый документ" не выбирался, иначе это открытие СУБД достойно гораздо большего, нежели одного лишь присутствия здесь. Полный код можно? Критерии выбора правильно заполнены? Нули там ведущие нигде не пропущены? А то что-то странное у вас...
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 23, 2013, 09:18:15 ПП
Цитата: sonicby від Серпень 23, 2013, 04:29:49 ПП
не в тот раздел тему поставил, можешь перенести. По самой проблеме пока ничего нашел.
Еще раз.. выполните отладку фонового процесса... до этого по проблеме искать как бы это мягко сказать - НЕЧЕГО!
Назва: Re: Select в фоновом задании.
Відправлено: Dmitriy від Серпень 23, 2013, 09:54:32 ПП
Цитата: Uukrul від Серпень 23, 2013, 09:18:15 ПП
Еще раз.. выполните отладку фонового процесса... до этого по проблеме искать как бы это мягко сказать - НЕЧЕГО!
Судя по всему, пацан не знает как это сделать...
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 23, 2013, 09:59:56 ПП
Цитата: Dmitriy від Серпень 23, 2013, 09:54:32 ПП
Судя по всему, пацан не знает как это сделать...
Да вроде как я выше написал как?  :o
Назва: Re: Select в фоновом задании.
Відправлено: Dmitriy від Серпень 23, 2013, 10:23:33 ПП
Цитата: Uukrul від Серпень 23, 2013, 09:59:56 ПП
Да вроде как я выше написал как?  :o
Ты много всего писал, все ли слышат и умеют быть на Светлой стороне Силы? 8)
У меня сложилось такое впечатление, что какой-то глюк в коде, либо неправильно считывается sy-subrc, иначе нечто выдающееся. Как так: в диалоге е, а в фоне нема, зная, что документ давно есть? Что-то не так делает, сам понимаешь... ;)
Назва: Re: Select в фоновом задании.
Відправлено: Dmitriy від Серпень 23, 2013, 10:45:07 ПП
Практика показывает: любое ЧУДО в жизни, как и в системе SAP - есть непознанное нами явление природы. В данном, конкретном, случае - это действо абапера, неправильно интерпретирующего законы природы. Будем надеяться, что все у него получится. ;)
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 24, 2013, 06:28:46 ПП
Я делал отладку. В чем ошибка не понятно.
Назва: Re: Select в фоновом задании.
Відправлено: Dmitriy від Серпень 24, 2013, 06:50:29 ПП
Цитата: sonicby від Серпень 24, 2013, 06:28:46 ПП
Я делал отладку. В чем ошибка не понятно.
Не понятно, почему в отладке SELECT по старому документу проходит, а в фоне - нет. Бывает, что при создании новых документов они просто не успевают сохраниться в БД до выборки, однако это прерогатива быстроработающих программ, в фоновом, допустим, режиме, когда ресурсы серверов расходуются более эффективно. Странно, очень странно... Код можете более полный привести?
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 24, 2013, 08:17:37 ПП

REPORT ZTEST_MVT4.

data: gv_matdoc type mblnr.
data: gv_matyear type mjahr.
data: is_mkpf type mkpf.
data: lv_msg(255) type c.
data: break type i.
  gv_matdoc = '4900000214'.
  gv_matyear = '2013'.


if sy-batch eq 'X'.
while break ne 1.
endwhile.
endif.


  SELECT SINGLE * FROM mkpf  INTO is_mkpf
    WHERE mblnr EQ gv_matdoc
    AND mjahr EQ gv_matyear     .

    if sy-subrc eq 0.
      concatenate 'Документ найден' gv_matdoc into lv_msg separated by space.
      write lv_msg.
    else.
      write 'Документ  не найден'.
    endif.


Причем когда я говорю не работает в фоне, я имею ввиду запуск в фоне по событию.

CALL FUNCTION 'BP_EVENT_RAISE'

Запускается запланированное фоновое задание с прогой.

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




Назва: Re: Select в фоновом задании.
Відправлено: Dmitriy від Серпень 24, 2013, 08:29:44 ПП
Цитата: sonicby від Серпень 24, 2013, 08:17:37 ПП
но все равно интересно
Всем интересно))). Вы как sy-subrc читаете, все же более полный код можно? А то получается, что SAP вместе с БД глючит. :o На пару, так сказать...
Назва: Re: Select в фоновом задании.
Відправлено: sonicby від Серпень 24, 2013, 08:42:37 ПП
Более полный в каком смысле ?
Вполне нормальный код, специально упрощенный для теста глюка. Читаю в SM50 через дебаг ,  в loop меняю  break  на 1   в дебаге дохожу до селекта и вижу  subrc = 4.
В диалоге subrc = 0
Назва: Re: Select в фоновом задании.
Відправлено: Uukrul від Серпень 26, 2013, 03:15:55 ПП
Цитата: sonicby від Серпень 24, 2013, 08:42:37 ПП
Более полный в каком смысле ?
Вполне нормальный код, специально упрощенный для теста глюка. Читаю в SM50 через дебаг ,  в loop меняю  break  на 1   в дебаге дохожу до селекта и вижу  subrc = 4.
В диалоге subrc = 0
Ну давай тогда во-первых смотрим какой сервер приложений для задания и для диалога, далее картинки отладки показывай в диалоге и в фоне до выполнения запроса и сразу после, со значениями переменных, по которым идет выборка данных. А то какое-то шаманство уже получается.