<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4483660544838804247</id><updated>2012-02-12T20:07:37.664Z</updated><category term='application data'/><category term='Picture Frame Pricing program'/><category term='FATG'/><category term='Access'/><category term='UAC'/><category term='cloud storage'/><category term='programming'/><category term='history'/><category term='frame pricing algorithms'/><category term='Mac'/><category term='Editing Database'/><category term='Full-time v Part-time programmers'/><category term='Windows'/><category term='New product'/><category term='The Spring Fair'/><category term='SafeSync'/><category term='gui'/><category term='networking'/><category term='stock control'/><category term='mdb file'/><category term='vista'/><category term='database schema'/><category term='Picture Frame pricing'/><title type='text'>Picture Frame Pricing Programs</title><subtitle type='html'>This blog is about developing the &amp;quot;Wessex Pricing Programs&amp;quot;, with in-depth consideration of why features work as they do, as well as the history &amp;amp; future development.
Mostly the blog will be about &amp;quot;Wessex Professional&amp;quot; (WPP4) the most sophisticated of the four programs.
I am by profession a bespoke picture framer (for the last 30 + years). But I have been interested in programming since Sinclair Spectrum days and have become a passable programmer in Visual Basic.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-6692938437311166689</id><published>2012-02-07T17:32:00.001Z</published><updated>2012-02-12T20:07:37.670Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SafeSync'/><category scheme='http://www.blogger.com/atom/ns#' term='The Spring Fair'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud storage'/><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>Wessex Professional and the Cloud</title><content type='html'>Back from the NEC and the buzz word there was "Cloud" &amp;amp; will the program work with it? My honest answer was "I don't know."&lt;br /&gt;&lt;br /&gt;For those not in the know the Cloud refers to files held on a remote server which are accessed via the internet by a local computer. For instance, GMail emails are held on a remote server and are looked at by the user from whichever computer they happen to be on.&lt;br /&gt;&lt;br /&gt;So, while Wessex Professional has always been able to use a networked database (say one computer in the shop, which talks to another in the workshop). What happens if there are 2 shops miles away from each other? You can't use wifi, you can't use a wired network, you need some way of putting the database file on a remote server and allowing the 2 (or more) computers to access it.&lt;br /&gt;&lt;br /&gt;For a number of years now I've been using remote backup storage to protect my important files. This is done automatically and the remote server appears as a "network location" on my computer. The system I use is called "SafeSync" by Trend Micro&lt;br /&gt;(&lt;a href="http://uk.trendmicro.com/uk/products/personal/safesync-solution/index.html"&gt;&amp;nbsp;http://uk.trendmicro.com/uk/products/personal/safesync-solution/in&lt;/a&gt;&lt;a href="http://uk.trendmicro.com/uk/products/personal/safesync-solution/index.html"&gt;dex.html&lt;/a&gt;.)&lt;br /&gt;There are also other companies - have a look at -&amp;nbsp;&lt;a href="http://www.thetop10bestonlinebackup.com/cloud-storage"&gt;http://www.thetop10bestonlinebackup.com/cloud-storage&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I experimented with putting a test database file on the server and told the program to use it as the networked database. I found that it could be read and modified as easily as a database file on a traditional network.&lt;br /&gt;There's the answer then, but it's worth bearing some things in mind - your internet connection needs to be pretty solid (if it goes down you won't be able to access your data). On the other hand the file is safer on the remote server than on your own computer (servers are much more reliable than your personal pc.).&lt;br /&gt;&lt;br /&gt;As usual, thank you to all the people I met at the Spring Fair and in particular for your fresh ideas.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-6692938437311166689?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/6692938437311166689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2012/02/wessex-professional-and-cloud.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/6692938437311166689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/6692938437311166689'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2012/02/wessex-professional-and-cloud.html' title='Wessex Professional and the Cloud'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-5862259096847065502</id><published>2011-11-27T13:51:00.001Z</published><updated>2011-12-02T16:01:04.675Z</updated><title type='text'>New goodies for Christmas</title><content type='html'>At the last NEC Spring Fair (2011) I confidently expected that we had the definitive version of Wessex Professional. I'd even started on the groundwork of a&amp;nbsp;completely new program (which at the moment goes by the highly original name of "WPP6"), but it wasn't to be. As usual it was customer feedback that provided the spur. "Why can't the program do x?" or "It would be nice if it did y." or worse "Surely it's incorrect when it does z." So, development has continued and the result (instead of being held until the NEC 2012) has just been posted on the &lt;a href="http://www.wessexpictures.com/"&gt;Wessex&lt;/a&gt; website (25/11/11).&lt;br /&gt;The new version is 4.2.0 and I thought it might be good to look at the new features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-96hk_mVIr2U/TtJWjc3OVOI/AAAAAAAAAOU/9Sx4BlcE4Z0/s1600/ScreenHunter_02+Nov.+27+15.25.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-96hk_mVIr2U/TtJWjc3OVOI/AAAAAAAAAOU/9Sx4BlcE4Z0/s320/ScreenHunter_02+Nov.+27+15.25.jpg" width="185" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;You can now view the breakdown of the price (ie. Frame = £xx.xx, Mount = £xx.xx, Glass = ... and so on. (See above)&lt;/li&gt;&lt;li&gt;The main form has been resized so it fits onto Netbook screens better.&lt;/li&gt;&lt;li&gt;Reading from the database is better coded (instead of using similar code&amp;nbsp;on each form&amp;nbsp;to read from the database, the code is in a database Object in one place - easier to maintain, more efficient and reliable).&lt;/li&gt;&lt;li&gt;If a moulding is not in the database you can enter "GUEST" in the moulding box and then tell the program the width and the wholesale cost per metre. Now - the program remembers those 2 figures, so if the customer wants prices with different glass, for instance, you don't have to keep entering the width and cost each time you give a price ( as you had to previously).&amp;nbsp;&lt;/li&gt;&lt;li&gt;In the full version when creating or editing the mountboard records you can now enter the RGB colour value of the board for a more accurate printout of the colour. Of course you have to know what that value is in the first place! (I think we might be ahead of the mountboard suppliers here).&lt;/li&gt;&lt;li&gt;Again in the full version, you can save the Invoice as a PDF, so you can email it to the customer if needed.&lt;/li&gt;&lt;li&gt;An image (BMP, JPEG or TIF) can be used as a letterhead for the Invoice (full version only).&lt;/li&gt;&lt;li&gt;This is the big one - customers have been crying out for this and we've listened! You've always been able (in the full version) to use the Excel files from the Wessex website to update all the Wessex &amp;amp; Frinton moulding records (over 2,000 of them). This feature has now been extended to the Basic version. (see the screenshot below)&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-m10-xYw2q1Q/TtJURwwDD9I/AAAAAAAAAOM/QHTSafAHt1g/s1600/ScreenHunter_01+Nov.+27+15.14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/-m10-xYw2q1Q/TtJURwwDD9I/AAAAAAAAAOM/QHTSafAHt1g/s320/ScreenHunter_01+Nov.+27+15.14.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Also there have been lots of little "fiddley" changes. For instance, when printing an invoice the program will now put a full stop after "Mr" or "Mrs", but not after "Lord or Lady", or say you have 5 jobs on one invoice and the customer decides not to go ahead with number 3, instead of ending up with Job 1, 2, 4, 5, they are now renumbered 1 to 4.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, a Christmas present to all our users. Go to the &lt;a href="http://www.wessexpictures.com/"&gt;Wessex&lt;/a&gt; website and download this (free) update. Make sure you've made a copy of your database &amp;amp; labels/values files. Install and &lt;strike&gt;marvel&lt;/strike&gt; enjoy!&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-5862259096847065502?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/5862259096847065502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2011/11/new-goodies-for-christmas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/5862259096847065502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/5862259096847065502'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2011/11/new-goodies-for-christmas.html' title='New goodies for Christmas'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-96hk_mVIr2U/TtJWjc3OVOI/AAAAAAAAAOU/9Sx4BlcE4Z0/s72-c/ScreenHunter_02+Nov.+27+15.25.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-2795747966609969277</id><published>2011-11-01T14:45:00.001Z</published><updated>2011-11-01T14:45:27.336Z</updated><title type='text'>Just think about it people!</title><content type='html'>Some ideas are awfully seductive and really look the business, that is until you actually have a think about what the implications are.&lt;br /&gt;One of those is the idea that a frame pricing program could produce a price from your hourly rate. Gosh, that sound good doesn't it? So, if you award yourself a pay rise, all you have to do is up the hourly rate.&lt;br /&gt;&lt;br /&gt;Let's examine this for a moment. -&lt;br /&gt;In order for the program to produce the price it has to know how long it takes you to do&amp;nbsp;various jobs. Now I've been a framer for 35 years and still find that sometimes (with a following wind) I can cut a mount in under 10 minutes from start to finish, whereas other times it can take well over half an hour, because&amp;nbsp;(choose one or more) there was a mark on the board, the customer's work was measured wrongly, there was a mistake in the maths, the wrong colour was used&amp;nbsp;etc. etc.&lt;br /&gt;Multiply that by all the other items that go into making up a frame and this hourly rate idea doesn't look quite so good.&lt;br /&gt;Also, different staff members are likely to take different times to perform the various jobs. One might be able to cut and join frames really quickly, but take an age to fit up the work. Sure, a program could be written that could cope with all that, but it would be so complex as to be unworkable.&lt;br /&gt;&lt;br /&gt;As for the idea of awarding yourself a pay rise by upping the hourly rate, well it just doesn't work like that. - Your wage rises come from extra profit, and that isn't achieved by making a change in a computer program. It comes from extra turnover and/or higher quality framing. It's something that needs to be&amp;nbsp;actively planned and worked for.&lt;br /&gt;&lt;br /&gt;All the above is why the Wessex Pricing Program works from the other end of the price - the price charged to the customer. It makes setting up the program much simpler and copes with many of the pricing&amp;nbsp;anomalies that&amp;nbsp;creep into framing. It also makes you the framer take&amp;nbsp;responsibility for your prices and not abdicate that responsibility to a computer program.&lt;br /&gt;&lt;br /&gt;So, in conclusion, if you are the sort of framer who turns out frames like widgets on a factory production line and enjoys fiddling with computers - go for the hourly rate option, the real framers amongst us know better.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-2795747966609969277?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/2795747966609969277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2011/11/just-think-about-it-people.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2795747966609969277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2795747966609969277'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2011/11/just-think-about-it-people.html' title='Just think about it people!'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-1726801899647449614</id><published>2011-07-25T17:17:00.007+01:00</published><updated>2011-10-10T17:03:51.881+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Picture Frame pricing'/><category scheme='http://www.blogger.com/atom/ns#' term='FATG'/><title type='text'>Frame Pricing Talk</title><content type='html'>&lt;!--[if !mso]&gt; &lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:relyonvml/&gt;   &lt;o:allowpng/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves&gt;false&lt;/w:TrackMoves&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-GB&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin-top:0cm;  mso-para-margin-right:0cm;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Arial","sans-serif";  mso-fareast-language:EN-US;} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapedefaults ext="edit" spidmax="2050"&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapelayout ext="edit"&gt;   &lt;o:idmap ext="edit" data="1"&gt;   &lt;o:rules ext="edit"&gt;    &lt;o:r id="V:Rule1" type="connector" idref="#_x0000_s1027"&gt;   &lt;/o:rules&gt;  &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;  &lt;p style="color: rgb(255, 255, 102);" class="MsoNormal"&gt;&lt;span style="line-height:115%; mso-thememso-themetint:166font-size:9.0pt;" &gt;Transcript of talk given to Wessex Branch of FATG by Stephen Hible GCF., 28/06/11.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;        &lt;span style="font-size:14.0pt;mso-bidi-line-height: 115%font-size:11.0pt;" &gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:14.0pt;mso-bidi- line-height:115%font-size:11.0pt;" &gt;Why is Frame Pricing so important? &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I hope I don’t disappoint too many of you if I reveal the ending of this talk now, - there is no magic formula for pricing, you won’t go away with the problem solved. But, I hope you’ll go away with some ideas and a renewed confidence in setting your pricing strategy.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This coming September will mark my 35&lt;sup&gt;th&lt;span style="mso-spacerun:yes"&gt;  &lt;/span&gt;&lt;/sup&gt;year in the framing industry, since I got my Fine Art degree I’ve had no other job. But I still get up in the morning and look forward to the day’s work (most of the time!) I’m sure, however long you’ve been a framer, you feel the same too. We aren’t framers because we want to make money. We’re framers because we love the job. That means that perhaps we’re prepared to lower our price for a job because we really want to do it. In turn, that means our margins are dragged down, so we make even less money. So, if we haven’t set our prices at a sufficiently generous level in the first place, we’re going to enter that downward spiral which is very difficult to get out of. I’ve heard of a framer charging £50 to frame a Rugby shirt and still being prepared to reduce the price if the customer was unsure!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The effect of increasing versus decreasing prices is very marked. As the maths shows us the only sensible way to go is to increase prices. General discounting is a complete no-no, we’ll never compete with Ikea or Wilkinson’s and I, for one, wouldn’t want to.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Note the ”number sold” line which increases &amp;amp; decreases with the price changes. &lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;table class="MsoNormalTable" style="width:365.9pt;margin-left:4.65pt;border-collapse:collapse;mso-yfti-tbllook:  1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt" border="0" cellpadding="0" cellspacing="0" width="488"&gt;  &lt;tbody&gt;&lt;tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;height:14.7pt"&gt;   &lt;td colspan="2" style="width:186.85pt;   padding:0cm 5.4pt 0cm 5.4pt;height:14.7pt" nowrap="nowrap" valign="bottom" width="249"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:   &amp;quot;Times New Roman&amp;quot;;mso-bidi-mso-fareast-language:   EN-GBfont-family:Calibri;color:black;"  &gt;Effect of price increase/decrease&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;padding:0cm 5.4pt 0cm 5.4pt;   height:14.7pt" nowrap="nowrap" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:center;line-height:normal" align="center"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GB;mso-no-proof:yesfont-family:Calibri;color:black;"  &gt;                                                                                          &lt;/span&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:   &amp;quot;Times New Roman&amp;quot;;mso-bidi-mso-fareast-language:   EN-GBfont-family:Calibri;color:black;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width:60.3pt;padding:0cm 5.4pt 0cm 5.4pt;   height:14.7pt" nowrap="nowrap" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:center;line-height:normal" align="center"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GB;mso-no-proof:yesfont-family:Calibri;color:black;"  &gt;       &lt;/span&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:   &amp;quot;Times New Roman&amp;quot;;mso-bidi-mso-fareast-language:   EN-GBfont-family:Calibri;color:black;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width:58.45pt;padding:0cm 5.4pt 0cm 5.4pt;   height:14.7pt" nowrap="nowrap" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:center;line-height:normal" align="center"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GB;mso-no-proof:yesfont-family:Calibri;color:black;"  &gt;       &lt;/span&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:   &amp;quot;Times New Roman&amp;quot;;mso-bidi-mso-fareast-language:   EN-GBfont-family:Calibri;color:black;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:1;height:18.35pt"&gt;   &lt;td style="width:128.35pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="171"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width:58.5pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width:60.3pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;+10% &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;+100%&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:red;"   &gt;-10%&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:2;height:18.35pt"&gt;   &lt;td style="width:128.35pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="171"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;Sell for&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.5pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;100&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;110&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;200&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;border:none;   border-right:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;90&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:3;height:18.35pt"&gt;   &lt;td style="width:128.35pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="171"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;Cost of manufacture&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.5pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;80&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;80&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;80&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;border:none;   border-right:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;80&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:4;height:18.35pt"&gt;   &lt;td style="width:128.35pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="171"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;Profit&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.5pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;20&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;30&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;padding:   0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;120&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;border:none;   border-right:solid windowtext 1.0pt;mso-border-left-alt:solid windowtext .5pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;10&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:5;height:18.35pt"&gt;   &lt;td style="width:128.35pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="171"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;Number sold&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.5pt;border-top:none;   border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-bottom-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;250&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border-top:none;   border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;   mso-border-bottom-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;225&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border-top:none;   border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;   mso-border-bottom-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;62&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;border-top:none;   border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;   mso-border-bottom-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   padding:0cm 5.4pt 0cm 5.4pt;height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt;275&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:6;height:21.45pt"&gt;   &lt;td style="width:128.35pt;background:yellow;   padding:0cm 5.4pt 0cm 5.4pt;height:21.45pt" nowrap="nowrap" valign="bottom" width="171"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:16.0pt;color:black;"   &gt;Total Profit&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.5pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-top-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;background:   yellow;padding:0cm 5.4pt 0cm 5.4pt;height:21.45pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:16.0pt;color:black;"   &gt;5000&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;background:   yellow;padding:0cm 5.4pt 0cm 5.4pt;height:21.45pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:16.0pt;color:black;"   &gt;6750&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;border:none;border-right:   solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:   solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;background:   yellow;padding:0cm 5.4pt 0cm 5.4pt;height:21.45pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:16.0pt;color:black;"   &gt;7440&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;border:none;   border-right:solid windowtext 1.0pt;mso-border-top-alt:solid windowtext .5pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-top-alt:solid windowtext .5pt;   mso-border-left-alt:solid windowtext .5pt;mso-border-right-alt:solid windowtext .5pt;   background:yellow;padding:0cm 5.4pt 0cm 5.4pt;height:21.45pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:16.0pt;color:black;"   &gt;2750&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="mso-yfti-irow:7;mso-yfti-lastrow:yes;height:18.35pt"&gt;   &lt;td style="width:128.35pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="171"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;% change&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.5pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height:   normal"&gt;&lt;span style="font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;   mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;mso-bidi-   mso-fareast-language:EN-GBfont-family:Calibri;font-size:14.0pt;color:black;"   &gt; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="width:60.3pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;+35.00%&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:60.3pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="80"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:black;"   &gt;+48.80%&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width:58.45pt;padding:0cm 5.4pt 0cm 5.4pt;   height:18.35pt" nowrap="nowrap" valign="bottom" width="78"&gt;   &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;   text-align:right;line-height:normal" align="right"&gt;&lt;span style="   font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;   mso-bidi-mso-fareast-language:EN-GBfont-family:Calibri;font-size:12.0pt;color:red;"   &gt;-45.00%&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;                                                      &lt;/p&gt;&lt;table style="color: rgb(255, 255, 51);" cellpadding="0" cellspacing="0" width="100%"&gt;    &lt;tbody&gt;&lt;tr&gt;     &lt;td&gt;     &lt;div&gt;     &lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="mso-theme     mso-themeshade:127"&gt;“When you put up prices, the clients you lose will be     mean, penny-pinching pondlife. Buying on price, they will be disloyal     clients from hell, making unreasonable demands yet not valuing your     service. You do not need them. I for one say Good riddance!”&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align:right" align="right"&gt;&lt;i&gt;&lt;span style="line-height:115%;mso-theme     mso-themeshade:127font-size:10.0pt;" &gt;Source – ABT, April 2011&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;     &lt;/div&gt;     &lt;/td&gt;    &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;      Increasing prices means that we will have more time to do the job, therefore we can do it better. We can afford to use better materials, spend more time with the customer and enjoy doing the work.&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Another effect of increasing prices is that the better materials can produce the profit without being marked up as much. For example - a piece of specialist glass might cost you £10, doubling up will give you another £10, but standard glass might be £3 for the same size – double up and you’ve still only made £3. I know which I’d rather have!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Because you can have more time with the customer you have more time to show the possibilities. I’m not talking “hard-sell” – specialist glass, rag mountboard &amp;amp; stylish mouldings, when presented properly, all sell themselves.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Obviously your prices must be based on the economics of your business – your hourly rate. This is going to be more if you are a high-street business with large overheads, as opposed to someone with a workshop at home. However, a high-street business is going to get a lot more work than someone hidden away, so it is more likely to fill all the available hours with productive work (making frames &lt;u&gt;and&lt;/u&gt; talking to customers). &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Working out how long it takes to do a job, like cutting a mount or joining a frame, and then applying the hourly rate is also not as easy as it would first seem. Sometimes the job just “flows” other times you have to “fight” the job all the way. So, I always maintain that “board brush strokes” are required when setting down the individual costs, some you’ll win, a few you’ll lose – make sure it’s that way round.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height:115%;font-size:14.0pt;" &gt;How do you price your frames?&lt;/span&gt; That’s a rhetorical question and I know there are many answers. I’ve even had a framer tell me that he doesn’t give a price right away, but rings the customer in the evening after he’s worked out all the quantities etc.! I’ve also heard of a framer who looked at peoples shoes – the more expensive the shoe the more expensive the frame!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;In years gone-by most would have said “A two-way table”. &lt;a name="_GoBack"&gt;&lt;/a&gt;That was fine 20 years ago. Today people have different expectations. Now, customers expect to see computers in businesses. Computers are “trusted” (If the computer has produced the price it must be right. You can’t argue with a computer).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;This is good, because working out the cost of framing is a repetitive calculation. You just need the dimensions, type of moulding, glass, mount and sundries – add the individual costs up – add on VAT and there’s your price. It’s the type of work a computer loves, in fact I’d say they are as happy as a pig in .... muck!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;But as with all things “the devil is in the detail”. We need to allow for wastage, for the mitres. It would be good to have a warning if we need oversized mountboard or glass, or if a moulding is out of stock. It would be even better if you could just show the things you actually do. For instance you might want to list “V Grooves” under mounts, but not “Deep Bevel”, or “Football Shirts” but not “Medals”.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;It’s possible to do all that (and more) but the trick is to make the layout of the program logical, simple, with as few buttons to click as possible. After all you need to spend your time with your customer, not with the computer. You are the reason the customer is there, not your computer. There are many programs out there for framers, but sadly most have been designed by someone who has never made a frame in their life.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Another requirement for a pricing program is - that the way it works out the price should be reasonably easy to understand, so &lt;u&gt;you&lt;/u&gt; can set it to the prices &lt;u&gt;you&lt;/u&gt; want to charge. That is going to be different if you are in Merthyr Tydfil to if you are working in an affluent home counties town. I believe that it is one of our responsibilities as business people to set the prices we charge, not abdicate that responsibility to a computer program. As a writer of one of those programs I can’t and I shouldn’t tell you what prices you should charge – that’s for you and your business. But I can make sure that those prices are easy and quick to issue, as well as being consistent and that the parameters used to work out the price are accessible and transparent. &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Another thing that is just nuts to a computer is to take that price it’s just issued and record it as a job in a database together with customer details and so on. This means that, whilst you may want to work on paper tickets as the job goes through the workshop, – you don’t need the store the paper for if the customer comes back next year and wants the same frame/mount etc. (also much easier on a computer to find, than sorting through a pile of crumbling work tickets). Once the jobs are in the database it’s so easy to produce a list of what you should be doing and in what order. No more jobs that have been put away “safely”, only to be forgotten about until the customer comes back!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So, I hope I’m convincing you that a computerised system is the way to go, and of course I hope you are all going to buy “Wessex Professional” which is the program I have on my computer here. However when you do look at the various systems ask yourself –&lt;span style=""&gt;&lt;span style=""&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;1. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Does the program look professional? For instance the IPhone just oozes “professional” before you’ve even touched it&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;2. Is it easy &amp;amp; straightforward to use? Could anyone use it to issue a price&lt;/p&gt;          &lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;3.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Is it understandable how to change the parameters to reflect your prices?&lt;br /&gt;&lt;/p&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;4. Are you going to be paying for features you don’t need? For instance, you probably won’t need access to obscure German supplier pricelists, or the ability to run the program in Swedish!&lt;br /&gt;&lt;br /&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;5. Will the system the program imposes on you fit in with the way you run your business?By that I mean – if you haven’t used a computerised system before you’ll be going from something with a high human input to a system with a high machine input which will impose certain ways of doing things. This is where a program written by someone who has actually made a frame stands out.    &lt;p class="MsoListParagraphCxSpMiddle" style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;6.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Is it going to be easy to get support? Even with all the help files (&amp;amp; Wessex Professional comes with a comprehensive set of “How To” videos as well as the usual Help files) you are still likely to have questions and problems to be sorted out as you come to grips with your new “toy”.&lt;/p&gt;    &lt;p class="MsoListParagraphCxSpLast" style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"&gt;&lt;span style="mso-fareast-;font-family:Arial;" &gt;&lt;span style="mso-list:Ignore"&gt;7.&lt;span style="font:7.0pt &amp;quot;Times New Roman&amp;quot;"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;/span&gt; Lastly, will the system cope with an unforeseen type of job? - Wessex Professional has the ability to enter any moulding that is not in its database as well as any Extra Cost (with or without Vat).&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left:18.0pt"&gt;To finish up talking (before I demonstrate the program to those who are interested) I have to thank a whole bunch of framers who I’ve met and who use Wessex Professional. Their input has shaped the development of the program – for instance the ability to issue prices in whole pounds came from a customer request. They have also helped iron out errors and bugs (there are something like 12,000 lines of program code) as well as making suggestions so the program “flows” more easily.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left:18.0pt"&gt;Thanks for listening.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom:0cm;margin-bottom:.0001pt;line-height: normal;mso-layout-grid-align:none;text-autospace:none"&gt;&lt;span style="color:#595959;mso-thememso-themetint:166font-size:13.0pt;color:text1;"  &gt;©&lt;/span&gt;&lt;span style="MS Shell Dlg&amp;quot;,&amp;quot;sans-serif&amp;quot;;color:#595959; mso-thememso-themetint:166font-family:&amp;quot;;font-size:8.5pt;color:text1;"   &gt; S. T. Hible, 2011&lt;/span&gt;&lt;/p&gt;  &lt;!--[if !mso]&gt; &lt;style&gt; v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:relyonvml/&gt;   &lt;o:allowpng/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves&gt;false&lt;/w:TrackMoves&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-GB&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="&amp;#45;-"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Table Normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0cm 5.4pt 0cm 5.4pt;  mso-para-margin-top:0cm;  mso-para-margin-right:0cm;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0cm;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Arial","sans-serif";  mso-fareast-language:EN-US;} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapedefaults ext="edit" spidmax="2050"&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:shapelayout ext="edit"&gt;   &lt;o:idmap ext="edit" data="1"&gt;   &lt;o:rules ext="edit"&gt;    &lt;o:r id="V:Rule1" type="connector" idref="#_x0000_s1027"&gt;   &lt;/o:rules&gt;  &lt;/o:shapelayout&gt;&lt;/xml&gt;&lt;![endif]--&gt;  &lt;p style="color: rgb(204, 204, 204);" class="MsoNormal"&gt;&lt;span style="line-height:115%; mso-thememso-themetint:166font-size:9.0pt;color:#595959;"  &gt;Transcript of talk given to Wessex Branch of FATG by Stephen Hible GCF., 28/06/11.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-1726801899647449614?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/1726801899647449614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2011/07/frame-pricing-talk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/1726801899647449614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/1726801899647449614'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2011/07/frame-pricing-talk.html' title='Frame Pricing Talk'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-398957779019510755</id><published>2011-06-11T14:04:00.002+01:00</published><updated>2011-06-11T15:01:31.780+01:00</updated><title type='text'>Creating a bulk update file</title><content type='html'>A number of people have seen that Wessex Professional can perform a bulk update of all the Wessex &amp;amp; Frinton moulding records and have asked me if that can be done for other suppliers too?&lt;br /&gt;&lt;br /&gt;Well, to quote Evelyn Waugh "Upto a point, Lord Copper."&lt;br /&gt;First of all think about why you want the whole of a supplier's range in your database. With Wessex mouldings you can order just one length on your weekly delivery, what is the minimum quantity you'll need to order from a different supplier? Can you use the "Guest" option for a moulding you don't stock? (This is where you type "GUEST" into the moulding box and the program will ask you the width and the wholesale cost/metre and work out the price.)&lt;br /&gt;Also, if you've added, say, a thousand records you are going to need to keep them upto date.&lt;br /&gt;&lt;br /&gt;If you do decide you need to use a bulk update file here's how to create one.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;An Excel spreadsheet (it must be .xls, so in Office 2007 onwards choose Save As &amp;amp; Excel 97 - 2003 workbook).&lt;/li&gt;&lt;li&gt;The worksheet must be titled "gen" not "Sheet 1", so right-click the title (at the bottom of the sheet) and choose Rename.&lt;/li&gt;&lt;li&gt;The worksheet must include the following column titles - "Reference" (this is the supplier's number. "Description" ("1/2" Cushion Black" for example). "Price/mtr" (wholesale price in pounds &amp;amp; pence per metre) and "Width" (in Mm.)&lt;/li&gt;&lt;li&gt;The name of the file is saved as the supplier's name in your database &amp;amp; "mouldings" (so you could save the file as "Arqmouldings" or "Arqadiamouldings", depending how you've titled the supplier in your database).&lt;/li&gt;&lt;/ol&gt;Well, that's the file, what about the data? Most supplier's seem to have a spreadsheet of their mouldings - it's just a question of getting it in the right form. For instance their Width colunm may be in Cm rather than Mm, but it's easy enough to use Excel to make the changes.&lt;br /&gt;Another problem I've come across is a row missing some data. This will cause the update to fail, (if it does simply delete the offending row and try again).&lt;br /&gt;&lt;br /&gt;How does this all come together in Wessex Professional? - Choose "Setup" &amp;gt; "Options", then click on the "Database" tab.&lt;br /&gt;Click on "Bulk Update from File" (top right).&lt;br /&gt;In the next screen you will see the Wessex &amp;amp; Frinton logos, below them a box with "other" in it. Replace "other" with the title of your supplier you want to update (eg "Arq" or "Arqadia", the "mouldings" bit will be automatically added).&lt;br /&gt;Select whether you want to add all records or just update the ones already in your database.&lt;br /&gt;If you are not VAT registered tick the "Add VAT to price" option.&lt;br /&gt;Now click "OK". You'll be asked to find the update file, select it and let the program do the rest.&lt;br /&gt;&lt;br /&gt;Phew! It's not that bad really, but I would suggest that it's only worth doing the above for mouldings you can easily get hold of.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-398957779019510755?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/398957779019510755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2011/06/creating-bulk-update-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/398957779019510755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/398957779019510755'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2011/06/creating-bulk-update-file.html' title='Creating a bulk update file'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-5056611056554688653</id><published>2010-12-16T17:35:00.004Z</published><updated>2010-12-29T10:43:06.376Z</updated><title type='text'>A year of Wessex Professional</title><content type='html'>Well, with the new year looming and the showcase of the 2011 SpringFair at the NEC just over the horizon it seems a good time to review how things have gone with Wessex Professional that was released at the SpringFair 2010.&lt;br /&gt;I'm pleased to say that the program has been very well received with comments and suggestions all positive ones. The feedback I get from clients really does help to make the program easier to use and smooths any rough edges. It also sorts out any mistakes or glitches too.&lt;br /&gt;&lt;br /&gt;As an example, the version of the program to be shown at the NEC will be 4.1.2. These last changes came from a conversation with a client who uses the "Guest" moulding facility a lot.&lt;br /&gt;For those who haven't come across this feature - if the moulding is not in the database the user can type "Guest" in the moulding box and a form will appear (when "Total Price" is clicked) asking for the width and price/mt. to use. The program can then work out the cost as usual.&lt;br /&gt;&lt;br /&gt;Because I don't use this very often I hadn't really thought out the process and had ended up with something that was a bit "clunky".&lt;br /&gt;The client pointed out that the amount of the Guest moulding needed wasn't printed on the workticket and that if you changed something on the main form you had to enter the Guest details all over again each time you clicked "Total Price".&lt;br /&gt;She also revealed that there was a discrepancy between the quantity shown through the main form and that shown on the workticket. Oh, and by the way it would be good if when you started entering the customer details at various points in the program the name shown was at the top of the list (rather than the bottom) so you could see if you had more that one of the same name in the database, (fairly obvious with "Smith" or "Jones" but less so with, say, "Younger").&lt;br /&gt;&lt;br /&gt;After getting over the "Why didn't I think of that?" A fortnight later the a new version of the program was made that - Corrected the quantity problem, showed the Guest quantity on the workticket, made it so you didn't have to enter Guest details over and over, put the customer name you were seeking at the top of the list and, while I was about it, I made it so if you were scrolling through the worktickets or mouldings and selected a record after you closed that record you are now returned to where you had scrolled to, rather than the top of the list. Phew!&lt;br /&gt;&lt;br /&gt;I really feel that I can go on the stand at the NEC in Feb. and say that Wessex Professional is the best, most straightforward, most user-friendly pricing/database program for framers on the market today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-5056611056554688653?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/5056611056554688653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2010/12/year-of-wessex-professional.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/5056611056554688653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/5056611056554688653'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2010/12/year-of-wessex-professional.html' title='A year of Wessex Professional'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-54832175358811606</id><published>2010-09-23T15:41:00.007+01:00</published><updated>2010-10-25T17:49:51.550+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='application data'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='UAC'/><title type='text'>Vista &amp; Win 7 - revisited</title><content type='html'>I've already posted about changes needed for post XP operating systems (ie. Vista &amp;amp; Windows 7). There was, however, an elephant in the room - namely UAC (User Access Control) introduced with Vista.&lt;br /&gt;Now UAC has a lot of aspects, but from a programmer's point of view a major one is needing administrator privileges to write to (make changes to) the Program Files folder. Now, a programmer has a nice warm feeling when all the files that their program needs are in one folder (Program Files &gt; Wessex Pictures in my case). It means they are easy to keep track of and in Windows XP there was no problem setting up your program this way (though whether it was the recommended way is another matter).&lt;br /&gt;Most programs, and the Wessex Pricing Programs are no exception, need to record settings a user makes to configure the program for their use. As far as Wessex Premier &amp;amp; Professional are concerned this includes the labels/values file and the database file itself. Both of these files get written to (ie. changed) a large number of times while the program is in use.&lt;br /&gt;So, these files needed to be set up in another location. The "My Documents" folder is really just too easy to change or "fiddle" with. Microsoft have provided a number of folders that could be used and the one I selected was the Common Application Data folder.&lt;br /&gt;Theoretically, all I had to do was change the sub-routine that returned the path to the Wessex Pictures Program Files folder to point to the Common Application Data folder. Too easy you're thinking - and of course it was. The problem is that in the CommonAppData folder there is a Wessex Pictures folder and within that a WPP4 folder &lt;span style="font-weight: bold;"&gt;and&lt;/span&gt; within that a folder for each "build" of the program, with the code that returns the path to the CommonAppData returning the path to that "build" folder. So what's the problem? Well, if the user installs an updated version of the program it will use a new "build" folder, but the database &amp;amp; user files will be in the previous folder. What is needed is to modify the code to return the folder up from the one returned by the straightforward code (ie. site the files outside the build folders, but&lt;span style="font-weight: bold;"&gt; inside&lt;/span&gt; the WPP4 folder. (see screenshot)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_H0ipjJ2jvog/TJuDn0W4QOI/AAAAAAAAANQ/Hid8gQuAyVs/s1600/ScreenHunter_02+Sep.+23+17.36.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 310px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/TJuDn0W4QOI/AAAAAAAAANQ/Hid8gQuAyVs/s400/ScreenHunter_02+Sep.+23+17.36.jpg" alt="" id="BLOGGER_PHOTO_ID_5520150488365416674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In the above screenshot you can see there are 3 build folders, with the data files outside of them, but within the WPP4 folder.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That crucial line of code is -&lt;br /&gt;Dim dirPathParent As DirectoryInfo = Directory.GetParent(Application.CommonAppDataPath)&lt;br /&gt;&lt;br /&gt;It's the "Directory.GetParent" bit that does the business. As with all simple things it took a bit of working out, I couldn't find that anyone else had posted about the problem. What started as some quite elaborate code which searched the folders for the specific files, compared their dates and then moved the latest ones to the new folder, turned into just one extra line.&lt;br /&gt;&lt;br /&gt;All that was needed now was some tricky "If" statements checking if the data files were in the old location but not the new location, Then copy the files over. This ensured that users updating the program weren't involved in complex file copying in places they didn't know existed on their computer.&lt;br /&gt;&lt;br /&gt;Does it work? It was with some trepidation I installed the update at work (after all it's one thing working in the programming environment and quite another using and letting others use the program for real). I double-clicked the icon on the desktop - the program started and I quickly checked through the database &amp;amp; values - it was all there, pheeew!&lt;br /&gt;This will be the version (4.1.0) that will, finally, be on the Wessex Pictures website for download.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-54832175358811606?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/54832175358811606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2010/09/vista-win-7-revisited.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/54832175358811606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/54832175358811606'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2010/09/vista-win-7-revisited.html' title='Vista &amp; Win 7 - revisited'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H0ipjJ2jvog/TJuDn0W4QOI/AAAAAAAAANQ/Hid8gQuAyVs/s72-c/ScreenHunter_02+Sep.+23+17.36.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-1464193529568350271</id><published>2010-06-30T20:52:00.004+01:00</published><updated>2010-08-13T21:38:52.070+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stock control'/><title type='text'>Stock control - does it work?</title><content type='html'>It's that time of year again, and my "favourite" job - stock taking! But it does mean that I've got a chance to check the stock figures produced by the program (WPP3 or WPP4) against the true moulding stock.&lt;br /&gt;Now you've only got to think a moment to realise that trying to keep track of moulding stock with a computer program is fraught to say the least.&lt;br /&gt;On the face of it all the program has to do is work out how much moulding it's going to use for a particular job (plus, perhaps, a percentage waste), and take that off the existing stock figure - simples?!&lt;br /&gt;Well, no, actually.&lt;br /&gt;First of all the database of mouldings has to be updated each time more stock comes in.&lt;br /&gt;Then how do you account for warped or damaged moulding? You could unwrap each length and carefully inspect it, but, unless you wrap it up again, you're asking for the unwrapped moulding to be scraped, scratched or worse.&lt;br /&gt;Lastly, the moulding could be from different batches which are not compatible. Try telling the program that!&lt;br /&gt;Of course it would be possible to write the program to take account of all the problems, but I think that it would make things so complex that no one would bother trying to keep the stock figure correct.&lt;br /&gt;So, the Wessex Programs tries to keep the stock control simple, keeping it is easy to understand. But this does mean that common-sense also has to be used to keep the figures adjusted and up to date. With a little application you'll find that the moulding stock part of the program is more of a help than a hindrance. I'll give two instances&lt;br /&gt;&lt;ol&gt;&lt;li&gt; When you give a price the program looks at the moulding stock figure. If that figure is less than the low stock threshold (I have mine set at 3 Mt - roughly 1 length) then a warning is flashed up, so you know to check the actual stock before committing to a completion date.&lt;/li&gt;&lt;li&gt; If you are ordering from a particular supplier you can look at the "Low Stock" list in the mouldings database. This shown by supplier so you can see other mouldings to order, perhaps making up a carriage paid order rather than a piecemeal series of orders.&lt;/li&gt;&lt;/ol&gt;And did the annual stock-take come up with figures close to what the program thought should be there?&lt;br /&gt;Well, surprisingly close, and what was even better - after the upto date figures had been entered the total value of the stock was there already worked out saving hours with a pen and calculator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-1464193529568350271?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/1464193529568350271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2010/06/stock-control-does-it-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/1464193529568350271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/1464193529568350271'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2010/06/stock-control-does-it-work.html' title='Stock control - does it work?'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-6713520753790372132</id><published>2010-03-30T12:00:00.003+01:00</published><updated>2010-03-30T14:43:21.701+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Will it run on a Mac?</title><content type='html'>I guess the most common question we get asked about the Wessex Pricing Programs is "Will it run on a Mac?"&lt;br /&gt;The short answer is "No.".&lt;br /&gt;The long answer is "Very probably.".&lt;br /&gt;&lt;br /&gt;The problem is that the Mac operating system and the Windows operating system are very different from each other. They won't recognise each other's files or know how to execute them. Things have got a little easier now that Apple has moved to an Intel processor, but there is still a big gulf between the systems (and, for that matter, Linux, a third system, but see the footnote at the end for that.)&lt;br /&gt;&lt;br /&gt;Now, before we go any further, I will nail my colours to the mast and say that I've never used a Mac, so all that follows is from a Windows perspective and I apologise now if I've got anything wrong.&lt;br /&gt;&lt;br /&gt;It seems that there are three main ways of getting a Windows program to run on a Mac.&lt;br /&gt;The first is "dual boot". This means that both Windows and the Mac operating systems are on the computer, and you have to choose one or the other when the computer starts. (I believe there is a utility on the Mac called "Boot Camp" that assists with this.) There are two obvious problems with this - a) you can't easily switch between systems, b) you have to buy both systems.&lt;br /&gt;&lt;br /&gt;The second way is "Virtualisation". This means you can have Windows running within the Mac system and can switch quite easily between the two. However, you still need to have a full copy of Windows, and the "VM" (virtual machine) software is not the easiest thing in the world to use.&lt;br /&gt;&lt;br /&gt;Now we come to the third way - software that will translate the Windows code into something the Mac will understand.&lt;br /&gt;This is where a program like "Crossover Mac" comes in (http://www.codeweavers.com/products/cxmac/  ) Although I haven't used it myself, I have looked at the details and it seems to tick the right boxes. There's a free trial to check that it will actually work and it's reasonably priced if you do decide to buy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;At the beginning of this post I mentioned another operating system - Linux. This comes in lots of varieties, the most popular at the moment being "Ubuntu". The reason I mention it is that it's very secure (based on the Unix mainframe system) and it's &lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;free&lt;/span&gt;&lt;span style="font-size:85%;"&gt; (together with most of its software).  As long as you are just using standard office type tasks the system is easy to use. There are the same problems getting Windows programs to run as with a Mac, and the same solutions exist. There is a program called "Crossover Linux" and also a free solution "Wine" - I must get tinkering!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-6713520753790372132?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/6713520753790372132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2010/03/will-it-run-on-mac.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/6713520753790372132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/6713520753790372132'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2010/03/will-it-run-on-mac.html' title='Will it run on a Mac?'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-5454429692310646516</id><published>2010-02-16T08:10:00.010Z</published><updated>2010-03-02T21:26:33.628Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>Networking</title><content type='html'>I thought that it would be useful to write a post detailing the steps to  prepare Wessex Premier &amp;amp; Professional to work over a network.&lt;br /&gt;&lt;br /&gt;I've suggested in the Help files that networking is still very much a "Dark Art" and even with the coming of Windows 7 I haven't changed that view. There are just too many obscure acronyms and settings for most normal people. So, you might find it advantageous for your sanity to have a network expert to actually get the computers "talking" to each other.&lt;br /&gt;&lt;br /&gt;When I talk about networking these programs I'm assuming, say, a computer in the shop and another in the workshop, certainly not more than five computers anyway.&lt;br /&gt;&gt;As far the Wessex Professional &amp;amp; Wessex Premier are concerned the concept is as follows – There is a “Master” computer (usually the one which will issue the prices &amp;amp; print off the invoices), this will hold the database file to be used over the network. The Master computer is networked to one or more “Slave” computers, they also have a copy of the program installed. But instead of using their own database the “Use network database” box is ticked, the path to the master computer's database is recorded and that file used instead&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer; width: 400px; height: 287px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/S413LMm1FhI/AAAAAAAAAGA/oP_E6wktMBc/s400/Network.jpg" alt="" id="BLOGGER_PHOTO_ID_5444138558807152146" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;  &lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;&lt;/style&gt;All this is achieved by-&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install the program on each computer (you will need an enabling code from Wessex for each one.&lt;/li&gt;&lt;li&gt;On the master computer navigate to "All Programs" - "Accessories" - "Windows Explorer". Then, on the left hand pane (in Windows Explorer) go to "My Computer" - "C:" - "Program Files" - "Wessex Pictures". Right-click on this folder, then select "Sharing &amp;amp; Security". Tick "Share this folder on the network", also select the permissions you want (ie. whether the slave computers(s) can modify the files). Click "Apply".&lt;/li&gt;&lt;li&gt;On each of the slave computers tick the "Use networked database" box (in "Setup" - "Options"). Then click the "... locate network database." label. With the dialog box - on the left hand pane select "My Network Places" and the shared folders will appear. Double-click the Wessex Pictures folder, keep double-clicking until a screen with 6 folders (4 in Wessex Premier) and a file titled "V3" appear. Highlight "V3", then click "Open". The dialog closes and the path to the database is shown (it will be something like "\\main\wessex pictures\Wessex Professional\V3.mdb")&lt;/li&gt;&lt;li&gt;Click "Save" on the Options form and close it. The slave computer will now use the master computer's database.&lt;/li&gt;&lt;/ol&gt;Phew! That's it (The above is using Windows XP, the steps are similar in other versions of Windows).&lt;br /&gt;&lt;br /&gt;NB. The labels and values in all the computers should be the same. This is easily achieved by going to "Values"  and clicking "Backup" on the master computer, and copying the file (User.xml) to a memory stick. Then, on the slave computer(s)  going to "Values" and clicking "Restore" and copying that file onto them.&lt;br /&gt;&lt;p&gt;&lt;/p&gt; &lt;style type="text/css"&gt;  &lt;!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm } &lt;/style&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-5454429692310646516?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/5454429692310646516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2010/02/networking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/5454429692310646516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/5454429692310646516'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2010/02/networking.html' title='Networking'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H0ipjJ2jvog/S413LMm1FhI/AAAAAAAAAGA/oP_E6wktMBc/s72-c/Network.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-8131994137051071143</id><published>2010-01-08T21:07:00.006Z</published><updated>2010-06-30T21:04:28.364+01:00</updated><title type='text'>"I didn't know you could do that."</title><content type='html'>Some tips &amp;amp; tricks that make Wessex Premier easier to use.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use the "Tab" key to move from box to box on the main form - its been designed to move in a logical order and is quicker than using the mouse.&lt;/li&gt;&lt;li&gt;After clicking "Total Price" hold the cursor over the Moulding ID box and it will give you the Supplier &amp;amp; the Supplier Number - the new WPP4 will also show the quantity needed and how much is in stock too.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Moulding not in the database? - Type "GUEST" into the Moulding ID box, then when you click "Total Price" you will be asked for the width (in Mm) &amp;amp; price (per Mt.) and the program will work out the price.&lt;/li&gt;&lt;li&gt;Want to give the customer a special price? In the new WPP4 you can double-click the total price box and then enter the agreed price (it will be shown in &lt;span style="color: rgb(0, 153, 0);"&gt;green&lt;/span&gt; as a prompt, and &lt;span style="color: rgb(0, 0, 153);"&gt;blue&lt;/span&gt; if the minimum charge has been applied).&lt;/li&gt;&lt;li&gt;Using the "Enter" (Return) key is the same as clicking "Total Price", but quicker.&lt;/li&gt;&lt;li&gt;Press the "Esc" key to clear the form, again quicker than using the mouse.&lt;/li&gt;&lt;li&gt;"Alt" + "R" is the same as pressing the "Reset" button in Wessex Premier &amp;amp; the Full version of WPP4.&lt;/li&gt;&lt;/ol&gt;All that goes to make the Wessex Pricing Programs the easiest &amp;amp; quickest to use of any frame pricing program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-8131994137051071143?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/8131994137051071143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2010/01/i-didnt-know-you-could-do-that.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/8131994137051071143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/8131994137051071143'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2010/01/i-didnt-know-you-could-do-that.html' title='&quot;I didn&apos;t know you could do that.&quot;'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-2981033923201524605</id><published>2009-12-04T08:00:00.012Z</published><updated>2010-01-08T21:35:51.671Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Picture Frame Pricing program'/><category scheme='http://www.blogger.com/atom/ns#' term='New product'/><title type='text'>New Program</title><content type='html'>I'm pleased to reveal that after 2 years development Wessex Premier Professional will be released at the Spring Fair in February 2010 at the NEC.&lt;br /&gt;It's a major redesign of Wessex Premier, as well as being two programs in one. You can start off with the Basic version which issues prices and just uses the Mouldings part of the database. Then, when ready, you can upgrade to the Full version which keeps track of Work Tickets, Invoices and so on. All the records, labels and values from the Basic version are carried across thus making upgrading as painless as possible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H0ipjJ2jvog/SxoTZfuROnI/AAAAAAAAAFI/xbrOiTYVXYE/s1600-h/WPP4Bmainform.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 212px; height: 400px;" src="http://3.bp.blogspot.com/_H0ipjJ2jvog/SxoTZfuROnI/AAAAAAAAAFI/xbrOiTYVXYE/s400/WPP4Bmainform.jpg" alt="" id="BLOGGER_PHOTO_ID_5411659230972295794" border="0" /&gt;&lt;/a&gt;Above is a screenshot of the main form of the Basic version.&lt;br /&gt;The main form of the Full version will be familiar to all who know the original Wessex Premier. Its layout has proved to be easy to use and understand as well as being versatile.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H0ipjJ2jvog/SxoUrjjWkbI/AAAAAAAAAFQ/jJuPWbFl6SA/s1600-h/WPP4Fmainform.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 246px; height: 400px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/SxoUrjjWkbI/AAAAAAAAAFQ/jJuPWbFl6SA/s400/WPP4Fmainform.jpg" alt="" id="BLOGGER_PHOTO_ID_5411660640749523378" border="0" /&gt;&lt;/a&gt;The Full version has many new features, which I won't detail here except to say that none of the features have been included for their own sake - they all help to make the program quicker, more productive and easier to use.&lt;br /&gt;&lt;br /&gt;For those of you interested in the technical details - The program has been written in VB 2008, and uses the .Net Framework 2.0. This enables the program to be restarted programmatically, and I don't need to use a third party control for the menustrip customization.&lt;br /&gt;Perhaps the bit I'm most pleased with is something you hardly notice - the buttons, I haven't counted but there must be about 50 of them in the program. Previously the graded shading on them was achieved calling a sub-routine every time the control was "painted" (ie. many time a second). Now I've written a custom control which does this and more (the lettering moves to indicate the button has been clicked and a dotted line appears when the button "has focus"). By including this new control the final compiled program was some 25% smaller, all contributing to the efficiency of the new program.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We've been using this new version of Wessex Premier in our shop since the summer and have been really pleased, I certainly wouldn't go back to the previous version.&lt;br /&gt;So I look forward to talking about it to people at the Spring Fair.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-2981033923201524605?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/2981033923201524605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/12/new-program.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2981033923201524605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2981033923201524605'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/12/new-program.html' title='New Program'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_H0ipjJ2jvog/SxoTZfuROnI/AAAAAAAAAFI/xbrOiTYVXYE/s72-c/WPP4Bmainform.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-4855066976685507792</id><published>2009-10-31T21:30:00.008Z</published><updated>2009-11-01T16:30:18.152Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Access'/><category scheme='http://www.blogger.com/atom/ns#' term='mdb file'/><category scheme='http://www.blogger.com/atom/ns#' term='Editing Database'/><title type='text'>A Database tweak</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Fiddly things databases - just when you think you have everything just so, something else comes along to upset the balance.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;I recently came across one such hiccup (or a least potential hiccup) in the "Mouldings" table of the Wessex Premier database. &lt;/div&gt;&lt;div style="text-align: left;"&gt;The field "Supplier No" is structured not to allow duplicates. Now 99.9% of the time this will make no difference at all, in fact it can be very useful as it means that the mouldings which are duplicated between Wessex &amp;amp; Frinton cannot be duplicated in the program's database records. However, it could be that 2 different suppliers use the same number, or the user may want to show both the Wessex and the Frinton records.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, how to solve the problem? I tried various programmatic solutions, but none worked consistently. So, given that most users probably wouldn't want to change the database file, what's the answer for those that do?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You'll need to use Microsoft Access (I tried this on Open Office Base, but no joy). &lt;/div&gt;&lt;div&gt;First of all "Export" (copy) the database file (called "V3.mdb") to a suitable location, as it's always best to work on a copy rather than the master file. &lt;/div&gt;&lt;div&gt;Double-clicking the file will open it in Access (assuming that is your default database program). On the left hand side you'll see a list of the tables ("Customers", "WorkTickets" and so on) Double-click the "Mouldings" table to open it. A chart with all the records will be displayed. &lt;/div&gt;&lt;div&gt;In the top left just above the table list is "Views", click this and select "Design View". The main window will now show a list of the fields in the Mouldings table and their properties. &lt;span class="Apple-style-span"  style="font-size:small;"&gt;(see below)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_H0ipjJ2jvog/Su2woQ1nykI/AAAAAAAAAEo/GP8n7x_jhu0/s400/AccessDesignView.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 366px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5399165734048221762" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Select "Supplier No". Below is a list of the properties for that field. &lt;/div&gt;&lt;div&gt;Select "Indexed" and change &lt;b&gt;"Yes, (No Duplicates)"&lt;/b&gt; to &lt;b&gt;"Yes, (Duplicates OK)"&lt;/b&gt;. &lt;/div&gt;&lt;div&gt;"Save" the changes and you're done, all that remains is to "Import" the modified file back into Wessex Premier.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Points to note -&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;You should regard this "tweak" as one way only, because, once you have added a record &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;with the same supplier number as another record, Access will not allow you to change back.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;You change any of the other properties at your peril!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;The above screenshot was from Office 2007, be sure, however, to save the database as an &lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Access 2000/2003 file (ie. a .mdb file not a .mdbx file).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;The steps in Office 2003 look different, but are basically the same. (If that's not too double-dutch!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-4855066976685507792?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/4855066976685507792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/10/database-tweak.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/4855066976685507792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/4855066976685507792'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/10/database-tweak.html' title='A Database tweak'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_H0ipjJ2jvog/Su2woQ1nykI/AAAAAAAAAEo/GP8n7x_jhu0/s72-c/AccessDesignView.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-3957818265010322847</id><published>2009-10-01T21:44:00.010+01:00</published><updated>2009-10-26T20:08:39.629Z</updated><title type='text'>Backup or C***up?</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;As you continue to use Wessex Premier you accumulate data in the form of database records. Because we're using this program in the real world these records have a real importance to our businesses. In fact we would definitely have problems if the records suddenly disappeared. At the very least we would have to re-input all the moulding records and as for reconstructing the work ticket records - well, it doesn't bear imagining!&lt;br /&gt;&lt;br /&gt;When the program was originally released there was the usual menu option to copy the database file to somewhere and a recommendation in the Help section to do this at least once a week. With 20/20 hindsight this was hugely optimistic.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Although computers and more specifically hard drives have become far more reliable over the years - them can still fail suddenly. In fact many take the view that once a hard drive is 4-5 years old you are on borrowed time. &lt;div&gt;So, what's the answer?&lt;br /&gt;Of course, there are lots of answers (you knew that was coming didn't you?) and the trick is to find one that suits you.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the (good?) old days of MSDOS you just got a bunch of floppy disks and copied the whole system onto them. With the coming of Windows that became unrealistic and just backing up (or not) your documents became the norm. With the greater reliability it was (is) very easy to let things slide and not take any precautions at all. Of course, as in other areas of life - take no precautions and you'll eventually get caught out!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a couple of phone calls from framers telling me their computers had died, was there any way to get back their data? And no, they hadn't taken any copies! Well, I started to wonder how to lessen the worry and let the computer do the work.&lt;br /&gt;The answer I came up with was to get the program to copy the database file to a specified location every time it was shut down (in most framing shops this means at the end of each day). Simple, eh? Of course it requires a bit of thought as to where the file is to be copied. The easiest being a USB flash drive permanently plugged in, or else a second hard drive in the computer (a network place should also be possible, though I haven't tried it). What you don't want to do is to copy the file to the same hard drive, because if that fails it takes your backed up file down too.&lt;br /&gt;&lt;br /&gt;There are some points to beware of however, one is that USB flash drives can and do fail - so make sure you have a spare. The other is  bit more complicated - suppose for some reason the database file you are using with the program becomes corrupted, when you shut the program down the corrupted database will over-write the previously saved good file. Not a good idea, - so if you suspect your database is not right then the correct action is to copy the backed-up file somewhere else before you shut the program down.&lt;div&gt;&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_H0ipjJ2jvog/StREySzBEiI/AAAAAAAAAD4/OnJuVXWIPIc/s400/ShutDown.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 351px; height: 400px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5392010284699292194" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So much for protecting the data produced by Wessex Premier, but what about all the other important documents, photos, movies etc. that accumulate on your computer? Well, the obvious thing to do is copy them to an external hard drive (which are pretty cheap nowadays) or use another solution that I've been impressed with - namely backup to an external server. I've used Humyo (&lt;a href="http://www.humyo.com"&gt;www.humyo.com&lt;/a&gt;) and the software they provide (so if you add or make changes to your documents these are uploaded to their servers straight away). This way, if the house goes up in flames it won't mean the lose of years of accounts, letters, pictures and so on. Another bonus is that I can access the account from any internet-connected computer - surprisingly useful.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-3957818265010322847?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/3957818265010322847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/10/backup-or-cup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/3957818265010322847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/3957818265010322847'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/10/backup-or-cup.html' title='Backup or C***up?'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H0ipjJ2jvog/StREySzBEiI/AAAAAAAAAD4/OnJuVXWIPIc/s72-c/ShutDown.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-1393240529642231122</id><published>2009-08-12T19:45:00.010+01:00</published><updated>2009-09-09T12:00:16.006+01:00</updated><title type='text'>File wars - XML v TXT v Registry</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;I'm afraid that this is going to be a bit of a geeky posting (you mean the others aren't?) and it's going to concern the advantages of using xml files over text files, but it's interesting, so read on.&lt;br /&gt;Most serious programs need to save data in one form or another and there are lots of ways to accomplish this.&lt;br /&gt;I'm going to divide this data into three types - 1 - Program preferences, 2 - Temporary data created by one part of the program and used by another part, 3 - Data records (ie. relational database)&lt;br /&gt;&lt;br /&gt;For number 3 the answer is (relatively) straightforward - use a DBMS (database management system) such SQL Server, MySQL, MS Jet (as used by the Wessex Programs) or similar. All the complex database work is taken care of and there is a wealth of documentation to fall back on. (This may be the subject of a future posting.)&lt;br /&gt;But for type 1 and 2 data, the answer is anything other than easy.&lt;br /&gt;Program preferences traditionally have used the "Registry" to store values.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(102, 102, 102);font-family:arial;" &gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(102, 102, 102);font-family:arial;" &gt;For those who haven't come across the Registry it is a (big) file where everything from the default Word font to the hardware available is stored. This is a really important file and changes to it could stop your computer working, that said if you (in XP) click "Start" - "Run" and then type "regedit" in the box you will see the registry in all its glory, - don't change anything though!&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;b&gt;Preference Data&lt;/b&gt;&lt;/div&gt;Now, the first two Wessex programs (WPP1 &amp;amp; WPP2) stored their preferences in the registry (Visual Basic makes this easy to do using the GetSetting &amp;amp; SaveSetting functions), but with Wessex Premier the preferences really got too many to save in this way. Programmers have a responsibility to keep registry entries to a minimum, one reason is that the values become too unwieldy to manipulate as a whole, another is that if the program is uninstalled the entries often remain and clog up the system (I ran a registry cleaning program recently on my laptop and found over a thousand orphan entries).So, what's the alternative? The one I chose was to write a "class"(a discrete piece of code that adds functionality to the program language) which mimicked the GetSetting &amp;amp; SaveSetting functions but instead of saving the values in the registry - they are saved to an XML file which is easy to save, move and copy.&lt;br /&gt;&lt;blockquote style="color: rgb(102, 102, 102);"&gt;Let's not get too technical here - what's an XML file? XML stands for Extensible Markup Language and can take the form Key - Sub-Key - Value, eg. "Glass" (key) "Standard Glass" (sub-key), "1.2" (value). Thus making it especially useful for data files.&lt;/blockquote&gt;&lt;div&gt;&lt;b&gt;Temporary Data&lt;/b&gt;&lt;/div&gt;This use of XML was very successful, so I wondered if I could use this type of file for scenario 2 (temporary data created by one part of the program and used by another)? &lt;div&gt;In Wessex Premier price &amp;amp; work details can be saved to a file temporarily until the customer has finalized their order, they are then saved to the database - an invoice &amp;amp; work tickets are printed and the files used deleted.&lt;/div&gt;&lt;div&gt;When the program first came out this temporary save was achieved using Text (TXT) files. These type of files have been around for years, the values are separated by quotation marks, (eg "1.2""Landscape" etc). The program knows which value is which by its position in the file (eg 6th value is glass, 7th is job description and so on). All was fine and dandy until you wanted to note the mount margins in inches, such as - 2" t &amp;amp; s 2.25" b. Now the extra quotation marks confuse where one value ends and another begins, the program can't decipher the values and so can't save to the database. Once this problem was pointed out I solved the problem temporarily by not allowing the user to key in quotation marks.&lt;br /&gt;But by using the XML format all this is avoided - instead of dealing with a preference file "user.xml" a file called "jobs.xml" (then "job1","job2" &amp;amp; so on) is saved until needed by the database and then deleted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_H0ipjJ2jvog/SpVnf8PzSVI/AAAAAAAAADo/BweyX_EuvU0/s400/XMLview.jpg" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 231px;" alt="" id="BLOGGER_PHOTO_ID_5374315528782563666" border="0" /&gt;&lt;div&gt;If you want to take a closer look at XML files (&amp;amp; see what's inside them) search for "XML Viewer" a small, free program that is easy to use.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-1393240529642231122?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/1393240529642231122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/08/file-wars-xml-v-txt-v-registry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/1393240529642231122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/1393240529642231122'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/08/file-wars-xml-v-txt-v-registry.html' title='File wars - XML v TXT v Registry'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H0ipjJ2jvog/SpVnf8PzSVI/AAAAAAAAADo/BweyX_EuvU0/s72-c/XMLview.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-3637478765114792371</id><published>2009-08-02T21:52:00.016+01:00</published><updated>2009-11-01T16:34:04.867Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='frame pricing algorithms'/><title type='text'>We can work it out</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;So, just how does a pricing program come up with the final price?&lt;/div&gt;&lt;div&gt;Well, it uses an algorithm (a set of made-up rules) to produce the answer. &lt;/div&gt;&lt;div&gt;The old two-way table sheet (which some framers still use) is a very simple algorithm - add the horizontal and vertical dimensions together, then go down the appropriate column adding in the various components, add VAT to get the final total.&lt;/div&gt;&lt;div&gt;The algorithms for computer pricing are different for each program. Some are closely guarded secrets and are very complex, while others (such as the Wessex Pricing Programs) are open and easy to understand. Because computers can work out millions of calculations a second it is tempting to make the algorithm and its application complex, in my experience this just makes the program too cumbersome to use in the real world.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;I have used basically the same core algorithm in each of the Wessex Programs. It has stood up to the test of time (I'm still in business after 24 years!) so I can see no reason to change it. It is simple because (a) the user can stay in control of the pricing and (b) if the program starts to produce unexpected prices it is relatively easy to work out what's going wrong.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The algorithm I use is this - a base cost is added to the variable cost.&lt;/div&gt;&lt;div&gt;There, I said it was simple didn't I?!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://2.bp.blogspot.com/_H0ipjJ2jvog/SnnW19MnQNI/AAAAAAAAADg/4IM-YGoilUY/s400/algorithm.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 61px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5366556653437534418" /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To put some meat on that idea's bones, imagine a piece of glass (say 10" x 8", that is 80 sq. inches) you've decided that you won't cut any piece of glass for under £2.50, and that you're going to charge glass @ 1 pence/sq. inch. So, the sum is quite a simple one 250 + (80 x 1) = 330 pence. Mounts can be worked out in the same way, while the frame itself can be a base cost + perimeter x moulding cost. &lt;/div&gt;&lt;div&gt;Each component can be worked out in this way, added together with VAT etc., all in a fraction of a second and with no arithmetical errors.&lt;/div&gt;&lt;div&gt;With me so far?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, if you think about it, by varying the base cost against the variable cost you can make small frame expensive and large frames cheap (high base cost / low variable cost) or vice-versa (low base cost / high variable cost). Most framers of course, go for somewhere in the middle.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, not only is this algorithm simple - it's surprisingly sophisticated. Most importantly, however, it means that you, the framer, control your pricing, not the program.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-3637478765114792371?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/3637478765114792371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/08/we-can-work-it-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/3637478765114792371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/3637478765114792371'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/08/we-can-work-it-out.html' title='We can work it out'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H0ipjJ2jvog/SnnW19MnQNI/AAAAAAAAADg/4IM-YGoilUY/s72-c/algorithm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-8465951488529491438</id><published>2009-07-22T17:54:00.011+01:00</published><updated>2009-07-25T21:58:00.894+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Full-time v Part-time programmers'/><title type='text'>Gentlemen v Players</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Do you have to be a full time programmer to write a commercial program?&lt;div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This question came into focus recently after reading a report in Art Business Today on the Framing Industry Awards. The article reported a speech made by the winner of the Innovation Award (a Norwegian Visualisation &amp;amp; Pricing program). It was stated that this program was top because it was written by an expert professional programmer, not some "framer with an interest in computers".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, I was always taught to "never disparage the competition", but I feel definitely disparaged! (as should the other framer/programmers out there).&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first point I would make is that writing a program is not rocket science, any more than learning a foreign language is. Microsoft (who market Visual Basic that I write in) go to huge lengths to make their product robust and easy to use. The same goes for Borland and their Delphi language that John MacAffee's Preview &amp;amp; Estlite uses. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://4.bp.blogspot.com/_H0ipjJ2jvog/SmtrTw1Ha6I/AAAAAAAAADI/XXffQ6j15ZU/s200/IDE.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 125px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5362497768584080290" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second point is that I've more than 20 years experience in writing programs for framers. I've also attended a college course (passing with distinction) and written articles on the subject, as well as being a professional framer for over 30 years. I'm sure that similar experience goes for the other framer/programmers too. So, a bit more than a slight interest in computers then.&lt;/div&gt;&lt;div&gt;As for professional programmers - you've only to look at the many programs that didn't run on Vista to see that sometimes you can be too clever for your own good. &lt;/div&gt;&lt;div&gt;In fact, it is precisely because programming is not our main bread &amp;amp; butter that framers can spend a large amount of their spare time optimising their programs, time that a professional would have to be paid for.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, the most important point is that programs written by framers for framers are easier and more intuitive to use.&lt;/div&gt;&lt;div&gt;A program can be the most sophisticated, all-embracing package imaginable, but if it gets in the way of your framing or your dealings with your customers - it's useless. &lt;/div&gt;&lt;div&gt;My philosophy is that anyone in your framing shop should be able to give a price/issue a work-ticket, from the person at the top to the Saturday-helper. This is achieved by designing the program to be easy and good to use (see previous posts). This may mean that the pricing (or visualising) algorithm is simplified in order to make things more understandable and unobtrusive to use, but if this means the user can actually understand what's going on in the program - it's a compromise I'll take any day.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You have only to look at the Norwegian website (the memorably labelled www.aditxyz.no) to see that the winning program was written by someone who has never made a frame in their life or had to deal with a customer (or with any artistic sense, but then perhaps I'm just being hyper-critical!).&lt;/div&gt;&lt;div&gt;One of the issues many people have with programs is "bloat", which means that the program contains many features (which you've paid for) that you'll never need (MS Office immediately comes to mind - why not use Open Office for free?). Of course a feature you'll never use is another's must-have, but surely this emphasies even more the need for roots within the framing industry?&lt;/div&gt;&lt;div&gt;So - if you're in the market for framing software - beware and be wise!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-8465951488529491438?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/8465951488529491438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/07/gentlemen-v-players.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/8465951488529491438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/8465951488529491438'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/07/gentlemen-v-players.html' title='Gentlemen v Players'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_H0ipjJ2jvog/SmtrTw1Ha6I/AAAAAAAAADI/XXffQ6j15ZU/s72-c/IDE.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-8853419740929803562</id><published>2009-06-21T09:25:00.005+01:00</published><updated>2009-06-21T10:18:52.096+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='database schema'/><title type='text'>A more sophisticated way of importing a database</title><content type='html'>The current Wessex Premier has a very simple way of checking a database to import - if it's not called &lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;"V3.mdb"&lt;/span&gt; it won't be imported. Now this works at a very simple level, but it leaves two problems&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first is that all the backed up files have to be called &lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;"V3.mdb"&lt;/span&gt; (rather than anything more convenient like say &lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;"ShopBackup_16_6_09.mdb"&lt;/span&gt;). You can get round this by renaming the file after exporting and back again before importing, but this is an awkward and fiddly way of dodging the issue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second problem is that although the file might be called &lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;"V3.mdb"&lt;/span&gt; the internal structure of the database (called the "schema") could have been changed and this would make it incompatible with the program.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, is there a way of checking the schema of each table against a master schema-file? &lt;/div&gt;&lt;div&gt;There is, of course, otherwise I wouldn't be writing this!&lt;/div&gt;&lt;div&gt;This first thing to do is to extract the schema from the file to be imported. The crucial line of code is this -&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#009900;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#009900;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;dstSchema.Tables("V3Schema").WriteXmlSchema(xmlWriter)&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;div&gt;Which writes the schema to a temporary (xml file) to compare against master xml schema.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then the temporary file is then run (byte by byte) with the master file and each byte is compared, if they don't match then the file to be imported is rejected.  The heart of the code is this -&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#009900;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;Do&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;MasterByte = MasterStream.ReadByte&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;'master table&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;CheckByte = CheckStream.ReadByte &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;'table to be imported&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;If MasterByte &lt;&gt; CheckByte Then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;blnOk = False&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;Exit Do&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;End If&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#FFCC00;"&gt;        Loop While MasterByte &lt;&gt; -1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#009900;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;This is done for each of the four tables in the program's database, as long as the file-to-be-imported passes the test it can be imported (its name is changed to "V3" for internal use).&lt;/div&gt;&lt;div&gt;Obviously there is a lot more code to set up the above lines - checking that the files exist, that the user hasn't pressed "Cancel" as so on - but in testing I haven't yet come across any problems, so it looks like this feature will be in Wessex Premier II.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-8853419740929803562?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/8853419740929803562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/06/more-sophisticated-way-of-importing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/8853419740929803562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/8853419740929803562'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/06/more-sophisticated-way-of-importing.html' title='A more sophisticated way of importing a database'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-7871523088241492332</id><published>2009-06-07T21:45:00.009+01:00</published><updated>2009-06-13T14:41:18.618+01:00</updated><title type='text'>Sneak preview</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H0ipjJ2jvog/SjNlcEZ8m1I/AAAAAAAAACw/k7q5A1UmcRo/s1600-h/wpp4Basic.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 106px; height: 200px;" src="http://2.bp.blogspot.com/_H0ipjJ2jvog/SjNlcEZ8m1I/AAAAAAAAACw/k7q5A1UmcRo/s200/wpp4Basic.jpg" alt="" id="BLOGGER_PHOTO_ID_5346728715512224594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;"So, what are you working on now?" is a question I've often been asked at the Spring Fair. &lt;div&gt;The answer is a completely rewritten Wessex Premier. The basic idea being 2 programs in 1 - a basic frame pricing version which uses just the mouldings part of the database, but no worktickets or customers list. This could be upgraded to the full version when the user needs to - using the same database that has been built up. In this way one could get use to using the program just to give prices, and because it works in exactly the same way as the full version it will be much more straightforward to upgrade - you wouldn't even need another disk.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another aspect I'm&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H0ipjJ2jvog/SjNogIInH8I/AAAAAAAAAC4/5VSN5BSwaO0/s1600-h/ScreenHunter_02+Jun.+13+09.46.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 178px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/SjNogIInH8I/AAAAAAAAAC4/5VSN5BSwaO0/s200/ScreenHunter_02+Jun.+13+09.46.jpg" alt="" id="BLOGGER_PHOTO_ID_5346732083767615426" border="0" /&gt;&lt;/a&gt; working on is improving the handling of database records, particularly worktickets, in the full version. At the moment in WPP3 the lists of work to be done, low moulding stock etc. are separate from the records themselves (ie. you have to close down the list having made a note of the record, then go to the record itself. Not very efficient.) Now you will be able to look at the list, double-click on the line of interest and the individual record will come up. Also, visually, the workticket list is easier to read being in name order  with the Overdue, For completion and Completed jobs in different colours.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_H0ipjJ2jvog/SjOjom_nwoI/AAAAAAAAADA/ohB9U39DNdU/s200/JobDesc.jpg" style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 187px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5346797100676399746" /&gt;&lt;/div&gt;&lt;div&gt;The third big change is adding mountboards to the database. The idea behind this is to record the mountboard colour in the database and then print a spot of that colour on the workticket. This way mistakes can be minimised (for instance Aqadia 8643 in quite a different colour to 8043).&lt;/div&gt;&lt;div&gt;To make everything even more foolproof when the list of mount colours comes up each line is the colour of the mountboard. It was an interesting piece of programming as the lettering (normally black) has to change depending on the lightness/darkness of each colour.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Now I'm at the stage of "tweaking" the program, for instance - if when you click on a workticket, do you want all the other worktickets on that same invoice to appear, or does that just complicate the process? Is putting the mount colours on the workticket actually an advantage? Only by using the program for real do these thing emerge.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a technical price to be paid however. Whereas the current Wessex Premier (WPP3) uses VB2003 with the .Net Framework 1.1 (a quick install). This new program is written in VB2008 and uses the .Net Framework 2.0 ( a much longer install), which is needed because the program has to shut down and restart (when switching between versions) and also for the new menu controls. &lt;/div&gt;&lt;div&gt;Another reason for going with the new program is better integration with Windows Vista &amp;amp; Windows 7 (here at the end of October). While at the moment most people use XP, as computers get changed and upgraded those using XP will get less and less (in fact Microsoft plan to stop supporting XP completely in 2014).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Will the new program see the light of day? We'll have to see!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-7871523088241492332?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/7871523088241492332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/06/sneak-preview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/7871523088241492332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/7871523088241492332'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/06/sneak-preview.html' title='Sneak preview'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H0ipjJ2jvog/SjNlcEZ8m1I/AAAAAAAAACw/k7q5A1UmcRo/s72-c/wpp4Basic.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-6435264426216895161</id><published>2009-05-17T17:06:00.001+01:00</published><updated>2009-09-09T11:58:44.931+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>Some history, - in the beginning - - -</title><content type='html'>Way back in the days of the ZX Spectrum (over 25 years ago now) I was shown the basics of programming by the teenage sons of a colleague. It occurred to me that this would be an ideal way of pricing picture frames. Upto that  point we had used a 2 way table - add the horizontal and vertical measurements together, then go down a column adding in the various items. This, of course regularly produced mistakes in the addition and the customers, looking at the long list charges, often wanted to know what each item was. The new simple program for the Spectrum solved all this, after a few key presses the price appeared on the screen, and the customers said "Yes please". I think I must be one of the few people who used the Spectrum for business rather than games!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H0ipjJ2jvog/ShAwb9dF2GI/AAAAAAAAACo/b7ckLIeucng/s1600-h/zxspectrum.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 127px; height: 89px;" src="http://3.bp.blogspot.com/_H0ipjJ2jvog/ShAwb9dF2GI/AAAAAAAAACo/b7ckLIeucng/s200/zxspectrum.jpg" alt="" id="BLOGGER_PHOTO_ID_5336818815345219682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;For those who don't know of the Sinclair ZX Spectrum it was about the size of today's tablet PCs. It plugged into a TV and stored its programs on a cassette tape. The weakness was its keyboard, the rubber membrane kept giving up. After I got through 3 we bit the bullet and bought a PC (about £1000 20 years ago). This meant the program was rewritten in GW Basic and then with the coming of Windows 3.1 -QBasic. With each rewrite extra features were added.&lt;br /&gt;There was none of the pretty interface of today, and the mouse was superfluous. To change the parameters you edited the program code directly (not quite the problem it appears as QBasic was bundled with Windows 3.1). It did show the way, however, so when I got hold of VB6 it was a revelation - you could, with a bit of work, produce a program that looked professional, was reliable and could easily be packaged for other people's computers.&lt;br /&gt;&lt;br /&gt;The result was what came to be the original Wessex Pricing Program (wpp1). I took the CD along to the Spring Fair to show Wessex Pictures, and the rest, as they say, was history (actually it was the start of a steep learning-curve which is still going on).&lt;br /&gt;The proof of the pudding is that the program is still regularly sold by Wessex.&lt;br /&gt;More recent history will be covered in another blog.&lt;br /&gt;&lt;br /&gt;nb. There is an update for wpp1 to allow for the increase in moulding costs since the CDs were  originally printed - go to www.wessexpictures.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-6435264426216895161?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/6435264426216895161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/some-history-in-beginning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/6435264426216895161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/6435264426216895161'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/some-history-in-beginning.html' title='Some history, - in the beginning - - -'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_H0ipjJ2jvog/ShAwb9dF2GI/AAAAAAAAACo/b7ckLIeucng/s72-c/zxspectrum.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-2370327907902491120</id><published>2009-05-06T15:53:00.005+01:00</published><updated>2009-09-09T11:56:48.524+01:00</updated><title type='text'>Troubleshooting bulk update</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H0ipjJ2jvog/SgGpZE9pQkI/AAAAAAAAABw/W4kMO6UVaHs/s1600-h/UpdateFiles.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/SgGpZE9pQkI/AAAAAAAAABw/W4kMO6UVaHs/s200/UpdateFiles.jpg" alt="" id="BLOGGER_PHOTO_ID_5332729682077499970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Wessex Premier is able to perform a bulk update on Wessex &amp;amp; Frinton moulding records. It's very useful to, say, add all the mouldings from Wessex (as, after all, you can order just one length with your weekly delivery). But as the list consists of somewhere in the region of 1300 records this is where the update-from-file comes in.&lt;br /&gt;&lt;br /&gt;The program has proved to be very reliable in this area (you download the update files from the www.wessex.com, tell the program whether you want to just update the existing records or to update and add everything else, then navigate to the downloaded files and press go).&lt;br /&gt;&lt;br /&gt;One point to note is that Wessex &amp;amp; Frinton share some mouldings (actually over 200), these are the "WFxxx" and "PWxxx" ranges. So, if you already have them listed under (say) Wessex when you update the Frinton section the program will report that it cannot add duplicate records.&lt;br /&gt;&lt;br /&gt;Any problems that have arisen have always been to do with the update file itself. These files are in "Excel" format and are prepared by hand at Wessex, so one problem has been where an expected value hasn't been entered (usually the price has been left blank). Now, whilst the program updates now have more code to cope with this, it can cause the bulk update to stop.&lt;br /&gt;The answer is to open the file with Excel and look for the blank values and then either - delete the line, or - put in a sensible value, save the file and rerun the bulk update. 9 times out of 10 this fixes the problem.&lt;br /&gt;However, we did have one brainteaser where there was a whole blank line at the end of the file!&lt;br /&gt;So that blank line had to be deleted, very strange getting your head around deleting something that wasn't there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-2370327907902491120?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/2370327907902491120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/05/troubleshooting-bulk-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2370327907902491120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2370327907902491120'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/05/troubleshooting-bulk-update.html' title='Troubleshooting bulk update'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H0ipjJ2jvog/SgGpZE9pQkI/AAAAAAAAABw/W4kMO6UVaHs/s72-c/UpdateFiles.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-7545583102472779305</id><published>2009-04-22T20:59:00.010+01:00</published><updated>2009-04-23T16:05:09.411+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Designing the Wessex Premier GUI</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H0ipjJ2jvog/Se9_x-TFN-I/AAAAAAAAAAc/hQVvnRYANHY/s1600-h/ScreenHunter_02+Apr.+22+20.48.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 202px; height: 320px;" src="http://2.bp.blogspot.com/_H0ipjJ2jvog/Se9_x-TFN-I/AAAAAAAAAAc/hQVvnRYANHY/s320/ScreenHunter_02+Apr.+22+20.48.jpg" alt="" id="BLOGGER_PHOTO_ID_5327617380715935714" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;A program can be amazingly sophisticated but unless the user can easily operate it then it's pretty useless.&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;  &lt;/span&gt;&lt;span style="font-family:arial;"&gt;This is where a well designed GUI (graphical user &lt;/span&gt;&lt;span style="font-family:arial;"&gt;interface), or in other words a good looking, easy to understand main form &lt;/span&gt;&lt;span style="font-family:georgia;"&gt;comes in.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Wessex Premier main form is that shape because it is logical to start entering data from the top and with each new type of data continue downwards, finishing with what we all want to know - the total price.&lt;br /&gt;Also it is important to stop the operator accidentally entering data that the program does not expect. For instance the top two size boxes will only accept numbers or a decimal point. The moulding boxes will only allow upto 5 characters (the maximum allowed for a moulding ID.) plus lower case letters are converted to upper case.&lt;br /&gt;Next to the total price button is shown the quantity. Which is a numeric up/down control, numbers are changed using the small arrows rather than allowing the operator to enter them directly.&lt;br /&gt;&lt;br /&gt;Those Visual Basic aficionados amongst you will have noticed that the buttons have a non-standard appearance. This is achieved programmatically rather than using bitmaps - the same goes for the graded background. The total effect is (I think) one of good design which helps promote intuitive usage as well as looking right in a sophisticated retail environment.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H0ipjJ2jvog/Se9__0yEu3I/AAAAAAAAAAk/-6vkzayH0ec/s1600-h/ScreenHunter_01+Apr.+22+21.35.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 256px; height: 119px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/Se9__0yEu3I/AAAAAAAAAAk/-6vkzayH0ec/s320/ScreenHunter_01+Apr.+22+21.35.jpg" alt="" id="BLOGGER_PHOTO_ID_5327617618679741298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Whilst the most used part of the program is designed to be as quick &amp;amp; simple to use as possible, other parts the GUI is used to slow down the operator and give them pause for thought. One example is saving of the Options form.&lt;br /&gt;It is purposely meant to be slightly out of the ordinary so the operator has to pause to decide what's going on, and in doing so may save themselves from making a mistake.&lt;br /&gt;&lt;br /&gt;Of course what is invaluable is being able to test the program in a real environment with operators who don't really care how it works, just as long as they don't get into a mess with it! Here, the most lowly member of staff is as important(if not more so) than any number of "experts", because they are the ones who will produce the combination of keystrokes and mouse clicks that these experts haven't even conceived of!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-7545583102472779305?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/7545583102472779305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/designing-wessex-premier-gui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/7545583102472779305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/7545583102472779305'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/designing-wessex-premier-gui.html' title='Designing the Wessex Premier GUI'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H0ipjJ2jvog/Se9_x-TFN-I/AAAAAAAAAAc/hQVvnRYANHY/s72-c/ScreenHunter_02+Apr.+22+20.48.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-2288984021095950104</id><published>2009-04-20T20:37:00.003+01:00</published><updated>2009-04-23T16:03:09.939+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Optimizing for Vista</title><content type='html'>It's taken quite a long time to get my hands on a computer capable of running Vista, a couple of months ago I managed it.&lt;br /&gt;The obvious thing to do was to check that all the Wessex Programs worked. They did - WPP1 &amp;amp; WPP2 (written in VB6) had no issues. WPP3 however threw up a couple of interesting things.&lt;br /&gt;The first was the graded colour background to many of the forms which finished (in Vista) before the bottom border. This is because the Menu &amp;amp; border widths are smaller in Vista, so I had to find code that would allow for XP &amp;amp; Vista. This turned out to be (instead of hard-coding for the physical width of the menu &amp;amp; border) to use "&lt;span style="color: rgb(255, 204, 0);"&gt;Me.DisplayRectangle.Height&lt;/span&gt;".&lt;br /&gt;The 2nd issue was when opening another program (PDF reader or Media player) an error message appeared saying no application was associated with the process - the application then went on to open correctly! Annoying or what?&lt;br /&gt;After a bit of digging I found the answer in "VB 2008" published by Wrox (it also applied to VB 2003 that WPP3 is written in). It was to add 1 line of code -&lt;br /&gt;" &lt;span style="color: rgb(255, 204, 0);"&gt;myProcess.StartInfo.Verb = "Open"&lt;/span&gt;" It works without this line in XP, why does it need it in Vista?&lt;br /&gt;Along the way I also tried a preview of the upcoming Windows 7 (Vista as it should have been) and found the programs were fine with that too.&lt;br /&gt;So - Wessex now have the modified WPP3 (version 3.2.1) and all's well ?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-2288984021095950104?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/2288984021095950104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/optimizing-for-vista.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2288984021095950104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/2288984021095950104'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/optimizing-for-vista.html' title='Optimizing for Vista'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4483660544838804247.post-370348172326720094</id><published>2009-04-18T21:50:00.002+01:00</published><updated>2009-04-23T15:55:05.280+01:00</updated><title type='text'>View of Programs</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H0ipjJ2jvog/SfCAP6RtwYI/AAAAAAAAAA0/yMHV13c_bJY/s1600-h/wpp1.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 192px;" src="http://3.bp.blogspot.com/_H0ipjJ2jvog/SfCAP6RtwYI/AAAAAAAAAA0/yMHV13c_bJY/s200/wpp1.jpg" alt="" id="BLOGGER_PHOTO_ID_5327899370009248130" border="0" /&gt;&lt;/a&gt;  The original Wessex Pricing Program(WPP1)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H0ipjJ2jvog/SfCAyCECptI/AAAAAAAAABE/_6K0wFJb1hw/s1600-h/wpp2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 198px; height: 200px;" src="http://1.bp.blogspot.com/_H0ipjJ2jvog/SfCAyCECptI/AAAAAAAAABE/_6K0wFJb1hw/s200/wpp2.jpg" alt="" id="BLOGGER_PHOTO_ID_5327899956214933202" border="0" /&gt;&lt;/a&gt;                                              Wessex Pricing Program Advanced (WPP2)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;&lt;br /&gt;The main form of Wessex Premier (WPP3)&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H0ipjJ2jvog/Seo-g8ArB7I/AAAAAAAAAAM/7GX-hSeTA5Q/s1600-h/mol.bmp"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 202px; height: 320px;" src="http://3.bp.blogspot.com/_H0ipjJ2jvog/Seo-g8ArB7I/AAAAAAAAAAM/7GX-hSeTA5Q/s320/mol.bmp" alt="" id="BLOGGER_PHOTO_ID_5326138244904716210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;br /&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4483660544838804247-370348172326720094?l=stevetheframe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://stevetheframe.blogspot.com/feeds/370348172326720094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/introduction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/370348172326720094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4483660544838804247/posts/default/370348172326720094'/><link rel='alternate' type='text/html' href='http://stevetheframe.blogspot.com/2009/04/introduction.html' title='View of Programs'/><author><name>Steve Hible GCF</name><uri>http://www.blogger.com/profile/17160321217829962485</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://3.bp.blogspot.com/_H0ipjJ2jvog/SgRSdl12agI/AAAAAAAAAB4/dofgxX5NCMw/S220/MeCol.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_H0ipjJ2jvog/SfCAP6RtwYI/AAAAAAAAAA0/yMHV13c_bJY/s72-c/wpp1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
