วันเสาร์ที่ 4 ตุลาคม พ.ศ. 2551

Opengl Terrain Generation An Introduction

Writen by Vahe Karamian

Introduction

NOTE: For the HTML version of this article with graphics and downloads please visit the following link:

http://www.codeproject.com/opengl/OPENGLTG.asp

I have always been interested in computer graphics and their applications. Data representation and visualization is one of the main areas of HCI (Human Computer Interaction), and the better you make the interaction between a machine and a human, the more productivity will be generated by both the human and the machine. I had some experience with OpenGL during my undergraduate studies while attending the California Polytechnic University. Unfortunately, I never got a chance to pursue the more advanced features of the OpenGL library, given my time and work responsibilities.

You can find more about OpenGL at www.opengl.org. There are also a bunch of good literature available on the topic of Computer Graphics and OpenGL that you can refer for further advancements. Please check the Background/Reference section for a list of some reference material that I have used, in general, for computer graphics.

The following project is a very simple example demonstrating how to generate a terrain based on a bitmap file. The objective of the project is to generate a three dimensional terrain based on some data file. Please note, that this could have been any data file, but for the purpose of our example, we are going to be using a 32x32 dimensional bitmap file. We could have easily used a text file, and defined logic for each word or letter to represent it graphically.

The project also contains a good Windows framework that can be used for your other OpenGL applications. The current project allows you to rotate the camera using your mouse.

Once again, this is a simple approach to terrain generation, which can be a very difficult task in complex environments.

Background/Reference Since Computer Graphics is kind of an advanced topic, it is necessary to have at least some king of understanding and exposure to the concepts and theories in the field. However, this does not mean that you will not be able to use the following code or understand it. I have made it as simple as possible, and hopefully, it will give you a good start, or some additional source of information that you can use for your projects. Also, please note that you will need to have a good understanding of C/C++ programming.

Some books I have used for learning Computer Graphics and OpenGL programming:

Books I used while attending the California Polytechnic University: OpenGL Programming Guide, or better know as the Red Book. Computer Graphics Using OpenGL, 2nd Edition. Books I used while attending the California Lutheran University: OpenGL: A Premier, 2nd Edition. Interactive Computer Graphics: A Top-Down Approach Using OpenGL, 4th Edition.

What is a Terrain?
Some background information on a terrain and their uses in a game application: A terrain in an environment is one of the most critical components in the scene that is being rendered. It could easily be the largest 3D object in the project. Rendering the terrain can become a daunting task, taking the most time to render in a scene. To keep the terrain engine running in real time can be a difficult task, and it requires some thought out processes and modeling for it to be sufficient.

To be effective, the terrain needs to meet a number of requirements, many of which can be contradicting each other. A terrain should appear to be continuous to the end user, yet the mesh should be simplified or culled where possible, to reduce the load on the graphics card.

In a gaming system, for example, some engines draw the terrain just beyond the point a player can reach, and then use a terrain drawn onto a skybox to simulate hills or mountains in the distance. The terrain should appear realistic to the setting for the environment, yet this can be taxing on the video card, and a balance needs to be maintained. Detail textures are often used close to the camera, allowing the areas further off to be rendered more quickly.

What is a Height Map?
The first thing required for terrain rendering is a representation of the terrain's shape. While there are a number of structures that can be used to perform the job, the most widely used is the height map. Others include: NURBS, which can be maintained through a number of control points, and voxels, which allow for overhangs and caves.

There is one drawback to a height map, and that is, for every point on the XZ-plane, there can only be one height value. You can see that this limits the representation of overhangs and caves by a height map. This can be overcome by using two separate models.

Another drawback is that height maps take a large amount of memory, as each height must be represented. On the other hand, height maps lend themselves to the creation of regular meshes easily. It is also easy to determine the height at any given location, which is useful for collision against the terrain as well as laying dynamic shadows onto the terrain.

A height map is represented by a 2D array of values, where for any point (X, Y, Z), the X and Z are the indexes into the array, and the value of the array is the Y value which is equivalent to the height value.

The following is an example of such a representation:

int height[5][5] ={
{ 0, 0, 1, 1, 2 },
{ 0, 1, 2, 2, 3 },
{ 0, 1, 3, 2, 3 },
{ 0, 1, 2, 1, 2 },
{ 0, 0, 1, 1, 1 } };

The Approach!
There are many advanced algorithms to generate terrains; I am using a very simple solution for the purpose of this project.

