Avatar billede rille101 Nybegynder
19. oktober 2007 - 16:34 Der er 6 kommentarer

Beregning af felter i faktura

hej.
Vil gerne lave et online faktura system.
er i gang med det punkt, hvor man skal udfylde hhv. timer og reservedelspriser.

Der er mulighed for to forskellige timepriser på samme linje. Dette er hvad jeg indtil videre har strikket sammen.
Jeg har fundet, og modificeret koder, fundet her på experten, men har svært ved at gennemskue dem, derfor dette spørgsmål...

<script language="javascript" type="text/javascript">
numFields = 3;
function beregn(fld){
    if(!fld.value.match(/^\d+\.?\d*$/)){
        alert('Ugyldigt antal angivet');
        fld.value = fld.defaultValue;
        return false;
    }
   
    var num = fld.name.substring(5);
    var p = document.getElementById("Pris1").value;
    var s = document.getElementById("Sum"+num);
    var ialt = document.getElementById("Ialt0");
    var ialt1 = document.getElementById("Ialt1");
    var pris = p;
    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")>0){
            pris = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }
    pris = +pris;
    var sum = pris*fld.value;
    s.value = formatNum(sum);
    sum = 0;
    for(i=1;numFields+1>i;i++){
        sum += +document.getElementById("Sum"+i).value
    }
    ialt.value = formatNum(sum);
    ialt1.value = formatNum(sum*1.25);
}

function formatNum(t){
    if((""+t).length>(""+t).indexOf(".")+3)t=(Math.round(t*100))/100;
    if((""+t).indexOf(".")==-1)t=t+".00";
    if((""+t).indexOf(".")+2==(""+t).length)t=t+"0";
    return t;
}
</script>



<table width="91%" border="0" align="right" cellpadding="0" cellspacing="0">
                      <tr>
                        <td>tekst</td>
                        <td><div align="center">produktpris</div></td>
                        <td><div align="center">timepris A<span class="style21">
                          <input name="Pris1" type="text" class="style12" id="Pris2" style="text-align:right;" value="100" size="2" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;beregn(this);" />
                        </span></div></td>
                        <td><div align="center">timepris B<span class="style21">
                          <input name="timepris2" type="text" class="style12" id="timepris2" size="1" />
                        </span></div></td>
                        <td><div align="right">I alt&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
                      </tr>
                      <tr>
                        <td width="39%">&nbsp;
                          <input name="tekst1" type="text" class="style12" id="tekst1" size="35" /></td>
                        <td width="11%"><div align="center">
                          <input name="produkt1" type="text" class="style12" id="produkt1" size="2" />
                        </div></td>
                        <td width="12%"><div align="center">
                          <input name="aAntal1" type="text" class="style12" id="aAntal1" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;beregn(this);"  size="2" />
                        </div></td>
                        <td width="12%"><div align="center">
                          <input name="bAntal1" type="text" class="style12" id="bAntal1" size="2" />
                        </div></td>
                        <td width="14%"><div align="right">
                          <input name="Sum1" type="text" disabled="disabled" class="style12" id="Sum1" style="text-align:right;" value="" size="4" />
                          &nbsp;&nbsp;&nbsp;&nbsp;</div></td>
                        </tr>
                      <tr>
                        <td>&nbsp;
                          <input name="tekst2" type="text" class="style12" id="tekst2" size="35" /></td>
                        <td><div align="center">
                          <input name="produkt2" type="text" class="style12" id="produkt2" size="2" />
                        </div></td>
                        <td><div align="center">
                          <input name="aAntal2" type="text" class="style12" id="aAntal2" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;beregn(this);" size="2" />
                        </div></td>
                        <td><div align="center">
                          <input name="bAntal2" type="text" class="style12" id="bAntal2" size="2" />
                        </div></td>
                        <td><div align="right">
                          <input name="Sum2" type="text" disabled="disabled" class="style12" id="Sum2" style="text-align:right;" value="" size="4" />
&nbsp;&nbsp;&nbsp;&nbsp;</div></td>
                        </tr>
                      <tr>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td>
                        <td>eks moms</td>
                        <td><div align="right">
                          <input name="ialt0" type="text" disabled="disabled" class="style12" id="ialt0" style="text-align:right;" value="" size="4" />
