Текущее время: Чт, июл 03 2025, 04:16

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


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: HR - считывание данных
СообщениеДобавлено: Вс, ноя 13 2005, 18:08 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 14:41
Сообщения: 211
Откуда: СПб
Пол: Женский
Коллеги!

Кто программировал для HR, помогите...

Совершенно непонятно, как ведет себя оператор PROVIDE в режиме массового считывания данных, куда кладутся считанные данные и как их можно оттуда выуживать и отфильтровывать...

Мне нужно считать данные инфотипа по всем сотрудникам указанной единицы расчета и положить эти данные во внутреннюю таблицу. Используется для этого ЛБД PNP, а записано это так:

get pernr.

provide pernr bkont bankn from p0009 between pn-begda and pn-endda.
file_tab-pernr = p0009-pernr.
concatenate p0009-bkont p0009-bankn into file_tab-account.
append file_tab.
endprovide.

loop at file_tab.
write: / file_tab-pernr, file_tab-account.
endloop.


Пока я указываю в параметрах выборки конкретные табельные номера, все хорошо. Как только указываю всю единицу расчета, так мне вываливается куча одинаковых записей (дублированных). Откуда это берется, мне совершенно непонятно. Как быть?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, ноя 13 2005, 18:54 
Гость
примерно вот так:

Code:
REPORT  ZTEST611                                .

INFOTYPES: 0000, 0001, 0009.

NODES: PERNR.

DATA: BEGIN OF FILE_TAB OCCURS 0,
         PERNR LIKE PA0001-PERNR,
         ACCOUNT(40),
      END OF FILE_TAB.

START-OF-SELECTION.

GET PERNR.
  CLEAR: FILE_TAB.
  FILE_TAB-PERNR = P0009-PERNR .
  CONCATENATE P0009-BKONT P0009-BANKN INTO FILE_TAB-ACCOUNT.
  CHECK NOT FILE_TAB-PERNR IS INITIAL.
  APPEND FILE_TAB.

END-OF-SELECTION.

  LOOP AT FILE_TAB.
    WRITE:/ FILE_TAB-PERNR, FILE_TAB-ACCOUNT.
  ENDLOOP.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, ноя 13 2005, 19:12 
Специалист
Специалист

Зарегистрирован:
Пт, апр 08 2005, 10:27
Сообщения: 125
Пол: Мужской
Уточни, нужно считать последнюю запись инфотипа?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, ноя 13 2005, 21:55 
Гость
Bit написал:
Уточни, нужно считать последнюю запись инфотипа?


хороший вопрос,
да, еще нужно вставить проверку на актуальность:

Code:

REPORT  ZTEST611                                .

INFOTYPES: 0000, 0001, 0009.

NODES: PERNR.

DATA: BEGIN OF FILE_TAB OCCURS 0,
         PERNR LIKE PA0001-PERNR,
         ENAME LIKE PA0001-ENAME,
         ACCOUNT(40),
      END OF FILE_TAB.

START-OF-SELECTION.

GET PERNR.
  CLEAR: FILE_TAB.
  FILE_TAB-PERNR = P0009-PERNR .
  CONCATENATE P0009-BKONT P0009-BANKN INTO FILE_TAB-ACCOUNT.
  CHECK NOT FILE_TAB-PERNR IS INITIAL.
  CHECK P0009-BEGDA <= SY-DATUM AND P0009-ENDDA >= SY-DATUM.
  FILE_TAB-ENAME = P0001-ENAME.
  APPEND FILE_TAB.

END-OF-SELECTION.

  LOOP AT FILE_TAB.
    WRITE:/ FILE_TAB-PERNR, FILE_TAB-ENAME, FILE_TAB-ACCOUNT.
  ENDLOOP.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, ноя 13 2005, 22:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Не вполне корректно сравнивать с SY-DATUM, на то параметры на экране выбора есть. Чтобы в событии GET pernr выбрать первую или последнюю дейстаительные записи инфотипа, можно еще воспользоваться макросами rp-provide-from-last и rp-provide-from-frst. Чтоб записи точно не повторялись, можно воспользоваться COLLECT вместо APPEND.

Code:
GET pernr.
  rp-provide-from-last p0009 space pn-begda pn-endda.
  CLEAR: FILE_TAB.
  FILE_TAB-PERNR = P0009-PERNR .
  CONCATENATE P0009-BKONT P0009-BANKN INTO FILE_TAB-ACCOUNT.
  CHECK NOT FILE_TAB-PERNR IS INITIAL.
  FILE_TAB-ENAME = P0001-ENAME.
  COLLECT FILE_TAB.


pn-begda и pn-endda - фактический интервал отбора данных инфотипов.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 14 2005, 13:29 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 14:41
Сообщения: 211
Откуда: СПб
Пол: Женский
Спасибо, коллеги.