In a nutshell, I used a 32 x 32 grayscale bitmap to represent a height-field that is used to generate the terrain. The terrain itself is divided into a grid of height values, the result of which is a mesh representing the terrain in the scene.

We create a grid of vertices that are spaced evenly apart but have varying heights, based on the height-field data. The color value of each bit is used to determine the height value of each grid location; in this case, for a 24-bit grayscale bitmap, the values for the color range from 0 to 255.

Once the bitmap has been read and the values loaded in memory, we have the data needed to represent the terrain. We also use a variable called a MAP_SCALE to allow us to scale the map up or down. This is a scale factor; we use this to set the distance between each height vertex. This allows us to increase or decrease the size of the terrain.

When we actually assign the vertex coordinates for each grid location, we need to apply the MAP_SCALE factor, which is multiplying it with the grid location index based on the coordinate element, i.e.:

Terrain[X][Z][0] = Float(X)*MAP_SCALE;
Terrain[X][Z][1] = (float) imageData[(Z*MAP_SCALE+X)*3];
Terrain[X][Z][2] = Float(Z)*MAP_SCALE;
The terrain map is represented in a grid of height values, which is internally stored in a 2D array of vertex coordinates. It extends along the X and Z-axis, with the Y-Axis representing the terrain height.

To render the terrain map, we use GL_TRIANGLE_STRIP for each row of grid values along the Z-axis. To render the terrain correctly, we need to specify the point in a specific order.

This requires us to start at the end of the row and move along the positive X-axis by drawing the vertices in a Z pattern:

(*)==========>(*)

/

/

/

/

/

/

/

/

/

/

/ (*)=========>(*) ....

Using the Code
I will only list the code that deals with the terrain generation here. There is more code in the project that you can look at. It is well documented, so you shouldn't have any problems. The solution was compiled using MS Visual Studio 2003, so you should be able to compile and run it easily. You will need to have the OpenGL libraries and DLL, which I will also provide as a download option just in case you do not have them. Make life a little easier so you do not have to search for them online.

So the majority of the code is for preparing the windows to render the scene properly. As you can see below, the code for generating and rendering the terrain is very short. To give an overview, the first thing that happens is for the windows to get created, and then we initialize OpenGL, and read in the BMP file and assign it to the 2D array we discussed above. Then, the texture is applied to the surface of the mesh, and the scene rendered to the screen.

Without further ado, the following listing is the the portion of the code which initializes and generates the terrain:

.
.
.
// InitializeTerrain()
// desc: initializes the heightfield terrain data
void InitializeTerrain()
{

// loop through all of the heightfield points, calculating

// the coordinates for each point

for (int z = 0; z < MAP_Z; z++)

{

for (int x = 0; x < MAP_X; x++)

{

terrain[x][z][0] = float(x)*MAP_SCALE;

terrain[x][z][1] = (float)imageData[(z*MAP_Z+x)*3];

terrain[x][z][2] = -float(z)*MAP_SCALE;

}

} } . . . The code above is the implementation of what we discussed about applying MAP_SCALE, which allows us to scale the terrain to our likings. So, it basically assigns the vertex coordinates for each grid location, the MAP_SCALE factor, which is multiplying it with the grid location index based on the coordinate element. It extends along the X and Z-axis, with the Y-Axis representing the terrain height.

The function is called after the bitmap has been loaded into the memory from the Initialize() function.

. . . // Render // desc: handles drawing of scene void Render() {

radians = float(PI*(angle-90.0f)/180.0f);

// calculate the camera's position

// multiplying by mouseY makes the

// camera get closer/farther away with mouseY

cameraX = lookX + sin(radians)*mouseY;

cameraZ = lookZ + cos(radians)*mouseY;

cameraY = lookY + mouseY / 2.0f;

// calculate the camera look-at coordinates

// as the center of the terrain map

lookX = (MAP_X*MAP_SCALE)/2.0f;

lookY = 150.0f;

lookZ = -(MAP_Z*MAP_SCALE)/2.0f;

// clear screen and depth buffer

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

// set the camera position

gluLookAt(cameraX, cameraY, cameraZ,

lookX, lookY, lookZ, 0.0, 1.0, 0.0);

// set the current texture to the land texture

glBindTexture(GL_TEXTURE_2D, land);

// we are going to loop through all

// of our terrain's data points,

// but we only want to draw one triangle

// strip for each set along the x-axis.

for (int z = 0; z < MAP_Z-1; z++)

