Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| научите, как вообще должно быть...
Lukas писал в соседней теме:
Не надо хранить значения в невидимых полях, для этого есть переменные.
К ним и обращения происходят значительно быстрее, чем к элементам управления.
|
значит что мне нужно сделать?
взять код, перенести его в отдельный модуль
Pablic Function RAS4ET
...
End Function
и в этом Pablic -ке объявить все переменные?
Dim [Наценка] as currency
Dim [Цена за единицу] as currency
и т.д.
да?
а с основной формы поубивать все невидимые поля?
так что ли?
ну сорри, я правда "ноль" в этом((( | |
|
| |
|
|
|
| Не совсем так.
Создаем функцию расчета в общем модуле:
Public Function funAmountProduct(IdProduct As Long, IdStone As Long, IdInvoice As Long, IdSlabs As Long, IdProfile As Long, IdForm As Long, DimA As Long, DimB As Long, DimB1 As Long, DimC As Long, DimD As Long, DimE As Long, DimF As Long, DimG As Long, DimH As Long, R1 As Long, R2 As Long, R3 As Long, Optional Factory As Long = 1, Optional bolFactory As Boolean = False, Optional bolSplicing As Boolean = False, Optional IDInvoiceProfile As Long = 1, Optional bolUrgent As Boolean = False, Optional bolTakeStockStone As Boolean = True) As Currency
On Error GoTo Err_function
'Переменные, необходимые для расчетов
Dim IdTypeStone As Long
Dim AmountStone As Currency
Dim SpaceLine As Long
Dim SpaceCurveLine As Long
Dim AmountLine As Currency
Dim AmountCurveLine As Currency
Dim SpaceProfile As Long
Dim AmountProfile As Currency
Dim AmountInnerCorner As Currency
Dim AmountOuterCorner As Currency
Dim AmountCut As Currency
Dim AmountSqrAperture As Currency
Dim CountInnerCorner As Long
Dim CountOuterCorner As Long
Dim CountCut As Long
' здесь сами расчеты.
funAmountProduct = Round((AmountStone + AmountInnerCorner + AmountOuterCorner + AmountLine + AmountCurveLine + AmountProfile + AmountSqrAperture + AmountCut), 0)
Exit_function:
Exit Function
Err_function:
MsgBox Err.Description, vbExclamation, "Калькуляция стоимости изделия"
Resume Exit_function
End Function
|
Из формы-калькулятора, или из другой функции вызываем функцию и передаем ей необходимые аргументы (например значения полей формы).
Таким образом:
1. Разгружаем модуль формы от "тяжелых" расчетов.
2. Имеем возможность вызывать функцию при закрытой форме-калькуляторе. Например была задача, расчитать стоимость на наиболее ходовые позиции. Примерно 16000 значений.
Вручную из формы я это делал бы до "гробовой доски", а из специализированной функции с кучей циклов я это сделал за считанные секунды.
3. Для внесения корректировок в расчетах, не надо лезть в модуль формы, при этом форму не нужно открывать в режиме конструктора.
4. Я думаю найдется еще куча плюсов. | |
|
| |
|
|
|
| Пример вызова функции из формы-калькулятора, конечно предварительно необходимо проверить заполнение необходимых полей правильными данными:
[PriseProduct] = funAmountProduct([IdProduct], [IdStone], [IdInvoice], [IdSlabs], [IdProfile], [IdForm], [DimA], [DimB], [DimB1], [DimC], [DimD], [DimE], [DimF], [DimG], [DimH], [Radius], [Radius2], [Radius3], [Factory], False, [Splicing], [IDInvoiceProfile], [Urgent], [TakeStockStone])
|
Правильнее конечно было бы объявить в данном случае пользовательский тип переменной, и передавать функции переменную пользовательского типа. Но видимо тогда было лень.
Вызов функции проверки введенных данных и калькуляции стоимости я навесил на события AfterUpdate контролов, данные которых участвуют в расчете. Если расчет сложный, можно предусмотреть специальную кнопку - "Расчет". | |
|
| |
|
|
|
| ясно...
подумаю над этим тоже
спасибо Lukas | |
|
| |
|
12 Кб. |
|
| не..все же прошу помощи
прикрепил примерчик простенький
Форма1 - там вычисления происходят непосредственно в поле
Форма2 - вычисления в модуле формы
сделайте плиз Форму3, где вычисления бы происходили в модуле и передавались бы в эту форму...может я на этом примере пойму-таки, как нужно делать... | |
|
| |
|
15 Кб. |
|
| Например: | |
|
| |
HiProg.com - Технологии программирования
|