Sei sulla pagina 1di 29

http://matalab.freehostia.

com

ExpressMRP User's Manual


Revision 1.0.0, February 12th 2012 1 Introduction ExpressMRP is a software for MRP (Material Resources Planning) in production companies. It tends to be simple, yet powerful tool for ad-hoc MRP calculations often needed in process industries. The program is especially suitable for dynamic manufacturing companies that produce many different products, handle variety of raw materials and often change production schedules and priorities. In such dynamic manufacturing companies it is of essential importance to be able to to forecast material shortage in time, in order to be able to react on time. ExpressMRP is designed to be the answer to such situations, being a tool for fast, ad-hoc MRP planning, production simulation and optimization. It is a bless for planners and production managers, that are facing stressful strugle to deliver products in time. ExpressMRP is developed by using Lazarus/FreePascal RAD IDE (www.lazarus.freepascal.org) and zmsql component. 2 Features ExpressMRP can be used both as stand-alone MRP software or a supplement software to your existing MRP or ERP systems. Due it's powerful CSV importing functionality, it is able to process data imported from other business software. Besides printable reports, ExpressMRP provides CSV exporting utility, so you can furtherly process or report your results in spreadsheets (Calc, Gnumeric, Excel) or any database program. In order to be effective and intuitive, ExpressMRP provides simplistic and minimalistic, yet very powerful user interface. This manual is short, since you will be able to figure out how to use the software in matter of minutes, even without any manual. 3 Internal Structure And General Principles 3.1 Database structure

ExpressMRP is written in FreePascal programming language and Lazarus IDE. See http://www.lazarus.freepascal.org. For data manipulation, ExpressMRP uses zmsql package (see

Page 1

http://matalab.freehostia.com http://wiki.lazarus.freepascal.org/ZMSQL) with zmquerydataset in-memory database. Zmquerydataset can save and load data from flat text files in csv format with .txt extension. Fields are separated by semicolon (";"). It incorporates jansql database engine which can perform SQL queries on flat text files with semicolon separated values (CSV tables). In order to understand how ExpressMRP behaves, you have to understand how ZMQueryDataset works. It loads data into memory, from CSV table or by executing SQL query on several CSV tables. Dataset can stay only in-memory or can be saved to underlying CSV table for storage. Depending on settings for a ZMQueryDataset, when you manually add, edit or delete records, it can be either immediately saved to underlying flat text files, either stay only in memory until explicitely saved. In ExpressMRP both approaches are used, some tables are immediately saved on any change, while others are saved only on request. ExpressMRP automatically loads all datasets from underlying text filed on opening application and saves them into text files on closing application. The following flat text files ussualy called CSV tables ("Comma Separated Values"), are used by ExpressMRP and are placed in application folder: A) Primary tables - those that requires data input from a user or import from external CSV files. They are immediately saved on any change by user. ExpressMRPOptions.txt - stores values of global options, such as whether dot or comma is used as decimal separator, float values display format etc. Filters.txt - holds custom, user-defined filters. Products.txt - holds information about products and base quantieties. Base quantity is a quantity of product for which bill of materials is expressed. For example, 1 pcs or 1000 pcs or 100 kg... Boms.txt - holds information about bills of materials -> components with quantities, needed for base quantity of a product.

Page 2

http://matalab.freehostia.com

Stocks.txt - holds info about currently available quantities on stock. Orders.txt - holds llist of production orders, with products and quantities. ImportVariants.txt; ImportToTables.txt; ImportToFields.txt; ImportFromTables.txt; ImportFromFields.txt - these tables store information about importing schemas, used for import from external data storage. B) Secondary tables - those that generates ExpressMRP from primary tables. Most of them are saved to underlying csv file only on closing application or explicitely clicling "Save" button. Some of them are saved during MRP calculation since intemediately used for querying by jansql database engine. SingleMRPProducts.txt; SingleMRPComponents.txt; SingleMRPFooter.txt - these are tables generated by MRP calculation for individual product. MultipleMRPProducts.txt; MultipleMRPComponents.txt; MUltipleMRPProductsSummary.txt; MultipleMRPComponentsSummary.txt - these are tables generated by MRP calculation for multiple products/production orders. UniqueComponents.txt; UniqueComponentsProducts.txt these are tables generated by materials usage list calculation. 3.2 User Interface Elements

