|
05.09.2016, 09:09 | #1 |
Участник
|
Объединение форм 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 |
Программатор
|
Возможно
|
|
05.09.2016, 10:39 | #3 |
Участник
|
К сожалению, нет русской версии АХ4, соответственно, не могу посмотреть устройство этих таблиц.
Но если я все правильно понял, из проводок по поставщику (VendTrans) вы запускаете командную кнопку "Сальдо по договору". Сам договор берется из таблицы VendTrans, так? Назовем поле номера договора RContractId. Т.е. по сути для сальдо по договору нужны VendTrans.AccountNum и VendTrans.RContractId. А если вы хотите перенести вызов "Сальдо по договору" на форму RContractTable, то вам все равно придется считать в разрезе вендора. Т.е. помимо поля RContractId, вам нужно знать VendId. Найдете Id поставщика - сможете посчитать сальдо.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: Natali77 (1). |
05.09.2016, 11:58 | #4 |
Участник
|
В старых договорах (RContractTable) есть код контрагента. Другое дело - сколько будет открываться форма договоров, если там на лету обсчитывать сальдо по всем отображаемым договорам.
|
|
05.09.2016, 11:59 | #5 |
Участник
|
Цитата:
Сообщение от dech
К сожалению, нет русской версии АХ4, соответственно, не могу посмотреть устройство этих таблиц.
Но если я все правильно понял, из проводок по поставщику (VendTrans) вы запускаете командную кнопку "Сальдо по договору". Сам договор берется из таблицы VendTrans, так? Назовем поле номера договора RContractId. Т.е. по сути для сальдо по договору нужны VendTrans.AccountNum и VendTrans.RContractId. А если вы хотите перенести вызов "Сальдо по договору" на форму RContractTable, то вам все равно придется считать в разрезе вендора. Т.е. помимо поля RContractId, вам нужно знать VendId. Найдете Id поставщика - сможете посчитать сальдо. Возможно ли как-то обратиться к уже рассчитанным полям формы RContractVendTrans (Обороты по договору) из формы RContractTable (Справочник договоров) и вытащить их на эту форму? Или только на форме RContractTable нужно также отдельно считать сальдо? Последний раз редактировалось Natali77; 05.09.2016 в 12:07. |
|
05.09.2016, 12:03 | #6 |
Программатор
|
Невозможно
Понимаю, задача для вас не простая. Но делается за пару тройку часов. Посмотрите как расчитываются поля в форме оборотов и сделайте тоже самое (самый просто вариант). Есть варианты посложнее, но долго объяснять. Может вам вообще одно поле нужно вывести?) Последний раз редактировалось Sada; 05.09.2016 в 12:06. |
|
|
За это сообщение автора поблагодарили: Natali77 (1). |
05.09.2016, 12:23 | #7 |
Участник
|
Мне в принципе нужно вывести два поля "Конечное сальдо" и "Конечное сальдо с учетом сопоставления".
|
|
05.09.2016, 12:29 | #8 |
Программатор
|
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 |
Участник
|
Цитата:
Да, есть эти два метода на форме RContractVendTrans. Мне нужно будет их применить на форме RContractTable? Получается нужно еще добавить в DataSource формы RContractTable добавить VendTrans? |
|
05.09.2016, 14:05 | #10 |
MCTS
|
посмотрите форму плана счетов (LedgerTable) там есть дисплейное поле LedgerTable.AccountBalance(). по моему аналогично тому, что необходимо вам.
|
|
05.09.2016, 14:38 | #11 |
Участник
|
|
|
05.09.2016, 15:46 | #12 |
Участник
|
|
|
05.09.2016, 14:42 | #13 |
Программатор
|
Добавить дисплей метод на форму и сделать код для его расчета - это азы. Ознакомтесь с предметной областью чуть чуть Информации выше больше чем достаточно
|
|
06.09.2016, 12:40 | #14 |
Участник
|
Цитата:
Попытаюсь переварить и попробовать сделать что-то ) |
|
07.09.2016, 09:29 | #15 |
Участник
|
А пример дисплей-метода на форме можете подсказать? Спасибо.
|
|
07.09.2016, 10:05 | #16 |
MCTS
|
|
|
05.09.2016, 16:14 | #17 |
Программатор
|
Это вы сейчас не туда пошли)
|
|
05.09.2016, 22:31 | #18 |
Участник
|
Ну почему же не туда?
Понятия обороты и сальдо в отрыве от периода слишком абстрактны. Если отображаем такие данные в форме договоров, то сразу возникает вопрос про период. Поэтому совет ashu посмотреть форму плана счетов вполне к месту - там как раз задается период и по настройкам периода выполняется подсчет сальдо. Другой вопрос по поводу быстродействия. У меня при наличии в плане счетов около 1200 позиций, форма плана счетов при настроенном периоде сальдо открывается секунд 45-50. Что будет, если открыть справочник договоров не по конкретному поставщику, а по всем поставщикам, сказать очень сложно, но явно можно предположить, что открываться будет не быстро. |
|