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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.12.2007, 11:47   #1  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Angry Оборотно-сальдовая ведомость??!
Уважаемые коллеги, подскажите:
Есть форма и отчет "оборотно-сальдовая ведомость" по поставщику, так вот они показывают разные данные. Как понять какие данные верные? Да и верные ли?

ЗЫ. А может у кого завалялся ПРАВИЛЬНЫЙ запросик ?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 04.12.2007, 11:59   #2  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
А как вы валюту указываете в диалогах ? Основную валюту компании ставите ?
В этом случае в "отчёте" идёт фильтрация операций поставщика только по этой валюте, а в "запросе" берутся операции по всем валютам, просто сальдо и обороты отображаются в основной валюте.
Тут в диалоге "отчёта" главное не заполнять поле "Валюта" когда "Тип валюты" - Основная.
__________________
Дмитрий

Последний раз редактировалось Damn; 04.12.2007 в 12:07.
Старый 04.12.2007, 12:20   #3  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от Damn Посмотреть сообщение
А как вы валюту указываете в диалогах ? Основную валюту компании ставите ?
В этом случае в "отчёте" идёт фильтрация операций поставщика только по этой валюте, а в "запросе" берутся операции по всем валютам, просто сальдо и обороты отображаются в основной валюте.
Тут в диалоге "отчёта" главное не заполнять поле "Валюта" когда "Тип валюты" - Основная.
И там и там поле "тип валюты" - "Основная", поле "Валюта" не заполняется.

Есть очень серьезные подозрения, что данные кривые. Для проверки своих подозрений мне и нужно понять, чему можно больше доверять - отчету или запросу?
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 04.12.2007, 13:06   #4  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Может так кто поможет?
Правильно ли следущее?
X++:
VendTrans checkVendTrans()
{
    VendLedgerAccounts  vendLedgerAccounts;
    ;

    while select vendTrans
        where vendTrans.TransDate <= toDate
        {
            select firstOnly SumAccount from vendLedgerAccounts
                    where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts.AccountCode    == TableGroupAll::Table
                       && vendLedgerAccounts.Num            == vendTrans.AccountNum;

            if (! vendLedgerAccounts.SumAccount)
            {
                select firstOnly SumAccount from vendLedgerAccounts
                    where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts.AccountCode    == TableGroupAll::GroupId
                       && vendLedgerAccounts.Num            == VendTable::find(vendTrans.AccountNum).VendGroup;
            }

            if (! vendLedgerAccounts.SumAccount)
            {
                select firstOnly SumAccount from vendLedgerAccounts
                    where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts.AccountCode    == TableGroupAll::All
                       && vendLedgerAccounts.SumAccount     == accountNum;
            }

            if (vendLedgerAccounts.SumAccount == accountNum)
                amountMST += vendTrans.AmountMST;
    }

    return vendTrans;
}
Такой запрос выдаёт тот же результат, что и запрос "Оборотно-сальдовая ведомость".
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)

Последний раз редактировалось Silence; 04.12.2007 в 16:55.
Старый 04.12.2007, 13:57   #5  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
Если вы хотите просуммировать проводки по поставщику по бух счету, то так делать нельзя. Да - так делает отчет в расчетах с поставщиками, но в VendTrans не всегда заполняется поле PostingProfile, тогда система берет profile по-умолчанию из параметров модуля(Ax 3 sp 3) .

К тому же по множеству поставщиков и по множеству счетов это может очень долго работать
Старый 04.12.2007, 14:00   #6  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от UNRW Посмотреть сообщение
Если вы хотите просуммировать проводки по поставщику по бух счету, то так делать нельзя. Да - так делает отчет в расчетах с поставщиками, но в VendTrans не всегда заполняется поле PostingProfile, тогда система берет profile по-умолчанию из параметров модуля(Ax 3 sp 3) .

К тому же по множеству поставщиков и по множеству счетов это может очень долго работать
А как нужно?

ЗЫ. Работает не долго, база маленькая.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 04.12.2007, 16:39   #7  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
желательно одим запросом
"правильный" счет - в проводке по ГК
За это сообщение автора поблагодарили: Silence (1).
Старый 04.12.2007, 16:42   #8  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
мы, например, в проводку по ГК пишем аналитику с кодом контрагента
Старый 04.12.2007, 16:59   #9  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от UNRW Посмотреть сообщение
желательно одим запросом : )
Конечно желательно
Цитата:
Сообщение от UNRW Посмотреть сообщение
"правильный" счет - в проводке по ГК : )
Спасибо.

Цитата:
Сообщение от UNRW Посмотреть сообщение
мы, например, в проводку по ГК пишем аналитику с кодом контрагента
Хм... К сожалению это не мне решать
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 04.12.2007, 17:20   #10  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
вы посмотрите есть ли у вас в vendTrans пустые PostingProfile

