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

Часовой пояс: 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 часа


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

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


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

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