Поняла, что дело было в отсутствии в коде событий START-OF-SELECTION и END-OF-SELECTION.

Да, действительно, нужно было считать последнюю запись ИТ.

Все получилось. Благодарю!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 14 2005, 16:47 
Гость
Не хочу плодить новую тему, ибо в продолжение того же вопроса...

Как ограничить критерии выбора, которые ЛБД предоставляет на экране выбора по умолчанию?

А то там слишком много всего, мне столько не надо :D

Эх, давно я с ЛБД не работала...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 14 2005, 16:48 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 14:41
Сообщения: 211
Откуда: СПб
Пол: Женский
Это я была


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 14 2005, 17:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
В окне свойств программы (если она привязана к базе PNP) внизу появляется кнопка "класс HR-отчета", нужно создать свой класс отчета - его имя должно начинаться с "9" - в нем настраивается экран выбора PNP.
Кстати, если у вас 4.7, то можно использовать базу PNPCE, правда там немного другие события - вместо "GET pernr" "GET peras", ну и еще пару-тройку отличий.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 14 2005, 18:20 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 14:41
Сообщения: 211
Откуда: СПб
Пол: Женский
Нет, у нас 4.6С, но я все нашла в классах отчета, там уже есть стандартный экранчик, который меня вполне устраивает :D
Спасибо, Сергей!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 21:53 
Гость
РМщик написал(а):
примерно вот так:

Code:
REPORT  ZTEST611                                .

INFOTYPES: 0000, 0001, 0009.

NODES: PERNR.

DATA: BEGIN OF FILE_TAB OCCURS 0,
         PERNR LIKE PA0001-PERNR,
         ACCOUNT(40),
      END OF FILE_TAB.

START-OF-SELECTION.

GET PERNR.
  CLEAR: FILE_TAB.
  FILE_TAB-PERNR = P0009-PERNR .
  CONCATENATE P0009-BKONT P0009-BANKN INTO FILE_TAB-ACCOUNT.
  CHECK NOT FILE_TAB-PERNR IS INITIAL.
  APPEND FILE_TAB.

END-OF-SELECTION.

  LOOP AT FILE_TAB.
    WRITE:/ FILE_TAB-PERNR, FILE_TAB-ACCOUNT.
  ENDLOOP.




у меня таже проблема, что и у девушки, только вот:


а если нужно считывать данные по всем табельным нескольких инфотипов, так, чтобы записи попадали в промежуток между датами и считанные записи еще и должны соотвествовать некоторому условию,
код программы:


get pernr.


provide * from p0000 BETWEEN pn-begda AND pn-endda.

if p0000-MASSN = '02' or p0000-MASSN = '03' or p0000-MASSN = '04'.

rp-provide-from-last p0001 space p0000-begda p0000-begda.

clear rec.

rec-pernr = pernr-pernr.

rec-SNAME = pernr-SNAME.

* еще какие-то действа
append rec to tabrec.

endif.

endprovide.


end-of-selection.

call screen 100.

если не задавать табельные, то происходит считывается куча записей
по всем возможным табельным выходят дублированные записи


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 22:35 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
Если я правильно понял задачу, то тебе необходимо посмотреть пример из HR350 :)

Вместо
Code:
if p0000-MASSN = '02' or p0000-MASSN = '03' or p0000-MASSN = '04'.

Используй условие WHERE оператора PROVIDE.

Вместо rp-provide-from-last используй PROVIDE по нескольким таблицам (т.н. пересечение - см. HR350). Иначе черезчур наворочено получается и неоптимально с т.з. кода.

Было бы здорово, еслибы ты глянул HR350 и написал еще раз чего же все-таки требуется :)

Удачи!

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 22:40 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 13:16
Сообщения: 1790
и еще одно замечание.
используйте знак подчеркивания в макросах вместо дефиса, везде, где есть возможность - требование стандарта.

_________________
/nex


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 22:42 
Гость
Bully написал(а):
Если я правильно понял задачу, то тебе необходимо посмотреть пример из HR350 :)

Вместо
Code:
if p0000-MASSN = '02' or p0000-MASSN = '03' or p0000-MASSN = '04'.

Используй условие WHERE оператора PROVIDE.

Вместо rp-provide-from-last используй PROVIDE по нескольким таблицам (т.н. пересечение - см. HR350). Иначе черезчур наворочено получается и неоптимально с т.з. кода.

Было бы здорово, еслибы ты глянул HR350 и написал еще раз чего же все-таки требуется :)

Удачи!



ага, а HR350 - это курс так называется или программа, которую можно посмотреть в стандартной поставке


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 17 2006, 22:44 
Гость
Bully написал(а):
и еще одно замечание.
используйте знак подчеркивания в макросах вместо дефиса, везде, где есть возможность - требование стандарта.


например где в моем примере?


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

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


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

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


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

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