Alpha Software Mobile Development Tools:   Alpha Anywhere    |   Alpha TransForm subscribe to our YouTube Channel  Follow Us on LinkedIn  Follow Us on Twitter  Follow Us on Facebook

Announcement

Collapse

The Alpha Software Forum Participation Guidelines

The Alpha Software Forum is a free forum created for Alpha Software Developer Community to ask for help, exchange ideas, and share solutions. Alpha Software strives to create an environment where all members of the community can feel safe to participate. In order to ensure the Alpha Software Forum is a place where all feel welcome, forum participants are expected to behave as follows:
  • Be professional in your conduct
  • Be kind to others
  • Be constructive when giving feedback
  • Be open to new ideas and suggestions
  • Stay on topic


Be sure all comments and threads you post are respectful. Posts that contain any of the following content will be considered a violation of your agreement as a member of the Alpha Software Forum Community and will be moderated:
  • Spam.
  • Vulgar language.
  • Quotes from private conversations without permission, including pricing and other sales related discussions.
  • Personal attacks, insults, or subtle put-downs.
  • Harassment, bullying, threatening, mocking, shaming, or deriding anyone.
  • Sexist, racist, homophobic, transphobic, ableist, or otherwise discriminatory jokes and language.
  • Sexually explicit or violent material, links, or language.
  • Pirated, hacked, or copyright-infringing material.
  • Encouraging of others to engage in the above behaviors.


If a thread or post is found to contain any of the content outlined above, a moderator may choose to take one of the following actions:
  • Remove the Post or Thread - the content is removed from the forum.
  • Place the User in Moderation - all posts and new threads must be approved by a moderator before they are posted.
  • Temporarily Ban the User - user is banned from forum for a period of time.
  • Permanently Ban the User - user is permanently banned from the forum.


Moderators may also rename posts and threads if they are too generic or do not property reflect the content.

Moderators may move threads if they have been posted in the incorrect forum.

Threads/Posts questioning specific moderator decisions or actions (such as "why was a user banned?") are not allowed and will be removed.

The owners of Alpha Software Corporation (Forum Owner) reserve the right to remove, edit, move, or close any thread for any reason; or ban any forum member without notice, reason, or explanation.

Community members are encouraged to click the "Report Post" icon in the lower left of a given post if they feel the post is in violation of the rules. This will alert the Moderators to take a look.

Alpha Software Corporation may amend the guidelines from time to time and may also vary the procedures it sets out where appropriate in a particular case. Your agreement to comply with the guidelines will be deemed agreement to any changes to it.



Bonus TIPS for Successful Posting

Try a Search First
It is highly recommended that a Search be done on your topic before posting, as many questions have been answered in prior posts. As with any search engine, the shorter the search term, the more "hits" will be returned, but the more specific the search term is, the greater the relevance of those "hits". Searching for "table" might well return every message on the board while "tablesum" would greatly restrict the number of messages returned.

When you do post
First, make sure you are posting your question in the correct forum. For example, if you post an issue regarding Desktop applications on the Mobile & Browser Applications board , not only will your question not be seen by the appropriate audience, it may also be removed or relocated.

The more detail you provide about your problem or question, the more likely someone is to understand your request and be able to help. A sample database with a minimum of records (and its support files, zipped together) will make it much easier to diagnose issues with your application. Screen shots of error messages are especially helpful.

When explaining how to reproduce your problem, please be as detailed as possible. Describe every step, click-by-click and keypress-by-keypress. Otherwise when others try to duplicate your problem, they may do something slightly different and end up with different results.

A note about attachments
You may only attach one file to each message. Attachment file size is limited to 2MB. If you need to include several files, you may do so by zipping them into a single archive.

If you forgot to attach your files to your post, please do NOT create a new thread. Instead, reply to your original message and attach the file there.

When attaching screen shots, it is best to attach an image file (.BMP, .JPG, .GIF, .PNG, etc.) or a zip file of several images, as opposed to a Word document containing the screen shots. Because Word documents are prone to viruses, many message board users will not open your Word file, therefore limiting their ability to help you.

Similarly, if you are uploading a zipped archive, you should simply create a .ZIP file and not a self-extracting .EXE as many users will not run your EXE file.
See more
See less