ExpressMRP has simple and straightforward user interface. No fancy elements, just pure functionality. Application is consisted of one main form and few auxiliary windows activated when Find (searching), Filter or Export functionalities are activated. Main form is separated into following tabs: - Data Administration - Tables - MRP Calculation - Materials Usage List - Global Options - Licence

Page 3

http://matalab.freehostia.com - Quick Manual - Contact MRP Calculation Tab is furtherly separated into sub-tabs. All tab pages contain one or more sections separated by splitters, which you can freely move and enlarge section of interest. Every section contains datagrids with columns showing data. By clicking column's title you can sort a dataset by the column, ascending or descending. Above every grid, there is a ribbon with buttons for data navigation, saving, loading, exporting, searching, filtering, reporting, starting calculation etc. On application close, ExpressMRP saves positions of every splitters on pages and columns in datagrids. This way, ExpressMRP remembers your visual customizations. On next application start, it will load saved customizations from file (ExpressMRPSession.xml). 3.2.1 Find button

Notice "Find" button placed on most ribbons above datagrids. When you click it, a pop-up window for searching will appear.

From combobox list choose a field on which search action will be

Page 4

http://matalab.freehostia.com performed, then click "Find". If ExpressMRP finds appropriate value, cursor will be placed on corresponding row. 3.2.2 Filter button

Notice "Filter" button placed on most ribbons above datagrids. When you click it, a pop-up window for filtering dataset will appear.

Filters are very powerful way to sort results of MRP calculation. Use it extensively and you will not regret, since they will save you lot of time. Filter expressions are constructed by combining: field name (column names from CSV files), some operator or function (=, <, >, <> etc.) and value expression. Single quotes have to enclose strings. "*" is joker symbol representing any number of any characters. You can also use logic operators such as "OR", and "AND". Examples of filter expressions: Component = '4*' ComponentShortageTotalQuantity > 0 ProductDescription = 'Tams*' ComponentShortageTotalQuantity > 0 AND Component ='2*'

Page 5

http://matalab.freehostia.com Component ='5*' AND ComponentDescription='*Kut*' AND ComponentDescription='*tran*' ComponentShortageTotalQuantity > 0 AND Component ='5*' AND ComponentDescription='*Kut*' AND ComponentDescription='*trans*' In filtering pop-up window, insert a row in datagrid and enter a name for new filter. ExpressMRP stores filters for further reuse. You can write filter expression manually or use help of combobox lists with fields and expressions. "Append Field" and "Append Expression" buttons append chosen values to expression below. Save filter by pressing "Post" button. Activate filter by clicking "Apply Filter". Remove filter by clicking "Remove Filter". 3.2.3 Export button

Notice "Export" button placed on most ribbons above datagrids. When you click it, a pop-up window for exporting dataset will appear.

This enables you to export a dataset to specified CSV table. Enter the full path and name of exported CSV file, specify decimal separator and field delimiter and click "Save file" button.

Page 6

http://matalab.freehostia.com 3.2.4 Clear, Save and Load buttons

"Clear" button deletes all records from a dataset, "Save" button saves dataset to underlying CSV file, while "Load" button loads data from underlying CSV table into in-memory dataset. 4 Global Options (ExpressMRPOptions.txt) You can set custom values for several options that influence behavior of the application. After any change in global options, you have to close and reopen application, in order to activate changes.

4.1

DecimalSeparator

This parameter determines character to be used as decimal separator. It can be dot (".") or comma (",") or you can leave it empty. In case of empty, ExpressMRP will use local system settings for decimal separator. If you set, for example, "," as decimal separator and import data that use "." as decimal separator, ExpressMRP will try to replace all dots with commas during import process. Remember that in tables for data import, numeric float values should contain only decimal separator and no thousand separator. If you have thousand separator in CSV file, remove it before data import into ExpressMRP. Otherwise, ExpressMRP will not distinguish decimal and thousand separator and will crash. Page 7

http://matalab.freehostia.com

4.2

FloatPrecision

Here you can define precision of float fields. 4.3 FloatDisplayFormat

Here you can define display format for float fields, by using standard Pascal/Delphi symbols for formatting. Use "#" and "0" signs to specify formatting output. "#" defines digit place that can be empty, while "0" defines a digit place that must not be empty. "." symbolizes decimal separator (both decimal dot and decimal comma separator). Some formatting examples: Format #.# Examples of output 1.1; 1; .2; 2.3; 13423125 (1,1; 1; .2; 2,3; 13423125) #0.00 1.10; 1.00; 0.20; 2.30; 13423125.00 (1,10; 1,00; 0,20; 2,30; 13423125,00) #,##0.## 1.10; 1.00; 0.20; 2.30; 13,423,125.00 (1,10; 1,00; 0,20; 2,30; 13.423.125,00) 4.4 MaxStringSize

