Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вынос функции расчета в отдельный модуль
 
 автор: Скорп   (05.10.2008 в 23:59)   личное сообщение
 
 

научите, как вообще должно быть...

Lukas писал в соседней теме:

Не надо хранить значения в невидимых полях, для этого есть переменные.
К ним и обращения происходят значительно быстрее, чем к элементам управления.


значит что мне нужно сделать?
взять код, перенести его в отдельный модуль
Pablic Function RAS4ET
...
End Function

и в этом Pablic -ке объявить все переменные?
Dim [Наценка] as currency
Dim [Цена за единицу] as currency
и т.д.
да?

а с основной формы поубивать все невидимые поля?
так что ли?

ну сорри, я правда "ноль" в этом(((

  Ответить  
 
 автор: Lukas   (06.10.2008 в 00:22)   личное сообщение
 
 

Не совсем так.
Создаем функцию расчета в общем модуле:

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. Я думаю найдется еще куча плюсов.

  Ответить  
 
 автор: Lukas   (06.10.2008 в 00:31)   личное сообщение
 
 

Пример вызова функции из формы-калькулятора, конечно предварительно необходимо проверить заполнение необходимых полей правильными данными:

[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 контролов, данные которых участвуют в расчете. Если расчет сложный, можно предусмотреть специальную кнопку - "Расчет".

  Ответить  
 
 автор: Скорп   (06.10.2008 в 00:35)   личное сообщение
 
 

ясно...
подумаю над этим тоже
спасибо Lukas

  Ответить  
 
 автор: Скорп   (07.11.2008 в 14:42)   личное сообщение
12 Кб.
 
 

не..все же прошу помощи

прикрепил примерчик простенький
Форма1 - там вычисления происходят непосредственно в поле
Форма2 - вычисления в модуле формы

сделайте плиз Форму3, где вычисления бы происходили в модуле и передавались бы в эту форму...может я на этом примере пойму-таки, как нужно делать...

  Ответить  
 
 автор: Lukas   (07.11.2008 в 15:20)   личное сообщение
15 Кб.
 
 

Например:

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList