Текущее время: Пн, июл 28 2025, 17:00

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: список кредиторов с сальдо на дату
СообщениеДобавлено: Ср, фев 13 2008, 10:21 
Начинающий
Начинающий

Зарегистрирован:
Ср, июн 27 2007, 15:01
Сообщения: 24
Дамы и господа. Подскажите - как грамотно написать query, чтобы получить список кредиторов с сальдо на определенную дату. sq01 - но таблицы - bsik ? LFA1+LFB1 ? Надо только конечное сальдо, чтобы был простецкий список. И может еще кто знает - смотрю таблицу LFC3 - почему если вычислить разницу между итоговыми значениями - не получается того, что в стандартном отчете по анализу открытых позиций кредиторов


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

Зарегистрирован:
Пн, ноя 19 2007, 13:19
Сообщения: 66
Откуда: оттуда
Данные надо в общем случае вынимать из таблиц BSIK + BSAK, т.к. на выбранную дату позиции Кредитора могут быть выровнены и оказаться в BSAK. Соответственно, инфонабор нужно делать с помощью ABAP кодировки, в структуру таблицы BSIK.

Отчёт - оборотно-сальдовая ведомость по Кредиторам - выводит начальное сальдо, обороты Дт/Кт и конечное сальдо.

Для Вашего случая его можно упростить, выбрав только нужные записи и их просуммировать...

в SQ02 в инфонаборе так выглядит код:
Code:
data:
  BSIK                           type BSIK                          ,
  BSAK                           type BSAK                          ,
  it_data type standard table of BSIK with header line              ,
  it_data2 type standard table of BSAK.

field-symbols: <struc> type BSIK                          .

*-------------------------------------------------------------------*
*   selection screen statements
*-------------------------------------------------------------------*
*   (define your selection-screen here)
parameters sbukrs like BSIK-BUKRS default '1000'.
select-options sdate for BSIK-BUDAT.
select-options slifnr for BSIK-LIFNR.
select-options shkont for BSIK-HKONT.
*parameters f_only_s type i.
data f_only_s type i value 0.


* !! the following comment MUST NOT BE CHANGED !!
*<QUERY_HEAD>



*-------------------------------------------------------------------*
*   read data into IT_DATA
*-------------------------------------------------------------------*
*  (select your data here into internal table IT_DATA)
select * from BSIK into table it_data
  where BSTAT in ('','A','B','D')
  and LIFNR in slifnr
  and BUDAT <= sdate-high
  and HKONT in shkont
  and BUKRS = sbukrs.

select * from BSAK into table it_data2
  where BSTAT in ('','A','B','D')
  and LIFNR in slifnr
  and BUDAT <= sdate-high
  and HKONT in shkont
  and BUKRS = sbukrs.

append lines of it_data2 to it_data.

*sort it_data by BUDAT.
sort it_data by LIFNR HKONT BUDAT.

if f_only_s = 0.

*     проставим строчки с сальдо
    data cLIFNR like BSIK-LIFNR.
    data cHKONT like BSIK-HKONT.
    data cDMBTR like BSIK-DMBTR.
    data cLIFNRnew like BSIK-LIFNR.
    data cHKONTnew like BSIK-HKONT.
    data cDMBTRnew like BSIK-DMBTR.
    data kinserts type i value 0.
    cLIFNR = ''. cHKONT = ''. cDMBTR = 0.

    loop at it_data.
* пропустить вставленную строку с начальным сальдо
      if cLIFNR <> it_data-LIFNR
      or cHKONT <> it_data-HKONT.

        cLIFNRnew = it_data-LIFNR.
        cHKONTnew = it_data-HKONT.
        if it_data-BUDAT < sdate-low.
            if it_data-SHKZG = 'H'.
              cDMBTRnew = 0 - it_data-DMBTR.
            elseif it_data-SHKZG = 'S'.
              cDMBTRnew = it_data-DMBTR.
            endif.

*            delete it_data index sy-tabix.
*            kinserts = kinserts - 1.

        else.
          cDMBTRnew = 0.
        endif.

        if cLIFNR <> '' and cHKONT <> ''.
          it_data-LIFNR = cLIFNR.
          it_data-HKONT = cHKONT.
          it_data-DMBTR = cDMBTR.
          it_data-BUDAT = sdate-low - 1.
          it_data-SHKZG = 'A'.
          it_data-BELNR = ''.
          it_data-BUZEI = ''.
          it_data-BLART = ''.
          insert it_data index sy-tabix.

*          if sy-tabix = 1. f_bypass = 1. endif.

          kinserts = kinserts + 1.
        endif.

        cLIFNR = cLIFNRnew.
        cHKONT = cHKONTnew.
        cDMBTR = cDMBTRnew.

      else.
        " подсчёт суммы сальдо на нач.дату
        if it_data-BUDAT < sdate-low.
          if it_data-SHKZG = 'H'.
            cDMBTR = cDMBTR - it_data-DMBTR.
          elseif it_data-SHKZG = 'S'.
            cDMBTR = cDMBTR + it_data-DMBTR.
          endif.

*          delete it_data index sy-tabix.
*          kinserts = kinserts - 1.

        endif.
      endif.
    endloop.

