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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.09.2016, 09:09   #1  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
:) Объединение форм RContractTable и RContactVendTrans
Доброго времени суток!

RContractTable - справочник договоров
RContactVendTrans - Обороты по договору
MS Dynamics 4.0

Подскажите возможно ли данные, рассчитываемые на форме RContactVendTrans, в частности Сальдо по договору, которое рассчитывается из VendTrans, перенести на форму RContractTable?

Чтобы увидеть сальдо по конкретному договору, пользователи должны зайти в форму Обороты по договору. Сама форма Обороты по договору( RContactVendTrans) вызывается кнопкой на форме Договоры (RContractTable).
А теперь пользователи хотят видеть Сальдо по договору на форме RContractTable.

Возможно ли это сделать?

Последний раз редактировалось Natali77; 05.09.2016 в 09:15.
Старый 05.09.2016, 10:26   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Возможно
Старый 05.09.2016, 10:39   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
К сожалению, нет русской версии АХ4, соответственно, не могу посмотреть устройство этих таблиц.
Но если я все правильно понял, из проводок по поставщику (VendTrans) вы запускаете командную кнопку "Сальдо по договору". Сам договор берется из таблицы VendTrans, так? Назовем поле номера договора RContractId. Т.е. по сути для сальдо по договору нужны VendTrans.AccountNum и VendTrans.RContractId.
А если вы хотите перенести вызов "Сальдо по договору" на форму RContractTable, то вам все равно придется считать в разрезе вендора. Т.е. помимо поля RContractId, вам нужно знать VendId. Найдете Id поставщика - сможете посчитать сальдо.
__________________
// no comments
За это сообщение автора поблагодарили: Natali77 (1).
Старый 05.09.2016, 11:58   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от dech Посмотреть сообщение
Т.е. помимо поля RContractId, вам нужно знать VendId. Найдете Id поставщика - сможете посчитать сальдо.
В старых договорах (RContractTable) есть код контрагента. Другое дело - сколько будет открываться форма договоров, если там на лету обсчитывать сальдо по всем отображаемым договорам.
Старый 05.09.2016, 11:59   #5  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от dech Посмотреть сообщение
К сожалению, нет русской версии АХ4, соответственно, не могу посмотреть устройство этих таблиц.
Но если я все правильно понял, из проводок по поставщику (VendTrans) вы запускаете командную кнопку "Сальдо по договору". Сам договор берется из таблицы VendTrans, так? Назовем поле номера договора RContractId. Т.е. по сути для сальдо по договору нужны VendTrans.AccountNum и VendTrans.RContractId.
А если вы хотите перенести вызов "Сальдо по договору" на форму RContractTable, то вам все равно придется считать в разрезе вендора. Т.е. помимо поля RContractId, вам нужно знать VendId. Найдете Id поставщика - сможете посчитать сальдо.
Изначально открывается форма Договора (RContractTable), на которой есть кнопка "Обороты по договору". При нажатии которой открываются все операции по Дт и Кт по конкретному договору (форма разделена на две части - операции по Дт и Кт). На этой же форме вверху есть рассчитываемые поля "Начальное сальдо", "Конечное сальдо", "Обороты по Дт", "Обороты по Кт", "Конечное сальдо с учетом сопоставления". В форме RContractTable DataSource VendTransDebit(таблица VendTrans) и VendTransCredit ( VendTrans). Ну и методы для расчета для полей сальдо.

Возможно ли как-то обратиться к уже рассчитанным полям формы RContractVendTrans (Обороты по договору) из формы RContractTable (Справочник договоров) и вытащить их на эту форму?

Или только на форме RContractTable нужно также отдельно считать сальдо?

Последний раз редактировалось Natali77; 05.09.2016 в 12:07.
Старый 05.09.2016, 12:03   #6  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Невозможно

Понимаю, задача для вас не простая. Но делается за пару тройку часов. Посмотрите как расчитываются поля в форме оборотов и сделайте тоже самое (самый просто вариант). Есть варианты посложнее, но долго объяснять. Может вам вообще одно поле нужно вывести?)

Последний раз редактировалось Sada; 05.09.2016 в 12:06.
За это сообщение автора поблагодарили: Natali77 (1).
Старый 05.09.2016, 12:23   #7  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от Sada Посмотреть сообщение
Невозможно

