Menu

Almost working - First Login Issues

Help
2007-12-13
2013-04-29
1 2 > >> (Page 1 of 2)
  • Marty Westra

    Marty Westra - 2007-12-13

    Windows XP
    Webware-0.9.4
    Pyro-3.7
    sndcs-2.0.6
    mySQL 4.1.12 located on different Linux box.
    Using web client for now.  Have not installed the client software.

    I was originally getting a "could not find NameServer".  Found out Pyro was installed, but not started.  Added them as services and now the NameServer and EventServer start fine.  I can query them just fine.

    The problem is now I'm getting the following error after I try to log in as the Administrator for the first time:

    NamingError: ('name not found', ':sndcs.Employee', 'This error occured remotely (Pyro). Remote traceback is available.')

    I do a query on the server for :sndcs and come up with no results.  I'm not real familiar with Python or Pyro, but I'm wondering is there something I need to do to get the :sndcs.* information initially gets loaded into the name server?

    Another issue I have.  I am unable to connect to the web server from any other computer on the network.  I'm assuming there is a setting somewhere that is blocking me from connecting.  (Windows XP firewall is turned off, no other firewall software installed on the machine)

    I'm impressed with the features and screenshots of this product and am looking forward to getting this thing up and running.  Any suggestions would be appreciated.  Let me know if you need any more info.

    Marty Westra
    Electronic Systems, Inc.
    Sioux Falls, SD

     
    • Seth Remington

      Seth Remington - 2007-12-13

      Hi Marty,

      I believe the problem is that the DCS Server isn't started. There are actually three services that need to be running on the server side. The Pyro NameServer and EventServer which you already have running and then the DCS Server (sndcsd) needs to be started which registers the :sndcs.* services with the name server as you suspected.

      If you installed from source on Windows it probably put the DCS Server (sndcsd) in the C:\PythonXX\Scripts directory. So, for example, you could run the command "python C:\Python25\Scripts\sndcsd" from a prompt.

      As for not being able to connect to the web server from another network take a look in the sndcsd.conf config file in the [web] section and change the parameter "host = 127.0.0.1"
      to be whatever the public IP address of the server is.

      Or you can rerun the configure_sndcs.py script and when it asks "What host should the HTTP server bind to?" put in the public IP address. Don't forget to run "python setup.py install" again if you do it this way.

      -Seth

       
      • Marty Westra

        Marty Westra - 2007-12-13

        Beautiful!  That fixed both of my issues.

        This looks very promising.  I think I can push in all the data from our current ERP system EXCEPT for one important field.....the Job Number.  We use alpha-numeric job numbers (ie. W12345ZB-01)  I know I can change the field type in mySQL, but will this be a problem elsewhere in the application?  I did find a validation in dcs_edit_jobs that I could remove.  Do you see any other major issues by changing this field?

        Thanks,
        Marty

         
        • Seth Remington

          Seth Remington - 2007-12-13

          The good news is that you should be fine. In fact, the field type for the "number" field in the JobHed table should already be a varchar(100) field. If you will only be importing jobs from your ERP then you will be fine. The only place where the validation is made is in dcs_edit_jobs as you have discovered and that is only so the auto numbering works if you were, say, only using DCS Web to create jobs. There is actually some prefix / postfix functionality already built into the DCS Web job creation where you can add static characters before or after the variable number portion (i.e. ABC10001XYZ) so the alphanumeric job "numbers" should work.

          -Seth

           
    • Marty Westra

      Marty Westra - 2007-12-14

      Seth,

      I'm working on pushing data in from my ERP system and looking over the table structures.  I see how most of the time, tables are linked together via "SerialNum" and "*ObjID".  Can you tell me what the "*ClassID" fields are for?  I'm not exactly sure what to populate in those fields.

      I know management is going to want me to explore the barcoding features of the product.  I haven't found a whole lot of information in the manuals on barcoding.  From what I gather, if I want a single swipe barcode, I need to make a " $ 1166 | s $ " (1166 being my employee number, removing the spaces and quotes.  I'm assuming this only works with the actual client.  Do I need to turn this feature on?  I was unable to get it to work.  I am using a standard keyboard wedge barcode scanner.  Do you have a list of all the codes that the client recognizes?

      Thanks,
      Marty Westra

       
      • Seth Remington

        Seth Remington - 2007-12-14

        Hi Marty,

        The *ClassID fields are imposed on the database structure by MiddleKit which is a piece of WebWare that acts as a middle man between your code and the database. MiddleKit assigns a unique ID to each "object" in the database schema (i.e. Employee, JobHed, etc...). You can see all of them in the _MKClassIds table. The good news is that the database schema defines the correct ID's as the default values of all of the *ClassID fields so you shouldn't have to explicitly put any values into them and they will always be correct.

        As far as the barcode format goes, Brian gave a good explaination. There is some documentation here --> http://sabernetdcs.sourceforge.net/docs/ADMINISTRATORS_GUIDE.html#barcode-format. Just make sure that your barcode scanner is sending the carriage return after each scan. The barcode scanning feature is always on... there's no way to turn it off. As long as the client has the focus it will process every keystroke that the window receives. There's no text entry box that you have to have selected when you scan or anything like that.

        -Seth

         
    • Brian Ellis

      Brian Ellis - 2007-12-14

      Hi Marty,

      I will let Seth answer the database question.

      In terms of barcoding, I might be able to help you out with that. That barcode format you have listed looks correct, that would be the employee clock-in/select barcode. If you want to test it, you can actually type that string in directly into the DCS client window. This is because DCS just responds to the keyboard input from the barcode scanner.

      So to start troubleshooting, I would do this. First, open another application like a text editor on the client system and scan the barcode in question. It should enter the text into Notepad. That will verify that the barcode is actually outputing the correct text (sometimes checksums will be off which may throw off the barcode).

      We have used quite a few of the Wasp Laser barcode scanners in the past, but I think we had to turn on the option for it to send a return after the barcode was sent (the manual for the barcode scanner had a list of configuration barcodes you could use). When you test it in notepad, you could tell this quickly if it goes to a new line or not. We have used code128 and code39 barcodes in the past.

      Seth will probably give you a much better answer as well for the available codes, but I will post what I remember.

      Again, no spaces, no quotes
      " $ <num> | s $ " - Clock in / select
      " $ <num> | o $ " - Clock out
      " $ <num> | b $ " - Emp break
      " $ <num> | l $ " - Emp lunch
      " * <job> | p * " - Start production job (employee has to be selected for anything starting with *)
      " * <job> | s * " - Start setup job
      " * <indirect> | i * " - Start indirect

      There is one to end activity as well, unfortunately I do not remember that one. Some of these you can also use in multiple ways. For instance, if you use the production job barcode on the selected employee screen, it will simply start that job. But if you use it on the production ganging screen, it will add jobs to the selected activities window. So you can scan a couple travelers on that screen to speed up ganged operation selection.

      I hope this helps.

      Thanks!
      Brian

       
    • Marty Westra

      Marty Westra - 2007-12-14

      I came across a couple other issues maybe you can help me with.

      First, line 52 in sndcs\web\lib\Reporting.py has a syntax error.  Missing the ":" after "if item_price".

      Second, I've got SOME of the barcodes working.  The Clock In/Select, Clock Out, Break, Lunch, Indirect all work fine.  I'm having problems selecting a job.  I have a job 100 and a barcode that shows " * 100 | p * " (no spaces, no quotes)  If I select myself, it takes me into the Current Activities screen for my employee number.  If I scan that barcode, it pops up a box saying it can't find that job.  I've checked and double checked to make sure it exists and it does.  If I watch the SQL that is being passed to mySQL, I get this:

      --------  SNIP  -------
      071214 14:30:54     272 Query       select serialNum,number,openDate,dueDate,priority,hidden,complete,completeStamp,completedByClassId,completedByObjId,customerClassId,customerObjId,itemClassId,itemObjId,itemNumber,itemDescription,qtyRequired,qtyComplete,qtyScrap from JobHed WHERE number='100'
                          272 Query       commit
                          287 Query       select serialNum,jobHedClassId,jobHedObjId,assemblyClassId,assemblyObjId,number,itemClassId,itemObjId,itemPrice,description,complete,completeStamp,completedByClassId,completedByObjId from Assembly where jobHedClassId=12 and jobHedObjId=1
                          287 Query       commit
      --------  SNIP  --------

      Now, if I run both of those queries directly in mySQL, I get the following results.  (These are really wrap funny)

      --------  SNIP  --------
      mysql> select serialNum,number,openDate,dueDate,priority,hidden,complete,completeStamp,completedByClassId,completedByObjId,customerClassId,customerObjId,itemClassId,itemObjId,itemNumber,itemDescription,qtyRequired,qtyComplete,qtyScrap from JobHed WHERE number='100';
      +-----------+--------+------------+------------+----------+--------+----------+---------------+--------------------+------------------+-----------------+---------------+-------------+-----------+------------+-----------------+-------------+-------------+----------+
      | serialNum | number | openDate   | dueDate    | priority | hidden | complete | completeStamp | completedByClassId | completedByObjId | customerClassId | customerObjId | itemClassId | itemObjId | itemNumber | itemDescription | qtyRequired | qtyComplete | qtyScrap |
      +-----------+--------+------------+------------+----------+--------+----------+---------------+--------------------+------------------+-----------------+---------------+-------------+-----------+------------+-----------------+-------------+-------------+----------+
      |         1 | 100    | 2007-12-14 | 2007-12-17 |        1 |      0 |        0 | NULL          |               NULL |             NULL |              11 |             1 |           6 |         1 | 100        | Test            |         100 |           0 |        0 |
      +-----------+--------+------------+------------+----------+--------+----------+---------------+--------------------+------------------+-----------------+---------------+-------------+-----------+------------+-----------------+-------------+-------------+----------+
      1 row in set (0.01 sec)

      mysql> select serialNum,jobHedClassId,jobHedObjId,assemblyClassId,assemblyObjId,number,itemClassId,itemObjId,itemPrice,description,complete,completeStamp,completedByClassId,completedByObjId from Assembly where jobHedClassId=12 and jobHedObjId=1;
      +-----------+---------------+-------------+-----------------+---------------+--------+-------------+-----------+-----------+-------------+----------+---------------+--------------------+------------------+
      | serialNum | jobHedClassId | jobHedObjId | assemblyClassId | assemblyObjId | number | itemClassId | itemObjId | itemPrice | description | complete | completeStamp | completedByClassId | completedByObjId |
      +-----------+---------------+-------------+-----------------+---------------+--------+-------------+-----------+-----------+-------------+----------+---------------+--------------------+------------------+
      |         1 |            12 |           1 |            NULL |          NULL | 10     |        NULL |      NULL |         2 | Test Item   |        0 | NULL          |               NULL |             NULL |
      +-----------+---------------+-------------+-----------------+---------------+--------+-------------+-----------+-----------+-------------+----------+---------------+--------------------+------------------+
      1 row in set (0.00 sec)
      --------  SNIP  -----------

      This would tell me that mySQL found the record requested, but the client doesn't pick it up.

      Any ideas?

      Marty Westra

       
      • Seth Remington

        Seth Remington - 2007-12-15

        Hi Marty,

        Thanks for the bug report. I believe that the issue in Reporting.py has already been fixed in CVS and should be in the upcoming 2.0.7 release.

        As for starting the job with the barcode it might help to explain that you really only ever log time onto Operations (not the JobHed or Assembly) so the data you pass in your barcode data has to resolve to a specific operation in the JobHed / Assembly / Operation hierarchy. So, if you pass *only* a JobHed number as in your example DCS has to make some assumptions about what the Assembly and Operation numbers are. You can see this code in the getOperationByJobAssemblyOperation() function in OperationFactory.py. You will see that the default assembly and operation numbers are "0" (this should ultimatily be configurable I would thin but it isn't right now) so in your example it is trying to find:

        JobHed: 100
        Assembly: 0
        Operation: 0

        I see in the MySQL data that the Assembly number it finds is "10" so that's where it is probably failing.

        You can fix this in one of three ways:
        1) be more explicit in the barcode data by specifying the assembly and operation number as well as the job number like this: *100-10-10|p* (the '-' separates the three pieces of data)
        2) Make your Assemblies and Operations (if you only have one) "0" in the database
        3) Change the code so that Assembly and Operation default to a different number (i.e. "10")

        I would recommend solution #1.

        -Seth

         
    • Marty Westra

      Marty Westra - 2007-12-14

      One suggestion, I'll probably try to fix this myself, but we have alot of Assemblies, Employees, and Customers.  The web client is REALLY slow when it has load 200+ employees or assemblies.  I think it should default to the search screen instead. 

      Just a suggestion.

      Marty Westra

       
      • Seth Remington

        Seth Remington - 2007-12-15

        Yes, you are correct. Unlike the client, DCS Web hasn't been optimized for speed very much. It is mainly intended for administrative functions. Your suggestions are good. I will add them as a feature request. Thanks.

        -Seth

         
    • Marty Westra

      Marty Westra - 2007-12-19

      Seth/Brian,

      I got the barcode thing working.  I'd have to say this thing works really slick!

      Now I'm working on getting data from our ERP system imported into Sabernet as well as reporting (using MS Access).

      A couple things that could really help:
      #1.  Do you have a document available with the database schema?
      #2.  Suggestions on importing data.  I don't plan to use the BOM, Pricing, Item, nor UOM functionality.  I definately plan to import Employees, Departments, Shifts, Customers, Assemblies, and Jobs.  I MIGHT want to import Operations as well.  What should be the order of import? 
      #3.  I noticed there is an assemblyObjId field in the Assembly table.  Am I correct to assume this is so you can re-link to the Assembly table for assemblies with sub-assemblies?

      I know management is going to ask me some questions as well, such as:
      #1.  How long has this software been available?
      #2.  Is it actively being developed?  (I think I know the answer to that)
      #3.  How many companies (that you know of) are currently using this software.

      I appreciate all your timely help.

      Marty Westra 

       
      • Seth Remington

        Seth Remington - 2007-12-19

        Hi Marty,

        Glad it is working well for you :)

        #1: You might want to take a look at the sndcs/sndcs.mkmodel/Classes.csv file in a spreadsheet program. It's probably the closest thing to a schema there is. Just don't make any accidental changes to it since it's actually used by MiddleKit at runtime.
        #2: I would do Departments and Shifts... then Employees and Customers... followed by Jobs / Assemblies / and Operations. You'll have to have some sort of operations (even if there's just a single default one per Assembly) since that's what you clock onto. Use the server proxy objects where you can (like the client does) but there are admittedly holes in the server for creating records since that is currently the function of DCS Web. Use the code in DCS Web as the model for how to create the records you need. Don't forget to send out events in addition to adding records to the database otherwise any currently running clients won't know that anything has changed.
        #3: Yes, you are correct. There's a note about it in the Classes.csv file mentioned above as well.

        #1: The very first version was released as open source software back in December of 2003
        #2: Yes, it is being actively developed. We use it every day at SaberLogic as a normal part of our operations so we are always looking for ways to improve it.
        #3: It's hard to know how many people are actually using it around the world. We have personally done full implementations and continuous support at five locations around the North East Ohio area with up to 150 employees (users) at a location. There are also a couple of other installs in the works. It doesn't seem like many but that's only in our geographic location. The total stats (http://sourceforge.net/project/stats/?group_id=97843&ugn=sabernetdcs&type=&mode=alltime) show a fair amount of downloads so I can only assume that others are using it as well.

        -Seth

         
        • Seth Remington

          Seth Remington - 2007-12-19

          Just out of curiosity... what ERP do you guys use?

          -Seth

           
          • Marty Westra

            Marty Westra - 2007-12-19

            We are currently implementing a new ERP system called Intuitive MRP by Consona.  Not the BEST ERP system out there, but it is geared towards manufacturing.  The main reason we purchased it is because it is written in VB.NET and Access (Access is being phased out to be 100% .NET).  The best part is that the source code is included.  We can customize any of its shortcomings.  We've been implementing this system for 2 years now, phasing it in one customer at a time.  Ready for it to be done and over with.  It is quite the challenge keeping both systems going.  January 14th, the last customer goes in.

            I do have to say it is a step up from our current ERP system, Inmass.  Inmass uses flat files and runs in DOS.  We've had it since 1989....I THINK we've got our return on investment.

            Marty

             
            • Seth Remington

              Seth Remington - 2007-12-19

              I'm not familiar with either of those ERP's but I have been through a couple of ERP implementations so I feel your pain ;) That's interesting that you get the source code. That would have come in handy for me more than a few times.

              -Seth

               
              • Marty Westra

                Marty Westra - 2007-12-19

                I'm not sure how much Saberlogic does with ERP systems or how much VB.NET work they do, but there might be some dollars out there.  You could charge to help with implementation and offer customization services.  There is a company somewhere in Canada, can't remember offhand, that specializes in Intuitive customizations.  I know we paid a local company here about $7000 for a .NET customization early on last year before we "knew what we were doing".

                Something to think about.

                Marty

                 
                • Seth Remington

                  Seth Remington - 2007-12-20

                  Hi Marty,

                  Thanks for the suggestion. We do work very closely with several ERP's (Visual Manufacturing, Vantage, and Baan) and have .Net programmers on staff. We also have a consultant that we work closely with who has worked with Intuitive before so we plan on talking with him about it soon.

                  Thanks again.

                  -Seth

                   
    • Marty Westra

      Marty Westra - 2007-12-23

      Seth,

      I have another feature request.  We've got about 200 employees.  We'd like to have our team leaders watch their people to make sure they are allocating all their time to a job.  It's tough to see their team at a glance to make sure they are all clocked in and assigned to a job.  It would be nice to have another column that shows their department.  You could then sort by department to keep all your team members together.

      Another option would be to just add the Department to the search list at the top of the screen.

      Thanks,
      Marty

       
      • Seth Remington

        Seth Remington - 2007-12-23

        Hi Marty,

        There's already a feature in DCS that *might* be close to what you are looking for although it might not be as flexible as you need. If you log into DCS Web and go to the "Admin" tab and then the "Terminal" tab you can define terminals that only show specific departments. (The terminal ID should match the terminal ID defines in your clients sndcs2.conf file). So if each of your team leaders has a DCS client installed on their computer you could set up their terminal to only display emplyees in the department(s) that they manage.

        Of course they wouldn't be able to walk up to any terminal and filter the active employee list by department which may be what you are looking for. The only logistical problem that I can't figure out how to make an extra "department" column to work properly is that an employee can belong to multiple departments. I'm not sure how I could accurately sort an employee who is a member of multiple departments.

        -Seth

         
    • Marty Westra

      Marty Westra - 2008-01-07

      After the holidays, I'm back at this again.

      I've successfully got all my data imported into Sabernet.  I've run into another snag though.

      Currently some of our Assembly numbers and Job numbers have "-"'s in them.  This poses a problem when using the barcode scanning function.  It can't determine which "-"'s are part of the Assembly and which ones are separators.

      Is there a way to change it to maybe a ":" instead?

      Thanks,
      Marty Westra

       
      • Seth Remington

        Seth Remington - 2008-01-08

        Hi Marty,

        In the future this should be a configurable option for exactly the reason that you are running into. For the time being it's going to require a one line code change. In the file 'sndcs/OperationFactory.py' look for the getOperationByJobAssemblyOperation() function. Add the line:

        separator = ':'

        at the top of the function and that should do it for you. I'll add the ability to change the separator character via the config file as a feature request.

        -Seth

         
      • Seth Remington

        Seth Remington - 2008-01-09

        I just thought to mention that when you import your data you may need to send out events in addition to just writing the data to the database. That is so that any active client will know that the data has changed (i.e. new operation). The reason is that when the client first starts up it gathers the current state of the system from the server (i.e. the data is pulled) but from that point on any updates come from events (i.e. the data is pushed). So an active client isn't going to know that there is a new operation out there unless it receives an "operation_add" event.

        You may be doing it already but I thought I would mention it.

        -Seth

         
        • Marty Westra

          Marty Westra - 2008-01-09

          My plans are to update my Jobs, Items, Operations, and Assemblies in the middle of the night.  There will be no clients connected at that time.  Once the shift starts at 7am, they will launch the client and get all the updates.

          In the wee hours of the morning, I will transfer all the labor for the day to our current labor reporting database.  I will then basically delete all Jobs, Items, Operations, Assemblies, LaborHed, and LaborDtl.  Re-upload all new data and start all over again.  If I have time, I might write something to just look for changes and update any records that have changed in Intuitive.  But for right now, this is the quick and dirty method.

          If a Job gets dropped in at the last minute, they will just add it manually using the web client.

          Marty

           
          • Seth Remington

            Seth Remington - 2008-01-09

            Sounds like a good plan.

            -Seth

             
1 2 > >> (Page 1 of 2)

Log in to post a comment.