{

glBegin(GL_TRIANGLE_STRIP);

for (int x = 0; x < MAP_X-1; x++)

{

// for each vertex, we calculate

// the grayscale shade color,

// we set the texture coordinate,

// and we draw the vertex.

// draw vertex 0

glColor3f(terrain[x][z][1]/255.0f,

terrain[x][z][1]/255.0f,

terrain[x][z][1]/255.0f);

glTexCoord2f(0.0f, 0.0f);

glVertex3f(terrain[x][z][0],

terrain[x][z][1], terrain[x][z][2]);

// draw vertex 1

glTexCoord2f(1.0f, 0.0f);

glColor3f(terrain[x+1][z][1]/255.0f,

terrain[x+1][z][1]/255.0f,

terrain[x+1][z][1]/255.0f);

glVertex3f(terrain[x+1][z][0], terrain[x+1][z][1],

terrain[x+1][z][2]);

// draw vertex 2

glTexCoord2f(0.0f, 1.0f);

glColor3f(terrain[x][z+1][1]/255.0f,

terrain[x][z+1][1]/255.0f,

terrain[x][z+1][1]/255.0f);

glVertex3f(terrain[x][z+1][0], terrain[x][z+1][1],

terrain[x][z+1][2]);

// draw vertex 3

glColor3f(terrain[x+1][z+1][1]/255.0f,

terrain[x+1][z+1][1]/255.0f,

terrain[x+1][z+1][1]/255.0f);

glTexCoord2f(1.0f, 1.0f);

glVertex3f(terrain[x+1][z+1][0],

terrain[x+1][z+1][1],

terrain[x+1][z+1][2]);

}

glEnd();

}

// enable blending

glEnable(GL_BLEND);

// enable read-only depth buffer

glDepthMask(GL_FALSE);

// set the blend function

// to what we use for transparency

glBlendFunc(GL_SRC_ALPHA, GL_ONE);

// set back to normal depth buffer mode (writable)

glDepthMask(GL_TRUE);

// disable blending

glDisable(GL_BLEND);

glFlush();

// bring backbuffer to foreground

SwapBuffers(g_HDC); } . . . The first thing you see in the Render() function is the conversion of the angle into radians, by using the formula: radians = float(PI*(angle-90.0f)/180.0f);. This makes it easier to compute the cameraX, cameraY, and cameraZ positions using the sin() and cos() functions.

The next block of code sets the look-at coordinates of the camera at the center of the terrain. Then, we clear the screen and depth buffer using glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);. We set the camera position based on the camera (X, Y, Z) values and the look-at we computed.

We then bind the texture using the glBindTexture(GL_TEXTURE_2D, texture); function. This tells OpenGL that we are going to use that particular texture to apply to our surfaces that will be drawn.

So far, all the code was just to setup the camera position and bind the texture, the next block of code is what actually draws the terrain and applies the texture to the surface. We have two for loops which go through the 2D array we have created that stores the terrain data, and as we discussed earlier, we process four vertices at a time. In the process, we calculate the grayscale shade color, we set the texture, and then we draw the vertex.

That is pretty much all you need to do to generate a terrain, given a 24-bit bitmap file.

Points of Interest If you are reading this, you most likely are interested in computer graphics and want to learn more about the techniques available to do really cool stuff. Computer graphics can be very complex in theory, but thanks to libraries such as OpenGL, the implementation of complex models/scenes can be done easily. Upon writing this article, I got the latest issue of Dr. Dobb's Journal (June 2006, Issue No. 385), and to my surprise, there is an article about OpenGL and Mobile Devices. It is under the name of OpenGL ES and it is a subset of OpenGL 1.3. That will make it possible to do real time 3D graphics on hand-held devices. Imagine the kind of nice looking applications/games that can be developed for your PDA or cell phones! Not all the functionality is available due to the limitations of the hand-held hardware. But I assume, in the near term future, you will be able to create as fascinating graphics on the handhelds as you can on your regular desktop machines.

On another note, I am going to start working on a new article which will describe the LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader) function. I am looking forward to hearing your comments and input, for future articles.

About Vahe Karamian

I have been programming since the age of 15. Started with BASIC on Apple II computers then moved on to Pascal. I wrote the game of Tetris using both languages on Apple II. At the age of 16 I got my first computer, and I started transferring the code over to Quick Basic. I then moved into C/C++ and have been developing in C/C++ until about 2 years ago when I switched over to C#.

