Avatar billede Slettet bruger
25. februar 2009 - 16:34 Der er 5 kommentarer

Prisliste-import i Microsoft C5 version 2008

Jeg modtager prislister fra Lemvigh-Müller og skal have disse importeret i lagerkartoteket - "InvenTable".

Med prislisten følger også en vejledende UDSALGSPRIS, som jeg også gerne vil have ind. Men salgsprisen ligger i et andet kartotek.

Der er ingen problemer med selve importeringen, idet jeg kan få alle felter med.

Jeg har valgt at lægge "Salgsprisen" i feltet "ItemName2" FOR SÅ SENERE at flytte det til "InvenPrice" kartoteket afsluttende med at slette "ItemName2"; OG DET ER DETTE, SOM JEG MANGLER PROGRAMMERINGEN TIL.

Jeg har på fornemmelsen, at det kun er nogle få programlinier som skal til, men hvorledes jeg lige får flyttet fra et kartotek til et andet, er jeg lidt på bar bund med.

PS: Jeg får ingen VareGruppe med, så denne sætter jeg selv til "Varer".

Koden indtil videre ser således ud:

"

#MacroLoad(FILE_UTIL)
STR 254 &FileName
INT    &Counter
INT    &InsErr

STR 999 &TextFields = ',1,2,3,4,5,7,'
STR 999 &RealFields = ',6,8,'
STR 999 &DateFields = ','
STR 255 &FieldContent[]
STR 999 &Line_
STR  1 &TextDelimiter = '"'
STR  1 &ThousandsSeparator
STR  1 &DecimalDelimiter
INT    &DecimalsCount
INT    &DateOrder          = 123

INT    &DelimiterCount
INT    &StrPos
INT    &CurrentField
INT    &TestField

SET UserFormatNumberDels('9999.99',&ThousandsSeparator,&DecimalDelimiter,&DecimalsCount)

SET &FileName = #GetFile_Open( "@SYS14875 "+FilePName(InvenTable)+":","*.txt")

IF NOT &FileName OR NOT #FileExists(&FileName) THEN
    RETURN 0
ENDIF


WINDOW 40,5 AT 20,5
PRINT "Skriver...........:  InvenTable" AT 1,1
PRINT "Fra...............:  "+&FileName    AT 1,2
PRINT "Record............:  " AT 1,3

TTSBEGIN  InvenTable
INTRODUCE InvenTable
SET &INRECDEL = #TextRecDel
SET &INFLDDEL = ','
READ &FileName AS TEXT INTO (
      &FieldContent[1],
      &FieldContent[2],
      &FieldContent[3],
      &FieldContent[4],
      &FieldContent[5],
      &FieldContent[6],
      &FieldContent[7],
      &FieldContent[8],
      &FieldContent[9],
      &FieldContent[10],
      &FieldContent[11],
      &FieldContent[12],
      &FieldContent[13],
      &FieldContent[14],
      &FieldContent[15],
      &FieldContent[16],
      &FieldContent[17],
      &FieldContent[18],
      &FieldContent[19],
      &FieldContent[20],
      &FieldContent[21],
      &FieldContent[22],
      &FieldContent[23],
      &FieldContent[24],
      &FieldContent[25],
      &FieldContent[26],
      &FieldContent[27],
      &FieldContent[28],
      &FieldContent[29],
      &FieldContent[30],
      &FieldContent[31],
      &FieldContent[32],
      &FieldContent[33],
      &FieldContent[34],
      &FieldContent[35],
      &FieldContent[36],
  )
    SET &CurrentField = 0
    SET &TestField    = 0
    WHILE &CurrentField < 8
        #Add(&CurrentField,1)
        #Add(&TestField,1)
        SET &Line_ = &FieldContent[&TestField]
        { remove the delimiters from a text field, if a text field is present}
        IF    StrScan(&TextFields,','+Int2Str(&CurrentField)+',',1,999) THEN

            IF SubStr(&Line_,1,1) == &TextDelimiter THEN
                SET &Line_ = StrDel(&Line_,1,1)
                WHILE 1
                    SET &DelimiterCount = 0
                    SET &StrPos = StrLen(&Line_)
                    WHILE &StrPos > 0 AND SubStr(&Line_,&StrPos,1) == &TextDelimiter
                        #Sub(&StrPos,1)
                        #Add(&DelimiterCount,1)
                    END
                    IF &DelimiterCount MOD 2 == 0 THEN
                        #Add(&TestField,1)
                        SET &Line_ = &Line_ + &INFLDDEL + &FieldContent[&TestField]
                    ELSE
                        SET &Line_ = StrDel(&Line_,StrLen(&Line_),1)
                        BREAK
                    ENDIF
                END
            ENDIF
            SET &Line_ = SysInfo(5031,&Line_)
            SET &StrPos = StrLen(&Line_)
            WHILE &StrPos > 0
                IF SubStr(&Line_,&StrPos,1) == &TextDelimiter THEN
                    #Sub(&StrPos,1)
                    SET &Line_ = StrDel(&Line_,&StrPos,1)
                ENDIF
                #Sub(&StrPos,1)
            END

            #Switch(&CurrentField)
                #CASE(1) SET ItemNumber = &Line_
                #CASE(2) SET Group = &Line_
                #CASE(3) SET ItemName1 = &Line_
                #CASE(4) SET ItemName3 = &Line_
                #CASE(5) SET UnitCode = &Line_
                #CASE(7) SET ItemName2 = &Line_
            #EndSwitch
        ELSEIF StrScan(&RealFields,','+Int2Str(&CurrentField)+',',1,999) THEN
            SET &Line_ = StrRem(&Line_,&ThousandsSeparator)
            IF &DecimalDelimiter <> '.' THEN
                SET &Line_ = StrReplace(&Line_,&DecimalDelimiter,'.')
            ENDIF
            #Switch(&CurrentField)
                #CASE(6) SET CostPriceUnit = Str2Num(&Line_)
                #CASE(8) SET CostPrice = Str2Num(&Line_)
            #EndSwitch
        ELSEIF StrScan(&DateFields,','+Int2Str(&CurrentField)+',',1,999) THEN
            #Switch(&CurrentField)
            #EndSwitch
        ELSE
            #Switch(&CurrentField)
            #EndSwitch
        ENDIF

    END

    SET &Counter = &Counter + 1

    IF &Counter MOD 1 == 0 THEN
        PRINT Num2Str(&Counter,15,0,0,0) AT 20,3
    ENDIF

    SET Group = "Varer"

    SET RowNumber = 0

    INSERT InvenTable

    #ADD(&InsErr,(RowNumber == 0))
