AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.07.2010, 10:32   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Как посчитать сальдо по клиенту на дату
Добрый день.
Подскажите, пожалуйста, как подсчитать сальдо по клиенту по определенному счету ГК на определенную дату в АХ 4.0.
Проблема в следующем - простая сумма поля AmountMST таблицы CustTrans дает результат отличный от результата из оборотно-сальдовой по клиенту. В оборотно-сальдовой по клиенту каким-то образом учитывается таблица LedgerTrans. Но что-то мне неясно каким. Дело в том, что строгого соответствия между CustTrans и LedgerTrans нет. Я находил в нашей базе случаи, когда по CustTrans операция шла по одному профилю разноски, а в LedgerTrans эта операция шла на другие счета ГК. Кроме того, в LedgerTrans случаются операции с одинаковым номером журнала, в которых идет перенос средств с одного клиента на другого - в таких случаях вообще неясно какая операция из LedgerTrans соответствует операции из CustTrans.

Последний раз редактировалось Silphidae; 21.07.2010 в 11:56.
Старый 21.07.2010, 10:55   #2  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Не понятно, в чем конкретно отличие суммы проводок клиента от Оборотно-сальдовой ведомости? Кстати, вы про стандартную ОСВ без модификаций говорите?

Профиль разноски, насколько я помню, в ОСВ выводит текущий счет ГК, т.е. если он менялся в профиле в середине работы, то обороты по ГК и ОСВ не совпадут. На форуме обсуждалось уже не раз, правильнее заводить новые профили разноски.

А проводка клиент-клиент одним ваучером, если не ошибаюсь, была запрещена в стандарте.
__________________
Ivanhoe as is..
Старый 21.07.2010, 11:12   #3  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Мне нужно было слепить отчет, который считает сальдо по контрагенту по модулю клиентов, затем сальдо по модулю поставщиков (если у этого клиента есть номер поставщика) и общее сальдо. Казалось бы, ерунда, считай себе сумму операций из CustTrans и VendTrans. Но когда я стал сравнивать данные со стандартой ОСВ - по некоторым клиентам обнаружил расхождения. Стал разбираться подробнее - в итоге нашел операции в custTrans, которым в ledgerTrans (по Voucher и Dimension) соответствуют операции на счета, не соответствующие профилю разноски из custTrans. Причем, расхождения как раз на суммы этих операций, так что ОСВ как-то учитывает это.
По поводу запрета проводок клиент-клиент одним ваучером - не знаю как, но у нас в базе есть такие операции.
Старый 21.07.2010, 11:35   #4  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Повторю вопрос =): Чем отличается сумма проводок от ОСВ?? С какой группировкой и с какими фильтрами вы считаете первое и второе?

Я спрашиваю не про код (ведь если вы смотрите в код и понимаете его, то не понятно, почему вам не понятно расхождение и зачем вам нужна помощь), а про результат, который видит пользователь. Я вот не понял, какая разница какой профиль разноски в проводках модуля и счет ГК в проводках ГК, если вы просто считаете сумму? Или все-таки не просто сумма?

Вариант ответа: Сумма всех проводок по клиенту за период = 5000, по ОСВ = 6000.
Другой вариант: Сумма всех проводок по клиенту по профилю "ОСН" за период = 5000, по ОСВ = 6000.
__________________
Ivanhoe as is..
Старый 21.07.2010, 11:52   #5  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Извиняюсь, что не сразу указал про фильтр по счету ГК =)

Я считаю, например, по клиенту 2545 по 30.06.2010 по счету 76.20.00. Этому счету сейчас в системе соответствует профиль разноски "76.20". Так вот сумма
X++:
select sum(AmountMST) from custTrans 
where custTrans.AccountNum == "2545" 
   && custTrans.PostingProfile == "76.20"  
        && custTrans.TransDate <= str2date("30.06.2010", 123)
получается -300, а в ОСВ конечное сальдо +300.