Понимаю, задача для вас не простая. Но делается за пару тройку часов. Посмотрите как расчитываются поля в форме оборотов и сделайте тоже самое (самый просто вариант). Есть варианты посложнее, но долго объяснять. Может вам вообще одно поле нужно вывести?)
Мне в принципе нужно вывести два поля "Конечное сальдо" и "Конечное сальдо с учетом сопоставления".
Старый 05.09.2016, 12:29   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
X++:
void updateBalances()
{
    QueryRun             queryRun;
    Query                query;
    QueryBuildDataSource qbd;
    CustTrans            custTrans;
    ;
    query = new Query(custTransDebit_Q);
    qbd   = query.dataSourceNo(1);
    qbd.findRange(fieldnum(CustTrans,AmountMST)).value(SysQuery::valueUnlimited());
    qbd.findRange(fieldnum(CustTrans,TransDate)).value(SysQuery::range(dateNull(),endDate.dateValue()));
    queryRun = new QueryRun(query);
    startBalance     = 0;
    turnoverCredit   = 0;
    turnoverDebit    = 0;
    settleEndBalance = 0;
    while (queryRun.next())
    {
        custTrans = queryRun.get(tablenum(CustTrans));
        settleEndBalance += custTrans.remainAmountMST();
        if (custTrans.TransDate < startDate.dateValue())
        {
            startBalance += custTrans.AmountMST;
        }
        else
        {
            if (custTrans.AmountMST > 0)
            {
                turnoverDebit += custTrans.AmountMST;
            }
            else
            {
                turnoverCredit += custTrans.AmountMST;
            }
        }
    }
    element.redraw();
}
X++:
//BP deviation documented
display AmountMST endBalance()
{
    return startBalance + turnoverDebit + turnoverCredit;
}
код с формы
Старый 05.09.2016, 12:48   #9  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от Sada Посмотреть сообщение
X++:
void updateBalances()
{
    
}
X++:
//BP deviation documented
display AmountMST endBalance()
{
    return startBalance + turnoverDebit + turnoverCredit;
}
код с формы

Да, есть эти два метода на форме RContractVendTrans. Мне нужно будет их применить на форме RContractTable? Получается нужно еще добавить в DataSource формы RContractTable добавить VendTrans?
Старый 05.09.2016, 14:05   #10  
ashu is offline
ashu
MCTS
MCBMSS
 
255 / 78 (3) ++++
Регистрация: 24.06.2008
посмотрите форму плана счетов (LedgerTable) там есть дисплейное поле LedgerTable.AccountBalance(). по моему аналогично тому, что необходимо вам.
Старый 05.09.2016, 14:38   #11  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от ashu Посмотреть сообщение
посмотрите форму плана счетов (LedgerTable) там есть дисплейное поле LedgerTable.AccountBalance(). по моему аналогично тому, что необходимо вам.
К сожалению, поле Сальдо в Плане счетов у нас не рассчитывается.
Старый 05.09.2016, 14:42   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Добавить дисплей метод на форму и сделать код для его расчета - это азы. Ознакомтесь с предметной областью чуть чуть Информации выше больше чем достаточно
Старый 05.09.2016, 15:46   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Natali77 Посмотреть сообщение
К сожалению, поле Сальдо в Плане счетов у нас не рассчитывается.
Оно ни у кого не рассчитывается, если не задать настройки периода или финансового года при помощи кнопочного меню "Сальдо / Настройка"
Старый 05.09.2016, 16:14   #14  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Это вы сейчас не туда пошли)
Старый 05.09.2016, 22:31   #15  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Sada Посмотреть сообщение
Это вы сейчас не туда пошли)
Ну почему же не туда?
Понятия обороты и сальдо в отрыве от периода слишком абстрактны. Если отображаем такие данные в форме договоров, то сразу возникает вопрос про период. Поэтому совет ashu посмотреть форму плана счетов вполне к месту - там как раз задается период и по настройкам периода выполняется подсчет сальдо.
Другой вопрос по поводу быстродействия. У меня при наличии в плане счетов около 1200 позиций, форма плана счетов при настроенном периоде сальдо открывается секунд 45-50. Что будет, если открыть справочник договоров не по конкретному поставщику, а по всем поставщикам, сказать очень сложно, но явно можно предположить, что открываться будет не быстро.
Старый 06.09.2016, 12:40   #16  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от Sada Посмотреть сообщение
Добавить дисплей метод на форму и сделать код для его расчета - это азы. Ознакомтесь с предметной областью чуть чуть Информации выше больше чем достаточно
Всем спасибо большое за отзывы и помощь. Вот пытаюсь изучать предметную область. Тяжеловато аналитику сразу в разработчики подаваться. Я полнейший чайник ( Отсюда и такие вопросы, простите)

Попытаюсь переварить и попробовать сделать что-то )
Старый 07.09.2016, 09:29   #17  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
А пример дисплей-метода на форме можете подсказать? Спасибо.
Старый 07.09.2016, 10:05   #18  
ashu is offline
ashu
MCTS
MCBMSS
 
255 / 78 (3) ++++
Регистрация: 24.06.2008
Цитата:
Сообщение от Natali77 Посмотреть сообщение
А пример дисплей-метода на форме можете подсказать? Спасибо.
а чем не нравится пример:

Цитата:
посмотрите форму плана счетов (LedgerTable) там есть дисплейное поле LedgerTable.AccountBalance()
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить метки всех элементов всех форм (DAX 4) Qaz Qwerty DAX: Программирование 1 09.08.2008 05:39
Relation on a Form: Дублировала RContractTable Arahnid DAX: Программирование 12 29.10.2007 12:50
RContractTable Lookup Roman777 DAX: Программирование 4 23.01.2007 17:12
Управление настройками форм LTA DAX: Программирование 11 11.12.2003 14:20
Настройка форм для групп пользователей Роман Кошелев DAX: Функционал 14 05.08.2002 16:32
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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