MaxStringSize parameter limits maximum string size. This way you can restrict memory consumption, if not enough memory. 5 Data Administration Tab In Data Administration tab, you can: a) save and restore internal ExpressMRP underlying tables b) define import schema and perform import from external csv tables.

Page 8

http://matalab.freehostia.com

5.1

Saving and restoring data

Normally, all ExpressMRP tables are saved on closing application and restored on opening application. Primary tables (those listed in tab "Tables" and ExpressMRPOptions.txt) are, additionaly, immediately saved after any manual insert, edit or delete. Other tables are not immediately saved, but can be saved on request, by pressing "Save session" button or by pressing individual "Save" button. The reason why secondary tables are not immediately saved is Page 9

http://matalab.freehostia.com due performance issues. In-memory processing is much faster if dataset is not being saved to disk all the time. Immediate save would slow proccessing down. Note "Save session" and "Restore previous session" buttons in "Data Administration" tab. Also, note buttons "Clear", "Save" and "Load" in other tabs. You can save all in-memory dataset to underlying tables by clicking "Save session" button. You can restore all tables from previously saved session, by clicking "Restore previous session" button. Besides that, you can use buttons related to individual tables: "Clear" - deletes all rows from a dataset. If primary table, rows are going to be deleted from CSV file as well, else, CSV file will remain unchanged until explicit save is done. "Save" - saves in-memory dataset to underlying csv table. "Load" - loads rows from underlying csv tables into in-memory dataset. 5.2 Import from external data

ExpressMRP enables data import definition from external sources, by allowing you to define different saved import variants that you can reuse. An import schema can be defined for all or some of the following ExpressMRP tables: Products.txt, Boms.txt, Stocks.txt, Orders.txt. Those ExpressMRP tables are called "Destination Tables". "Source tables" (those from which we import data into ExpressMRP tables) must be in CSV format ("Comma-Separated Values"), but field separator can be either ";" or ",". Decimal separator can be either "." or "," and ExpressMRP will take care how to transform it according to current settings for decimal separator. However, thousand separator must not be present in float values. If you have both decimal and thousand separator, remove thousand separator from source CSV tables prior data import. Preparing good import schemas and quality source CSV tables for data import is of essential importance for utilization of ExpressMRP. Though it can be stand-alone application, ExpressMRP is designed to rely on imported external business data. Though you can input data manually, ExpressMRP is meant to rely on fast and flexible data import from external sources such as: different ERP systems (SAP ERP for example), business databases or Ecel sheets. CSV text file is common format for data exchange between different business systems and all ERP systems can export reports to CSV

Page 10

http://matalab.freehostia.com format. You can save any spreadsheet as CSV tables too. You can define and execute data import inside Data Administration tab. 5.2.1 Import Variants

In upper section od Data Administration page, there is a datagrid in which you can name an import schema variant. Use diffent import schemas for partial imports. For instance, you can have one master import schema that import data for all ExpressMRP tables (products, bill of materials, stocks, orders). However, you will do this import variant once in a month, since products and bills of materials don't change every day. However, materials stocks and production orders do change often. Therefore, it makes sense to define additional import schemas for orders and stocks, which you will execute every day or so. Furthermore, you will probably have to define few different import schemas for Stocks.txt, depending on what you consider by "available stock" in a specific MRP simulation. For example, sometimes you just want to check whether you have all materials on current stock, no matter in which status of quality. Sometimes you want to include only stocks already released by Quality Assurance department. Sometimes you want to include not only real physical stocks, but also quantities that are ordered from suppliers but not yet received, because you know that it will be available soon. You can define all these different scenarios as separate import schema variants that you can execute separately to get data of current interest. 5.2.2 Defining Tables For Import

Page 11

http://matalab.freehostia.com

