Текущее время: Ср, июл 23 2025, 16:59

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: ЛБД PCH
СообщениеДобавлено: Пн, июл 09 2007, 11:59 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
Как сделать чтобы при выводе проекции данных из разных инфо-типов строки не повторялись. Используется ЛБД PCH.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 08:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, май 30 2006, 08:34
Сообщения: 1900
Не очень понятно :( ,
вы бы по-подробнее изложить суть проблемы.

_________________
С уважением.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 10:55 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
Изображение

Code:
REPORT  ZRL_SECOND_ZAD                          .

TABLES: objec, gdstr.
INFOTYPES: 1000,0001,0002,1222.

DATA: name  type char80,
      spec_tabl type table of zspec_str2 with header line.

INITIALIZATION.
  pchplvar = '01'.
  pchotype = 'O'.
  pchwegid = 'O-O-S-P'.

GET OBJEC.

  IF objec-otype = 'O'.
    LOOP AT p1000 where begda LE pc-endda
                    AND endda GE pc-begda.
      spec_tabl-SHORT = objec-short.
      spec_tabl-STEXT = objec-stext.
    ENDLOOP.
  ENDIF.


  IF objec-otype = 'S'.
    LOOP AT p1000 where begda LE pc-endda
                    AND endda GE pc-begda.
      spec_tabl-CP1_SHORT = objec-short.
      spec_tabl-CP1_STEXT = objec-stext.
    ENDLOOP.
  ENDIF.

  IF objec-otype = 'P'.
    PROVIDE pernr FROM p0001
            vorna nachn nach2 FROM p0002
      BETWEEN pc-begda and pc-endda.
      CONCATENATE p0002-vorna p0002-nachn p0002-nach2 INTO name
      SEPARATED BY SPACE.
      spec_tabl-pernr = p0001-pernr.
      spec_tabl-cname = name.
    ENDPROVIDE.
    append spec_tabl.
  ENDIF.



END-OF-SELECTION.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_STRUCTURE_NAME                  = 'zspec_str2'
    TABLES
      T_OUTTAB                          = spec_tabl[]
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


вот код программы, вроде все правильно, но выскакивают повторные строки....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 12:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, май 30 2006, 08:34
Сообщения: 1900
Цитата:
но выскакивают повторные строки

Meshok, какие именно повторные строки? Для всех типов объектов или только для определенных? Какой вопрос ты задашь, такой ответ и получишь.

Если ты запускаешь отчет за период, то велика вероятность, что в этот период у челов в орг.присвоении случаются изменения и ты обрабатываешь несколько записей в P0001.
Кстати из кода совершенно неясно, для чего тебе нужен P0001. Номер табельного можно взять и из p1000 и из p0002.

_________________
С уважением.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 12:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
Необходимо делать provide по ИТ 0001.
а внутри читать остальные ИТ на дату ИТ 0001


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 13:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
calm написал(а):
...
Кстати из кода совершенно неясно, для чего тебе нужен P0001. Номер табельного можно взять и из p1000 и из p0002.

Более того
Code:
PROVIDE pernr FROM p0001
абсолютно безсмысленен. Табельный номер нужно брать из OBJEC-OBJID (для объекта 'P' естественно)

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 17:52 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
calm написал(а):
Цитата:
но выскакивают повторные строки

Meshok, какие именно повторные строки? Для всех типов объектов или только для определенных? Какой вопрос ты задашь, такой ответ и получишь.

Если ты запускаешь отчет за период, то велика вероятность, что в этот период у челов в орг.присвоении случаются изменения и ты обрабатываешь несколько записей в P0001.
Кстати из кода совершенно неясно, для чего тебе нужен P0001. Номер табельного можно взять и из p1000 и из p0002.


Повторные строки для всех типов объектов.
Я запускаю отчет за "сегодня" и все равно есть повторяющиеся строки.
А таб. номер я беру из p0001, потому что по заданию так нужно =)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 18:01 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
Брат Мигель написал:
Необходимо делать provide по ИТ 0001.
а внутри читать остальные ИТ на дату ИТ 0001


Спасибо, завтра попробую.
Я так понимаю это будет выглядить примерно так:

Code:
Provide pernr from p0001
between begda and endda
    Provide vorna midn nachn from p0002
    between begda and endda
         ..........
         ..........
    Endprovide.
Endprovide.


ИЛИ КАК?)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 20:13 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Meshok Строки у вас дублмруются скорее всего (сейчас нет возможности проверить) из-за пути анализа. Попробуйте вместо 'O-O-S-P' использовать 'O-S-P'
Meshok написал(а):
Изображение

REPORT ZRL_SECOND_ZAD .

...
INITIALIZATION.
pchplvar = '01'.
pchotype = 'O'.
pchwegid = 'O-O-S-P'.

...


