webForumDet fria alternativet

Momsproblem

29 svar · 641 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Håller på med en shop och priset står som exkl moms i databasen. Finns även ett fält där momsen står för varje produkt. Står i heltal. Är det 6 % moms står det som 6 i databasen.

tabellen produkter:
produkt, moms, pris

tabellen kundvagn:
antal, pris, moms

Vill nu i kundvagnen lista alla produkter som man lagt iden och under det skall pris av produkerna stå. Efter det skall momsen stå. Ex så här:

------------------------
PRODUKT - ANTAL - PRIS
------------------------
produkten(6% moms) - 1 - 1200
produkten(12% moms) - 1 - 1800
produkten(25% moms) - 1 - 750
produkten(6% moms) - 1 - 2200
produkten(12% moms) - 1 - 400
produkten(25% moms) - 1 - 100
------------------------
Summa: xxx
Moms 6%: xxx
Moms 12%: xxxx
Moms 25%: xxx
Inkl moms: xxx

Hur gör man detta på ett bra sätt? Vill oxå ha in så att man kan få rabatt på hela orderna på exkl moms priset. Ex man får 10 % rabatt. Hur göra detta?

Hoppas nån förstår hur jag menar.. Access databas använder jag.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#2

Fråga: Där det står "Moms 6%" eller "Moms 12%"; ska det vara;

1. Momssumman för alla artiklar med denna procentsats moms?
2. Summan av artiklarna med denna procentsats moms?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3

Om nu svaret är alternativ 1, så skulle nog min lösning se ut ungefär såhär, typ (Nu kan alla SQL-gurus piska mig, då det antagligen går att få det direkt ur en SQL-sats ;));

<%
dim dic, rsprod, dSum, dMomsSum, key

set dic = server.createobject("scripting.dictionary")
dic.comparemode = 1

set rs = GetYourArticlesHere()

dSum = 0
while not rsprod.eof
   'det du vill skriva ut om din artikel
   response.write rsprod("artikel") & "<br>" 

   'beräkning
   if not dic.exists(rsprod("moms")) then dic.add rsprod("moms"), 0
   dic(rsprod("moms")) = CDbl(dic(rsprod("moms"))) + (CDbl((rsprod("pris")*rsprod("antal")) * (1+(rsprod("moms")/100))))
   dSum = dSum + (CDbl(rsprod("pris")*rsprod("antal")) * (1+(rsprod("moms")/100)))

rsprod.movenext
wend

'skriv ut summor
response.write "Summa: " & dSum & "<br>"

for each key in dic.keys
   dMomsSum = dMomsSum + CDbl(key)
   response.write "Moms " & key & "%: " & dic(key) & "<br>"
next

response.write "Summa moms: " & dMomsSum & "<br>"

set rsprod = nothing
set dic = nothing 
%>

Kanske inte är den mest läsbara koden, tyvärr. :l

AsaMedlem sedan dec. 20011 860 inlägg
#4

Alternativ 1 är det som skall stå. Momssumman för varje produkt. Skall testa din kod och återkommer.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Asa skrev:

Alternativ 1 är det som skall stå. Momssumman för varje produkt. Skall testa din kod och återkommer.

Momssumman för varje produkt? Borde det inte bli "totala summan av momsen för alla produkter med X% moms"?

AsaMedlem sedan dec. 20011 860 inlägg
#6

Får detta felmess:
error '80020009'
Undantag inträffade.
/test.asp, line 30

På denna:
dMomsSum = dMomsSum + CDbl(key)

AsaMedlem sedan dec. 20011 860 inlägg
#7

OveRRidE skrev:

Momssumman för varje produkt? Borde det inte bli "totala summan av momsen för alla produkter med X% moms"?

Joo.. så skall det vara. Skrev fel bara.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#8

Sätt en

response.write key & "<br>"
response.flush

före den raden. Vad ger det?

AsaMedlem sedan dec. 20011 860 inlägg
#9

Ingen skillnad :/

OveRRidEMedlem sedan feb. 200112 078 inlägg
#10

Skriver den inte ut något? Är felet på exakt samma rad?

AsaMedlem sedan dec. 20011 860 inlägg
#11

Felet är samma men nu på denna: response.write key & "<br>"

<%
Session("session_kundID") = 1
dim dic, rsprod, dSum, dMomsSum, key

set dic = server.createobject("scripting.dictionary")
dic.comparemode = 1

set rsprod = Conn.Execute("SELECT produkt,pris,moms,antal FROM shop_asp_temp WHERE sID=" & Session("session_kundID"))

