0

У меня есть форма данных, которая имеет расчетный столбец поля. Однако поле не будет отображаться, даже если оно имеет правильное значение. Поле в вопросе «numRisk»:Форма базового листа данных не будет отображаться. Поле

Sub Calculate_Risk (Form As Object) 
    Dim OrderPrice, IfDonePrice, TotBrSymComm, BrComm, Risk As Double 
    Dim Symbol As String 
    Dim IntRateMult, noContracts As Integer 
    If MinTick = 0 OR Rate = 0 Then 
     Exit Sub 
    End If 
    Symbol = RTrim(Form.getByName("txtSymbol").CurrentValue) 
    If Symbol = "" Then 
     Exit Sub 
    End If 
    OrderPrice = Form.getByName("fmtOrder_Price").CurrentValue 
    IfDonePrice = Form.getByName("fmtIf_Done_Price").CurrentValue 
    noContracts = Form.getByName("fmtNo_Contracts").CurrentValue 
    If NOT USIntRates Then 
     Risk = ABS(OrderPrice - IfDonePrice)/MinTick 
    Else 
     Risk = ABS(OrderPrice\1 - IfDonePrice\1) * MinTick 
     IntRateMult = IIf(Symbol = "FV" OR Symbol = "TU",400, 200) 
     Risk = ABS(Risk - IntRateMult * ABS(OrderPrice - OrderPrice\1 
     IfDonePrice + IfDonePrice\1)) 
    End If 
    Risk = Risk * MinTickVal/Rate 
    TotBrSymComm = BrSymComm + BrSymCommAud 
    BrComm = IIf(TotBrSymComm = 0, BrCommission, BrSymCommAud + BrSymComm/Rate) 
    Risk = noContracts*(Risk + BrComm * 2) 
    Form.getByName("numRisk").Value = Risk 
End Sub 

подпрограмма вызывается из следующей подпрограммы, которая запускается при загрузке формы:

Sub FromListForm(Event as Object) 
    Dim Form As Object 
    Dim TodaysDate As New com.sun.star.util.Date 
    Dim CurrDate As Date 
    Form=Event.Source.getByName("MainForm_Grid") 
    Form.RowSet.first() 
    Do Until Form.RowSet.isAfterLast() 
     Get_Contract(Form) 
     Get_Broker_Comm(Form) 
     Calculate_Risk(Form) 
     If isEmpty(Form.getByName("OrderDate").Date) Then 
      CurrDate = Date() 
      TodaysDate.Day = Day(CurrDate) 
      TodaysDate.Month = Month(CurrDate) 
      TodaysDate.Year = Year(CurrDate) 
      Form.getByName("OrderDate").CurrentValue = TodaysDate 
     End If 
     Form.RowSet.next() 
    Loop 
    Form.RowSet.last() 
End Sub 

Также существует более эффективный метод циклического перебора строки? Поскольку это кажется настолько медленным, я вижу, что указатель строки перемещается вниз по таблице, когда обрабатывается каждая строка.

ответ

0

Если я правильно понял, вы пытаетесь ввести отдельные значения в каждую ячейку в столбце элемента управления tablegrid? Я не думаю, что это возможно.

Внутри элемента управления tablegrid все значения должны поступать из базового запроса. Я рекомендую писать запрос для выполнения этих вычислений и использовать этот запрос в качестве основы для формы - это позволит решить как проблему отображения вычисленного результата, так и повысить скорость загрузки формы (поскольку логика базы данных при определении результатов запроса почти всегда более эффективен, чем макрос, идущий подряд за строкой).

В качестве альтернативы вы можете иметь вычисленное поле автономно, показывая только вычисленный результат для текущей выбранной строки элемента управления tablegrid. В этом случае событие с формой загружалось только для расчета для первой строки, и вычисляющий макрос будет запускаться каждый раз, когда изменяется выбор строки.

+0

Спасибо за это Lyrl. Я сделал расчетное поле (оно первоначально рассчитано на другом экране в 99% случаев) поле в таблице futures_orders. Теперь все прекрасно работает. Я знаю, что ты не должен это делать, но эй - все, что нужно. – user1897830

Смежные вопросы