gud One- Integration of Barcode Scanner with Navision

maheshmahesh Member Posts: 115
Hi NAV guys,

Im working on NAV 4.0 SP3 for a Eye Lens manufacturing cmpny. They are very curious about serial No & Lot No. They want to integrate barcode scanner with Navision. So as they scan any barcode label, record should appear in Item Tracking Line of warehouse shipment Line.

I want suggestion from u guys as early as possible for direct integration of Scanner with NAVISION. Its urgent. :-k .
Best Regards,
Mahesh Jain
mahesh@reliconservices.com

Comments

  • kinekine Member Posts: 12,562
    Search the formu for Barcode scanners and you will see the tips. But if you need help in that, for me it seems that you need some professional services, not just some easy answer on the forum.
    Kamil Sacek
    MVP - Dynamics NAV
    My BLOG
    NAVERTICA a.s.
  • jlandeenjlandeen Member Posts: 524
    I agree that Barcodes are not really a simple issue that can be covered in the forums very well.

    But there are a few simple things to consider when working with barcodes. Barcodes are normally nothing more then alphanumeric characters printed out with a special font and scanned by a device. So it can be a simple as adding a special font to a report and printing out labels with barcodes.

    Then if they have a barcode that needs to be pulled into navision normally the scanning device will dump the output to the keyboard buffer. So there is normally no modifiction required to Navision to bring the value in, however you do need to make sure that the cursor is in the correct field when you scan the barcode.
    Jeff Landeen - Sr. Consultant
    Epimatic Corp.

    http://www.epimatic.com
  • MalajloMalajlo Member Posts: 294
    For LotNo (not hard to change for SerNo), create new field, two functions InsertResEntry (example is incl.) and ReverseResEntry.

    Lot No. - OnValidate()
    
        ItemLedger.SETCURRENTKEY("Lot No.") ;
        ItemLedger.SETRANGE(ItemLedger.Positive,TRUE) ;
        ItemLedger.SETRANGE(Open,TRUE) ;
        ItemLedger.SETRANGE(ItemLedger."Item No.","Item No.") ;
        ItemLedger.SETRANGE("Lot No.","Lot No.") ;
        IF ItemLedger.FIND('-') THEN
          BEGIN
            CurrFieldNo := FIELDNO(Quantity) ;
            VALIDATE(Quantity,ItemLedger."Remaining Quantity") ;
            "Transfer-from Code" := ItemLedger."Location Code" ;
            "Source ID" := ItemLedger."Source No." ;
          END ;
    
    InsertResEntry;
    


    InsertResEntry()
    IF "Lot No." <>''THEN
      BEGIN
        IF NOT Item.GET("Item No.") THEN
          BEGIN
            LotNo := "Lot No." ;
            ItemLedger.SETCURRENTKEY("Lot No.") ;
            ItemLedger.SETRANGE(Open,TRUE) ;
            ItemLedger.SETRANGE("Lot No.","Lot No.") ;
            IF (ItemLedger.FIND('-')) AND (ItemLedger.COUNT = 1) THEN
              BEGIN
                Item.GET(ItemLedger."Item No.") ;
                VALIDATE("Item No.",ItemLedger."Item No.") ;
                VALIDATE("Transfer-from Code",ItemLedger."Location Code") ;
                "Lot No." := LotNo ;
              END ;
          END ;
        TransHeader.GET("Document No.") ;
        //search for existence
        ReservEntry.RESET ;
        ReservEntry.SETRANGE("Item No.","Item No.") ;
        ReservEntry.SETRANGE("Source Type",5741 );
        ReservEntry.SETRANGE("Source ID",TransHeader."No.") ;
        IF TransHeader.Status = TransHeader.Status::Open THEN
          BEGIN
            ReservEntry.SETRANGE("Source Ref. No.","Line No.") ;
            ReservEntry.SETRANGE("Source Subtype",0) ;
          END
        ELSE 
          BEGIN
            ReservEntry.SETRANGE(ReservEntry."Source Prod. Order Line","Line No.") ;
            ReservEntry.SETRANGE("Source Subtype",1) ;
          END ;
    
        ResEntryExist := FALSE ;
        ResEntryExist := ReservEntry.FIND('+') ;
        ReservEntry."Item No." := "Item No." ;
        IF TransHeader.Status = TransHeader.Status::Open THEN ReservEntry."Location Code" := "Transfer-from Code"
        ELSE ReservEntry."Location Code" := "Transfer-to Code" ;
        ItemLedger.SETCURRENTKEY("Lot No.") ;
        ItemLedger.SETRANGE(Open,TRUE) ;
        ItemLedger.SETRANGE("Lot No.","Lot No.") ;
        ItemLedger.SETRANGE(ItemLedger."Location Code","Transfer-from Code") ;
        IF ItemLedger.FIND('-') THEN
        IF Quantity > ItemLedger."Remaining Quantity" THEN
            ERROR('Qty is too big!\Should be max %1',ItemLedger."Remaining Quantity")
        ELSE ReservEntry."Quantity (Base)" := -Quantity ;
        ReservEntry."Reservation Status" := ReservEntry."Reservation Status"::Surplus ;
        ReservEntry."Creation Date" := TransHeader."Posting Date" ;
        ReservEntry."Source Type" := 5741 ;
        IF TransHeader.Status = TransHeader.Status::Open THEN  ReservEntry."Source Subtype" := 0 ;
        ReservEntry."Source ID" := TransHeader."No." ;
        ReservEntry."Source Batch Name" := '' ;
        IF TransHeader.Status = TransHeader.Status::Open THEN ReservEntry."Source Ref. No." := "Line No."
        ELSE ReservEntry."Source Prod. Order Line" := "Line No." ;
        //ReservEntry."Source Ref. No." := "Line No." ;
        ReservEntry."Shipment Date" := "Shipment Date" ;
        ReservEntry."Lot No." := "Lot No." ;
        IF TransHeader.Status = TransHeader.Status::Open THEN ReservEntry.VALIDATE("Quantity (Base)",-Quantity)
        ELSE ReservEntry.VALIDATE("Quantity (Base)",Quantity) ;
        IF TransHeader.Status = TransHeader.Status::Open THEN ReservEntry.Positive := Quantity < 0
        ELSE ReservEntry.Positive := Quantity > 0 ;
        IF ResEntryExist THEN
          BEGIN
            ReservEntry."Changed By" := USERID ;
            ReservEntry.MODIFY ;
            ReverseResEntry ;
          END
        ELSE
          BEGIN
            ReservEntry."Created By" := USERID ;
            IF ResTmp.FIND('+') THEN ;
            ReservEntry."Entry No." := ResTmp."Entry No." + 1 ;
            ReservEntry.INSERT ;
            ReverseResEntry ;
          END ;
    
        IF Status = Status::Released THEN
          BEGIN
            TransferLine.SETRANGE(TransferLine."Document No.","Document No.") ;
            TransferLine.SETRANGE("Derived From Line No.","Line No.") ;
            IF TransferLine.FIND('-') THEN
              BEGIN
                TransferLine."Transfer-to Code" := "Transfer-to Code" ;
                TransferLine.MODIFY ;
              END ;
          END ;
    
      END ;
    
  • SavatageSavatage Member Posts: 7,142
    here's a quote from the post
    Barcode Generator v2
    http://www.mibuso.com/forum/viewtopic.p ... 9&start=45
    Savatage wrote:
    wq wrote:
    However, my problem is that my scanner does not recognize these printed barcodes. When I tried to scan it, nothing was written or produced on my text editors (Notepad, Word, Excel, etc.). For your information, I use cheap "handheld barcode scanner" that is normally used in small retail shop.

    Most handheld scanners come with some kind of Decoder & Scanner Programming manual. These manuals "Teach" the scanner how to read different barcodes depending on what you need.

    For example we use little handhelds too
    http://www.pos-x.com/product.asp?prodid=11 nothing fancy, works great
    and the manual to "Teach" it,
    http://www.pos-x.com/downloads/Xi1000_p ... manual.pdf

    So what i would do is find the maker of your scanner - go to their website and get the manual if you do not have it & program your scanner to read the other types of barcodes.

    Or
    1)add the invoice# to your report header section
    2)Change the Font for that field to BC C39 3 to 1 Narrow
    3)install fonts on all computers that are going to print this report http://savatage99.googlepages.com/BarcodeFonts.zip
    4)change the SourceExp of your Invoice# field to something like
    '*' + "Sales Invoice Header"."No." + '*'

    note the *'s are needed on barcode3of9

    save, compile, print
    ps make sure you make the field a decent size too, something like
    width=4500
    Hight=1300

    good luck
Sign In or Register to comment.