*     вставим последний итог
          it_data-LIFNR = cLIFNR.
          it_data-HKONT = cHKONT.
          it_data-DMBTR = cDMBTR.
          it_data-BUDAT = sdate-low - 1.
          it_data-SHKZG = 'A'.
          it_data-BELNR = ''.
          it_data-BUZEI = ''.
          it_data-BLART = ''.
        kinserts = kinserts + sy-tabix + 1.
        insert it_data index kinserts.

* удалим строчки из которых сложилось начальное сальдо + нулевые
    loop at it_data.
      if ( it_data-BUDAT < sdate-low
      and it_data-SHKZG <> 'A' )
      or ( it_data-DMBTR = 0 ).
          delete it_data index sy-tabix.
          kinserts = kinserts - 1.
      endif.

    endloop.
endif.


*------------------------------------------------------------*
*   output of the data
*   (this section can be left unchanged)
*------------------------------------------------------------*
loop at it_data assigning <struc>.
*loop at it_data into <struc>.
  move-corresponding <struc> to BSIK                          .
* !! the following comment MUST NOT BE CHANGED !!
*<QUERY_BODY>
endloop.


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

Зарегистрирован:
Ср, июн 27 2007, 15:01
Сообщения: 24
Благодарю сердечно. Именно то, что я хотел услышать.


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

Зарегистрирован:
Вт, сен 26 2006, 12:20
Сообщения: 360
ipetrov написал(а):
Данные надо в общем случае вынимать из таблиц BSIK + BSAK, т.к. на выбранную дату позиции Кредитора могут быть выровнены и оказаться в BSAK.
[/code]

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


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

Зарегистрирован:
Вс, окт 17 2004, 11:34
Сообщения: 1552
Пол: Мужской
Системы под рукой нет, я бы сделал так.
1. Если есть BW - решал бы задачу там
2. Если нет - в транзакции просмотра отдельных позиций по кредиторам попробовал бы настроить вариант с заданием нужных фильтров и суммирования.


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

Зарегистрирован:
Пн, фев 14 2005, 17:16
Сообщения: 926
Откуда: Moscow
Sedlo написал:
2. Если нет - в транзакции просмотра отдельных позиций по кредиторам попробовал бы настроить вариант с заданием нужных фильтров и суммирования.


Я обычно так и делала. При умелом использовании динамических ограничений выбора, фильтров, посуммирования и иже с ними отчеты FBL*N могут закрыть очень многие требования заказчика.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 14 2008, 09:56 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пт, июл 08 2005, 13:07
Сообщения: 5274
Откуда: Geneva
Пол: Мужской
Согласен с АТ - отчет FBL*N почти универсален. Только при системе с кучей данных производительность будет низкая.
И выгрузка в BW задачу полностью не решит, если не менять подход.
Если очень надо, то я бы сделал сальдо на дату через сальдо на конец предыдущего периода + открытые позиции в текущем периоде. И все это переваривается в BW.
Но еще более правильный подход - забить на сальдо на дату и брать только сальдо на период. Не зря ведь немцы не стали заморачиваться с таким стандартным отчетом...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, фев 14 2008, 10:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 11:34
Сообщения: 1552
Пол: Мужской
darkduck написал:
Согласен с АТ - отчет FBL*N почти универсален. Только при системе с кучей данных производительность будет низкая.
И выгрузка в BW задачу полностью не решит, если не менять подход.
Если очень надо, то я бы сделал сальдо на дату через сальдо на конец предыдущего периода + открытые позиции в текущем периоде. И все это переваривается в BW.
Но еще более правильный подход - забить на сальдо на дату и брать только сальдо на период. Не зря ведь немцы не стали заморачиваться с таким стандартным отчетом...


При нормальном администрировании базы ключа по кредитору и БЕ или набора БЕ в большинстве случаев достаточно для получения хорошей производительности отчетов. Кроме того, если мне не изменяет память, дата проводки в BSI* BSA* тоже ключевое, что тоже должно при прямых руках админов добавлять скорости отчетам.

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Ср, сен 05 2012, 07:27 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, май 08 2007, 13:51
Сообщения: 90
Пол: Мужской
darkduck написал:
...я бы сделал сальдо на дату через сальдо на конец предыдущего периода + открытые позиции в текущем периоде...

:) и всё-таки хотелось бы прояснить для себя этот момент и тут: для определения сальдо на на конец предыдущего периода необходимо использовать именно BSI*/BSA*, как это предлагалось высказавшимися выше, или для этого может быть достаточно данных и из таблиц KNC1, KNC3, LFC1, LFC3?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Re:
СообщениеДобавлено: Ср, сен 05 2012, 11:55 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пт, июл 08 2005, 13:07
Сообщения: 5274
Откуда: Geneva
Пол: Мужской
bilimba написал:
darkduck написал:
...я бы сделал сальдо на дату через сальдо на конец предыдущего периода + открытые позиции в текущем периоде...

:) и всё-таки хотелось бы прояснить для себя этот момент и тут: для определения сальдо на на конец предыдущего периода необходимо использовать именно BSI*/BSA*, как это предлагалось высказавшимися выше, или для этого может быть достаточно данных и из таблиц KNC1, KNC3, LFC1, LFC3?

Сальдо на конец периода можно вытащить из KNC* / LFC*. Однако, изначальный вопрос и название темы содержат слова "на дату", а здесь уже без BSI* / BSA* не обойтись.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

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


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

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


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

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