END
TTSCOMMIT InvenTable

PRINT Num2Str(&Counter,15,0,0,0) AT 20,3
IF &InsErr THEN
    SET Box(2,StrFmt("@SYS64094",Int2Str(&InsErr)),0)
ENDIF

PAUSE

"

Håber en eller flere kan hjælpe her.. :D
Avatar billede mariaf Juniormester
25. februar 2009 - 19:37 #1
Koden til prisgrupper er ikke helt så enkelt. Før det første skal du have styr på dine prisgrupper. Hvilke avancer har du på hvilke grupper?
Næste punkt er at du skal gøre dig klart om du kører med lager og hvilken kostpris, du arbejder med. I ovennævnte kode har du slet ikke kostprisen inde.

Nu kender jeg en del til prislister fra Lemvig-Müller og de andre leverandører - det kræver en del erfaring at få det gjort rigtigt, så du også har glæde af det efterfølgende. Køb den viden hos en konsulent. De penge vil være givet godt ud.
Avatar billede up2nogood Nybegynder
26. februar 2009 - 08:30 #2
Synes da du skal have muligheden for selv at prøve.
Kig på XAL kørslerne InvenImport* - der ligger 4 forskellige.
Stjæl koden derfra med arme og ben.

Nedenstående er sakset herfra:
//&ReadPriceGrp er den ønskede prisgruppe du smider det i
//InvenItemGroup.ProfitMarginPct er avance som er mulig at sætte //pr lagergruppe (ikke det mest hensigtsmæssige sted, så denne //kan du selv rode lidt med
INTRODUCE InvenPrice[ItemPriceIdx, &ItemNumber, &ReadPriceGrp] RENAME IPrice
SET IPrice.Price        = &Price*(100+InvenItemGroup.ProfitMarginPct)/100
SET IPrice.PriceUnit    = 1
SET IPrice.Date_        = &SystemDate
IF IPrice.RowNumber THEN
  UPDATE Iprice
ELSE
  INSERT IPrice
  UPDATE IPrice{ Sætter DG }
ENDIF
Avatar billede Slettet bruger
26. februar 2009 - 14:12 #3
Tak for det skrevne.

Jeg har faktisk allerede forsøgt med med at "Stjæle med arme og ben" i netop den XAL-kørsel du nævner. Men af en eller anden grund, kan jeg ikke få det til at fungere på den facon.

Men jeg har løst problemet på anden vis - jeg oprettede blot en ny kørsel, som importerer udsalgsprisen.

Det betyder selvfølgelig at der skal køres 2 kørsler istedet for 1, men de 20 sek. overlever jeg nok.
Avatar billede up2nogood Nybegynder
26. februar 2009 - 14:55 #4
Det kan jo drille til tider.
Du skal passe på med at få indsat nogle priser i databasen, hvor referencen til lagerkartoteket ikke er korrekt.
Det er jo "døde poster", da disse ikke kan ses, men blot fylder i databasen.
Kunne forestille mig det var sådan noget der var fejlet for dig tidligere.  - Men ikke nemt at sætte en finger på ud fra dit kode i indlægget...
Vigtigst er selvfølgelig du har det til at spille.
Avatar billede mariaf Juniormester
26. februar 2009 - 22:44 #5
Og du har stadig problemet med dine forkerte kostpriser.

Husk at køre check af lageret, så du ikke får problemer med referencer senere.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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