А помощь мне нужна, скорее всего, с кодом =)
Старый 21.07.2010, 12:13   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
ОСВ по клиенту когда строится - то берется текущий профиль разноски клиента. Когда берется сумма по CustTrans - то берется профиль разноски который был по факту.
Т.е. если "в процессе жизненного пути" в профиле разноски меняли счет ГК или у клиента меняли профиль разноски - то все исторические проводки в ОСВ (до изменений) отобразятся как будто эти изменения были с самого начала.
В то время как в CustTrans "все ходы записаны" и коверкания истории не будет
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Ivanhoe (-1), -xXx- (1).
Старый 21.07.2010, 12:23   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
custTrans.TransDate <= str2date("30.06.2010", 123)
замените на
custTrans.TransDate <= 30\06\2010
и никогда так больше не делайте. Ничего личного.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 21.07.2010, 12:25   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Небольшое уточнение. Смена профиля отследится Не отследится смена счета в профиле.
Просто в приведенном запросе по CustTrans проводки по профилю разноски с другим названием не попадут, в то время как в ОСВ данные попадут все в принципе.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: Silphidae (1).
Старый 21.07.2010, 12:31   #9  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Да я понимаю, что всему виной баловство пользователей с настройками профилей разноски.
Подскажите, все же, пожалуйста, как считать сальдо так, чтобы оно сходилось с конечным сальдо по ОСВ?
Старый 21.07.2010, 12:40   #10  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Да я понимаю, что всему виной баловство пользователей с настройками профилей разноски.
Подскажите, все же, пожалуйста, как считать сальдо так, чтобы оно сходилось с конечным сальдо по ОСВ?
2 варианта:
Правильный: Не смотреть на ОСВ - т.к. там (если меняли настройки профилей разноски) заведомо неверные данные. Если по клиенту сделаны 5 проводок по 62 счету и 10 - по 76-му, то неверно считать что все 15 проводок сделаны действительно по 76-му счету (или по 62-му).

Неправильный: Также как считает его ОСВ. Т.е. считать, что все проводки сделаны по профилям разноски с текущими настройками. Если при вызове ОСВ Вы ставите фильтр по счету ГК еще - то значит нужно отсекать записи в CustTrans, которым соответствуют записи в LedgerTrans с другим счетом ГК
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 21.07.2010 в 12:44.
Старый 21.07.2010, 12:44   #11  
Zick-Zibn is offline
Zick-Zibn
Участник
 
78 / 38 (2) +++
Регистрация: 28.05.2004
Адрес: Moscow
Добавьте в запрос таблицу LedgerTrans.
Старый 21.07.2010, 13:04   #12  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Цитата:
Неправильный: Также как считает его ОСВ. Т.е. считать, что все проводки сделаны по профилям разноски с текущими настройками. Если при вызове ОСВ Вы ставите фильтр по счету ГК еще - то значит нужно отсекать записи в CustTrans, которым соответствуют записи в LedgerTrans с другим счетом ГК
Да, мне нужне неправильный вариант, лишь бы сходилось с ОСВ. Но проблема в том, что однозначной связи между CustTrans и LedgerTrans нет.

Получается какая-то ерунда типа:
X++:
while select custTrans 
where custTrans.AccountNum == "2545" 
   && custTrans.PostingProfile == "76.20"  
        && custTrans.TransDate <= 30\06\2010
{
     select firstonly ledgerTrans
          where ledgerTrans.AccountNum == "76.20.00"
              && ledgerTrans.Voucher == custTrans.Voucher
              && ledgerTrans.Dimension == custTrans.Dimension;
     if(ledgerTrans.recId)
          saldo += custTrans.AmountMST;
}
Старый 21.07.2010, 13:21   #13  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Но проблема в том, что однозначной связи между CustTrans и LedgerTrans нет.
Однозначной нет. Но это не значит что ее вообще нет.

X++:
while select custTrans 
where custTrans.AccountNum == "2545" 
//   && custTrans.PostingProfile == "76.20"  
        && custTrans.TransDate <= 30\06\2010
{
     select firstonly ledgerTrans
          where ledgerTrans.AccountNum == "76.20.00"
              && ledgerTrans.Voucher == custTrans.Voucher
              && ledgerTrans.TransDate == custTrans.TransDate ;
     if(ledgerTrans.recId) // Это условие лишнее - запись есть всегда
          saldo += custTrans.AmountMST;
}
Можно это переписать сразу в джойн. Только убедитесь что у Вас разным хоз операциям соответствуют разные значения поля Voucher.
Например, так:
X++:
select sum(AmountMST) from custTrans 
where custTrans.AccountNum == "2545" 
        && custTrans.TransDate <= 30\06\2010
exists join ledgerTrans
      where ledgerTrans.AccountNum == "76.20.00" &&
               ledgerTrans.Voucher == custTrans.Voucher &&
               ledgerTrans.TransDate == custTrans.TransDate;
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 21.07.2010 в 13:24.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 21.07.2010, 13:39   #14  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Подумал... забыл еще учесть корректирующие проводки (Поле Correct). Если Correct=Yes, то суммы нужно считать с обратным знаком.
__________________
Возможно сделать все. Вопрос времени
Старый 21.07.2010, 13:57   #15  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Спасибо большое.
Вот так совпадает с данными ОСВ:
X++:
select sum(AmountMST) from custTrans 
where custTrans.AccountNum == "2545" 
        && custTrans.TransDate <= 30\06\2010
        && custTrans.PostingProfile == "76.20" 