а еще можно попробовать так
X++:
VendTrans checkVendTrans()
{
    VendLedgerAccounts  vendLedgerAccounts;
    ;

    while select vendTrans
        where vendTrans.TransDate <= toDate     
            outer join SumAccount from vendLedgerAccounts1
                    where vendLedgerAccounts1.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts1.AccountCode    == TableGroupAll::Table
                       && vendLedgerAccounts1.Num            == vendTrans.AccountNum
                outer join  SumAccount from vendLedgerAccounts2
                    where vendLedgerAccounts2.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts2.AccountCode    == TableGroupAll::GroupId
                       && vendLedgerAccounts2.Num            == VendTable::find(vendTrans.AccountNum).VendGroup
            outer join SumAccount from vendLedgerAccounts3
                    where vendLedgerAccounts3.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts3.AccountCode    == TableGroupAll::All
                       && vendLedgerAccounts3.SumAccount     == accountNum;
    {
      ....
    }

}
но так я и сам не пробовал
думаю Аксапта не потянет

Последний раз редактировалось UNRW; 04.12.2007 в 17:29.
Старый 04.12.2007, 17:43   #11  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от UNRW Посмотреть сообщение
вы посмотрите есть ли у вас в vendTrans пустые PostingProfile
Пустых нету, но есть измененные.
Цитата:
Сообщение от UNRW Посмотреть сообщение
а еще можно попробовать так
X++:
                outer join  SumAccount from vendLedgerAccounts2
                    where vendLedgerAccounts2.PostingProfile == vendTrans.PostingProfile
                       && vendLedgerAccounts2.AccountCode    == TableGroupAll::GroupId
                       && vendLedgerAccounts2.Num            == VendTable::find(vendTrans.AccountNum).VendGroup
но так я и сам не пробовал
думаю Аксапта не потянет
Не потянет
X++:
vendLedgerAccounts2.Num == VendTable::find(vendTrans.AccountNum).VendGroup
Низзя в селекте условия указывать Да и как еще до выборки Вы пытаетесь достать данные из таблицы которая должна выбираться.
Нда, сам не понял что написал Но думаю вы меня правильно поймете.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)

Последний раз редактировалось Silence; 04.12.2007 в 17:46.
Старый 05.12.2007, 11:52   #12  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
вот так работает сцуко быстро
X++:
static void DK_vendSaldoByProfiles(Args _args)
{
    VendLedgerAccounts  vendLedgerAccounts;
    VendTrans           vendTrans;
    VendTable           vendTable;
    Amount              bablosDeb;
    Amount              bablosCred;
    TransDate           transDate;
    ;

    transDate = 30\09\2007;

    while select vendTable
        group by VendGroup
        join sum (amountMst) from vendTrans
            group by AccountNum
                where
                      vendTrans.TransDate  <= transDate
                   && vendTrans.AccountNum == vendTable.AccountNum
            join vendLedgerAccounts
                    where
                          vendLedgerAccounts.SumAccount     == "60.02.0001"
                       && vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile
                       && (
                              (
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::Table
                               && vendLedgerAccounts.Num            == vendTrans.AccountNum
                              )
                          ||  (
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::GroupId
                               && vendLedgerAccounts.Num            == vendTable.VendGroup
                              )
                          ||
                              (
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::All
                              )
                          )
    {

        if (vendTrans.AmountMST > 0)
            bablosDeb += vendTrans.AmountMST;
        else
            bablosCred += vendTrans.AmountMST;
    }

    info(strfmt("%1   %2   ", bablosDeb, bablosCred));

}
при условии что профиля и группы не менялись в настройках системы
даже должен условно правильный результат дать

Последний раз редактировалось UNRW; 05.12.2007 в 11:57.
Старый 05.12.2007, 13:04   #13  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от UNRW Посмотреть сообщение
вот так работает сцуко быстро
И правда быстро. Спасибо.

Цитата:
Сообщение от UNRW Посмотреть сообщение
при условии что профиля и группы не менялись в настройках системы даже должен условно правильный результат дать
Цитата:
Сообщение от Silence Посмотреть сообщение
Пустых нету, но есть измененные.

Только не совсем правильно, так работает лучше:
X++:
                    where vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile
                       && ((vendLedgerAccounts.AccountCode  == TableGroupAll::Table
                       && vendLedgerAccounts.Num            == vendTrans.AccountNum
                       && vendLedgerAccounts.SumAccount     == "60.02.0001")

                       || (vendLedgerAccounts.AccountCode   == TableGroupAll::GroupId
                       && vendLedgerAccounts.Num            == vendTable.VendGroup)

                       || (vendLedgerAccounts.AccountCode   == TableGroupAll::All
                       && vendLedgerAccounts.SumAccount     == "60.02.0001"))