Here I am again, begging for help

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Here I am again, begging for help

    I have two tables in a set.
    PO_header.dbf and Orders.dbf. PO_header is the parent, Orders is the child, one to many linked on Vendor Name.

    When the operator wants to order items, they get "appended" to the Orders.dbf and just sit there. This works fine and am not looking to change this.

    Now: The PO_header table has an auto increment field called PO Number.
    It also has a vendor name field.

    I want a utility that will open the PO_header table, generate a new PO number with the auto increment feature, then go into the Orders table, find all the items with a field called "po_created" set to .f. and take each unique vendor name and post it to the PO_header, creating a new PO_header record for each unique vendor name with a PO_created = .f. Then, the PO_number created in PO_header should be added to the PO_NR field in the orders table and the PO_created field set to .t.

    So, create a new PO_header record, take the resulting PO_NR, go into ORDERS, find records with no PO_NR and PO_Created set to false, add the PO_number while taking the vendor name from ORDERS and posting it to PO_Header. Then, find the next set of records in ORDERS with a different vendor name and do the same until there are no more records in ORDERS that match the criteria of no PO_NR and no po created.


    If I can do that, I think I can take care of the dates, etc.

    Perhaps I'm trying to do it backwards?? If I could create the PO_NR in ORDERS, it would be easy. But, I can't use an auto increment field in a table with mutiple records matching the same criteria.

    I've asked for help with this before and only got confused with the generous offers. So, I'm asking again.

    I used to use the julien date for a PO number with the vendor ID appended to it. I created the PO number in both the ORDERS table and the PO_Header table. That worked fine unless the operator tried to place a second PO with the same vendor on the same day. then, the PO numbers were identical.
    Jim Belanger

    #2
    Re: Here I am again, begging for help

    You should have a linking field that has nothing to do with the PO nbr...........
    Al Buchholz
    Bookwood Systems, LTD
    Weekly QReportBuilder Webinars Thursday 1 pm CST

    Occam's Razor - KISS
    Normalize till it hurts - De-normalize till it works.
    Advice offered and questions asked in the spirit of learning how to fish is better than someone giving you a fish.
    When we triage a problem it is much easier to read sample systems than to read a mind.
    "Make it as simple as possible, but not simpler."
    Albert Einstein

    http://www.iadn.com/images/media/iadn_member.png

    Comment


      #3
      Re: Here I am again, begging for help

      You are referring to the SET linking field?
      Jim Belanger

      Comment


        #4
        Re: Here I am again, begging for help

        Originally posted by Beltronics View Post
        You are referring to the SET linking field?
        Originally posted by Beltronics View Post
        That worked fine unless the operator tried to place a second PO with the same vendor on the same day. then, the PO numbers were identical.
        So you solved this problem by generating a po number and then picking the children to add to it?

        It is difficult to follow the narrative of this.

        Linking by vendor name is not too good... What will you do when the vendor is purchased or changes their business name?

        Once you have a PO Nbr, don't you need to query for the child and then update those records with the PO that was just generated?
        Al Buchholz
        Bookwood Systems, LTD
        Weekly QReportBuilder Webinars Thursday 1 pm CST

        Occam's Razor - KISS
        Normalize till it hurts - De-normalize till it works.
        Advice offered and questions asked in the spirit of learning how to fish is better than someone giving you a fish.
        When we triage a problem it is much easier to read sample systems than to read a mind.
        "Make it as simple as possible, but not simpler."
        Albert Einstein

        http://www.iadn.com/images/media/iadn_member.png

        Comment


          #5
          Re: Here I am again, begging for help

          For what it's worth......?????

          I find it much easier to always use a character autoincrement id
          variable rather than use a character or number variable that users
          have access to. Names can be used as indices to search for a vendor or a
          customer, but once the proper end is reached, I transfer to the
          id number. All my sets are linked only by id numbers that cannot
          be accessed or changed by users.

          Just info for you
          D

          Comment


            #6
            Re: Here I am again, begging for help

            Here is a sample that I think does what you want.

            The 'utility' is on the code tab. The header table is empty and there are a few records in the order table. check them out first. then run the only script on the code tab.

            The set uses the po_nr as the link.

            Add some more order records and run the script again.
            Tim Kiebert
            Eagle Creek Citrus
            A complex system that does not work is invariably found to have evolved from a simpler system that worked just fine.

            Comment


              #7
              Re: Here I am again, begging for help

              Wow, this has possibilities. Let me try and change the names you assigned to match the ones in my table and see if it works for me. It sure works in your example (there was never any doubt), but then you are the pro. I'm trying to follow your code as best I can.
              Jim Belanger

              Comment


                #8
                Re: Here I am again, begging for help

                Tim
                I modified your code to fit my tables, ran the script, got no errors but it didn't post anything. I copied my tables to your application and tried to run it there with the same results. Can you look at it?
                Jim Belanger

                Comment


                  #9
                  Re: Here I am again, begging for help

                  Jim,
                  Tim's code has the table field names of his table. You have to replace the field names for your table to get his code to run with your tables.

                  line 16: tord.query_create("TN",".not. Po_created","Vendor_name")
                  line 28: tpohd.order_date = date()
                  line 29: tpohd.Vendor_name = thisvendor
                  line 31: thisPOnum = tpohd.Po_nr
                  line 41: tord.Po_nr = thisPOnum
                  Mike W
                  __________________________
                  "I rebel in at least small things to express to the world that I have not completely surrendered"

                  Comment


                    #10
                    Re: Here I am again, begging for help

                    Thanks but, I thought I did that. Those field names in red (in your message) are my field names, not his. I'm not sure what the "TN" is in his code though so I left that alone. I compared his two tables with mine and change his field names to mine.
                    Jim Belanger

                    Comment


                      #11
                      Re: Here I am again, begging for help

                      Jim,
                      I believe only the line 16 name was not correct, which would have stopped the code from running. I believe it was only as vendor and not vendor_name.

                      With that changed I do get an error running it. It ran for me when I took out the validation for the vendor_name field in the PO_header table and made line 16 order by "vender_name" instead of "vendor". The TN are query.order codes (look up <tbl>.query_create() in the docs and it tells you).
                      Mike W
                      __________________________
                      "I rebel in at least small things to express to the world that I have not completely surrendered"

                      Comment


                        #12
                        Re: Here I am again, begging for help

                        I see. I saw "Vendor" and thought it was referring to the Vendor Table.
                        Let me work with that for a bit.

                        I made that change. When I ran it, I got no error message but no results either.

                        More:
                        When I copied MY vendor table to Tim's application, overwriting his vendor table, then the code worked.
                        It didn't "set" the create_dtf and change_dtf field but I think my "can save record" field rule will take care of that.
                        At least I have something to work with now.
                        Last edited by Beltronics; 04-03-2009, 10:03 AM. Reason: Test results
                        Jim Belanger

                        Comment


                          #13
                          Re: Here I am again, begging for help

                          Here's the new attempt.

                          I need to work on posting the Create_dtf and change_dtf fields in the PO_Header table but I think this will work for me now.

                          I don't know why the field rule for record events, CanSaveRecord isn't working??

                          tc = table.current()
                          tc.change_dtf = date()

                          'used only if a *script* creates the record but doesn't include the creation date: (i.e., in case I mess up)
                          'it may not be the correct create_dt but at least it won't remain blank forever.
                          IF tc.create_dtf = {}
                          tc.create_dtf = date()
                          END IF
                          Jim Belanger

                          Comment


                            #14
                            Re: Here I am again, begging for help

                            OK
                            This is working with the following exceptions.
                            Somehow, when I create a new PO_Header record,

                            I need to
                            put date() in the field called [create_dtf],
                            put date() in the field called [change_dtf],
                            put .f. in the field called [complete].

                            Everything else is working.
                            Jim Belanger

                            Comment


                              #15
                              Re: Here I am again, begging for help

                              Hi Jim,

                              I see Mike has been getting you sorted. I found exactly the same things as he did and did the same as he to get things working.

                              It is good to see we are making progress.
                              I need to
                              put date() in the field called [create_dtf],
                              put date() in the field called [change_dtf],
                              put .f. in the field called [complete].
                              the simple answer is to just add the setting of these fields in the header enter section of the code.
                              Code:
                                  tpohd.enter_begin()
                                  tpohd.order_date = date()
                                  tpohd.Vendor_name = thisvendor
                                  tpohd.create_dtf = date()
                                  tpohd.change_dtf = date()
                                  tpohd.complete = .f.
                                  tpohd.enter_end()
                              Another way which I tried and seems to work in this case is to add the optional logical parameter to the enter_begin function.
                              Code:
                                  tpohd.enter_begin([B][COLOR=Red].t.[/COLOR][/B])
                                  tpohd.order_date = date()
                                  tpohd.Vendor_name = thisvendor
                                  tpohd.enter_end()
                              This parameter is meant to enforce the UI level field rules but only if the table pointer is that of a currently open layout. See the help for .Enterbegin().

                              It seems though in this case to be triggering the default value field rules.

                              I have had mixed results with this parameter in the past and have gotten in the habit of doing all that needs doing within any code that adds records in a non user interface situation like this.
                              Tim Kiebert
                              Eagle Creek Citrus
                              A complex system that does not work is invariably found to have evolved from a simpler system that worked just fine.

                              Comment

                              Working...
                              X