Текущее время: Сб, авг 02 2025, 17:20

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 11 2007, 18:32 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
EvgenySA

Цитата:
НО надо будет прописывать счета по принципу каждый с каждым.


я в накауте! :shock:

по поводу цикла что то мне подсказывает что придется делать как посоветовал John Doe

а по поводу глюков возврата сумм с рейнджс я опечален. по одному счету работает по диапазону или даже по перечислению счетов левая сумма и все.

Всем спасибо за коменты и предложения!!!
мож завтра с утра не будет все так казаться плохо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июл 11 2007, 21:27 
Специалист
Специалист

Зарегистрирован:
Пт, июл 22 2005, 08:56
Сообщения: 158
Salmaner написал:
Цитата:
1. Заточить селекты под индексы таблиц.
2. По возможности использовать один select * вместо кучи select single.


по поводу второго, ни в коем случае, нету у меня select single. у меня обычные селекты с динамическими полями и условиями в каждом цикле условия меняются. просто один селект к таблице FAGLFLEXT, а другой к таблице J_3RKKRS.

по поводу первого. т.е. у таблиц есть таблица индекстов ....
если честно я этого еще не делал ни разу ..., куда примерно тыкнутся чтобы посмотреть как заюзать индексы таблиц в сапе?

После создания индексов - не забудь пересоздать статистику таблицы для оптимайзера...

_________________
C SAP
Изображение


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 12 2007, 06:49 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
EvgenySA
Цитата:
Возможно я погорячился с выводами, смутила фраза про 100 шагов. Хотелось бы уточнить принцип построения range.


сори вчера не заметил этот вопрос.

range заполняеся каждую итерацию новым набором счетов, ессно старый набор очищается.

вот если даже у меня данные будут во внутреней таблице то все равно по условию мне надо будет проверять счет в ... опять же range.
где гарантия что он и там будет возвращатся не верная сумма.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 12 2007, 07:31 
Специалист
Специалист

Зарегистрирован:
Пт, апр 13 2007, 17:15
Сообщения: 225
Мне несовсем понятно каким образом формируются range, может получится ситуация:
    Итер. | r_schet | ne_schet
    --------+-----------+--------------
    1 | X1 | Y1
    2 | X2 | Y2
В наборах счетов X1 и X2 счета не повторяются и в Y1 и Y2 тоже. Между наборами X1-Y1 и X2-Y2 сумма будет найдена, а между X1-Y2 и X2-Y1 нет.

Если написать
Code:
SELECT debet kredit xnegpd xnegpk sum( dmbtr )
  INTO TABLE lt_result
  FROM j_3rkkrs
    WHERE bukrs = bukrs
        AND gjahr = year
        AND monat in r_monat
    GROUP BY debet kredit xnegpd xnegpk

а lt_result разгребать абапом то должно быстрее работать, особенно если сервер мощный.
Если есть ошибки, то возможно, неверно формируются range.[/list]


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 12 2007, 08:18 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
John Doe написал:
Я бы посоветовал вытащить сразу все по
Code:
bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space
во внутреннюю таблицу, а суммировать уже в цикле, читая таблицу по нужным счетам. Макрос в принципе может и не понадобится тогда.

Именно такая мысль была и у меня, ты немного опередил :)
Единственное - это тащить по
Code:
bukrs = bukrs AND gjahr = year AND monat in r_monat
, затем разгребать. Макрос точно не понадобится.


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

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
ренджес у меня так формируется на примере диапазона счетов

Цитата:
r_schet
sing option low high
'I' 'BT' 2930-00 2930-99

ne_schet
sing option low high
'E' 'BT' 2930-00 2930-99


т.е. ne_schet можно и не юзать а просто в селекте делать not in r_shet

хотя с результатами похоже отбой. я с утра давай отчет юзать Сверка сальдо счетов (Россия) и там если выставить класификатор в 2 то этот отчет возвращает суммы как и в моем селекте т.е. как и надо. если убрать класификатор то разворот счетов с оборотами мой селект тоже одни в одни бьет.
короче консультант не знает что сказать и этот вопрос пока отложен до завтра.

теперь вопрос в другом поечему если пойти по предложенному тут выбрать все в таблицу а условия
Code:
bukrs = bukrs AND gjahr = year AND monat in r_monat

* а этот оператор нельзя сразу тащить, ибо он потом связан со счетами
* там четыре вариации идут равно пробелу, неравно пробелу, то
* по дебетовым счетам корреспондирующим друг с другом то нет.
AND XNEGPD EQ space


итак если загоним дебет кредит сумму и признаки дебета или кредета
и потом в моем цикле настроечной таблици перебирать эту таблицу. я так же буду юзать свои рейндж. не делать же мне еще одни цикл третий где я буду получать счет по одному и тянуть сумму по нему.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 12 2007, 14:20 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Salmaner написал:
теперь вопрос в другом поечему если пойти по предложенному тут выбрать все в таблицу а условия
Code:
FORM vnutree.
  IF vnturn EQ 'X'.
    dt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND debet in r_schet AND kredit in r_schet'.
    kt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPK NE space AND kredit in r_schet AND debet in r_schet'.
    dt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND kredit in r_schet AND debet in r_schet'.
    kt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD NE space AND debet in r_schet AND kredit in r_schet'.
  ELSEIF vnturn NE 'X'.
    dt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND debet in r_schet AND kredit in ne_schet'.
    kt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPK NE space AND kredit in r_schet AND debet in ne_schet'.
    dt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND kredit in r_schet AND debet in ne_schet'.
    kt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD NE space AND debet in r_schet AND kredit in ne_schet'.
  ENDIF.
ENDFORM. 


итак если загоним дебет кредит сумму и признаки дебета или кредета
и потом в моем цикле настроечной таблици перебирать эту таблицу. я так же буду юзать свои рейндж. не делать же мне еще одни цикл третий где я буду получать счет по одному и тянуть сумму по нему.

Ты в коде ничего не напутал ?


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

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
вообщето это был тестовый вариант а рабочий вот этот
разница- в том числе и с внутреними оборотами
второе условие без внутренних оборотов.
Code:
FORM vnutree.
  IF vnturn EQ 'X'.
    dt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND debet in r_schet'.
    kt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPK NE space AND kredit in r_schet'.
    dt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND kredit in r_schet'.
    kt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD NE space AND debet in r_schet'.
  ELSEIF vnturn NE 'X'.
    dt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND debet in r_schet AND kredit not in r_schet'.
    kt3xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPK NE space AND kredit in r_schet AND debet not in r_schet'.
    dt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD EQ space AND kredit in r_schet AND debet not in r_schet'.
    kt4xt = 'bukrs = bukrs AND gjahr = year AND monat in r_monat AND XNEGPD NE space AND debet in r_schet AND kredit not in r_schet'.
  ENDIF.
ENDFORM. "vnutree


а что?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 12 2007, 16:14 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Salmaner написал:
вообщето это был тестовый вариант а рабочий вот этот разница- в том числе и с внутреними оборотами
второе условие без внутренних оборотов.
а что?

Да так :)
Вот такой примерно код получается:
Code:
select * from j_3rkkrs into table itab where bukrs = bukrs
                                         and gjahr = year
                                         and monat in r_monat.
loop. " в сто итераций
* тут вызов процедуры для заполнения рейнджса счтами.
  clear sum_oborot.
  if vnturn eq 'X'.
    loop at itab where debet in r_schet.
      if itab-xnegpd eq space.
        sum_oborot-sdx_dt = sum_oborot-sdx_dt + itab-dmbtr.
      else.
        sum_oborot-skx_dt = sum_oborot-skx_dt - itab-dmbtr.     
      endif. 
    endloop.
    loop at itab where kredit in r_schet.
      if itab-xnegpk ne space.
        sum_oborot-sdx_kt = sum_oborot-sdx_kt - itab-dmbtr.
      endif. 
      if itab-xnegpd eq space.
        sum_oborot-skx_kt = sum_oborot-skx_kt + itab-dmbtr.       
      endif.
    endloop.
  else.
    loop at itab where debet in r_schet and not kredit in r_schet.
      if xnegpd eq space.
        sum_oborot-sdx_dt = sum_oborot-sdx_dt + itab-dmbtr.
      else.
        sum_oborot-skx_dt = sum_oborot-skx_dt - itab-dmbtr.
      endif.
    endloop.
    loop at itab where kredit in r_schet and not debet in r_schet.
      if xnegpk ne space.
        sum_oborot-sdx_kt = sum_oborot-sdx_kt - itab-dmbtr.
      endif.
      if xnegpd eq space.
        sum_oborot-skx_kt = sum_oborot-skx_kt + itab-dmbtr.
      endif.
    endloop.
  endif.
  collect sum_oborot.
endloop.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 07:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Dzed Maroz
за примерный код огромный сэнкс!

кстати посмотрел я индексы к таблице J-3RKKR жуть их там чтыре вида чтоли в первом 10 полей в трех других по 4 поля.
:)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 13 2007, 07:58 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, июн 13 2007, 16:36
Сообщения: 585
Откуда: Belarus
Пол: Мужской
Salmaner написал:
кстати посмотрел я индексы к таблице J-3RKKR жуть их там чтыре вида чтоли в первом 10 полей в трех других по 4 поля.
:)


У меня в системе таких таблиц нету, поэтому и код примерный и по индексам ничего не подскажу :oops:


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

Зарегистрирован:
Сб, янв 27 2007, 08:27
Сообщения: 337
Откуда: СНГ ... ЮГ
Пол: Мужской
Ну все наверно. тема исчерпана.
Всем башое пасиба за помощь и внимание!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, июл 29 2007, 21:34 
Старший специалист
Старший специалист

Зарегистрирован:
Сб, июл 28 2007, 20:38
Сообщения: 364
Почитал начало, захотелось бы добавить пару моментов по теме.
1. длина sql запроса ограничена, если используем range - то он ограничен несколькими тысясами записей, при привышении будет дамп.
2. Это не оптимально, с точки зрения обработки запросов базой данных.


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

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


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

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


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

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