exists join ledgerTrans
      where ledgerTrans.AccountNum == "76.20.00" &&
               ledgerTrans.Voucher == custTrans.Voucher &&
               ledgerTrans.TransDate == custTrans.TransDate;
Поле correct можно не учитывать - там знаки сами проставлены в поле AmountMST (забавно наблюдать значения типа --300 или -+300), по крайней мере, у меня без учета этого поля сальдо совпадает с ОСВ. А вот PostingProfile все же нужен в фильтре по CustTrans - без него итоги не сходятся с ОСВ, видимо, есть операции по CustTrans с профилем отличным от "76.20", но разнесенные на 76.20.00.
Старый 21.07.2010, 14:44   #16  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Поле correct можно не учитывать - там знаки сами проставлены в поле AmountMST (забавно наблюдать значения типа --300 или -+300)
А, ну да - точно
__________________
Возможно сделать все. Вопрос времени
Старый 22.07.2010, 10:47   #17  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
Можно попросить проектик отчета, если не жалко Делал недавно пободное - хотелось сравнить.
Старый 22.07.2010, 11:21   #18  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Проектик во вложении. Там для вывода в эксель используется движок, написанный конторой, внедрявшей нам AX - его классы я не могу выложить без их согласия, извините.
Вложения
Тип файла: rar rep.rar (12.9 Кб, 142 просмотров)
За это сообщение автора поблагодарили: lev (1), novic (1).
Старый 28.07.2010, 12:38   #19  
novic is offline
novic
Axapta Retail User
Axapta Retail User
 
168 / 25 (0) +++
Регистрация: 14.04.2005
А как бы договор сюда еще пришить?

X++:
    select sum(AmountMST) from custTrans
    where custTrans.AccountNum == "165057137"
            && custTrans.TransDate <= 01\01\2010
            && custTrans.PostingProfile == "62.10.04"
    exists join ledgerTrans
          where ledgerTrans.AccountNum == "62.10.04" &&
                   ledgerTrans.Voucher == custTrans.Voucher &&
                   ledgerTrans.TransDate == custTrans.TransDate
    // так не получается
    join RContractTable
        where RContractTable.RContractPartnerCode == custTrans.AccountNum &&
              RContractTable.RContractAccount == '12КР002008';
Старый 28.07.2010, 12:51   #20  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,324 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А так?
X++:
    select sum(AmountMST) from custTrans
    where custTrans.AccountNum == "165057137"
            && custTrans.TransDate <= 01\01\2010
            && custTrans.PostingProfile == "62.10.04"
    join RContractTable
        where RContractTable.RContractCode == custTrans.RContractCode &&
              RContractTable.RContractAccount == custTrans.RContractAccount &&
              RContractTable.RcontractPartnerType == RcontractPartnerType::Cust
              RContractTable.RContractAccount == '12КР002008'
    exists join ledgerTrans
          where ledgerTrans.AccountNum == "62.10.04" &&
                   ledgerTrans.Voucher == custTrans.Voucher &&
                   ledgerTrans.TransDate == custTrans.TransDate;
Или так:
X++:
    select sum(AmountMST) from custTrans
    where custTrans.AccountNum == "165057137" &&
              custTrans.TransDate <= 01\01\2010   &&
             custTrans.PostingProfile == "62.10.04" &&
             custTrans.RContractCode == 'Группа' &&
             custTrans.RContractAccount == '12КР002008'
    exists join ledgerTrans
          where ledgerTrans.AccountNum == "62.10.04" &&
                   ledgerTrans.Voucher == custTrans.Voucher &&
                   ledgerTrans.TransDate == custTrans.TransDate;
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 28.07.2010 в 12:55.
Теги
как правильно, клиент, оборотно-сальдовая ведомость, осв, полезное, расчеты с клиентами

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX 4.0 Ген. фин. отчетов - Активное сальдо (дебет) и Сальдо дебет - в чем разница? Aleks_K DAX: Функционал 5 17.01.2008 01:47
Налоговая проводка, не увеличивающая сальдо по клиенту cherv DAX: Функционал 7 12.12.2006 12:35
Сальдо по валютам - не сальдо! max_woody_ru DAX: Функционал 19 15.12.2004 17:04
Как узнать сальдо по клиенту... soin DAX: Программирование 1 12.07.2004 17:06
Как посмотреть расчетную дату поставки клиенту? spy DAX: Функционал 3 08.08.2003 09:25

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:47.