My interests are in the field of Computer Graphics and Computer Vision. I am working on my graduate degree emphasizing on Computer Vision. I will try to be writing more articles in this field for future submissions.

Currently I am employed at a BioTech company in California, and I work on interesting projects ranging in many areas, except Computer Vision  Hence my graduate emphasis on the subject.

You can find more C/C++ samples on my site. There is a lot of good code for undergraduate Computer Science students.

http://www.nicksoftware.com

วันศุกร์ที่ 3 ตุลาคม พ.ศ. 2551

Small Business Accounting Software Reviews

Writen by Elizabeth Morgan

Small business accounting software reviews mainly focus on contents of profit and loss account. It is also known by several other titles such as income statement, statement of earnings, statement of operations and profit and loss statement. While the balance sheet, as a stock/position statement, reveals the financial condition of a business at a particular point of time, the profit and loss account portrays, as a flow statement, the operations over/during a particular period of time. The period of time is an accounting period.

Since the purpose of every business firm is to earn profit, the operations of a firm in a given period of time will truly be reflected in the profit earned by it. Thus, the income statement/profit and loss account of a firm reports the results of operations in terms of income/net profit in a year. The profit and loss account can be presented broadly in two forms: the usual account form and step form.

In operational terms, the accounting report that summarizes the revenue items, the expense items and the difference between them (net income) for an accounting period is called the income statement. There are three contents of the profit and loss account: revenues, expenses and net income/profit/loss.

Revenues can be defined as the income that accrues to the firm by the sale of goods/services/assets or by the supply of the firm's resources to others. Alternatively, revenues mean the value that a firm receives from its customers. The value/income can arise from three sources: sale of products/goods/services, supply of firm resources to others, and sale of assets like production plants, investments, and so on. The cost of earning revenue is called expenses. An important item of expense appearing in the profit and loss account is the cost of goods sold. The difference between revenues and expenses is net profit. The profit and loss account may also show the appropriation of the net profits between dividends paid to the shareholders and retained earnings/ amount transferred to reserves and surplus.

Business Accounting Software provides detailed information on Business Accounting Software, Best Business Accounting Software, Free Small Business Accounting Software, Small Business Accounting Software Reviews and more. Business Accounting Software is affiliated with Small Business Accounting Software.

Microsoft Great Plains Navision Axapta Selection Considerations

Writen by Andrew Karasev

During the years of our consulting practice, which comes back to East Europe in mid 1990th and then continues in the USA, Brazil, New Zealand, Australia, Oceania, Germany, Canada – we would like to orient you – business owner, IT director or software programmer. Selection process can take several months and you may end up with non-Microsoft solution. We will give you our Microsoft Business Solutions products serving point of view.

• Small, midsize or large business. In our opinion – this was the to-be-or-not-to-be question of late 1990th when if you are public corporation you had to stick to rich functionality ERP: SAP, PeopleSoft, Oracle Financials. When SQL database platforms dropped in the price and Microsoft SQL Server is available for all the budget options – you can stake on midmarket ERP solution to serve even large company

• Great Plains, Navision or Axapta. Great Plains was purchased with the acquisition of Great Plains Software, Navision and Axapta were products of Navision Software and opened the European door for Microsoft. Again – this is what we see from our experience serving clients in these areas and this might not be official Microsoft positioning. We have no intention to do official product positioning here in this small article. Great Plains is popular in the USA, Canada, Australia, New Zealand, South Africa, Poland, Middle East, Pakistan, UK, Oceania, Latin America (in Brazil Navision seems to be officially promoted). Navision has very strong position in Europe, plus it has very matured market in the USA due to 1990th marketing efforts of Navision Software. We also see that Microsoft promotes Navision on the so-called emerging markets: Russia, Brazil (where it tries to compete with Microsiga and other local ERPs). Axapta is new ERP and it is targeted to large businesses and so we would say that it has rich functionality and can be considered as alternative bid to Oracle, SAP or PeopleSoft

• ERP Selection Advises. When you select corporate ERP you should think about product life cycle. If product is in the phase out mode – you definitely don't want to do new purchase and implementation. On the other hand – if product doesn't have reliable vendor behind and is very innovative – you should also apply portion of conservatism.

• Industries. We are confident in all the products: GP, Navision and Axapta to automate these industries: Aerospace & Defense, Pharmaceutical, Healthcare & Hospitals, Insurance, Textile, Apparels, Services, Placement & Recruiting, Apparels, Beverages, Logistics & Transportation, Food, Restaurants Supply Chain Management, Gold & Mining, Jewelry, Consignment, Wholesale & Retail, Advertising & Publishing