Далее что касается табельного номера - то в данной части можно не обращать на т.з - так как табельный номер является уникальным идентификатором служащего и он один и тот-же что в 0001 инфотипе, что в OBJEC-OBJID и не сожет меняться с течением времени.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 20:52 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
Дело в том что путь анализа должен быть "o-o-s-p" по условию задания =(
Но я думаю что связи дублируются не из-за этого.
В моей группе люди которые делали отчеты с ЛБД PNP, перед проекцией табельного номера и имени сотрудника использовали макрос rp_provide_from_last и строки у них перестали повторяться.
Но в PCH нет такого макроса =(.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 21:07 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Meshok написал(а):
Дело в том что путь анализа должен быть "o-o-s-p" по условию задания =(
Но я думаю что связи дублируются не из-за этого.
В моей группе люди которые делали отчеты с ЛБД PNP, перед проекцией табельного номера и имени сотрудника использовали макрос rp_provide_from_last и строки у них перестали повторяться.
Но в PCH нет такого макроса =(.

Ну, ё-моё. Вы отчёт делаете или в бубен стучите? Если у вас принципиально некоторве объекты могут быть вызваны несколько раз, то проверяйте нахлждение данных объектов таблице перед помещением туда записи.
Что там у кого не стало повторяться в PNP - это не важно (хотя rp_provide_from_last тут не причём), у вас ведь PCH

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июл 10 2007, 21:25 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
Цитата:
Если у вас принципиально некоторве объекты могут быть вызваны несколько раз, то проверяйте нахлждение данных объектов таблице перед помещением туда записи.


Да не некоторые, а все! И ошибка не в правильности выбора пути анализа, а скорее всего в самой выборке! Поэтому я и кинул код, думал специалисты сразу увидят косяк.

Задачка-то вообще нулевая по идее.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 11 2007, 00:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Meshok написал(а):
Да не некоторые, а все! И ошибка не в правильности выбора пути анализа, а скорее всего в самой выборке! Поэтому я и кинул код, думал специалисты сразу увидят косяк.

Ну так вот и смотрите код - у вас на каждый вызов get objec для объекта типа 'P' добавляется одна запись в таблицу.
Code:
ENDPROVIDE.
append spec_tabl.
ENDIF. " IF objec-otype = 'P'.
как видно append находится за рамками цикла Provide Endprovide, который в итоге на количество записей не влияет..
Сколько вызовов get objec (тип P) столько и записей в таблице. Задать ключ и/или просто проверять наличие записей во внутренней таблице Вы не хотите, менять путь анализа тоже. Вам нужны магические артефакты, заклинания в виде неких макросов? Таких не существует.
Цитата:
Задачка-то вообще нулевая по идее.
Вывести всех сотрудников, должности,которые они занимают и организационные единицы в которых они работают. Остальные условия вы уже знаете (путь анализа и табельный номер).
и что? Думать уже запрещено? Табельный номер он и есть табельный номер, ненужно в даннном случае для его получения гонять цикл по ИТ 0001.

В конце концов - поменяйте 'O-O-S-P' (это ведь недолго) на 'O-S-P' - посмотрите что изменилось. Поменяйте обратно - смотрите что, для чего и в какой последовательности у вас вызывается get objec. Понавставляёте write-ов для контроля. Проверьте какие интервалы дат заданы и заданы-ли они вообще.
А то получается - у вас "Задание №2 по ЛБД", а нам решать.

_________________
"После" - не значит "вследствие"


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

Зарегистрирован:
Ср, июн 01 2005, 09:40
Сообщения: 536
Откуда: Belgorod
Пол: Мужской
Meshok написал(а):
Брат Мигель написал:
Необходимо делать provide по ИТ 0001.
а внутри читать остальные ИТ на дату ИТ 0001


Спасибо, завтра попробую.
Я так понимаю это будет выглядить примерно так:

Code:
Provide pernr from p0001
between begda and endda
    Provide vorna midn nachn from p0002
    between begda and endda
         ..........
         ..........
    Endprovide.
Endprovide.


ИЛИ КАК?)


Нет, не нужен второй провайд нужно например сделать loop и ограничить p0002-begda between p0001-begda and p0001-endda.
иначе опять ерунда будет.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 11 2007, 20:44 
Начинающий
Начинающий

Зарегистрирован:
Пн, июл 09 2007, 11:54
Сообщения: 15
Брат Мигель написал:
Meshok написал(а):
Брат Мигель написал:
Необходимо делать provide по ИТ 0001.
а внутри читать остальные ИТ на дату ИТ 0001


Спасибо, завтра попробую.
Я так понимаю это будет выглядить примерно так:

Code:
Provide pernr from p0001
between begda and endda
    Provide vorna midn nachn from p0002
    between begda and endda
         ..........
         ..........
    Endprovide.
Endprovide.


ИЛИ КАК?)


Нет, не нужен второй провайд нужно например сделать loop и ограничить p0002-begda between p0001-begda and p0001-endda.
иначе опять ерунда будет.


Попробовал, результат тот же самый.


Цитата:
В конце концов - поменяйте 'O-O-S-P' (это ведь недолго) на 'O-S-P' - посмотрите что изменилось.


Пробовал, результат тот же самый. =(

Цитата:
А то получается - у вас "Задание №2 по ЛБД", а нам решать.


sy-uname!Что значит "нам решать"! Вы так в каждом топике пишите? Я вас не заставляю решать, а спросил в чем может быть проблема. Все что вы советовали я перепробовал.


Еще вопрос появился: объясните плз как работает provide? И чем его работа отличается от loop'a?
спасибо


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

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


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

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


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

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