Central section in Data Administration Tab consists of two sub-sections, separated by vertical splitter. The left one contains datagrid with destination tables (ExpressMRP tables), while the right one contains datagrid for source tables (tables from which data is imported). When you insert a new import variant, list of destination ExpressMRP tables is automatically added into the Destination Tables section. For every destination table listed you can switch-on or switch-off whether data is going to be imported or not, by placing check-mark into "To Be Imported" check box. On the right, in Source Tables section, there is a file navigator, by which you find a CSV file containing source data to be imported. Then choose columns delimiter used in original source file (";" or ",") and click "Add file to list" button. This will append the file into Source Tables datagrid list. Next step is to bond source and destination table. Navigate both datagrids so that cursor is positioned on appropriate source and destination tables. Then click "=" button in order to connect them. This will copy source table name, path and delimiter from source table row into destination table row. If you want to remove a bond, just click "<>" button. "<<>>" button will remove bonds for all destination tables. Of course, you can manually edit and delete rows in both sections. 5.2.3 Defining Fields For Import

The lower section defines bondage between Source Table and Destionation Table fields (columns). This section is similary organized to previous section.

Page 12

http://matalab.freehostia.com

Here you have list of destination fields on the left and list of source fields on the right, for current pair of Source/Destination tables. Place cursor on left row, navigate appropriate row in right list and click "=" button in order to bond them. This will copy source field name into the Destination Field row. Now ExpressMRP knows from which source field to insert data into which destination field. You can remove bonds by using "<>" and "<<>>" buttons. 5.2.4 Data Import Execution

Once different import schema variants are defined, you can execute any of them by placing cursor on an import variant and clicking "Import data" button. This will start importing process defined by currrent import schema variant. For current import schema ExpressMRP will navigate through all destination tables which are marked as active, check which source tables correspond to which destination tables, which source fields correspond to which destination fields and finally import data to destination tables. 6 Tables Tab In Tables page, you can manually edit, insert or delete records in primary datasets: Products, Boms, Stocks, Orders. Since primary tables have persistent save option switched-on by default, any change will be immediately saved to underlying CSV tables: Products.txt, Boms.txt, Stocks.txt, Orders.txt. 6.1 Products and BOMs

Page 13

http://matalab.freehostia.com

On Tables/Products and Boms page you can manually insert, edit or delete data about products and corresponding bills of materials. Tables Products.txt and Boms.txt are in referential integrity relation in which Products.txt is master while Boms is slave dataset. They are connected by "Product" key field. Both tables have switched-on persistent save by default, meaning that every change in a dataset's row is automatically saved to underlying CSV tables. Both tables have "Base quantity" column, which meaning is: - In Products table, "base quantity" is quantity of product for which bill of materials is expressed. It's usually 1 piece, 1000 pieces, 100 kg etc... - In BOMS table, "base quantity" is quantity of a material required for production of product's base quantity. By clicking "Report1" button, you get printable report with enlisted all products with corresponding bills of materials.

Page 14

http://matalab.freehostia.com

By clicking "Report2" button, you get printable bill of materials for current product. 6.2 Stocks

Note that you can have multiple rows for the same material. This is due fact that in many industries, materials are managed in batches or series. ExpressMRP intentionally does not take care of batches, neither statuses of batches. For the sake of simnplicity and universal approach, such complexity is left outside ExpressMRP, meaning that you have to manage it outside ExpressMRP. In reality, it means that you should ensure different import schema variants for improting different statuses of stocks.

Page 15

http://matalab.freehostia.com For example, you can define separate import schemas for stocks: a) all stocks, no matter the status b) all stocks, no matter the status + quantities that are ordered from suppliers, but not yet received in warehouse c) only stocks that are analyzed and released by Quality assurance etc. 6.3 Production Orders

Basically, this is list of products with quantities to be produced. Optionally, every order can have it's unique designation, "Order" field. However, this is not obligatory field, since ExpressMRP uses it's own automatically generated IDs for MRP calculation. This list can be partially or fully appended to MRP calculation as it will be explained later. Please, bare in mind that ExpressMRP does not take care of planned production dates. ExpressMRP will set priorities according to oreder in which orders/product are appended to MRP calculation. Thus, I suggest you to ensure that source data table (a table from which orders are going to be imported to ExpressMRP) is previously sorted by planned dates of production or sorted by priorities. 7 MRP Calculation Tab MRP Calculation tab is the core of ExpressMRP. It is divided into two sub-tabs or pages: a) MRP For Single Product

Page 16

http://matalab.freehostia.com b) MRP For Multiple Products MRP For Multiple Products is furtherly divided into following sub-pages: a) MRP Preparation b) MRP Results By Products c) MRP Results By Components 7.1 MRP For Single Product

