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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Прошу помочь с формулами в отчёте A2010 сохранено в mdb
 
 автор: sergeos   (01.06.2012 в 19:10)   личное сообщение
 
 

Народ, если кто разбирается, помогите пожалуйста правильно сформировать 2 формулы в отчете в прикреплённом тестовом файле mdb. Не получается рассчитать "Сумму НДС" с округлением и поле "Стоимость с НДС" - она высчитывается как Количество * Цену + НДС.
Отчет Documents2
documents2.mdb

  Ответить  
 
 автор: Гоблин   (02.06.2012 в 06:57)   личное сообщение
 
 

Сейчас скачать не могу.
А почему не сделать источником строк отчета запрос, в котором все высчитывается. СтоимостьСНДС=[Количество]*[Цена]+[НДС]

  Ответить  
 
 автор: sergeos   (02.06.2012 в 10:15)   личное сообщение
 
 

Ну в общем, там в "Области данных" для поля используется формула
=[FieldCena]+([FieldCena]/100*[NDSPersent]), т.е. таким образом я считаю цену + 20% ндс
в результате получается например такие результаты в полях данных:
12.4
13.4
17.2
если каждую строку округлить, то в сумме получается 42, а если сложить всё как есть, то получится 43. А нужно с округлением.

Блин, да неужели нет нормального спеца на форуме?

  Ответить  
 
 автор: snipe   (02.06.2012 в 20:06)   личное сообщение
 
 

спецы есть
выходные сейчас

есть такая функция INT() - выделить целую часть числа
если отчет строить не на основе таблицы, а на основе запроса, то в запросе можно воткнуть поля для промежуточного вычисления и поля- где промежуточные вычисления округлять

  Ответить  
 
 автор: Гоблин   (03.06.2012 в 08:03)   личное сообщение
 
 

Пример в студию и будет готовое решение.

  Ответить  
 
 автор: ddi   (03.06.2012 в 11:47)   личное сообщение
 
 

У вас

Сумма НДС, руб. РБ  = [FieldCena]+([FieldCena]/100*[NDSPersent])
Стоимость с НДС, руб. РБ =[FieldCena]+([FieldCena]/100*[NDSPersent])


а должно быть

Сумма НДС, руб. РБ  = [FieldCena]/100*[NDSPersent]
Стоимость с НДС, руб. РБ =[FieldCena]+([FieldCena]/100*[NDSPersent])

а чтобы округлять

Сумма НДС, руб. РБ  = int([FieldCena]/100*[NDSPersent])
Стоимость с НДС, руб. РБ =int([FieldCena]+([FieldCena]/100*[NDSPersent]))

  Ответить  
 
 автор: sergeos   (04.06.2012 в 13:04)   личное сообщение
 
 

Да не, Int это не округление. Int просто возращает целую часть.
Округление это когда:
12.4 = 12
12.5 = 13
12.9 = 13

  Ответить  
 
 автор: Дядя Федор   (05.06.2012 в 08:08)   личное сообщение
 
 


Public Function Round( _
ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
'ЕЩЕ ОДНА ВСПОМОГАТЕЛЬНАЯ ФУНКЦИЯ , округляет указанное число, до указанной точности
'Here s the version I recently wrote that solves that last issue. I've
'sent this in to Advisor to post as an errata. I think this will work
'now... -- Ken
Dim dblPower As Double
Dim varTemp As Variant
Dim intSgn As Integer

If Not IsNumeric(Number) Then
' Raise an error indicating that
' you've supplied an invalid parameter.
Err.Raise 5
End If
dblPower = 10 ^ NumDigits
' Do the major calculation.
varTemp = CDec(Number) * dblPower + 0.5

' Now round to nearest even, if necessary.
If UseBankersRounding Then
' Is this a negative number, or not?
' intSgn will contain -1, 0, or 1.
intSgn = Sgn(Number)
varTemp = Abs(varTemp)
If Int(varTemp) = varTemp Then
If varTemp Mod 2 = 1 Then
' If working with a negative number,
' add 1. If working with a
' positive number, subtract one.
' That's what "- intSgn" will do.
varTemp = _
intSgn * (varTemp - intSgn)
End If
End If
End If
' Finish the calculation.
Round = Int(varTemp) / dblPower
End Function



Пример
Sub testround()
Debug.Print Round(12.6666666666, 1)
Debug.Print Round(12.6666666666, 3)
Debug.Print Round(-12.6666666666, 3, False)
Debug.Print Round(-12.6666666666, 3, True)
End Sub

Результаты
12,7
12,667
-12,667
12,666

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