Текущее время: Пт, май 16 2025, 08:57

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Исключение сторно при выборке FI-документов
СообщениеДобавлено: Пт, янв 13 2006, 15:46 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Есть конструкция:
...
SELECT bukrs belnr gjahr ... INTO TABLE lt_docs FROM bsas
WHERE bukrs IN so_bukrs
AND hkont IN so_hkont
AND gjahr = ryear
AND NOT EXISTS ( SELECT * FROM bkpf
WHERE bukrs = bsas-bukrs
AND ( budat IN so_budat OR
budat < so_budat-low )
AND stblg = bsas-belnr
AND stjah = bsas-gjahr ).
...
Сторнированные и сторнирующие не исключает... В чем может быть причина? Если же данная конструкция и не должна работать, то подскажите, кто-нибудь реализовывал (см. тему) БЕЗ последующего цикла по выбранным позициям и исключением сторно, т.е. за одну выборку?

_________________
В бессрочном бане


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

Зарегистрирован:
Пт, мар 25 2005, 11:46
Сообщения: 282
Откуда: SPb
Можно соединить с заголовком документа для бухгалтерии,
добавить условие на Финансовый год документа сторно
bkpf~stjah = ''

_________________
Лучше сделать и пожалеть, чем не сделать и потом жалеть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, янв 13 2006, 16:12 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Условия, по которым сторно исключается (чтобы обороты за период, указанные в select-options so_budat были актуальными):
1) Если сторнируемый и сторнирующий в одном периоде или сторнируемый до указанного периода, а сторнирующий в периоде, то исключаем оба;
2) Если сторнируемый в периоде, а сторнирующий проведен после указанного периода, то первый оставляем (для оборотов).

_________________
В бессрочном бане


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Поля stblg и stjah не пусты и у сторнированного, и у сторнирующего документа. Думаю условие AND NOT EXISTS лишнее. Можно обойтись обычным JOIN'ом:
Code:
  SELECT ...
    FROM bsas JOIN bkpf ON ....
    WHERE bkpf~stblg = space.

Тогда исключатся сторнируемые и сторнирующие.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, янв 13 2006, 16:15 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Да, про STBLG = space все понятно, но обороты...

_________________
В бессрочном бане


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Dmitriy написал:
Да, про STBLG = space все понятно, но обороты...

Если считать обороты, то лучше вообще не обращать внимания на признак сторно, должно посчитаться правильно.

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


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Цитата:
должно посчитаться правильно.
- это я погорячился... имел в виду сальдо... Хотя, если все сторно - красное, и если на это обращать внимание, то и обороты должны бы сойтись...

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


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

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Задачка, конечно типовая, решалась не раз, но вот просто интересно стало, как за одну выборку это сделать (оптимизируется оборотная ведомость по счетам).

_________________
В бессрочном бане


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, янв 13 2006, 17:04 
Гость
оптимизация подзапросом? :shock: я всегда считал что это лучший способ замедлить выполнение


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, янв 13 2006, 17:11 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Возможно будет и замедление, но подзапрос не работает, поэтому пока об этом речи нет. Вот пример для документов движений материалов, где подзапрос не только не замедляет, но работает и полезен:
SELECT mseg~mblnr mseg~mjahr ... INTO TABLE lt_mseg
FROM mseg JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND
mkpf~mjahr = mseg~mjahr
WHERE mseg~bwart IN lr_bwart
AND mseg~matnr IN s_matnr
AND mseg~werks IN s_werks
AND mseg~lgort IN s_lgort
AND mseg~sobkz = ' '
AND mseg~smbln = ' '
AND mkpf~budat IN s_date
AND NOT EXISTS ( SELECT * FROM *mseg
WHERE smbln = mseg~mblnr
AND sjahr = mseg~mjahr
AND smblp = mseg~zeile ).
Здесь в критериях выбора 55 тыс. материалов, 32 завода, 7 складов.
Если не сделать подзапрос, то для исключения сторно приходиться в цикле по lt_mseg делать SELECT SINGLE ... from mseg, что для сотен тысяч записей во внутренней таблице приводит к существенному замедлению. :shock:

_________________
В бессрочном бане


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, янв 13 2006, 17:45 
Гость
а так?
Code:
SELECT * INTO TABLE lt_doc FROM bsas as bs
WHERE bukrs IN so_bukrs
AND hkont IN so_hkont
AND gjahr = ryear
AND NOT EXISTS ( SELECT * FROM bkpf
WHERE bukrs = bs~bukrs
AND ( budat IN so_budat OR
budat < so_budat-low )
AND stblg = bs~belnr
AND stjah = bs~gjahr ).


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

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Думаю стоит сменить разделитель '-' на '~' в подзапросе ..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, янв 13 2006, 17:48 
Гость
ну да используются поля рабочей области, а не таблицы. даже синтаксическую проверку не пройдет, если нет tables: bsas. также будьте внимательны с
Code:
budat < so_budat-low
- нужно позиционироваться на строку критерия выбора.


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

Зарегистрирован:
Чт, окт 27 2005, 17:13
Сообщения: 1068
Откуда: Из бессрочного бана
Пол: Мужской
Заработало но...:
nyar, в данном случае ты вдвойне прав :), данная конструкция существенно замедляет работу (даже если убрать условие OR в подзапросе и сделать соответствующий индекс в BKPF) :(.
Спасибо за помощь!

_________________
В бессрочном бане


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, янв 16 2006, 17:54 
Гость
Dmitriy написал:
Заработало но...:
nyar, в данном случае ты вдвойне прав :), данная конструкция существенно замедляет работу (даже если убрать условие OR в подзапросе и сделать соответствующий индекс в BKPF) :(.
Спасибо за помощь!

проблема не в подзапросе как таковом. А в виде предиката. Если бы у вас бы не not exists, а просто exists, все было в плане производительности бы по иному. СУБД, она и R/3 СУБД...


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

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


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

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


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

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