Andrew Karasev is Chief Technology Officer at Alba Spectrum Technologies ( http://www.albaspectrum.com ), serving Microsoft Great Plains, CRM, Navision, Axapta to mid-size and large clients in California, Illinois, New York, Georgia, Florida, Texas, Arizona, Washington, Minnesota, Ohio, Michigan, Europe and Latin America

วันพฤหัสบดีที่ 2 ตุลาคม พ.ศ. 2551

Problems Occurring With Software

Writen by Jordi Shoman

When an individual purchases a piece of software, the last thing he/she wants to discover is that there is something amiss with the purchase. Quite often a problem that arises with a purchase is incompatibility, that is, the product simply will not work with your computer because your system either does not have the gumption to run the program or your system is lacking the proper resources to execute the commands of the software. Seldom is there a product that is compatible with all computer systems and as such it is important to read the packaging of the product and determine if your computer is capable of running this software.

Solutions to software incompatibility can be relatively straightforward but at the same time may be rather complex. If your computer simply lacks the resources, whether that means you need to upgrade drivers or increase the speed of your machine, then the solution merely involves an additional purchase. On the other hand, if the software is completely incompatible with your computer's operating system then you will likely not be able to utilize that piece of software.

Another problem that frequently arises is your purchase is missing a component that may or may not be necessary for the operation of the program. While many new products are complete in their packaging, purchasing second hand software can be risky. In doing so, one may encounter this particular problem. The missing piece might not be essential however, and may simply be a booklet explaining how to install and run the software. Conversely, if the missing piece is crucial to the operation of the software then one can observe the packaging for the contact information of the manufacturer and go about finding a solution in this manner.

Other such problems involving software revolve around what is termed glitches. These most often occur with gaming software and hamper the overall playability of the game, basically via interrupting the game play or by causing the game to freeze.

Interested in Computers? Do you have articles to distribute about Computers? We provide in depth Free Computer resources. Free article distribution service

Service Management Software

Writen by Jason Gluckman

Before any organization is set up, all pertinent details must be carefully planned out. Construction management is a complex and complicated job. Yet, with service management software, the tough job of handling every little thing is made easier and more organized. Setting up a construction plan naturally involves interconnected and taxing tasks that need to be balanced and well handled. Service management software will no doubt prove vital in the course of the construction and organizational applications.

Service management software is an ultimate solution when it comes to organizational aspects. This particularly well-built and integrated software tool sums up everything within the confines of the project and organizes all aspects to produce a comprehensive application. When properly managed, any business organization is likely to gain its expected revenues since redundancies, idling and waste are averted. Each of the variables involved in carrying out of a construction project or any other business venture ought to be fairly weighed and considered from all angles.

The constant monitoring, weighing and judging of intertwined major points and sub-issues concerning a business project is a must. In all cases, proper management is required. Any flaw can result in the downfall of its profitability. Yet, the utilization of relatively sturdy software such as service management provides trouble-free and well-organized balancing of the bits and pieces of factors involved in the construction applications.

Every business employs the facets of payroll, document scanning, document imaging and a lot more. In an array of varied choices, there are numerous software tools that can apply so that the business processes can be administered effortlessly. Examples of these include payroll software, job cost software and document imaging software. When these tools are applied, a project is guaranteed to be organized and controlled.

Service management software is one tool that spells great profit and success. This software opens businesses to the overwhelming power and opportunities provided by technology. With the right tool for the job, business firms will obviously take a stable niche in the marketplace.

Service Management provides detailed information on Food Service Management, Service Management, IT Service Management, Service Management Software and more. Service Management is affiliated with Project Management Training.

วันพุธที่ 1 ตุลาคม พ.ศ. 2551

Information Products A Business Owners Best Friend

Writen by Jennifer Tribe

We live in a post-industrial age where information is the coin of the realm. Knowledge is the most valuable asset that a business owns. For most businesses, that knowledge exists primarily in the heads of the people who work there. For entrepreneurs and sole practitioners, what's in their head usually is the business. That's both limiting and dangerous.

Let's take the example of a successful management consultant. Drawing on her knowledge and experience, she's able to hire herself out at a substantial hourly rate. The trouble is, every time she wants to make some money she has to trade away some of her time.

What happens when she goes on vacation and is no longer putting in time? Her income goes on vacation too. What happens when she's sleeping, or when she gets sick, or when she wants to retire? As soon as she stops putting in time, she stops getting money.

Even if she could work 24 hours a day, 7 days a week, there is still a limit to how much money she can make simply because she can't create more time. When you trade time for money, you put an automatic cap on your income potential.

Something else also starts happening to our consultant. The more successful she is, the more her services are in demand, the harder she works. Did you go into business to work long, hard hours for limited reward? I didn't think so.

Information products create passive streams of revenue, that is, money that flows to you whether you're working at your desk, lazing on the beach, or snoozing on the couch. How? You create the products once and then sell them over and over again. You make an initial investment of time and money and then reap the benefits in multiples. You can't do that with time; you can't sell the same hour twice.

-- What Exactly is an Information Product? Quite simply, an information product is any chunk of knowledge that has been recorded in some fashion – whether that be in a print format, an audio format, or a video format – so that it can now be passed on to others.

There are dozens of ways to package and sell information. Some of the most common products are:

  • Print books and e-books

  • Booklets and special reports

  • Manuals and workbooks

  • Audio cassettes, CDs, or downloadable audio files

  • Videotapes and DVDs

  • Teleclasses

  • Subscription-based web sites

The key is that you're taking something intangible – the knowledge in your head – and turning it into something that others can enjoy and use even when you're not around.

I have sometimes heard information products referred to as "artifacts." This term, borrowed from the field of archaeology, captures the idea that an information product is something you leave behind for future generations.

Every process you employ to serve your clients, every piece of information you glean from media sources, every past experience you carry with you, every original thought you conjure up is a piece of information that can be recorded and shared. What's stopping you?

About The Author

© 2003 Juiced Consulting.

Juiced Consulting helps business owners package what they know into information products – such as books, audiotapes and teleclasses – that they can sell to generate new business revenue. For a free newsletter and other resources, visit www.juicedconsulting.com; jtribe@juicedconsulting.com

Erp Selection Sap Business One Brazilian Subsidiarymultinational Corporation

Writen by Andrew Karasev

As we see it, based on decade long ERP consulting practice, the decision is not an easy one. First of all – if you look at the USA ERP market – here Microsoft Great Plains / Dynamics GP has very strong positions among midsize public corporations. Plus it has very good opportunities to automate large corporate businesses.

However if you look at Microsoft Business Solutions strategy in Brazil, especially localization (localized ERP/MRP) – Microsoft doesn't promote Great Plains in Brazil, instead it promotes its international favorite: Microsoft Dynamics NAV, Microsoft Navision. In 2006 Axapta should be also available in Sao Paulo, Rio de Janeiro and all the Brazilian states (localized version). In this small article we will discuss the options for Brazilian plant for USA, Australia, New Zealand and UK corporation, committed to Microsoft Great Plains platform on the corporate level.

• Multilanguage/English/Portuguese in one company. Yes – SAP Business One localized version allows you to switch languages with the hit of the buttons

• Tax Code/Audit. SAP Business One has over 7,000 implementations Worldwide, including USA and Europe. SAP Business One is very recently designed system and it is really user friendly. SAP BO is localized for Brazilian market

• Transaction Consolidation to Corporate ERP. Well, again this is where tough decision making is happening. SAP Business One would be very nice solution, it has transaction integration feature to MySAP or high-end SAP

• Multicurrency. This is real concern for Latin American subsidiaries. They are business entities in their local countries and they have to report their P&L in their local currencies: Peso, Real, Cordoba, or whatever it is.

• Competitors. If you thing globally then your should check on Microsoft Navision, Axapta and Oracle E-Business Suite/Oracle Financials/Oracle Applications

• Conclusion. SAP Business One should be considered as a good option for non-SAP business and the transaction integration should be used as the highway to move transactions from SAP Business One front end to your US or Europe based ERP

Please give as a call São Paulo 55-11-3826-3449, USA 1-866-528-0577, 1-630-961-5918! help@albaspectrum.com

Andrew is Great Plains specialist in Alba Spectrum Technologies (http://www.albaspectrum.com) – Oracle, SAP, Microsoft Great Plains, Navision, Axapta, Microsoft CRM Partner, serving clients in São Paulo, Rio de Janeiro, Salvador, Porto Alegre, Curitiba, Belo Horizonte, Recife, Manaus, Lisboa, Coimbra, Porto, Cascais and having locations in multiple states and internationally