По крайней мере результат идентичен результату запроса "Оборотно-сальдовая ведомость" по поставщику.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 05.12.2007, 15:54   #14  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Извиняюсь, не догнал сразу
Этот код вообще не работоспособен из-за условия ИЛИ.
Например:
Цитата:
PostingProfile = Table, SumAccount = Счет1
PostingProfile = All, SumAccount = Счет2
Нам нужны все проводки по счету "Счет2", но Ваш запрос увидев, что таковой существует не обратит внимания на то, что есть еще и "Счет1" который не должен обсчитываться. И соответственно посчитает эту строку.

ЗЫ. А так хорошо все начиналось...
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 06.12.2007, 10:38   #15  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
Цитата:
Сообщение от Silence Посмотреть сообщение
Извиняюсь, не догнал сразу
Этот код вообще не работоспособен из-за условия ИЛИ.
Например:

Нам нужны все проводки по счету "Счет2", но Ваш запрос увидев, что таковой существует не обратит внимания на то, что есть еще и "Счет1" который не должен обсчитываться. И соответственно посчитает эту строку.

ЗЫ. А так хорошо все начиналось...
разве? счет ведь вынесен за общую скобку

Последний раз редактировалось UNRW; 06.12.2007 в 10:40.
Старый 06.12.2007, 11:14   #16  
Silence is offline
Silence
Участник
Аватар для Silence
 
287 / 27 (1) +++
Регистрация: 29.09.2004
Адрес: г. Москва, Зеленоград
Цитата:
Сообщение от UNRW Посмотреть сообщение
разве? счет ведь вынесен за общую скобку
Правильно. Если есть не одна запись в "vendLedgerAccounts", и даже если там присутствует нужный счет, то запись не должна выбираться.

Хммм... По крайней мере у нас.
__________________
Бывает, что человек молчит, когда ничего не знает о данном предмете, но чаще – когда знает о нем все. (Джордж Бернард Шоу)
Старый 11.12.2007, 14:54   #17  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
оказалось косяпта лажается на строках
X++:
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::Table
                               && vendLedgerAccounts.Num            == vendTrans.AccountNum
vendLedgerAccounts.Num
vendTrans.AccountNum

имеют выравнивания строки Left и Right

и SQL сервер не находит совпадений


можно попробовать так:
X++:
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::Table
                               && vendLedgerAccounts.Num           like vendTrans.AccountNum
правда like в этом запросе не гуд
надо бы сделать LTRIM для обоих полей (Аксапта не умеет так делать), но тем не менее:
X++:
static void DK_vendSaldoByProfiles(Args _args)
{
    VendLedgerAccounts  vendLedgerAccounts;
    VendTrans           vendTrans;
    VendTable           vendTable;
    Amount              bablosDeb;
    Amount              bablosCred;
    TransDate           transDate;
    ;

    transDate = 30\09\2007;

    while select vendTable
        group by VendGroup
        join sum (amountMst) from vendTrans
            group by AccountNum
                where
                      vendTrans.TransDate  <= transDate
                   && vendTrans.AccountNum == vendTable.AccountNum
            join vendLedgerAccounts
                    where
                          vendLedgerAccounts.SumAccount     == "60.02.0001"
                       && vendLedgerAccounts.PostingProfile == vendTrans.PostingProfile
                       && (
                              (
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::Table
                               && vendLedgerAccounts.Num            like vendTrans.AccountNum
                              )
                          ||  (
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::GroupId
                               && vendLedgerAccounts.Num            == vendTable.VendGroup
                              )
                          ||
                              (
                                  vendLedgerAccounts.AccountCode    == TableGroupAll::All
                              )
                          )
    {

        if (vendTrans.AmountMST > 0)
            bablosDeb += vendTrans.AmountMST;
        else
            bablosCred += vendTrans.AmountMST;
    }

    info(strfmt("%1   %2   ", bablosDeb, bablosCred));

}

Последний раз редактировалось UNRW; 11.12.2007 в 14:57.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Оборотно-сальдовая ведомость по складу miklenew DAX: Функционал 15 29.03.2010 12:27
Оборотно-сальдовая ведомость по клиентам kvan DAX: Программирование 11 30.11.2007 12:00
Оборотно-сальдовая ведомость (или проводки по складу) oleg_e DAX: Функционал 5 01.10.2007 13:39
Оборотно-вальдовая ведомость (поставщики) G.Menshikh DAX: Программирование 4 06.12.2006 10:19
Оборотно-сальдовая ведомость. gaenar DAX: База знаний и проекты 1 07.10.2005 19:47

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

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

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