&nbsp;&nbsp;&nbsp;&nbsp; </div></td>
                        </tr>
                      <tr>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td>
                        <td>inkl moms</td>
                        <td><div align="right">
                          <input name="ialt1" type="text" disabled="disabled" class="style12" id="ialt1" style="text-align:right;" value="" size="4" />
&nbsp;&nbsp;&nbsp;&nbsp; </div></td>
                        </tr>
                    </table>

De to felter der hedder "aAntal1" og "aAntal2" Hed oprindeligt "antal1" og "antal2". De virker ikke lige nu, men hvis man ændrer navnene til de oprindelige virker de.
Det er li'som her jeg har indset, at jeg bare ikke er god nok til at gennemskue javascript, for jeg kan ikke se, hvor scriptet genkender "antal-felterne".

Det er meningen at der skal være plads til et uendeligt antal rækker, men her i spørgsmålet arbejdes der med to rækker, for overskuelighedens skyld.
Avatar billede rille101 Nybegynder
19. oktober 2007 - 16:44 #1
Jeg vil gerne have hjælp til udformning, og så ville jeg også gerne kunne få forståelse af hvorfor tingene bliver skruet sammen som de gør :-)
Avatar billede roenving Novice
21. oktober 2007 - 06:06 #2
Måske skal du bare ændre:

    var num = fld.name.substring(5);

til:

    var num = fld.name.match(/\d+$/)[0];

-- for der genkendes nummeret, i den ændrede udgave er antallet af bogstaver i navnet ligegyldigt !-)
Avatar billede rille101 Nybegynder
21. oktober 2007 - 22:29 #3
Ja, det løste ihvertfald det problem, men jeg tror jeg kommer til at mangle hjælp til hele javadelen.
Javascriptet er faktisk udarbejdet af dig, i et andet spm.
Kan du hjælpe mig?
Hvis du paster koderne i mit spm. er det rimelig enkelt at se, hvor jeg gerne vil hen.
Jeg smider gerne ekstra points i puljen.
Avatar billede rille101 Nybegynder
29. oktober 2007 - 08:34 #4
...Altså paste Mine koder FRA dette spm. Det var ikke fordi jeg ville have dig til, bare at lave det hele og så paste det til sidst.
Jeg vil selvfølgelig gerne svede for det selv også.
Avatar billede roenving Novice
04. november 2007 - 04:54 #5
Måske:

<script type="text/javascript">
numFields = 3;
function beregn(fld){
    if(!fld.value.match(/^\d+\.?\d*$/)){
        alert('Ugyldigt antal angivet');
        fld.value = fld.defaultValue;
        return false;
    }
   
    var num = fld.name.match(/\d+$/)[0];
    var p = document.getElementById("Pris1").value;
    var s = document.getElementById("Sum"+num);
    var ialt = document.getElementById("Ialt0");
    var ialt1 = document.getElementById("Ialt1");
    var pris = p;
    if(p.indexOf(",-")>-1){
        pris = p.substring(0,p.indexOf(",-"));
    }else{
        komma = p.indexOf(",")
        if(p.indexOf(",")>0){
            pris = (p.substring(0,komma)+"."+p.substring(komma+1));
        }
    }
    pris = +pris;
    var sum = pris*fld.value;
    s.value = formatNum(sum);
    sum = 0, i = 1;
    while(document.getElementById("Sum"+i)){
        sum += +document.getElementById("Sum"+i++).value
    }
    ialt.value = formatNum(sum);
    ialt1.value = formatNum(sum*1.25);
}

function formatNum(t){
    if((""+t).length>(""+t).indexOf(".")+3)t=(Math.round(t*100))/100;
    if((""+t).indexOf(".")==-1)t=t+".00";
    if((""+t).indexOf(".")+2==(""+t).length)t=t+"0";
    return t;
}
</script>
Avatar billede rille101 Nybegynder
24. marts 2011 - 13:25 #6
Hej.
Jeg gik væk fra denne løsning, men du må gerne smide et svar, så du kan få points for din tid.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester