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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Деление
 
 автор: Гоблин   (25.10.2012 в 21:28)   личное сообщение
 
 

Народ, подскажите функцию, которая выводит только целую часть числа при делении чисел. Например 33/9=3,66666 Нужно что бы только 3 вывел. А то через left и instr уже задолбался запятые выводить. Есть ведь какая-то функция.

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

dim a as long
a=int(33/9)

наверное можно и так
а=33\9

  Ответить  
 
 автор: Stanislav   (26.10.2012 в 08:36)   личное сообщение
 
 

33 \ 9 = 3 (возвращает наименьшее целое)

и еще для сведения:
33 / 9 = 3,66 ...
33 Mod 9 = 6 (возвр. остаток)

  Ответить  
 
 автор: Гоблин   (26.10.2012 в 20:19)   личное сообщение
 
 

Вот. Mod - возвращает дробную часть и какая-то хрень есть, которая возвращает целую часть числа. Наименьшее - то что надо кстати.

Дело вот в чем. Допустим в одной коробке 6 деталей. Получив 10 коробок выходит 60 деталей. Далее выдача идет по коробкам - пишут 3 коробки - 18 деталей. Все бы хорошо. Но иногда получают 10 коробок и еще 2 детали. А выдают 8 деталей. Т.е. на списание должно идти автоматически 1 коробка и еще 2 детали. В принципе все работает через переменные и функцию Istr, вычисляющую где там запятая. Потом условия если одно, то другое и так далее. Вот поэтому про функцию и спросил. А про деление \ даже и не знал кстати. Спасибо. Бум пробовать.

  Ответить  
 
 автор: час   (26.10.2012 в 22:08)   личное сообщение
 
 

переводи всё в штуки.
И нету гемороя.

  Ответить  
 
 автор: Stanislav   (27.10.2012 в 07:04)   личное сообщение
 
 

Час правильно советует - веди учет в деталях, т.е. в штуках. Коробки вообще не храни нигде, сделай их вычисляемым полем. Отчетность-то по числу деталей, а не по тому как они были упакованы. Если юзер указывает поступление в коробках и деталях, то коробки опять-таки переводи в детали. И еще вопрос: у вас коробки одного вида, не может быть коробок на 10, 12 деталей и т.д.? Если может, то надо еще таблицу с описанием упаковки, например: PackageID, PackageName, PackageCapacity.

  Ответить  
 
 автор: kot_k_k   (27.10.2012 в 11:02)   личное сообщение
 
 

все правильно коробки - на фиг, а от дойдет до - цвет коробки : PackageForeColor, PackageBorderColor, PackageBackColor

  Ответить  
 
 автор: Гоблин   (27.10.2012 в 12:51)   личное сообщение
 
 

Все бы так. Все трое правы. И у меня бы гемора меньше было. Количество деталей.
Но задача усложняется тем, что номер коробки - это количество не деталей, а лекарств в этой коробке. И если юзеры-аптекари, получив 149 коробок под №14 в уме хорошо бы перемножали то и ладно. Прога тоже это делает. Но когда выдают 138 таблеток, а списание для финансовой проверки и инвентаризацию надо проводить в коробках и получить остаток нераспакованных коробок... В общем тут гемор появляется не только у меня.

В принципе очень помогло деление наоборот. Пусть пишут 3 коробки и 13 таблеток. Коробка под №5 и теперь автоматом перевод на 5 коробок и 3 таблетки. После чего входит в накладную и учет далее. Просто классно получилось. Самому нравится.

  Ответить  
 
 автор: Explorer   (27.10.2012 в 18:37)   личное сообщение
 
 


очень помогло деление наоборот.



это называется целочисленное деление
http://dic.academic.ru/dic.nsf/fin_enc/31363

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

согласен полностью с часом
учет надо вести в наименьшей неделимой единице в шт (таблетках ампулах)
и вести учет количества в упаковке т.е в твоем случае номер коробки

выдавать - для внутреннего учета бд в таблетках и ампулах

а для бухгалтерии пересчитывать в удобоваримые для них единицы

например так
Public function PrintRest(countTablet as long, countInBox as long)
'countTablet - количество таблеток на складе - табличные данные
'countInBox -количество таблеток в упаковке - табличные данные
dim asd as long
dim dfg as long
asd=countBox(countTablet, countInBox) 'количество упаковок
dfg=countTabletPlacer(countTablet, countInBox) ' количество таблеток без упаковки
if asd=0 and dfg=0 then msgbox "нету ни чего"
if asd=0 and dfg>0 then msgbox "Осталось " & dfg & " таблеток"
if asd>0 and dfg=0 then msgbox "Осталось " & asd & " упаковок"
if asd>0 and dfg>0 then msgbox "Осталось " & asd & " упаковок и " & dfg & " таблеток россыпью"
end function


Private function countBox (countTablet as long, countInBox as long) as long 'количество упаковок
countBox=countTablet \countInBox
end function
Private function countTabletPlacer (countTablet as long, countInBox as long) as long ' количество таблеток без упаковки
countTabletPlacer=countTablet-countBox(countTablet, countInBox)*countInBox
end function

  Ответить  
 
 автор: Гоблин   (01.11.2012 в 20:11)   личное сообщение
 
 

ну собственно так и есть, только несколько иначе. Могут вписать 3 коробки №5 и 6 балеток. Прежде чем внести данные в таблицу, прога пересчитывает на 4 коробки и 1 бал.
Заранее пересчет в тал никто делать не будет, т.к. имея программу - это идиотизм. Могут вписать в количестве табл, могут указать упаковки и табл.. Как угодно, списано будет как надо.
Алгоритм почти такой же как и у вас. Несколько иначе, но итог тот же. Спасибо.

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