Текущее время: Пт, авг 01 2025, 11:42

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Связь оборотов и бух. документов
СообщениеДобавлено: Сб, фев 05 2005, 20:59 
Гость
Здравствуйте!

При разработке отчета столкнулся с непреодолимой проблемой. Сразу оговорюсь что на ABAP программирую 3-ю неделю. Есть задача: необходимо разработать отчет, который бы выводил сальдооборотную ведомость в разрезе счетов с гибкой системой настройки. До тех пор, пока за единицу времени берется календарный месяц, мне было достаточно только таблицы GLT0. Но теперь бухгалтера захотели еще и данных за период от даты по дату. Для этого уже необходимо обратиться к бухгалтерским документам. Как я понял это таблицы BKPF (заголовки документов) и BSEG (собственно данные). И тут начались проблемы. Сравнивая данные документов по отдельным счетам, обнаружил несхождение сумм с таблицей GLT0. Первое, что пришло в голову, так это то, что не все документы должны включаться в определение оборотов, или же по отдельным документам необходимо брать противоположный знак. После смены знака по типам документа "сторно", получил близкий результат. Цифры сходятся по всем балансовым единицам, кроме главного оффиса, где и суммы и количество документов больше. А теперь собственно вопрос. Где разрыть настройку (таблицу к примеру), которая отвечает за правило формирования оборотов в зависимости от содержимого бухгалтерского документа? Очень надеюсь на помощь...

P.S. Прошу прощения за длинное сообщение.


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

Зарегистрирован:
Ср, авг 18 2004, 09:17
Сообщения: 477
Откуда: Москва
Пол: Мужской
Лучше всего для расчета оборотов по счетам использовать таблицы BSAS и BSIS. У них левая часть составного первичного ключа по БЕ и номеру счета, что удобно. И это прозрачные таблицы, поэтому можно использовать агрегатные функции и группировать данные в запросе
При расчете оборотов и сальдо по счету нужно учитывать:
1) сторону бухгалтерского счета (дебет, кредит),
2) позиции, помеченные как "красное сторно" - уменьшают оборот противоположной стороны счета;
3) отбрасывать памятные позиции.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 10:20 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 10:49
Сообщения: 95
Откуда: 4.6C
могу посоветовать просмотр иерархии таблиц FI
http://www.sapgenie.com/abap/tables_fi.htm
может там что-нить найдется.. )

_________________
Kind regards


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Связь оборотов и бух. документов
СообщениеДобавлено: Пн, фев 07 2005, 10:29 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
FreePainter написал(а):
счетам, обнаружил несхождение сумм с таблицей GLT0. Первое, что пришло в голову, так это то, что не все документы должны включаться в определение оборотов, или же по отдельным документам необходимо брать противоположный знак. После смены знака по типам документа "сторно", получил близкий результат.


SHKZ = 'H' => Cумма = Cумма*(-1).
Сторно не должны увеличивать ни дебетовые, ни кредитовые обороты, а должны уменьшать их. Так, если (сторно и SHKZ = 'S', Сумма = 1), эта сумма должна пойти не в колонку "Дебет", а в колонку "Кредит" со знаком "-".
Вроде все нюансы.

В остальном все должно сходиться.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 10:39 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
Еще не плохо было бы анализировать выравнивание. Как частичное, так и полное.


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

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Lars написал:
Еще не плохо было бы анализировать выравнивание. Как частичное, так и полное.


А нафига? Тем более, что есть BSIS/BSAS?

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 10:58 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
111 написал(а):
Lars написал:
Еще не плохо было бы анализировать выравнивание. Как частичное, так и полное.


А нафига? Тем более, что есть BSIS/BSAS?


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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Элементарная оборотка по счетам
СообщениеДобавлено: Пн, фев 07 2005, 11:23 
Гость
REPORT ZTEST_OB .

TABLES: BSIS, BSAS.

PARAMETERS: BUKRS LIKE BSIS-BUKRS OBLIGATORY,
KTOPL LIKE SKAT-KTOPL DEFAULT 'CARU' OBLIGATORY.

SELECT-OPTIONS: BUDAT FOR BSIS-BUDAT OBLIGATORY,
HKONT FOR BSIS-HKONT.

DATA: BEGIN OF OBOROT OCCURS 0,
HKONT LIKE BSIS-HKONT,
TXT20 LIKE SKAT-TXT20,
SALDON LIKE BSEG-DMBTR,
DEBET LIKE BSEG-DMBTR,
KREDIT LIKE BSEG-DMBTR,
SALDOK LIKE BSEG-DMBTR,
END OF OBOROT.
DATA: BSI LIKE BSIS OCCURS 0 WITH HEADER LINE,
BSA LIKE BSIS OCCURS 0 WITH HEADER LINE.

INITIALIZATION.
BUDAT-LOW = SY-DATUM.
BUDAT-LOW+6(2) = '01'.
BUDAT-HIGH = SY-DATUM.
APPEND BUDAT.
GET PARAMETER ID 'BUK' FIELD BUKRS.

START-OF-SELECTION.
SET PARAMETER ID 'BUK' FIELD BUKRS.
CLEAR: BSI, BSA, OBOROT.
REFRESH: BSI, BSA, OBOROT.

SELECT * FROM BSIS APPENDING TABLE BSI
WHERE BUKRS = BUKRS
AND HKONT IN HKONT
AND BUDAT <= BUDAT-HIGH.

SELECT * FROM BSAS APPENDING TABLE BSA
WHERE BUKRS = BUKRS
AND HKONT IN HKONT
AND BUDAT <= BUDAT-HIGH.