dSum = 0
while not rsprod.eof
   'det du vill skriva ut om din artikel
   response.write rsprod("produkt") & " / " & rsprod("pris") & "kr / " & rsprod("antal") & "st<br>" 

   'beräkning
   if not dic.exists(rsprod("moms")) then dic.add rsprod("moms"), 0
   dic(rsprod("moms")) = CDbl(dic(rsprod("moms"))) + (CDbl((rsprod("pris")*rsprod("antal")) * (1+(rsprod("moms")/100))))
   dSum = dSum + (CDbl(rsprod("pris")*rsprod("antal")) * (1+(rsprod("moms")/100)))

rsprod.movenext
wend

'skriv ut summor
response.write "Summa: " & dSum & "<br>"

for each key in dic.keys
   response.write key & "<br>"
   response.flush
   dMomsSum = dMomsSum + CDbl(key)
   response.write "Moms " & key & "%: " & dic(key) & "<br>"
next

response.write "Summa moms: " & dMomsSum & "<br>"

set rsprod = nothing
set dic = nothing 
%>
OveRRidEMedlem sedan feb. 200112 078 inlägg
#12

Innan "For each...", skriv

response.write "c: " & dic.count

/red. Ah, nej vänta! Jag vet vad det beror på. Dictionary's med nycklar namngivna på det sätt som jag gjort (inte som definitiv eller typkonverterad sträng), kan bugga ur på det där sättet.

Byt ut motsvarande rader mot dessa:

'beräkning
   if not dic.exists("m" & rsprod("moms")) then dic.add "m" & rsprod("moms"), 0
   dic("m" & rsprod("moms")) = CDbl(dic("m" & rsprod("moms"))) + (CDbl((rsprod("pris")*rsprod("antal")) * (1+(rsprod("moms")/100))))
AsaMedlem sedan dec. 20011 860 inlägg
#13

Nu skriver den ut c: 1 innan felmesset kommer.

AsaMedlem sedan dec. 20011 860 inlägg
#14

Summan i uträkningen som står innan momserna kommer skall vara utan moms. alltså plussa bara ihop produkternas summor.

Sen en If sats ifall rabatt finns skall den räkna på ett sätt och finns det ej skall den räkna på annat sätt.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#15

Observera min redigering av mitt förra inlägg.

Nu måste jag tyvärr gå och lägga mig. Återkommer imorgon om jag har tid. Lycka till! :)

/red. Jag kom på att det kan ställa till det lite ifall du har momssummor på produkterna som är decimal tal. Det innebär att nycklarna i Dictionary't innehåller specialtecken (komma), vilket jag inte tror är tillåtet. En replace borde ordna det dock.

AsaMedlem sedan dec. 20011 860 inlägg
#16

Körningsfel i Microsoft VBScript error '800a000d'
Inkompatibla typer: 'CDbl'
/test.asp, line 33

Denna rad:
dMomsSum = dMomsSum + CDbl(key)

OveRRidEMedlem sedan feb. 200112 078 inlägg
#17

Okej, en sista.

dMomsSum = dMomsSum + CDbl(mid(key,2,len(key))
AsaMedlem sedan dec. 20011 860 inlägg
#18

Nu skriver den ut utan problem fast momserna blev fel. Skriver ut så här:

Produkt med 25 % moms / 2360kr / 1st
Produkt med 12 % moms / 2360kr / 1st
Produkt med 6 % moms / 2360kr / 1st
Produkt utan moms / 2360kr / 1st

Summa: 10454,8
Moms 25%: 2950
Moms 12%: 2643,2
Moms 6%: 2501,6
Moms 0%: 2360
Summa moms: 43
AsaMedlem sedan dec. 20011 860 inlägg
#19

Summa skall vara alla produkternas pris tillsammans. Exkl moms. Alltså bara att räkna ihop dem.

Moms 25% skall vara momsen på de produkter som har momssats 25%. Alltså i detta fall skall momsen vara 0.25 * 2360 ??

Moms 12% skall vara momsen på de produkter som har momssats 12%. Alltså i detta fall skall momsen vara 0.12 * 2360 ??

Moms 6% skall vara momsen på de produkter som har momssats 3%. Alltså i detta fall skall momsen vara 0.06 * 2360 ??

Moms 0% skall vara momsen på de produkter som har momssats 0%. Alltså i detta fall skall momsen vara 0 ??

Sen summa moms totalt räknar man bara ihop de summor de olika momssatserna ger.

Sen Total summa inkl moms skall oxå finnas med.

Har jag helt fel när jag tänker så?

UlfTMedlem sedan maj 20018 027 inlägg
#20

Totalsumman inklusive moms, blev uppenbarligen rätt. Frågan är alltså var 43 kom från. Sedan har du adderat priset till de olika momsposterna. Men så hade du kanske tänkt dig det?

130 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)