Single product MRP is an easy way to check component's availability for a single product, ingoring all other products/production orders. It is also a simple way to calculate bill of materials for specified product's quantity.

MRP For Single Product page consists of three sections divided by splitters. a) List of products Dataset is based on underlying CSV table "SingleMRPProducts.txt". By clicking "Load Initial Data" button, ExpressMRP will load list of products from dataset "Products" into the dataset "SingleMRPProducts". ExpressMRP will take over product's base quantity as product target quantity (quantity to be produced). You can change this quantity manually and ExpressMRP will then automatically recalculate requirements, availability and

Page 17

http://matalab.freehostia.com shortages for specified quantity of the product. b) Calculated requirements, availability and shortages of components The dataset is based on underlying CSV table "SingleMRPComponents.txt". According to specified quantity of a product and it's bill of materials, ExpressMRP will calculate required quantity and availability of components. Required Quantity - quantity of a component needed for the product's target quantity Available Quantity - quantity available on stock Shortage Quantity - missing quantity of a component for asked product's quantity Enough - indicator whether enough quantity of component is available or not. Rows have additional colour signalization for missing components. If there is a shortage for a component, the row will be yellowed. c) Footer with calculated summary information The dataset is based on underlying CSV table "SingleMRPFooter.txt". In the footer datagrid, there is calculated information whether required product's quantity can be produced or not and what is the maximum quantity that could be produced with available stocks of components. If you change "Required quantity" of component manually, then ExpressMRP will calulculate and change product's quantity and recalculate components availability for new product's quantity.

Page 18

http://matalab.freehostia.com

This is very handy for getting on-the-fly answer on questions like: "OK., how many product I could produce with XX quantity of component XYZ?". The answer is going to be in recalculated product quantity. By clicking "Report" button, you get printable report with calculated bill of materials for specified quantity of current product, along with components availability information.

Page 19

http://matalab.freehostia.com

7.2

MRP For Multiple Products

Multiple products/production orders MRP is the core functionality of ExpressMRP. Here you can calculate material requirements, availability and shortages for multiple products with specified quantities. The page is divided into following sub-pages: 7.2.1 MRP Preparation

On this page you can define list of products to be included into MRP calculation, issued quantities and priorities.

MRP Preparation page is divided into two main section, separated by horizontal splitters.

Page 20

http://matalab.freehostia.com Upper section is furtherly separated into two sub-sections, separated by vertical splitters. The left-one contains list of products, while the right-one contains list of production orders. These two datagrids load read-only data from underlying CSV tables: Products.txt and Orders.txt. You can edit these tables in Tables tab, as previously described. You can append products (product with base quantity) or production orders (product with already defined issued quantity) into lower section, by using "Append Selected Product", "Append Selected Order" or "Append All Orders" buttons. Then you can edit required quantities manually in the list. This datagrid reads and writes to MultipleMRPProducts dataset, which is connected to underlying MultipleMRPProducts.txt CSV table. However, for the sake of performance, the dataset is not automatically saved to CSV table, but it is saved explicitely when closing application, clicking "Save" button and during MRP calculation. Bare in mind that order of appending products to the list is of great importance, since MRP calculation will consider this to be list of priorities. Items on the top of list will have higher priority for materials distribution. The order by which products are appended to the list is the order of priorities for materials distribution. After you have appended all products to be included into MRP calculation and have edited quantities, you can start MRP calculation by pressing "Calculate MRP" button. This will start calculation and update results in "MRP Results By Products" and "MRP Results By Components" tabs. 7.2.2 MRP Results By Products

On this page you can watch results of MRP calculation, sorted by products.

Page 21

http://matalab.freehostia.com

The page is divided in two sections separated by splitters. In the upper one products are listed, while in the lower one corresponding components are listed. Upper section is based on dataset MultipleMRPProducts (and underlying CSV table MultipleMRPProducts.txt), while lower section is based on dataset MultipleMRPComponents (and underlying CSV table MultipleMRPComponents.txt). For the sake of performance, datasets are not automatically saved to underlying CSV tables, but only explicitly (during MRP calculation, by clicking "Save" button or when closing application). For every product, you can see planned quantity and information whether it can be produced or not with current stock of components. There is also info about maximum quantity of product that could be produced. In the lower section, you can see listed components for current product, with following information: Page 22

