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

Error Handler

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

    Error Handler

    I know it's a bear to follow someone elses script when it's more than several lines long, but, I using A5's Commit/Rollback in the below listed script to post an invoice register to vendor files and to the General ledger. The outer while loop posts to vendors (Vendbal.dbf) and the inner while loop is posting the GL (GLbal.dbf). I've removed additional code which moves records to appropriate history files and sets milestones, etc. for readability. I'm using Commit/Rollback to insure integrity amoung the tables.

    In testing the routine, I locked a vendor record using the A5V5 beta, switched back to A5V4 (build 243), and ran the post. All was well, and either all records posted or none. In the second test, I locked a GL account in the same fashion and again ran the posting routine.

    The error handler triggered and warned that the table was in use (I suspect this warning is being generated by the fetch method being employed on a table in change mode). On releasing the msg box by pressing the "OK" button, I get a second expected message that a portion of the file is in use (namely the record I knowingly have locked). I then switch to A5V5 beta and release the record, switch back to A5V4 and again press the "OK" button to complete the posting operation. At this point the script executes to completion.

    But on checking the tables, I find that the lock record never posts.

    Because of the sequence of error messages, and the failed posting, it seems that the "Resume 0" statement is returning the script to the line immediately *AFTER* the offending line instead of the offending line.
    Any help...thoughts...suggestions, appreciated.

    option nobreak
    a = table.open("apinvset.set")
    b = table.get("apinvdtl")
    c = table.open("vendbal")
    d = table.open("ApTrans")
    e = table.open("Glbal")
    f = table.open("sy02")

    c.index_primary_put("Vendprd")
    e.index_primary_put("Acctprd")
    f.index_primary_put("PDDate")

    a.fetch_first()
    while .not. a.fetch_eof()
    f.fetch_find(a.postprd)
    vndkey = a.vendid + a.postprd
    if exist(vndkey,"Vendbal","Vendprd") then
    c.fetch_find(vndkey)
    c.change_begin()
    commit_flag = .t.
    on error goto ERROR
    c.amount = c.amount + a.invamt
    else
    c.enter_begin()
    commit_flag = .t.
    on error goto ERROR
    c.fiscalyr = substr(a.postprd,3,4)
    c.vendno = a.vendid
    c.postprd = a.postprd
    c.begprd = f.beg_date
    c.endprd = f.end_date
    c.amount = a.invamt
    end if

    b.fetch_first()
    while .not. b.fetch_eof()
    vglkey = remspecial(b.glno) + a.postprd
    if exist(vglkey,"Glbal","Acctprd") then
    e.fetch_find(vglkey)
    e.change_begin()
    e.amount = e.amount + b.amt
    e.change_end(commit_flag)
    else
    e.enter_begin()
    e.fiscalyr = substr(a.postprd,3,4)
    e.acctno = remspecial(b.glno)
    e.postprd = a.postprd
    e.begprd = f.beg_date
    e.endprd = f.end_date
    e.amount = b.amt
    e.enter_end(commit_flag)
    end if
    b.fetch_next()
    end while

    if c.mode_get() = 2 then
    c.enter_end(commit_flag)
    elseif c.mode_get() = 1 then
    c.change_end(commit_flag)
    end if

    a.fetch_next()
    end while

    a.close()
    c.close()
    d.close()
    e.close()
    f.close()
    end

    ERROR:
    commit_flag = .f.
    err = error_code_get()
    msg = error_text_get(err)
    ui_msg_box("Error",msg)
    resume 0

    Thanks,
    -Balto Cpa

    #2
    RE: Error Handler

    As you say, it's hard to follow someone else's code, so
    I may have this wrong, but your error handler is setting c
    commit_flag to .f., so you enter_end(commit_flag) will fail.
    There is no rollback in A5 - only a cancellation of the
    commit.

    Comment


      #3
      RE: Error Handler

      Thanks Peter,
      You're right about the rollback, the cancellation is the closest we have in A5 to a rollback. However, I discovered (through no particular brillance) that the placement of the ON Error Goto statement is the key to having this work. I simply loaded up the script with numerous On Error Goto's and started deleting them after the script was working correctly. The revised script works as advertised. I know the script is hard to follow, but just note the placement of the On Error Goto's to have the script function correctly. This placement seems to have the Resume 0 command return correctly, albeit, I know not why!

      option nobreak
      a = table.open("apinvset.set")
      b = table.get("apinvdtl")
      c = table.open("vendbal")
      d = table.open("ApTrans")
      e = table.open("Glbal")
      f = table.open("sy02")

      c.index_primary_put("Vendprd")
      e.index_primary_put("Acctprd")
      f.index_primary_put("PDDate")

      a.fetch_first()
      while .not. a.fetch_eof()
      f.fetch_find(a.postprd)
      vndkey = a.vendid + a.postprd
      if exist(vndkey,"Vendbal","Vendprd") then
      c.fetch_find(vndkey)
      c.change_begin()
      commit_flag = .t.
      ON ERROR GOTO Error
      c.amount = c.amount + a.invamt
      else
      c.enter_begin()
      commit_flag = .t.
      ON ERROR GOTO Error
      c.fiscalyr = substr(a.postprd,3,4)
      c.vendno = a.vendid
      c.postprd = a.postprd
      c.begprd = f.beg_date
      c.endprd = f.end_date
      c.amount = a.invamt
      end if

      b.fetch_first()
      while .not. b.fetch_eof()
      vglkey = remspecial(b.glno) + a.postprd
      if exist(vglkey,"Glbal","Acctprd") then
      e.fetch_find(vglkey)
      e.change_begin()
      commit_flag =.t.
      ON ERROR GOTO Error
      if b.amt

      Comment


        #4
        RE: Error Handler

        You shouldn't need all your ON ERROR GOTO ERROR statements. A single ON EROROR GOTO [i]label should remain in effect until it is turned off
        with an ON ERROR GOTO 0 statement.
        There is also a command - I forget it at present - that will
        give you the line number of the error. That would be useful
        to you in figuring out what triggers the ON ERROR GOTO and then you
        can use the debugger to see if, in fact, the RESUME 0 statement
        is returning you to the wrong place. I have generally found thta the ON ERROR GOTO and RESUME statements work just fine.

        Usually I do this, though, in error trapping:

        Code:
        on error goto err_trap
        t=table.open("mytable",file_rw_exclusive)
        on error goto 0
        t.fetch_first()
        ..etc.
        t.close()
        end
        
        err_trap:
        on error goto 0
        ui_msg_box("File in use","Try later")
        end
        That is, I turn off the error trap as soon as I pass
        the line in which I want it to work. That way I avoid an
        endless loop if another error pops up. It also helps me to
        pinpoint each error.

        Comment


          #5
          RE: Error Handler

          Thanks, Peter,
          I'll experiment with it a little and try your suggestion on turning off the error trap.

          Comment

          Working...
          X