LOOP AT BSI WHERE BUDAT < BUDAT-LOW.
CLEAR: OBOROT.
OBOROT-HKONT = BSI-HKONT.
CASE BSI-SHKZG.
WHEN 'S'. OBOROT-SALDON = BSI-DMBTR.
WHEN 'H'. OBOROT-SALDON = - BSI-DMBTR.
ENDCASE.
COLLECT OBOROT.
ENDLOOP.

LOOP AT BSA WHERE BUDAT < BUDAT-LOW.
CLEAR: OBOROT.
OBOROT-HKONT = BSA-HKONT.
CASE BSA-SHKZG.
WHEN 'S'. OBOROT-SALDON = BSA-DMBTR.
WHEN 'H'. OBOROT-SALDON = - BSA-DMBTR.
ENDCASE.
COLLECT OBOROT.
ENDLOOP.


LOOP AT BSI WHERE BUDAT >= BUDAT-LOW.
CLEAR: OBOROT.
OBOROT-HKONT = BSI-HKONT.
CASE BSI-SHKZG.
WHEN 'S'.
CASE BSI-XNEGP.
WHEN SPACE. OBOROT-DEBET = BSI-DMBTR.
WHEN 'X'. OBOROT-KREDIT = - BSI-DMBTR.
ENDCASE.
WHEN 'H'.
CASE BSI-XNEGP.
WHEN SPACE. OBOROT-KREDIT = BSI-DMBTR.
WHEN 'X'. OBOROT-DEBET = - BSI-DMBTR.
ENDCASE.
ENDCASE.
COLLECT OBOROT.
ENDLOOP.


LOOP AT BSA WHERE BUDAT >= BUDAT-LOW.
CLEAR: OBOROT.
OBOROT-HKONT = BSA-HKONT.
CASE BSA-SHKZG.
WHEN 'S'.
CASE BSA-XNEGP.
WHEN SPACE. OBOROT-DEBET = BSA-DMBTR.
WHEN 'X'. OBOROT-KREDIT = - BSA-DMBTR.
ENDCASE.
WHEN 'H'.
CASE BSA-XNEGP.
WHEN SPACE. OBOROT-KREDIT = BSA-DMBTR.
WHEN 'X'. OBOROT-DEBET = - BSA-DMBTR.
ENDCASE.
ENDCASE.
COLLECT OBOROT.
ENDLOOP.

LOOP AT OBOROT.
OBOROT-SALDOK = OBOROT-SALDON + OBOROT-DEBET - OBOROT-KREDIT.
SELECT SINGLE TXT20 INTO OBOROT-TXT20 FROM SKAT WHERE
KTOPL = KTOPL AND SPRAS = 'R'
AND SAKNR = OBOROT-HKONT.
MODIFY OBOROT.
ENDLOOP.

SORT OBOROT BY HKONT.
LOOP AT OBOROT.
WRITE:/ OBOROT-HKONT, OBOROT-TXT20, OBOROT-SALDON,
OBOROT-DEBET, OBOROT-KREDIT, OBOROT-SALDOK.
ENDLOOP.


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

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
мда - вот из за таких программок и вешаются продуктивы ... зачем тебе данный сначала веков ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 11:51 
Гость
это был именно элементарный пример - написанный за 15 минут,
хотя замечание - справедливое, :oops:
начальное сальдо лучше получать по-другому


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 11:56 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
ошибка номер раз - зачем дублировать код по два раза - использовать можно только табличку (внутреннюю) BSi - соответсвенно код подсчета не надо дублировать для BSa

ошибка номер два - считывать нада вот так если тебе нужно считать еще и сальдо.
select * from bsis appending corresponding fields of table
BSI
where bukrs = bukrs
and hkont in so_hkont
and budat <= so_date-high.


select * from bsas appending corresponding fields of table
bsi
where bukrs = bukrs
and hkont in so_hkont
and budat <= so_date-high
and augdt => so_date-low.

если нет


select * from bsis appending corresponding fields of table
BSI
where bukrs = bukrs
and hkont in so_hkont
and budat in so_date.


select * from bsas appending corresponding fields of table
bsi
where bukrs = bukrs
and hkont in so_hkont
and budat in so_date.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 12:01 
Гость
если улучшать дальше, то можно:
начальное сальдо брать из GLTO на начало месяца,
дата которого введена в качестве нижнего предела отчетного периода,
+ обороты с 1-го числа по нужное,
а пример написан был именно для того, чтобы понять - работу
таблиц.
Если считаете его неудачным - то не буду спорить.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, фев 07 2005, 12:03 
Гость
Snegurenok написал(а):
select * from bsis appending corresponding fields of table
BSI
where bukrs = bukrs
and hkont in so_hkont
and budat <= so_date-high.


select * from bsas appending corresponding fields of table
bsi
where bukrs = bukrs
and hkont in so_hkont
and budat <= so_date-high
and augdt => so_date-low.

select * from bsis appending corresponding fields of table
BSI
where bukrs = bukrs
and hkont in so_hkont
and budat in so_date.


select * from bsas appending corresponding fields of table
bsi
where bukrs = bukrs
and hkont in so_hkont
and budat in so_date.


количество селектов нужно по возможности уменьшать,
а не увеличивать


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

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
между ними было или так - если не нужно сальдо :)


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

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Я бы еще добавил, что подсчет нужно вести, отталкиваясь от GLT0, "отматывая" назад обороты по документам, до нужной даты.

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

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


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

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


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

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


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

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