http://matalab.freehostia.com - Is there enough component for this production order (column "Enough")? - Is there enough component for all production orders (column "Enough Total")? - What is the required quantity of the component, for this production order? (column "Required Quantity")? - What is the required quantity of the component, for all production orders? (column "Required Total Quantity")? - What is the available quantity of the component, for this production order (column "Available Quantity")? - What is the available quantity of the component, for all production orders (column "Available Total Quantity")? - What is the missing quantity of the component, for this production order (column "Shortage Quantity")? - What is the missing quantity of the component, for all production orders (column "Shortage Total Quantity")? By clicking "Report" button, you get printable report of the MRP Results with production orders and corresponding material requirements and availability of components:

7.2.3

MRP Results By Components

On this page MRP results are listed and sorted by components. The page is divided in two sections separated by horizontal splitters. In the upper one components are listed, while in the lower one corresponding products (production orders) are listed. The upper section is based on MultipleMRPComponentsSummary dataset (and underlying CSV table MultipleMRPComponentsSummary.txt), while lower section is based on MultipleMRPProductsSummary dataset (and underlying CSV table Page 23

http://matalab.freehostia.com MultipleMRPProductsSummary.txt). For the sake of performance, on edit, update or delete of these datasets, they are not immediately saved to underlying CSV tables. They are saved only explicitly (during MRP calculation, on closing application or when clicking "Save" button).

In the upper section, you can see listed components with summary information: - Is there enough component for all production orders (column "Enough Total")? - What is the required quantity of the component, for all production orders? (column "Required Total Quantity")? - What is the available quantity of the component, for all production orders (column "Available Total Quantity")? - What is the missing quantity of the component, for all production orders (column "Shortage Total Quantity")?

Page 24

http://matalab.freehostia.com In the lower section, you can see listed individual products (production orders) that require current component, along with component's requirements for individual orders. Following info is available: - Production order quantity - Can product be produced? - What is the maximum product's quantity that could be produced with available stocks distributed for this production order? - Is there enough component (current component) for this production order (column "Enough")? - What is the required quantity of the component, for this production order? (column "Required Quantity")? - What is the available quantity of the component, for this production order (column "Available Quantity")? - What is the missing quantity of the component, for this production order (column "Shortage Quantity")? By clicking "Report1" button, you get printable report with the list of components and summary requirements and availability.

By clicking "Report2" button, you get extensive printable report with the list of components with summary requirements and availability, along with details about corresponding products/production orders requiring listed components.

Page 25

http://matalab.freehostia.com

8 Materials Usage List Tab

Page 26

http://matalab.freehostia.com

On this page, you can get list of materials with corresponding products in which components are being used. The page is consisting of two sections separated by splitter. In the upper section components are listed, along with available stocks, while corresponding products are listed in the lower section, along with information about base product quantity and component required quantities, taken from bills of materials. The upper section is based on UniqueComponents dataset (and underlying UniqueComponents.txt CSV table), while lower section is based on UniqueComponentsProducts dataset (and underlying UniqueComponentsProducts.txt CSV table). By clicking "Calculate" button, the materials usage list is calculated and datagrids updated. By clicking "Report1" button you get printable materials usage list for all components.

Page 27

http://matalab.freehostia.com

By clicking "Report2" button you get printable materials usage list for current component.

9 Contact Zlatko Matic (e-mail: matalab@gmail.com) http://matalab.freehostia.com Milkoviceva 6 Mala Ostrna 10370 Dugo Selo Page 28

http://matalab.freehostia.com Croatia 10 Try, Purchase, Donate Download recent manual: http://matalaba.freehostia.com/ExpressMRP_Manual.rtf Download 30-days trial: http://matalab.freehostia.com/ExpressMRP_1_1_0_Trial_Setup.exe You can purchase full version (Windows and Linux) from Share-It service: http://www.shareit.com/product.html?productid=300355629 If you wish to enhance ExpressMRP and create your own derivative product, you can purchase the source code from Share-It service: http://www.shareit.com/product.html?productid=300377976 If you find this software useful, please support this software by donation:
Zlatko Mati, Milkovieva 6, Mala Ostrna, 10370 Dugo Selo, Croatia Bank: Zagrebacka banka dd, Zagreb, Paromlinska 2 SWIFT/BIC: ZABAHR2X IBAN: HR0723600003234431003 Account: 3234431003

Thank you!

Page 29