Beruflich Dokumente
Kultur Dokumente
, Debari
A Report On Industrial Training & Project on Inventory Management System
www.studygalaxy.com
PREFACE
Depending on the sub-speciality(ies) involved, industrial engineering may also be known as operations management, management science, systems
engineering, or manufacturing engineering, usually depending on the viewpoint or motives of the user. While the term originally applied to manufacturing, nowadays the term "industrial" in industrial engineering can be somewhat misleading (leading to the typical extensions noted above). It has grown to encompass any methodical or quantitative approach to optimizing how a process, system, or organization operates. The various topics of concern to industrial engineers
research, systems engineering, ergonomics, cost and value engineering, quality engineering, facilities planning, and the engineering design process.
Traditionally, a major aspect of industrial engineering was planning the layouts of factories and designing assembly lines and other manufacturing paradigms. While pursuing our industrial training here at HINDUSTAN ZINC LTD., DEBARI in IT department we developed this report covering a general overview of all the aspects of the industry and tried to lay emphasis on the computer oriented applications which also includes the project on Inventory Management System
which
we
developed
as
learning
procedure
for
in-house
software
development. The management of inventory is a significant task in sequence of operations in all the industries and being a tedious and sensitive task, performing it with the help of a well designed and organized computer application can be a great boon. The same made us choose this as the subject of our project development.
ACKNOWLEDGEMENT
Firstly, I express deep gratitude towards Mr. T.A. KOTANGLE (HOD: Department of IT, ZSD) for helping us accomplish this task by sparing his valuable time and providing us his priceless guidance. We would also like to thank all the executives of Hindustan Zinc Ltd. for providing us with all the relevant data as per the project and innovative ideas to update it with the latest technology and functions.
Last but not the least we would like to thank the college administration for allowing us to pursue our industrial training in this esteemed organization.
No part of this report may be reproduced, stored in a retrieval system or transmitted in any form or by any means (except for review or criticism) without prior permission of the author(s). If any individual/publication/institute/ is found indulging in any such activity, legal action will be taken against accordingly.
CONTENTS
S.no.
1. 1
Topic
The Company Profile
Page
Section A Overview of Zinc Smelting & Allied Subjects of the Industry 2. 3. 4. 5. 6. 7. 15 8. 17 9. 18 10. 19 Section B Applications of Computer Science In The Industry 11. 12. 13. 25 Section C A Project On Inventory Management System SAP VSAT Simulation & Control 21 23 Industrial Engineering Logistics Finance Introduction Roasting Leaching Electrolysis Safety Engineering Human Resource 4 8 10 12 13
31
Design Concept
35 269
User Interface
Hindustan Zinc Limited was incorporated from the erstwhile Metal Corporation of India on 10 January 1966 as a Public Sector Undertaking. In April 2002, Sterlite Opportunities and Ventures Limited (SOVL) made an open offer for acquisition of shares of the company; consequent to the disinvestment of Government of India's (GOI) stake of 26% including management control to SOVL and acquired additional 20% of shares from public, pursuant to the SEBI Regulations 1997. In August 2003, SOVL acquired additional shares to the extent of 18.92% of the paid up capital from GOI in exercise of "call option" clause in the share holder's agreement between GOI and SOVL.
With the above additional acquisition, SOVL's stake in the company has gone up to 64.92%. Thus GOI's stake in the company now stands at 29.54%. The Group's principal activities are mining and smelting of zinc and lead operations. It's products include zinc ingots, lead ingots, silver, sulphuric acid, cadmium ingots, copper cathode and others. The Group operates with two segments namely Zinc and Other. It operates through three mining and three smelter Complexes. Mining complexes are located in Rampura Agucha, Rajpura Dariba and Zawar - all in Rajasthan. Smelter complexes are located at Chanderiya and Debari in Rajasthan and Vizag in Andhra Pradesh.
Manufacturers Sub Industry: 80,169,700,000 2010 Sales (Year Ending Jan 2011). Currency: Indian Rupees Market Cap: Shares Outstanding: Closely Held Shares: 408,017,929,235 422,531,900 Employees: 6,661 Miscellaneous Metal Producers
Share Type:
Ordinary
274,315,431
SECTION A
OVERVIEW OF ZINC SMELTING & ALLIED SUBJECTS OF THE INDUSTRY
INTRODUCTION
Zinc and zinc-containing products contribute around US$ 40 billion to the global economy each year. US$ 18.5 billion is related to mining, smelting, and refining of zinc. The rest is related to its many applications. Galvanizing, the protection of steel against corrosion by metallurgical bonding of zinc to steel, is the most important application of zinc. Other applications include die casting of precision components, alloys such as brass, as a component in
pharmaceuticals and cosmetics, in batteries and as a micronutrient for humans, animals, and plants.
Zinc smelting is the process of converting zinc concentrates (ores that contain zinc) into pure zinc. The most common zinc concentrate processed is zinc sulfide, which is obtained by concentrating Sphalerite using the froth
flotation method. Secondary (recycled) zinc material, such as zinc oxide, is also processed with the zinc sulfide. Approximately 30% of all zinc produced is from recycled sources.
The principal processes by which zinc is extracted from its ores can be categorized processes. under pyro-metallurgical processes and hydro-metallurgical
A. Pyrometallurgical Processes: Horizontal Retort Process Vertical Retort Process Electro Thermal Process Imperial Smelting Process
About 80% of worlds total zinc output is produced through conventional hydrometallurgical route i.e. Roast-leach-electrowin (RLE) route. The prerequisite condition for zinc metal extraction from sulphide concentrate through a hydro-metallurgical route is the elimination of its sulphur content in order to make it amenable to further treatment by leaching, i.e., the zinc mineral into dissolved state in solution. Since zinc sulphide mineral is not easily leached, it is first converted into zinc oxide, which is easily leached. This is predominantly accomplished by roasting of zinc concentrate in fluid bed roasters and fixation of SO2 bearing off gases thus generated as sulphuric acid by contact process. In the recent past, an alternative technology to conventional roasting followed by leaching, has been developed by Sherritt-Gordon of Canada, commonly known as Pressure Leach Process which eliminates the need of roasting step prior to leaching. The process fixes the sulphide content of concentrate as elemental sulphur, thus eliminates the need for a separate sulphuric acid production facility, whereas the zinc metal content of the concentrate is converted into a zinc sulphate solution, thus combining both roast-leach steps of conventional process into a single unit operation. Thus there are two-process route for extraction of zinc hydrometallurgically.
ROAST LEACH ELECTROWIN (RLE) PROCESS: The main purpose of roasting of zinc sulphide concentrate is to convert it into a product, which is amenable to further treatment through hydrometallurgical process for extraction of zinc. Secondly, to fix the sulphide contents into
sulphur dioxide gases for subsequent economical recovery as sulphuric acid.The principal reaction during fluid bed roasting is: 2 ZnS + 3O2 = 2ZnO + 2SO2
These rich gases are cleaned and cooled to recover dust content as zinc calcine and to remove the various harmful impurities such as Hg, Se, F, Cl, As, etc., before being led to double contact and double conversion process (DCDA) plant for manufacture of sulphuric acid. The dead roasted product, zinc calcine, is subjected to leaching with recycled electrolyte to extract zinc content. The enriched zinc sulphate solution is further subjected to purification with zinc dust to eliminate impurities like copper, cadmium, cobalt, nickel etc. before being subjected to electrolysis. The zinc sulphate solution is fortified with return electrolyte solution, undergoes electrolysis in lined concrete cells for deposition of zinc on aluminium cathodes. The lead- silver plates are used as anodes. The deposited zinc on the cathodes are periodically stripped by automatic stripping machines, melted in induction furnace and cast into saleable zinc ingots man automatic casting and stacking machine. In order to maximise zinc extractions the leach residues mainly zinc- ferrites, a bye product of leaching process, are subjected to treatment to hydrolyse its iron content into disposable Jarosite / goethite / hematite. The zinc plants are also integrated with bye-product cadmium recovery unit in order to maximise sales realization.
The standard zinc product is Special High Grade zinc (normally obtained from RLE process route), with an assay of 99.995% zinc, i.e. it can contain a maximum of 50 parts per million of impurities. There is also a grade of 98.5% zinc, the main impurity being lead, and this used to be the standard grade, called GOB (Good Ordinary Brand) or PW (Prime Western), normally a product from the Imperial smelting process (ISP). A SHG product from the ISP can also be produced by distillation process of refining. PRESSURE LEACH PROCESS: The pressure leach technique was first successfully commercially applied for zinc extraction with the commissioning of first plant in 1981 at Cominco, Trail, Canada. In this process zinc sulphide or bulk zinc concentrates are oxidized under oxygen overpressures of 1200 kpa abs. at a temperature of 1500C in sulphuric acid medium to produce zinc sulphate solution directly and the sulphide content is precipitated as elemental sulphur according to the following overall reaction: ZnS + H2S04 + 0.5 02 = ZnSO4 + H20 + S
The various factors influencing the kinetics of above reaction are the particle size, mineralogy, surface active additives, acidities, reaction time, temperature and oxygen over-pressures where by maximising metal extraction and fixation of lead and iron constituents into disposable Jarosite and other types of
residues. The zinc sulphate solution thus produced is amenable to further processing for final zinc extraction through conventional leach-electrowin units.
ROASTING
Roasting is a metallurgical process involving gas-solids reactions at elevated temperatures. A common example is the process in which sulfide ores are converted to oxides, prior to smelting. Roasting differs from calcination, which merely involves decomposition at elevated temperatures. A typical sulfide roasting chemical reaction takes the following form: MSn + 1.5nO2 MOn + nSO2. For example: CuS + 1.5O2 CuO + SO2 and 2ZnS + 3O2 2ZnO + 2SO2 Roasting is a process of oxidizing zinc sulfide concentrates at high temperatures into an impure zinc oxide, called "Zinc Calcine". The chemical reactions taking place during the process are:
Approximately 90% of zinc in concentrates are oxidized to zinc oxide, but at the roasting temperatures around 10% of the zinc reacts with the iron impurities of the zinc sulfide concentrates to form zinc ferrite. A byproduct of roasting is sulfur dioxide, which is further processed into sulfuric acid, a commodity. The linked refinery flow sheet shows a schematic of Noranda's eastern Canadian zinc roasting operation. The process of roasting varies based on the type of roaster used. There are three types of roasters: multiple-hearth, suspension, and fluidized-bed. Multiple-hearth roaster In a multiple-hearth roaster, the concentrate drops through a series of 9 or more hearths stacked inside a brick-lined cylindrical column. As the feed concentrate drops through the furnace, it is first dried by the hot gases passing through the hearths and then oxidized to produce calcine. The reactions are slow and can be sustained only by the addition of fuel. Multiple hearth roasters are unpressurized and operate at about 690 C (1,270 F). Operating time depends upon the composition of concentrate and the amount of the sulfur removal required. Multiple hearth roasters have the capability of producing a high-purity calcine.
Suspension roaster In a suspension roaster, the concentrates are blown into a combustion chamber very similar to that of a pulverized coal furnace. The roaster consists of a refractory-lined cylindrical steel shell, with a large combustion space at the top and 2 to 4 hearths in the lower portion, similar to those of a multiple hearth furnace. Additional grinding, beyond that required for a multiple hearth furnace, is normally required to ensure that heat transfer to the material is sufficiently rapid for the desulfurization and oxidation reactions to occur in the furnace chamber. Suspension roasters are unpressurized and operate at about 980 C (1,800 F). Fluidized-bed roaster In a fluidized-bed roaster, finely ground sulfide concentrates are suspended and oxidized in a feedstock bed supported on an air column. As in the suspension roaster, the reaction rates for desulfurization are more rapid than in the older multiple-hearth processes. Fluidized-bed roasters operate under a pressure slightly lower than atmospheric and at temperatures averaging 1,000 C (1,830 F). In the fluidized-bed process, no additional fuel is required after ignition has been achieved. The major advantages of this roaster are greater throughput capacities, greater sulfur removal capabilities, and lower maintenance.
LEACHING
4
salts in aqueous media. Compared
Leaching is a widely used extractive metallurgy technique which converts metals into soluble
to pyrometallurgical operations, leaching is easier to perform and much less harmful, because no gaseous pollution occurs. The only drawback of leaching is its lower efficiency caused by the low temperatures of the operation, which dramatically affect chemical reaction rates. There are a variety of leaching processes, usually classified by the types of reagents used in the operation. The reagents required depend on the ores or pretreated material to be processed. A typical feed for leaching is
For material in oxide form, a simple acid leaching reaction can be illustrated by the zinc oxide leaching reaction: ZnO + H2SO4 ZnSO4 + H2O In this reaction solid ZnO dissolves, forming soluble zinc sulfate. In many cases other reagents are used to leach oxides. For example, in the metallurgy of aluminium, aluminium oxide is subject to leaching by alkali solutions: Al2O3 + 3H2O + 2NaOH 2NaAl(OH)4 Leaching of sulfides is a more complex process due to the refractory nature of sulfide ores. It often involves the use of pressurized vessels, called autoclaves. A good example of the autoclave leach process can be found in the metallurgy of zinc. It is best described by the following chemical reaction: 2ZnS + O2 + 2H2SO4 2ZnSO4 + 2H2O + 2S This reaction proceeds at temperatures above the boiling point of water, thus creating a vapor pressure inside the vessel. Oxygen is injected under pressure, making the total pressure in the autoclave more than 0.6 MPa.
Fig: Flow-diagram of the second, third and fourth stage leach process
ELECTROLYSIS
Zinc is extracted from the purified zinc sulfate solution by electrowinning, which is a specialized form of electrolysis. The process works by passing an electric current through the solution in a series of cells. This causes the zinc to deposits on the cathodes (aluminum sheets) and oxygen to form at the anodes. Sulfuric acid is also formed in the process and reused in the leaching process. Every 24 to 48 hours, each cell is shut down, the zinc-coated cathodes are removed and rinsed, and the zinc is mechanically stripped from the aluminum plates. Electrolytic zinc smelters contain as many as several hundred cells. A portion of the electrical energy is converted into heat, which increases the temperature of the electrolyte. Electrolytic cells operate at temperature ranges from 30 to 35 C (86 to 95 F) and at atmospheric pressure. A portion of the electrolyte is continuously circulated through the cooling towers both to cool and concentrate the electrolyte through evaporation of water. The cooled and concentrated electrolyte is then recycled to the cells. This process accounts for approximately one-third of all the energy usage when smelting zinc. There are two common processes for electrowinning the metal: the low current
density process, and the Tainton high current density process. The former uses
a 10% sulfuric acid solution as the electolyte, with current density of 270325
amperes per square meter. The latter uses 2228% sulfuric acid solution as the electrolyte with a current density of about 1,000 amperes per square meter. The latter gives better purity and has higher production capacity per volume of electrolyte, but has the disadvantage of running hotter and being more corrosive to the vessel in which it is done. In either of the electrolytic processes, each metric ton of zinc production expends about 3,900 kWh (14 GJ) of electric power.
SAFETY ENGINEERING
Safety engineering is an applied science strongly related
6
to systems
engineering and the subset System Safety Engineering. Safety engineering assures that a life-critical system behaves as needed even when pieces fail. Ideally, safety-engineers take an early design of a system, analyze it to find what faults can occur, and then propose safety requirements in design specifications up front and changes to existing systems to make the system safer. In an early design stage, often a fail-safe system can be made acceptably
safe with a few sensors and some software to read them. Probabilistic faulttolerant systems can often be made by using more, but smaller and lessexpensive pieces of equipment. Far too often, rather than actually influencing the design, safety engineers are assigned to prove that an existing, completed design is safe. If a safety engineer then discovers significant safety problems late in the design process, correcting them can be very expensive. This type of error has the potential to waste large sums of money. The exception to this conventional approach is the way some large government agencies approach safety engineering from a more proactive and proven process perspective, known as "system safety". The system safety philosophy is to be applied to complex and critical systems, such as commercial airliners, complex weapon systems, spacecraft, rail and transportation systems, air traffic control system and other complex and safety-critical industrial systems. The proven system safety methods and techniques are to prevent, eliminate and control hazards and risks through designed influences by a collaboration of key engineering disciplines and product teams. Software safety is a fast growing field since functionality of modern systems is increasingly being put under control of software. The whole concept of system safety and software safety, as a subset of systems engineering, is to influence safety-critical systems designs by conducting several types of hazard analyses to identify risks and to specify design safety features and procedures to strategically mitigate risk to acceptable levels before the system is certified.
Additionally, failure mitigation can go beyond design recommendations, particularly in the area of maintenance. There is an entire realm of safety and reliability engineering known asReliability Centered Maintenance (RCM), which is a discipline that is a direct result of analyzing potential failures within a system and determining maintenance actions that can mitigate the risk of failure. This methodology is used extensively on aircraft and involves understanding the failure modes of the serviceable replaceable assemblies in addition to the means to detect or predict an impending failure. Every automobile owner is familiar with this concept when they take in their car to have the oil changed or brakes checked. Even filling up one's car with fuel is a simple example of a failure mode (failure due to fuel exhaustion), a means of detection (fuel gauge), and a maintenance action (filling the car's fuel tank). For large scale complex systems, hundreds if not thousands of maintenance actions can result from the failure analysis. These maintenance actions are based on conditions (e.g., gauge reading or leaky valve), hard conditions (e.g., a component is known to fail after 100 hrs of operation with 95% certainty), or require inspection to determine the maintenance action (e.g., metal fatigue). The RCM concept then analyzes each individual maintenance item for its risk contribution to safety, mission, operational readiness, or cost to repair if a failure does occur. Then the sum total of all the maintenance actions are bundled into maintenance intervals so that maintenance is not occurring around the clock, but rather, at regular intervals. This bundling process introduces further complexity, as it might stretch some maintenance cycles,
thereby increasing risk, but reduce others, thereby potentially reducing risk, with the end result being a comprehensive maintenance schedule, purpose built to reduce operational risk and ensure acceptable levels of operational readiness and availability.
HUMAN RESOURCE
Human resource management is
7
to
the management of an organization's most valued assets - the people working there who individually and collectively contribute to the achievement of the objectives of the business. The terms "human resource management" and "human resources" (HR) have largely replaced the term "personnel management" as a description of the processes involved in managing people in organizations. In simple words, HRM means employing people, developing their capacities,
utilizing, maintaining and compensating their services in tune with the job and organizational requirement. Its features include: Organizational management Personnel administration Manpower management Industrial management
But these traditional expressions are becoming less common for the theoretical discipline. Sometimes even employee and industrial relations are confusingly listed as synonyms, although these normally refer to the relationship between management and workers and the behavior of workers in companies. The theoretical discipline is based primarily on the assumption that employees are individuals with varying goals and needs, and as such should not be thought of as basic business resources, such as trucks and filing cabinets. The field takes a positive view of workers, assuming that virtually all wish to contribute to the enterprise productively, and that the main obstacles to their endeavors are lack of knowledge, insufficient training, and failures of process. Human Resource Management (HRM) is seen by practitioners in the field as a more innovative view of workplace management than the traditional approach. Its techniques force the managers of an enterprise to express their goals with specificity so that they can be understood and undertaken by the workforce and to provide the resources needed for them to successfully accomplish their
assignments. As such, HRM techniques, when properly practiced, are expressive of the goals and operating practices of the enterprise overall. HRM is also seen by many to have a key role in risk reduction within organizations. Synonyms such as personnel management are often used in a more restricted sense to describe activities that are necessary in the recruiting of a workforce, providing its members with payroll and benefits, and administrating their worklife needs.
FINANCE
8
finance,
and public
Finance is the science of funds management. The general areas of finance are business
finance, personal
finance.
Finance
includes saving money and often includes lending money. The field of finance deals with the concepts of time, money, and risk and how they are interrelated. It also deals with how money is spent and budgeted. Managerial or corporate finance is the task of providing the funds for a corporation's activities. For small business, this is referred to as SME
finance (Small and Medium Enterprises). It generally involves balancing risk and profitability, while attempting to maximize an entity's wealth and the value of its stock. Long term funds are provided by ownership equity and long-term credit, often in the form of bonds. The balance between these elements forms the company's capital structure. Short-term funding or working capital is mostly provided by banks extending a line of credit.
Another
business
decision
concerning
finance
is
investment,
or fund
management. An investment is an acquisition of an asset in the hope that it will maintain or increase its value. In investment in choosing a portfolio one has to decide what, how much and when to invest. To do this, a company must: Identify relevant objectives and constraints: institution or individual goals, time horizon, risk aversion and tax considerations;
Identify the appropriate strategy: active v. passive hedging strategy Measure the portfolio performance
Financial management is duplicate with the financial function of the Accounting profession. However, financial accounting is more concerned with the reporting of historical financial information, while the financial decision is directed toward the future of the firm.
LOGISTICS
Logistics is the management of the flow of goods, information and other resources between the point of origin and the point of consumption in order to meet the requirements of consumers. Logistics involves the integration of
information,
material-handling,
and packaging, and occasionally security. Logistics is a channel of the chain which adds the value of time and place utility. Today the complexity of production logistics can be modeled, analyzed, visualized and optimized by plant simulation software. Logistics as a business concept evolved only in the 1950s. This was mainly due to the increasing complexity of supplying one's business with materials and shipping out products in an increasingly globalized supply chain, calling for experts in the field who are called Supply Chain Logisticians. This can be defined as having the right item in the right quantity at the right time at the
right place for the right price in the right condition to the right customer and is
the science of process and incorporates all industry sectors. The goal of logistics work is to manage the fruition of project life cycles, supply chains and resultant efficiencies. In business, logistics may have either internal focus (inbound logistics), or external focus (outbound logistics) covering the flow and storage of materials from point of origin to point of consumption (see supply chain management). The main functions of a qualified logistician include inventory
management, purchasing, transportation, warehousing, consultation and the organizing and planning of these activities. Logisticians combine a professional knowledge of each of these functions so that there is a coordination of resources in an organization. There are two fundamentally different forms of logistics. One optimizes a steady flow of material through a network
of transport links and storage nodes. The other coordinates a sequence of resources to carry out some project.
10 INDUSTRIAL ENGINEERING
Industrial Engineering (often now supplemented as "Industrial & Systems Engineering" or "Industrial & Operations Engineering") is a branch of engineering dealing with optimizing complex processes or systems. It is concerned with the development, improvement, implementation and evaluation of integrated systems of people, money, knowledge, information, equipment, energy, materials and/or processes. It also deals with designing new product prototypes more efficiently and more effectively. Industrial engineering draws upon the principles and methods of engineering analysis and synthesis, as well as the mathematical, physical and social sciences together with the principles and methods of engineering design to specify, predict, and evaluate the results to be obtained from such systems or processes. Its underlying concepts overlap considerably with certain business-oriented disciplines such as Operations
Management,
but
the
engineering
side
tends
to
greater
emphasize
extensive mathematical proficiency and utilization of quantitative methods. While the term originally applied to manufacturing, nowadays the term "industrial" in industrial engineering can be somewhat misleading (leading to the typical extensions noted above). It has grown to encompass any methodical or quantitative approach to optimizing how a process, system, or organization operates. In fact, the primary U.S. professional organization for Industrial Engineers, the Institute of Industrial Engineers (IIE) has been considering changing its name to something broader (such as the Institute of Industrial & Systems Engineers), although the latest vote among membership deemed this unnecessary for the time being. The various topics of concern to industrial engineers include management chain science, financial engineering, engineering engineering, operations
management, supply
management, process
research, systems engineering, ergonomics, cost and value engineering, quality engineering, facilities planning, and the engineering design process.
Traditionally, a major aspect of industrial engineering was planning the layouts of factories and designing assembly lines and other manufacturing paradigms. And now, in so-called lean manufacturing systems, industrial engineers work to eliminate wastes of time, money, materials, energy, and other resources.
SECTION B
APPLICATIONS OF COMPUTER SCIENCE IN THE INDUSTRY
SAP
11
SAP the company was founded in Germany in 1972 by five ex-IBM engineers. In case youre ever asked, SAP stands for Systeme, Andwendungen, Produkte in
der Datenverarbeitung which - translated to English - means Systems, Applications, Products in Data Processing. So now you know! Being
incorporated in Germany, the full name of the parent company is SAP AG. It is located in Walldorf, Germany which is close to the beautiful town of Heidelberg. SAP has subsidiaries in over 50 countries around the world from Argentina to Venezuela (and pretty much everything in between). SAP America (with responsibility for North America, South America and Australia - go figure!) is located just outside Philadelphia, PA.
The original five founders have been so successful that they have multiplied many times over such that SAP AG is now the third largest independent software maker in the world, with over 80,000 customers (including way more than half of the world's 500 top companies). SAP employs over 50,000 people worldwide today, and had revenues of $16.9 billion and Net Income of $2.7 billion in FY08. SAP is listed in Germany (where it is one of the 30 stocks which make up the DAX) and on the NYSE (ticker:SAP). There are now more than 121,000 installations of SAP, in 120 countries, with more than 12 million users! So now, what is SAP? It is a company, but it is also a product. So and what made this company so successful? Back in 1979 SAP released SAP R/2 (which runs on mainframes) into the German market. SAP R/2 was the first integrated, enterprise wide package and was an immediate success. For years SAP stayed within the German borders until it had penetrated practically every large German company. Looking for more growth, SAP expanded into the remainder of Europe during the 80's. Towards the end of the 80's, client-server architecture became popular and SAP responded with the release of SAP R/3 (in 1992). This turned out to be a killer app for SAP, especially in the North American region into which SAP expanded in 1988. The success of SAP R/3 in North America has been nothing short of stunning. Within a 5 year period, the North American market went from virtually zero to 44% of total SAP worldwide sales. SAP America alone employs more than 5,000
people and has added the names of many of the Fortune 500 to its customer list (8 of the top 10 semiconductor companies, 7 of the top 10 pharmaceutical companies etc). SAP today is available in 46 country-specific versions, incorporating 28 languages including Kanji and other double-byte character languages. SAP also comes in 21 industry-specific versions. SAP R/3 is delivered to a customer with selected standard process turned on, and many many other optional processes and features turned off. At the heart of SAP R/3 are about 10,000 tables which control the way the processes are executed. Configuration is the process of adjusting the settings of these tables to get SAP to run the way you want it to. Think of a radio with 10,000 dials to tune and youll get the picture. SAP functionality included is truly enterprise wide including: Financial Accounting (e.g. general ledger, accounts receivable etc), Management Accounting (e.g. cost centers, profitability analysis etc), Sales, Distribution, Manufacturing, Production Planning, Purchasing, Human
Resources, Payroll etc. All of these modules are tightly integrated which as you will find out is a huge blessing ... but brings with it special challenges.
VSAT
12
A Very Small Aperture Terminal (VSAT), is a two-way satellite ground station or a stabilized maritime Vsat antenna with a dish antenna that is smaller than 3 meters. The majority of VSAT antennas range from 75 cm to 1.2 m. Data rates typically range from 56 Kbit/s up to 4 Mbit/s. VSATs access satellites in geosynchronous orbit to relay data from small remote earth stations (terminals) to other terminals (in mesh configurations) or master earth station "hubs" (in star configurations). VSATs are most commonly used to transmit narrowband data (point of sale transactions such as credit card, polling or RFID data; or SCADA),
or broadband data (for the provision of Satellite Internet access to remote locations, VoIP or video). VSATs are also used for transportable, on-the-move (utilizing phased array antennas) or mobile maritime communications. Most VSAT networks are configured in one of these topologies:
A star topology, using a central uplink site, such as a network operations center (NOC), to transport data back and forth to each VSAT terminal via satellite,
A mesh topology, where each VSAT terminal relays data via satellite to another terminal by acting as a hub, minimizing the need for a centralized uplink site,
A combination of both star and mesh topologies. Some VSAT networks are configured by having several centralized uplink sites (and VSAT terminals stemming from it) connected in a multi-star topology with each star (and each terminal in each star) connected to each other in a mesh topology. Others configured in only a single star topology sometimes will have each terminal connected to each other as well, resulting in each terminal acting as a central hub. These configurations are utilized to minimize the overall cost of the network, and to alleviate the amount of data that has to be relayed through a central uplink site (or sites) of a star or multi-star network.
Constituent Components of a VSAT Antenna Block upconverter (BUC) Low-noise block converter (LNB) Orthomode transducer (OMT) Interfacility Link Cable (IFL) Indoor unit (IDU)
All the outdoor parts on the dish are collectively called the ODU (Outdoor Unit), i.e. OMT to split signal between BUC and LNB. The IDU is effectively a Modem, usually with Ethernet port and 2 x F-connectors for the coax to BUC (Transmit) and from LNB (Receive). The Astra2Connect has an all-in-one OMT/BUC/LNA that looks like a QUAD LNB in shape and size which mounts on a regular TV sat mount. As a consequence it is only 500 mW compared with the normal 2W, thus is poorer in rain.
13
Improve profitability by increasing production and decreasing costs with Honeywells modeling and multivariable advanced control and optimization products. Ongoing advanced control and optimization of plant operations ensures responsiveness to inevitable changes in business demands through close linkages with planning, scheduling, and management functions. Delivered through the unified Experion solutions Process improve Knowledge profitability System by (PKS)
architecture, Honeywell
increasing
throughput, reducing costs, increasing yields, and improving product quality. Advanced Control and Optimization products address all aspects of advanced process control and optimizationfrom improving regulatory loop controlto globally optimizing the entire process based on a unique layered approach. This model allows new technologies to be easily added at any time to a common platform that meets optimization objectives without compromising future opportunities to improve business performance.
UniSim software and services improve plant performance and overall business results for the process industry through:
UniSim solution software is built from the best simulation technologies available. UniSim offers a series of unified simulation solutions to support improved performance throughout the lifecycle of a plantfrom off-line use in steady-state design simulation, control check-out, and operator training, to online use in control and optimization, performance monitoring, and business planning.
With the launch of UniSim, Honeywells vision of providing best-in-class simulation solutions is realized, generating benefits across the lifecycle of a plant. UniSim substantially improves capabilities for simulation of on-line and off-line process unit design and optimization applications. Customers can more easily capture and share process knowledge, improve plant profitability, and maximize the return on their simulation investments. The UniSim family of software and services includes:
The UniSim Design suiteoffers a powerful steady-state tool that helps engineers create optimal process designs based on critical business objectives. A dynamic simulation option is also available to gain valuable insights into process behavior at every phase of a plant's lifecycle.
The UniSim Operations suiteprovides an advanced operator training solution plus capabilities for control system checkout. Well-trained personnel react more quickly and diffuse process situations before incidents occur. This is also a tool for learning a new system before commissioning, or for quickly training new hires.
The UniSim Optimization suiteoffers optimization of plant operations to ensure responsiveness to changes in business demands through close linkages with planning, scheduling, and management functions.
Dynamic Engineering Studies servicesevaluate the impact of future process design changes prior to plant modifications. Honeywell experts help
customers evaluate the impact of future process design changes before committing time and money to intensive plant modifications.
Open connectivity, modular design and solid migration paths maximize the use of tank storage capacity to optimize operations and increase revenues.
2. Temperature Measurement Systems Honeywell Enraf offers a comprehensive line of products for accurate temperature measurement, ranging from single spot temperature probes to the advanced VITO multiple thermosensor thermometers (MTT) for temperature and volume measurement. Honeywell Enrafs VITO interface guarantees faultless communication with level gauging systems based on radar or servo technology. The gauging systems can easily be provided with additional functionality for water bottom measurement, keeping the number of instruments and
components in and on the tank to a minimum. Honeywell Enrafs temperature gauging systems offer reliability, high
measurement accuracy, minimal maintenance cost and easy installation. Honeywell Enraf offers several types of temperature measurement instruments: A. Spot Temperature MeasurementHoneywell Enraf supports and supplies spot temperature probes of third-party origin for direct connection to a level gauge. The probes can be attached at any desired location in the tank. Communication with servo or radar measurement systems can take place either directly or via the VITO interface.
B. Average Temperature MeasurementFor average temperature measurement Honeywell Enraf offers the VITO MRT which consists of multiple resistor elements each with a different length. Depending on the liquid level measured by the level gauge, the longest element which is completely submerged is selected to represent the average temperature of the stored product. C. Multiple Temperature MeasurementThe VITO LT measures average product temperature and average gas temperature with a nine-element probe. The VITO LT exceeds the requirements of all standards for in-tank measurements. It can be used with products stored at between -55 degrees Celsius and +135 degrees Celsius in tanks up to 20 meters high. The temperature gauging system is suitable for customs transfer purposes in conformity with weights and measures regulations. Honeywell Enrafs top model is the VITO MTT for various temperature ranges for diverse applications and is available in any desired length. The temperature measurement is performed by a 16-element probe. The VITO MTT is able not only to measure average product and gas temperature but also to determine temperature profiles. The VITO MTT fully complies with all major standards for tank applications and is suitable for customs transfer purposes in conformity with weights and measures regulations. In addition, the VITO MTT is fit for LNG storage.
SECTION C
A PROJECT ON INVENTORY MANAGEMENT SYSTEM
GENERAL PERSPECTIVE
14
A database management system (DBMS) consists of software that organizes the storage of data. A DBMS controls the creation, maintenance, and use of the database storage structures of social organizations and of their users. It allows organizations to place control of organization wide database development in the hands of Database Administrators (DBAs) and other specialists. In large systems, a DBMS allows users and other software to store and retrieve data in a structured way. Databases function in many applications, spanning virtually the entire range of computer software. Databases have become the preferred method of storage for large multiuser applications, where coordination between many users is needed. Even individual users find them convenient, and many electronic mail
programs and personal organizers are based on standard database technology. Software database drivers are available for most database platforms so that application software can use a common API to retrieve the information stored in a database. Commonly used database APIs include JDBC and ODBC. We look forward to the development of an integrated database management application that could serve all the systematic data storage and data manipulation requirements for any specific department of the corporation. Logistics, Human Resources, Finance, Materials, etc are some such possible fields that can be targeted at for the development of the software. The prime objectives of the system we plan to develop are as under: Integrated data operations implemented through an innovative and efficient configuration. Stronger security features ensuring high safety of the data. Easy user interface maximizing the convenience in authenticated access. Robust design making the system more reliable and sustainable.
TECHNICAL PERSPECTIVE
15
Justification of Integration
The standard of business computing as of 2009, relational databases are the most commonly used database today. It uses the table to structure information so that it can be readily and easily searched through. Thus, we plan the same, i.e. to develop the database according to the relational model. When we assert the development of an integrated database management application, obviously we need to justify it. So, we state under the tasks that are provided in the database package: Database Development: used to define and organize the content, relationships, and structure of the data needed to build a database. Database Interrogation: can access the data in a database for information retrieval and report generation. End users can selectively retrieve and display information and produce printed reports and documents. Database Maintenance: used to add, delete, update, correct, and protect the data in a database. Application Development: used to develop prototypes of data entry screens, queries, forms, reports, tables, and labels for a prototyped application.
of the DBA. DBMSs usually enforce security through access control, auditing, and encryption: Access control ensures and restricts who can connect and what they can do to the database. Auditing logs what action or change has been performed, when and by whom. Encryption includes built-in encryption mechanisms to encode data natively into tables and to decipher information "on the fly" when a query comes in. DBAs can also secure and encrypt connections if required using DSA, MD5, SSL or legacy encryption standards.
DESIGN CONCEPT
16
The proposed design of the integrated database can be explained with the help of the following graphical layout:
The above diagrammatic representation of the development concept shows the bifurcation of various modules giving an introductory idea of the development strategy. The systematic modular development of the system ensures perfection at each level and in each sub-system. Moreover, it also makes the development procedure more easy and clear.
FORMS
17
The design of the Inventory Management System is divided into 7 major forms:
1. frmLogin.frm
It is the first opening screen of the application which prompts the user to enter the application through a valid login ID. Coding:
Private Sub cmdCancel_Click() Unload Me End Sub
Private Sub cmdNew_Click() If Not txtUserName.Text = "Admin" Or Not txtPassword.Text = "Admin" Then MsgBox "Invalid user or password", vbCritical, "Invald user/password" txtUserName.SetFocus Exit Sub End If
FrmMain.Show Unload frmLogin End If End Sub Private Sub Form_Load() End Sub
2. frmMain.frm
It is the main screen which provides access to all the features of the application namely purchase, sales, accounts, journal voucher and reports etc. Coding:
Dim VIndex As Integer Dim SideMenuVisible As Boolean 'On click if frame(Side menu) is visible the invisibole it or if invisible then visible it
End Sub
imgPurchase.Picture = img2.ListImages(11).Picture imgSale.Picture = img1.ListImages(9).Picture imgAccount.Picture = img1.ListImages(14).Picture imgVoucher.Picture = img1.ListImages(11).Picture imgReports.Picture = img1.ListImages(35).Picture imgBackUp.Picture = img1.ListImages(41).Picture ImgRestore.Picture = img1.ListImages(25).Picture
imgLogoff.Picture = img1.ListImages(18).Picture imgCalc.Picture = img1.ListImages(47).Picture imgNotepad.Picture = img1.ListImages(48).Picture imgPaint.Picture = img1.ListImages(49).Picture imgExit.Picture = img1.ListImages(50).Picture
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Call SetColorToDefault End Sub
Case 1 frmSale.Show 1
'Sales
Case 2 frmTransaction.Show 1
Case 3 FrmRep.Show 1
'Reports
Case 4
'BackUp
Case 5
'Restore
'Log off
Case 7
'Calculator
Case 8
'Notepad
Case 9
'MS Paint
Case 10
'Exit
If MsgBox("Do you want to exit?", vbQuestion + vbYesNo, "Exit?") = vbYes Then Unload Me End If
Case 11 frmAccounts.Show 1
End Select
End Sub
Private Sub PicBar_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
VIndex = Index
Select Case Index '---------------------------- MAIN MENU Case 0 PicBar(Index).Picture = LoadResPicture("Down", 0) 'Purchases
LblHelpLine.Caption = "Add your Purchases" Case 1 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Add your Sales" Case 2 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Add your Transactions" Case 3 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "View Reports" Case 4 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Create Database Backup" Case 5 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Restore Database" Case 6 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Logoff the System" Case 7 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Calculator" Case 8 'Calculator 'Logoff 'Restore 'Back Up 'Reports 'Journal Vouchers 'Sales
PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Note pad" Case 9 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "MS Paint" Case 10 PicBar(Index).Picture = LoadResPicture("Down", 0) LblHelpLine.Caption = "Exit to Windows"
'Notepad
'MS Paint
'Exit
End Select
SetPicCaption
End Sub
End Sub
Private Sub PicMenu_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) On Error Resume Next
LblHelpLine.Caption = ""
SetPicCaption
End Sub
Private Sub PicMnu_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Public Sub ReplaceCap() Dim a As Integer For a = 0 To 11 Select Case a Case 0 PrintToCenter "Purchases", PicBar(a), False Case 1 PrintToCenter "Sales", PicBar(a), False Case 2 PrintToCenter "Journal Voucher", PicBar(a), False Case 3 PrintToCenter "Reports", PicBar(a), False Case 4 PrintToCenter "Backup", PicBar(a), False Case 5 PrintToCenter "Restore", PicBar(a), False Case 6
PrintToCenter "Log Off", PicBar(a), False Case 7 PrintToCenter "Calculator", PicBar(a), False Case 8 PrintToCenter "Notepad", PicBar(a), False Case 9 PrintToCenter "MS Paint", PicBar(a), False Case 10 PrintToCenter "Exit to Windows", PicBar(a), False Case 11 PrintToCenter "Accounts", PicBar(a), False
3. frmAccounts.frm
This form creates the interface for the function of creating accounts of various types.
Coding:
Dim ProdSalePrice As Single Dim ProdReOrderPoint As Single Dim SQLQry As String Dim AvgPrice As Single
Private Sub cmbType_LostFocus() If cmbType.Text = "Product" Then cmdProdInfo.Enabled = True Else cmdProdInfo.Enabled = False End If
End Sub
Private Sub cmdCancel_Click() Clear Me 'Calling form load event Call Form_Load
End Sub
Private Sub cmdFind_Click() If optTitle.Value = True Then If Trim(txtFindTitle.Text) = "" Then MsgBox "Enter Account Title to find", vbCritical, "Message ..." txtFindTitle.SetFocus Exit Sub Else
FindRecord "Title" End If ElseIf optId.Value = True Then If Trim(txtFindId.Text) = "" Or Val(txtFindId) = 0 Then MsgBox "Enter Account ID to find", vbCritical, "Message ..." txtFindId.SetFocus Exit Sub Else FindRecord "Id" End If End If
End Sub
End Sub
If txtSalePrice.Text = "" Or Val(txtSalePrice) = 0 Then MsgBox "Enter Sale Price for this Product", vbCritical, "Message" txtSalePrice.SetFocus Exit Sub End If
End Sub
picAccounts.Enabled = False
End Sub
Private Sub cmdSave_Click() 'If Name field is blank If txtName.Text = "" Then MsgBox "Enter Account Title", vbCritical, "Message" txtName.SetFocus Exit Sub End If
MsgBox "Select Account Head", vbCritical, "Message" cmbHead.SetFocus Exit Sub End If
'If account Type not selected then If cmbType.ListIndex = -1 Then MsgBox "Select Account Type", vbCritical, "Message" cmbType.SetFocus Exit Sub End If
'If Account Type = Product (as we have other option to enter product detail) If cmbType.Text = "Product" Then If txtProdName.Text = "" Or txtSalePrice.Text = "" Or txtReOrder.Text = "" Then MsgBox "Please enter product informations", vbCritical, "Message" cmdProdInfo_Click Exit Sub End If End If
mHeadId = 1 ElseIf cmbHead.Text = "Liabilities" Then mHeadId = 2 ElseIf cmbHead.Text = "Capital" Then mHeadId = 3 ElseIf cmbHead.Text = "Revenue" Then mHeadId = 4 ElseIf cmbHead.Text = "Expense" Then mHeadId = 5 End If
'Check if Account Type is Product or anyother If Not cmbType.Text = "Product" Then txtSalePrice.Text = "0" txtReOrder.Text = "0" End If
Con.Execute "Insert into Accounts(AcId,HeadId,AcTitle,AcType,SalePrice,ReOrderPoint) Values(" & Val(txtId) & ", " & Val(mHeadId) & ", '" & txtName.Text & "', '" & cmbType.Text & "', " & Val(txtSalePrice) & ", " & Val(txtReOrder) & " )"
If cmbType.Text = "Product" Then Con.Execute "Insert into Product_Openings(ProdId, Qty, Amount) values(" & Val(txtId) & ", " & Val(txtOpStock) & ", " & Val(txtOpAmount) & ")" End If
'If Existing Record ElseIf cmdNew.Enabled = True Then If UpdateRecord.State = 1 Then UpdateRecord.Close
Set UpdateRecord = New ADODB.Recordset UpdateRecord.Open "Update Accounts set HeadId = " & Val(mHeadId) & ", AcTitle = '" & txtName.Text & "', AcType = '" & cmbType & "' , SalePrice = " & Val(txtSalePrice) & ", ReOrderPoint = " & Val(txtReOrder) & " where AcId = " & Val(txtId) & " ", Con, adOpenDynamic, adLockOptimistic
If cmbType.Text = "Product" Then Con.Execute "Update Product_Openings set Qty = " & Val(txtOpStock) & ", Amount = " & Val(txtOpAmount) & " Where ProdId = " & Val(txtId) & "" End If
End Sub
cmbType.SetFocus
If cmbType.Text = "Product" Then Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select AcTitle,SalePrice,ReOrderPoint from Accounts where AcId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic txtProdName.Text = RS(0) txtSalePrice.Text = Val(RS(1)) txtReOrder.Text = Val(RS(2))
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Qty,Amount from Product_Openings where ProdId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic txtOpStock.Text = Val(RS(0)) txtOpAmount.Text = Val(RS(1))
End If
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer) 'Changing Control focus on Enter ChangeFocusOnEnter KeyAscii, Me End Sub
Private Sub Form_Load() 'Setting up flexgrid data Call fgAccountsData Call GridSetting
Set RsNAV = New ADODB.Recordset RsNAV.Open "Select AcId, HeadId, AcTitle, AcType, SalePrice, ReOrderPoint from Accounts", Con, adOpenStatic, adLockOptimistic If RsNAV.RecordCount > 0 Then Call BoundData 'Showing Data in textboxes Else Exit Sub End If
cmdProdInfo.Enabled = False
End Sub
Set RS = New ADODB.Recordset RS.Open "Select * from ViewHeadWise order by AcId", Con, adOpenStatic, adLockOptimistic
Set fgAccounts.DataSource = RS
End Sub
Public Sub GridSetting() With fgAccounts .ColWidth(0) = 950 .ColWidth(1) = 2000 .ColWidth(2) = 1350 .ColWidth(3) = 1350
.ColAlignment(0) = 5
Public Sub BoundData() txtId.Text = Val(RsNAV(0)) If Val(RsNAV(1)) = 1 Then cmbHead.Text = "Assets" ElseIf Val(RsNAV(1)) = 2 Then cmbHead.Text = "Liabilities" ElseIf Val(RsNAV(1)) = 3 Then cmbHead.Text = "Capital" ElseIf Val(RsNAV(1)) = 4 Then
If cmbType.Text = "Product" Then txtProdName.Text = RsNAV(2) txtSalePrice.Text = Val(RsNAV(4)) txtReOrder.Text = Val(RsNAV(5)) End If
End Sub
Private Sub Form_Resize() Me.Left = Me.Left + 1200 Me.Top = Me.Top + 200 End Sub
End Sub
End Sub
'Locking Navigation
LockNav Me
Case 1
'Save
'If Name field is blank If txtName.Text = "" Then MsgBox "Enter Account Title", vbCritical, "Message" txtName.SetFocus Exit Sub End If
'If account head not selected then If cmbHead.ListIndex = -1 Then MsgBox "Select Account Head", vbCritical, "Message" cmbHead.SetFocus Exit Sub End If
'If account Type not selected then If cmbType.ListIndex = -1 Then MsgBox "Select Account Type", vbCritical, "Message" cmbType.SetFocus Exit Sub
End If
'If Account Type = Product (as we have other option to enter product detail) If cmbType.Text = "Product" Then If txtProdName.Text = "" Or txtSalePrice.Text = "" Or txtReOrder.Text = "" Then MsgBox "Please enter product informations", vbCritical, "Message" cmdProdInfo_Click Exit Sub End If End If
'Finding Head Account ID through CMBHead.Text If cmbHead.Text = "Assets" Then mHeadId = 1 ElseIf cmbHead.Text = "Liabilities" Then mHeadId = 2 ElseIf cmbHead.Text = "Capital" Then mHeadId = 3 ElseIf cmbHead.Text = "Revenue" Then mHeadId = 4 ElseIf cmbHead.Text = "Expense" Then mHeadId = 5 End If
'Check if Account Type is Product or anyother If Not cmbType.Text = "Product" Then txtSalePrice.Text = "0" txtReOrder.Text = "0" End If
Con.Execute "Insert into Accounts(AcId,HeadId,AcTitle,AcType,SalePrice,ReOrderPoint) Values(" & Val(txtId) & ", " & Val(mHeadId) & ", '" & txtName.Text & "', '" & cmbType.Text & "', " & Val(txtSalePrice) & ", " & Val(txtReOrder) & " )"
If cmbType.Text = "Product" Then Con.Execute "Insert into Product_Openings(ProdId, Qty, Amount) values(" & Val(txtId) & ", " & Val(txtOpStock) & ", " & Val(txtOpAmount) & ")"
'Average Cost Price / Sale Price AvgPrice = Val(txtOpAmount) / Val(txtOpStock) Con.Execute "Insert into Avg_Cost(ProdId, PurAvg, SalAvg) Values(" & Val(txtId) & ", " & Val(AvgPrice) & ", " & Val(txtSalePrice) & ")"
End If
'If Existing Record ElseIf lbl(0).Enabled = True Then If UpdateRecord.State = 1 Then UpdateRecord.Close
Set UpdateRecord = New ADODB.Recordset UpdateRecord.Open "Update Accounts set HeadId = " & Val(mHeadId) & ", AcTitle = '" & txtName.Text & "', AcType = '" & cmbType & "' , SalePrice = " & Val(txtSalePrice) & ", ReOrderPoint = " & Val(txtReOrder) & " where AcId = " & Val(txtId) & " ", Con, adOpenDynamic, adLockOptimistic
If cmbType.Text = "Product" Then Con.Execute "Update Product_Openings set Qty = " & Val(txtOpStock) & ", Amount = " & Val(txtOpAmount) & " Where ProdId = " & Val(txtId) & "" 'Average Cost Price AvgPrice = Val(txtOpAmount) / Val(txtOpStock)
Con.Execute "Update Avg_Cost SET PurAvg = " & Val(AvgPrice) & " where ProdID = " & Val(txtId) & ""
End If
cmdCancel_Click Case 2 Clear Me 'Calling form load event Call Form_Load 'Cancel
End Sub
Private Sub lbl_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3, 4, 5 MouseOver lbl(Index)
End Select
End Sub
Private Sub lblnav_Click(Index As Integer) Select Case Index Case 0 'Move First
RsNAV.MoveFirst
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else Call BoundData End If
Case 1
'Move previous
RsNAV.MovePrevious
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else Call BoundData End If
Case 2
'Move Next
RsNAV.MoveNext
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call BoundData End If
Case 3 RsNAV.MoveLast
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call BoundData End If End Select
End Sub
Private Sub lblnav_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3 MouseOver lblnav(Index) End Select
End Sub
Private Sub picAccounts_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseNormalOnLbl End Sub
Public Sub AutoId() 'Calling MaxNumber function to get Auto Id for the record MaxNumber "AcId", "Max_Codes" txtId.Text = Val(MaxNmbr) End Sub
End Sub
Private Sub txtOpAmount_Validate(Cancel As Boolean) If txtOpAmount.Text = "" Then txtOpAmount.Text = "0" End If End Sub
Private Sub txtOpStock_Validate(Cancel As Boolean) If txtOpStock.Text = "" Then txtOpStock.Text = "0" End If End Sub
Private Sub txtReOrder_Validate(Cancel As Boolean) If txtReOrder.Text = "" Then txtReOrder.Text = "0" End If End Sub
Private Sub txtSalePrice_Validate(Cancel As Boolean) If txtSalePrice.Text = "" Or Val(txtSalePrice) = 0 Then MsgBox "Enter Sale Price for this Product", vbCritical, "Message"
Public Sub FindRecord(MatchWith As String) Select Case MatchWith Case "Title" SQLQry = "SELECT Accounts.AcId,Accounts.HeadId, Accounts.AcTitle, Accounts.AcType, Accounts.SalePrice, Accounts.ReOrderPoint " & _ "FROM Account_Heads INNER JOIN Accounts ON Account_Heads.Id = Accounts.HeadId where AcTitle = '" & txtFindTitle.Text & "'"
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open SQLQry, Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then MsgBox "No account found with this Title", vbCritical, "Message.." txtFindTitle.SetFocus Exit Sub Else ShowFoundData End If
Case "Id" SQLQry = "SELECT Accounts.AcId,Accounts.HeadId, Accounts.AcTitle, Accounts.AcType, Accounts.SalePrice, Accounts.ReOrderPoint " & _ "FROM Account_Heads INNER JOIN Accounts ON Account_Heads.Id = Accounts.HeadId where AcId = " & Val(txtFindId) & ""
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open SQLQry, Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then MsgBox "No account found with this ID", vbCritical, "Message.." txtFindId.SetFocus Exit Sub Else ShowFoundData End If
ElseIf Val(RS(1)) = 2 Then cmbHead.Text = "Liabilities" ElseIf Val(RS(1)) = 3 Then cmbHead.Text = "Capital" ElseIf Val(RS(1)) = 4 Then cmbHead.Text = "Revenue" ElseIf Val(RS(1)) = 5 Then cmbHead.Text = "Expense" End If
If cmbType.Text = "Product" Then txtProdName.Text = RS(2) txtSalePrice.Text = Val(RS(4)) txtReOrder.Text = Val(RS(5)) End If
If cmbType.Text = "Product" Then Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select AcTitle,SalePrice,ReOrderPoint from Accounts where AcId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Qty,Amount from Product_Openings where ProdId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic txtOpStock.Text = Val(RS(0)) txtOpAmount.Text = Val(RS(1))
End If
lblnav(1).ForeColor = vbWhite
lblnav(1).Font.Underline = False
End Sub
4. frmPurchase.frm
This form creates the interface for the function of creating purchase entries.
Coding:
Dim Duplicate As Boolean Dim RowSelect As Integer Dim FgRow As Integer Dim rCount As Integer Dim mSqlQry As String Dim PurchaseId As Single Dim PurMainCode As Single Dim ObjectFoucs As Boolean 'True if Focus on TxtName(Supplier Name) . False if Focus on Grid Dim OpQty As Single Dim OpAmount As Single
End Sub
modWriteInGrid.SetPSGRID fgPurchase
Call AutoId
Case 1
'Save
'Checking Data to Save If Val(fgPurchase.Rows) < 3 Then MsgBox "No data to save", vbInformation, "Message" Exit Sub End If
'If Account not selected If TxtAcCode.Text = "" Or Val(TxtAcCode) = 0 Then MsgBox "Select Account Name", vbCritical, "Message" TxtName.SetFocus Exit Sub End If
'Getting Maximum Code for Purchase Main MaxNumber "PurId", "Max_Codes" PurMainCode = Val(MaxNmbr)
'Getting Maximum Code for Transaction Main MaxNumber "TransId", "Max_Codes" TranMainId = Val(MaxNmbr)
'Inserting Data to TransactionMain Table Con.Execute "insert into Transaction_Main (TransId,TransDate,TransType,Posted,TransRef) values (" & Val(TranMainId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , '" & TransactionType & "' ,'" & "N" & "', '" & TransactionRef & "')"
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for CREDIT ENTRY 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
PurchaseRef = "Purchase # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(TranMainId) & ", " & Val(TxtAcCode) & ", '" & PurchaseRef & "', 0 , " & Val(txtTotal) & ")"
'Inserting Data to PurchaseMain Table Con.Execute "insert into Purchase_Main (PurId,PurDate,TotalAmount) values (" & Val(txtId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , " & Val(txtTotal) & " )"
PurchaseId = Val(MaxNmbr)
'Inserting Data to Purchase Detail Con.Execute "Insert into Purchase_Detail (PurDetId, PurId, AcId, ProdId, Qty, Price) values (" & Val(PurchaseId) & ", " & Val(txtId) & ", " & Val(TxtAcCode) & ", '" & fgPurchase.TextMatrix(FgRow, 5) & "', " & Val(fgPurchase.TextMatrix(FgRow, 2)) & ", " & Val(fgPurchase.TextMatrix(FgRow, 3)) & ")" 'Updating MaxCode for Purchase Detail UpdateMaxNumber "PurDetId", Val(PurchaseId)
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for DEBIT ENTRY 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
PurchaseRef = "Purchase # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(TranMainId) & ", " & Val(fgPurchase.TextMatrix(FgRow, 5)) & ", '" & PurchaseRef & "', " & Val(fgPurchase.TextMatrix(FgRow, 4)) & ", 0)"
Next
Else
'Deleting old records from PurchaseMain and Purchase Detail Con.Execute "Delete from Purchase_Detail where PurId = " & Val(txtId) & "" Con.Execute "Delete from Purchase_Main where PurId = " & Val(txtId) & ""
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from Transaction_Main where TransRef = '" & TransactionRef & "'", Con, adOpenStatic, adLockOptimistic
MTranId = Val(RS(0))
Con.Execute "Delete from Transaction_Detail Where TranId = " & Val(MTranId) & "" Con.Execute "Delete from Transaction_Main where TransRef = '" & TransactionRef & "'"
'Checking Data to Save If Val(fgPurchase.Rows) < 3 Then MsgBox "No data to save", vbInformation, "Message" Exit Sub End If
'If Account not selected If TxtAcCode.Text = "" Or Val(TxtAcCode) = 0 Then MsgBox "Select Account Name", vbCritical, "Message" TxtName.SetFocus Exit Sub End If
'Inserting Data to TransactionMain Table Con.Execute "insert into Transaction_Main (TransId,TransDate,TransType,Posted,TransRef) values (" & Val(MTranId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , '" & TransactionType & "' ,'" & "N" & "', '" & TransactionRef & "')"
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for CREDIT ENTRY 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
PurchaseRef = "Purchase # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(MTranId) & ", " & Val(TxtAcCode) & ", '" & PurchaseRef & "', 0 , " & Val(txtTotal) & ")"
'Inserting Data to PurchaseMain Table Con.Execute "insert into Purchase_Main (PurId,PurDate,TotalAmount) values (" & Val(txtId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , " & Val(txtTotal) & " )"
'Getting Maximum Code for Purchase_Detail MaxNumber "PurDetId", "Max_Codes" PurchaseId = Val(MaxNmbr)
'Inserting Data to Purchase Detail Con.Execute "Insert into Purchase_Detail (PurDetId, PurId, AcId, ProdId, Qty, Price) values (" & Val(PurchaseId) & ", " & Val(txtId) & ", " & Val(TxtAcCode) & ", '" & fgPurchase.TextMatrix(FgRow, 5) & "', " & Val(fgPurchase.TextMatrix(FgRow, 2)) & ", " & Val(fgPurchase.TextMatrix(FgRow, 3)) & ")"
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for DEBIT ENTRY (Product in grid Entry) 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
PurchaseRef = "Purchase # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(MTranId) & ", " & Val(fgPurchase.TextMatrix(FgRow, 5)) & ", '" & PurchaseRef & "', " & Val(fgPurchase.TextMatrix(FgRow, 4)) & ", 0)"
Next
End If
Case 2 Clear Me
'Cancel
fgPurchase.Clear
modWriteInGrid.SetPSGRID fgPurchase
Call ExistData
Dtp1.SetFocus
'Delete
If MsgBox("Do you want to delete this purchase?", vbQuestion + vbYesNo, "Delete Voucher") = vbYes Then If MsgBox("System will be unable to recover the loss data. Continue ?", vbQuestion + vbYesNo, "Delete Voucher") = vbYes Then 'Deleting data from Transaction Main and Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select TransId from Transaction_Main where TransRef = '" & mRef & "'", Con, adOpenStatic, adLockOptimistic mTransID = Val(RS(0))
Con.Execute "Delete from Transaction_Main where TransID = " & mTransID & "" Con.Execute "Delete from Transaction_Detail where TranId = " & mTransID & ""
'Deleting data from Prucase Main and Detial Con.Execute "Delete from Purchase_Detail where PurId = " & Val(txtId) & "" Con.Execute "Delete from Purchase_Main where PurId = " & Val(txtId) & "" MsgBox "Record Deleted", vbInformation, "Message" lbl_Click (2) End If End If
'Find
'Exit
End Sub
Case 0
'Move First
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Exit Sub Else Call NAVData End If
Case 1
'Move previous
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else
Case 2
'Move Next
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
Case 3
'Move last
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else
End Select
End Sub
Private Sub lblnav_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3 MouseOver lblnav(Index) End Select
End Sub
Private Sub cmdFind_Click() If txtFindId.Text = "" Or Val(txtFindId) = 0 Then MsgBox "Enter Purchase ID", vbCritical, "Message.." txtFindId.SetFocus Exit Sub
End If
Call FindRecord
End Sub
End Sub
Private Sub Dtp1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then TxtName.SetFocus End If End Sub
End Sub
Private Sub fgpurchase_KeyDown(KeyCode As Integer, Shift As Integer) 'If CTRL + SPACE is pressed If fgPurchase.Col = 1 Then If KeyCode = 32 And Shift = 2 Then PicSrchGrid.Visible = True TxtGrdSrch.Text = ""
FillGridAccounts SetGridAccounts
If fgPurchase.Rows > 2 And fgPurchase.TextMatrix(fgPurchase.Row, 1) <> "" Then If MsgBox("Do you want to delete this line?", vbQuestion + vbYesNo, "Delete Line") = vbYes Then txtTotal.Text = Val(txtTotal) - Val(fgPurchase.TextMatrix(fgPurchase.Row, 4))
Else MsgBox "Blank or Last line can not be deleted", vbCritical, "Message " Exit Sub End If
End If
End Sub
Case 2, 3 'Total of Row i.e Qty * Price fgPurchase.TextMatrix(fgPurchase.Row, 4) = Val(fgPurchase.TextMatrix(fgPurchase.Row, 2)) * Val(fgPurchase.TextMatrix(fgPurchase.Row, 3))
End Select
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer) 'Changing Control focus on Enter ChangeFocusOnEnter KeyAscii, Me
End Sub
'Calling Data for navigation Set RsNAV = New ADODB.Recordset If RsNAV.State = 1 Then RsNAV.Close RsNAV.Open "Select * from Purchase_Main Order By PurId", Con, adOpenStatic, adLockOptimistic
End Sub
Public Sub FillGridAccounts() 'Filling all Accounts Data in Search grid If ObjectFoucs = True Then ' If focus on TxtName SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType NOT IN ('Product')" Else ' If focus on Product Grid
SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType IN ('Product')" End If
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseNormalOnLbl End Sub
End Sub
Private Sub lbl_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3, 4, 5 MouseOver lbl(Index)
End Select
End Sub
Private Sub TxtGrdSrch_Change() Call SearchRecord End Sub Public Sub SearchRecord() 'Filling the Search grid with Critarial Data
MshSearch.Rows = 2
MshSearch.Row = 0
SearchedRowCount = 0
If ObjectFoucs = True Then ' If focus on TxtName SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType NOT IN ('Product') And AcTitle Like '" & TxtGrdSrch.Text & "%'" Else ' If focus on Product Grid
SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType IN ('Product') And AcTitle Like '" & TxtGrdSrch.Text & "%'" End If
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open SQLQry, Con, adOpenStatic, adLockReadOnly
With MshSearch .TextMatrix(0, 0) = "ID" .TextMatrix(0, 1) = "Account Title" .TextMatrix(0, 2) = "Account Type"
End With
'' '' '' '' '' '' '' '' '' '' '' '' ''
RS.MoveNext
''
Next
End Sub
If ObjectFoucs = True Then TxtAcCode.Text = Val(MshSearch.TextMatrix(MshSearch.Row, 0)) TxtName.Text = MshSearch.TextMatrix(MshSearch.Row, 1) TxtName.SetFocus ObjectFoucs = False Else 'Checking for duplicate entry in grid Call CheckDuplicate
If Duplicate = True Then Exit Sub End If fgPurchase.TextMatrix(fgPurchase.Row, 1) = MshSearch.TextMatrix(MshSearch.Row, 1) fgPurchase.TextMatrix(fgPurchase.Row, 5) = MshSearch.TextMatrix(MshSearch.Row, 0) fgPurchase.SetFocus End If
End Sub
For dRow = 1 To fgPurchase.Rows - 2 If fgPurchase.TextMatrix(dRow, 5) = MshSearch.TextMatrix(MshSearch.Row, 0) Then MsgBox "Account Title aleready selected", vbInformation, "Message" Duplicate = True Exit Sub Else
End Sub
If KeyAscii = 8 Then If TxtGrdSrch.Text <> "" Then TxtGrdSrch.Text = Left$(TxtGrdSrch.Text, (Len(TxtGrdSrch.Text) - 1)) ElseIf KeyAscii = 13 Then KeyAscii = 0 Else
End Sub
Private Sub TxtGrdSrch_KeyPress(KeyAscii As Integer) If KeyAscii = 27 Then PicSrchGrid.Visible = False fgPurchase.SetFocus Exit Sub End If End Sub
'Getting data from Purchase Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "SELECT PurId, PurDate, TotalAmount from Purchase_Main", Con, adOpenStatic, adLockOptimistic
End If
'Getting Supplier Data Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Accounts.AcId, Accounts.AcTitle, Purchase_Detail.PurId FROM Accounts INNER JOIN Purchase_Detail ON Accounts.AcId = Purchase_Detail.AcId where PurId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic TxtAcCode.Text = Val(RS(0)) TxtName.Text = RS(1)
'Getting data from Purchase_Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT * from ViewPurchase where PurId = " & Val(txtId) & ""
fgPurchase.Rows = 2 fgPurchase.Row = 1
For rCount = 1 To RS.RecordCount fgPurchase.TextMatrix(fgPurchase.Row, 1) = RS(0) fgPurchase.TextMatrix(fgPurchase.Row, 2) = Val(RS(1)) fgPurchase.TextMatrix(fgPurchase.Row, 3) = Val(RS(2)) 'Prod Name 'Qty 'Price
RS.MoveNext Next
End Sub
'Getting Supplier Data Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Accounts.AcId, Accounts.AcTitle, Purchase_Detail.PurId FROM Accounts INNER JOIN Purchase_Detail ON Accounts.AcId = Purchase_Detail.AcId where PurId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic TxtAcCode.Text = Val(RS(0)) TxtName.Text = RS(1)
'Getting data from Purchase_Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT * from ViewPurchase where PurId = " & Val(txtId) & ""
fgPurchase.Rows = 2 fgPurchase.Row = 1
For rCount = 1 To RS.RecordCount fgPurchase.TextMatrix(fgPurchase.Row, 1) = RS(0) fgPurchase.TextMatrix(fgPurchase.Row, 2) = Val(RS(1)) fgPurchase.TextMatrix(fgPurchase.Row, 3) = Val(RS(2)) 'Prod Name 'Qty 'Price
RS.MoveNext Next
Calculatetotal
End Sub
Public Sub AutoId() 'Calling MaxNumber function to get Auto Id for the record MaxNumber "PurId", "Max_Codes" txtId.Text = Val(MaxNmbr) End Sub
txtTotal.Text = "" For mRow = 1 To fgPurchase.Rows - 1 txtTotal.Text = Val(txtTotal) + Val(fgPurchase.TextMatrix(mRow, 4)) Next mRow End Sub
Private Sub TxtName_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 32 And Shift = 2 Then PicSrchGrid.Visible = True TxtGrdSrch.Text = ""
FillGridAccounts SetGridAccounts
End Sub
Public Sub SetGridAccounts() 'Setting of Search Grid With MshSearch .ColWidth(1) = 2500
.ColWidth(2) = 1500
.RowHeight(0) = 400
End With
End Sub
Private Sub TxtName_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then fgPurchase.SetFocus Else KeyAscii = 0 Exit Sub End If
End Sub
Public Sub FindRecord() mSqlQry = "Select * from Purchase_Main Where PurId = " & Val(txtFindId) & ""
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open mSqlQry, Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then MsgBox "No purchase found with this ID", vbCritical, "Message.." txtFindId.SetFocus Exit Sub Else ShowFoundData End If
End Sub
RS.Open "SELECT PurId, PurDate, TotalAmount from Purchase_Main Where PurId = " & Val(txtFindId) & "", Con, adOpenStatic, adLockOptimistic
'Getting Supplier Data Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Accounts.AcId, Accounts.AcTitle, Purchase_Detail.PurId FROM Accounts INNER JOIN Purchase_Detail ON Accounts.AcId = Purchase_Detail.AcId where PurId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic TxtAcCode.Text = Val(RS(0)) TxtName.Text = RS(1)
'Getting data from Purchase_Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT * from ViewPurchase where PurId = " & Val(txtId) & ""
fgPurchase.Rows = 2 fgPurchase.Row = 1
For rCount = 1 To RS.RecordCount fgPurchase.TextMatrix(fgPurchase.Row, 1) = RS(0) fgPurchase.TextMatrix(fgPurchase.Row, 2) = Val(RS(1)) fgPurchase.TextMatrix(fgPurchase.Row, 3) = Val(RS(2)) 'Prod Name 'Qty 'Price
RS.MoveNext Next
End Sub
lbl(3).ForeColor = vbWhite
lbl(3).Font.Underline = False
End Sub
Public Sub GetTheAverage() Dim CurQty As Single Dim CurAmount As Single Dim mTotalQty As Single Dim mTotalAmount As Single Dim myRow As Integer
For myRow = 1 To fgPurchase.Rows - 2 Set RsMisc = New ADODB.Recordset If RsMisc.State = 1 Then RsMisc.Close RsMisc.Open "Select Qty, Amount, ProdId from Product_Openings where ProdId = " & Val(fgPurchase.TextMatrix(myRow, 5)) & "", Con, adOpenStatic, adLockOptimistic If Not IsNull(RsMisc(0)) Then OpQty = Val(RsMisc(0)) OpAmount = Val(RsMisc(1)) Else OpQty = 0 OpAmount = 0 End If
Con.Execute "Update Avg_Cost set PurAvg = " & Val(AvgCost) & " Where ProdId = " & Val(fgPurchase.TextMatrix(myRow, 5)) & ""
Next
End Sub
5. frmSale.frm
This form creates the interface for the function of creating sales entries.
Coding:
Dim Duplicate As Boolean Dim RowSelect As Integer Dim rCount As Integer Dim mSqlQry As String Dim SaleId As Single Dim SaleMainCode As Single Dim ObjectFoucs As Boolean 'True if Focus on TxtName(Supplier Name) . False if Focus on Grid
Dim OpQty As Single Dim PurQty As Single Dim SaleQty As Single Dim Stock As Single Dim mAvgCost As Single Dim PLAmount As Single Dim FgRow As Integer
End Sub
modWriteInGrid.SetPSGRID fgSale
Call AutoId
Case 1 Dim TranDetId As Single Dim SaleRef As String Dim TranMainId As Single
'Save
'Checking Data to Save If Val(fgSale.Rows) < 3 Then MsgBox "No data to save", vbInformation, "Message" Exit Sub End If
MsgBox "Select Account Name", vbCritical, "Message" TxtName.SetFocus Exit Sub End If
'Getting Maximum Code for Sale Main MaxNumber "SaleId", "Max_Codes" SaleMainCode = Val(MaxNmbr)
'Getting Maximum Code for Transaction Main MaxNumber "TransId", "Max_Codes" TranMainId = Val(MaxNmbr)
'Inserting Data to TransactionMain Table Con.Execute "insert into Transaction_Main (TransId,TransDate,TransType,Posted,TransRef) values (" & Val(TranMainId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , '" & TransactionType & "' ,'" & "N" & "', '" & TransactionRef & "')"
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for DEBIT ENTRY (Customer or th whom the goods sold) 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
SaleRef = "Sale # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(TranMainId) & ", " & Val(TxtAcCode) & ", '" & SaleRef & "', " & Val(txtTotal) & " , 0)"
Con.Execute "insert into Sale_Main (SaleId,SaleDate,TotalAmount) values (" & Val(txtId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , " & Val(txtTotal) & " )"
'Getting Maximum Code for Sale_Detail MaxNumber "SaleDetId", "Max_Codes" SaleId = Val(MaxNmbr)
'Inserting Data to Sale Detail Con.Execute "Insert into Sale_Detail (SaleDetId, SaleId, AcId, ProdId, Qty, Price) values (" & Val(SaleId) & ", " & Val(txtId) & ", " & Val(TxtAcCode) & ", '" & fgSale.TextMatrix(FgRow, 5) & "', " & Val(fgSale.TextMatrix(FgRow, 2)) & ", " & Val(fgSale.TextMatrix(FgRow, 3)) & ")"
'Inserting Data Into ProfitLoss Call GetAvgCostUpdate PLAmount = Val(fgSale.TextMatrix(FgRow, 3)) - Val(fgSale.TextMatrix(FgRow, 6)) PLAmount = Val(PLAmount) * Val(fgSale.TextMatrix(FgRow, 2)) Con.Execute "Insert Into ProfitLoss Values('" & Format(Dtp1.Value, "mm/dd/yyyy") & "', " & Val(txtId) & ", " & fgSale.TextMatrix(FgRow, 5) & ", " & Val(fgSale.TextMatrix(FgRow, 2)) & ", " & Val(fgSale.TextMatrix(FgRow, 6)) & ", " & Val(fgSale.TextMatrix(FgRow, 3)) & ", " & Val(PLAmount) & " )"
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for CREDIT ENTRY (Product entry) 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
SaleRef = "Sale # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(TranMainId) & ", " & Val(fgSale.TextMatrix(FgRow, 5)) & ", '" & SaleRef & "', 0, " & Val(fgSale.TextMatrix(FgRow, 4)) & ")"
Next
Else
Dim MTranId As Single 'If existing record SaleMainCode = Val(txtId) TransactionRef = "Sale-" & Val(txtId)
'Deleting old records from SaleMain and Sale Detail Con.Execute "Delete from Sale_Detail where SaleId = " & Val(txtId) & "" Con.Execute "Delete from Sale_Main where SaleId = " & Val(txtId) & ""
'Deleting Record from ProfitLoss Table Con.Execute "Delete from ProfitLoss where SaleId = " & Val(txtId) & ""
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from Transaction_Main where TransRef = '" & TransactionRef & "'", Con, adOpenStatic, adLockOptimistic
MTranId = Val(RS(0))
Con.Execute "Delete from Transaction_Detail Where TranId = " & Val(MTranId) & "" Con.Execute "Delete from Transaction_Main where TransRef = '" & TransactionRef & "'"
'Checking Data to Save If Val(fgSale.Rows) < 3 Then MsgBox "No data to save", vbInformation, "Message" Exit Sub End If
'If Account not selected If TxtAcCode.Text = "" Or Val(TxtAcCode) = 0 Then MsgBox "Select Account Name", vbCritical, "Message" TxtName.SetFocus Exit Sub End If
'Inserting Data to TransactionMain Table Con.Execute "insert into Transaction_Main (TransId,TransDate,TransType,Posted,TransRef) values (" & Val(MTranId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , '" & TransactionType & "' ,'" & "N" & "', '" &
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for DEBIT ENTRY (Customer or to whome the goods sold) 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
SaleRef = "Sale # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(MTranId) & ", " & Val(TxtAcCode) & ", '" & SaleRef & "', " & Val(txtTotal) & " , 0)"
'Inserting Data to SaleMain Table Con.Execute "insert into Sale_Main (SaleId,SaleDate,TotalAmount) values (" & Val(txtId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , " & Val(txtTotal) & " )"
'Getting Maximum Code for Sale_Detail MaxNumber "SaleDetId", "Max_Codes" SaleId = Val(MaxNmbr)
'Inserting Data to Sale Detail Con.Execute "Insert into Sale_Detail (SaleDetId, SaleId, AcId, ProdId, Qty, Price) values (" & Val(SaleId) & ", " & Val(txtId) & ", " & Val(TxtAcCode) & ", '" & fgSale.TextMatrix(FgRow, 5) & "', " & Val(fgSale.TextMatrix(FgRow, 2)) & ", " & Val(fgSale.TextMatrix(FgRow, 3)) & ")"
'Inserting Data Into ProfitLoss Call GetAvgCostUpdate PLAmount = Val(fgSale.TextMatrix(FgRow, 3)) - Val(fgSale.TextMatrix(FgRow, 6)) PLAmount = Val(PLAmount) * Val(fgSale.TextMatrix(FgRow, 2)) Con.Execute "Insert Into ProfitLoss Values('" & Format(Dtp1.Value, "mm/dd/yyyy") & "', " & Val(txtId) & ", " & fgSale.TextMatrix(FgRow, 5) & ", " & Val(fgSale.TextMatrix(FgRow, 2)) & ", " & Val(fgSale.TextMatrix(FgRow, 6)) & ", " & Val(fgSale.TextMatrix(FgRow, 3)) & ", " & Val(PLAmount) & " )"
'---------------------INSERTING DATA INTO TRANSACTION_DETAIL for CREDIT ENTRY (Product in grid Entry) 'Getting Maximum Code for Transaction_Detail MaxNumber "TransDetId", "Max_Codes" TranDetId = Val(MaxNmbr)
SaleRef = "Sale # " & Val(txtId) 'Inserting Data to Transaction Detail Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TranDetId) & ", " & Val(MTranId) & ", " & Val(fgSale.TextMatrix(FgRow, 5)) & ", '" & SaleRef & "', 0, " & Val(fgSale.TextMatrix(FgRow, 4)) & ")"
Next
fgSale.Clear
modWriteInGrid.SetPSGRID fgSale
Call ExistData
Dtp1.SetFocus
'Delete
If MsgBox("Do you want to delete this purchase?", vbQuestion + vbYesNo, "Delete Voucher") = vbYes Then If MsgBox("System will be unable to recover the loss data. Continue ?", vbQuestion + vbYesNo, "Delete Voucher") = vbYes Then 'Deleting data from Transaction Main and Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select TransId from Transaction_Main where TransRef = '" & mRef & "'", Con, adOpenStatic, adLockOptimistic mTransID = Val(RS(0))
Con.Execute "Delete from Transaction_Main where TransID = " & mTransID & "" Con.Execute "Delete from Transaction_Detail where TranId = " & mTransID & "" 'Deleting data from Transaction Main and Detail Con.Execute "Delete from Sale_Detail where SaleId = " & Val(txtId) & "" Con.Execute "Delete from Sale_Main where SaleId = " & Val(txtId) & "" MsgBox "Record Deleted", vbInformation, "Message" lbl_Click (2) End If End If
'Find
Case 5 Unload Me
'Exit
End Select
End Sub
Private Sub lbl_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3, 4, 5 MouseOver lbl(Index)
End Select
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseNormalOnLbl End Sub
Private Sub Image_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseNormalOnLbl End Sub
Case 0
'Move First
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Exit Sub Else Call NAVData End If
Case 1
'Move previous
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else Call NAVData End If
Case 2
'Move Next
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
Case 3
'Move last
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
End Select
End Sub
Private Sub lblnav_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3 MouseOver lblnav(Index) End Select
End Sub
Private Sub cmdFind_Click() If txtFindId.Text = "" Or Val(txtFindId) = 0 Then MsgBox "Enter Sale ID", vbCritical, "Message.." txtFindId.SetFocus Exit Sub End If
End Sub
Case 3 Call CheckStock_n_Price If Val(Stock) < Val(fgSale.TextMatrix(fgSale.Row, 2)) Then MsgBox "Not enough stock to sale", vbCritical, "Message" fgSale.Col = 2 Exit Sub End If End Select
End Sub
Private Sub fgSale_KeyDown(KeyCode As Integer, Shift As Integer) 'If CTRL + SPACE is pressed If fgSale.Col = 1 Then If KeyCode = 32 And Shift = 2 Then PicSrchGrid.Visible = True TxtGrdSrch.Text = ""
FillGridAccounts SetGridAccounts
If fgSale.Rows > 2 And fgSale.TextMatrix(fgSale.Row, 1) <> "" Then If MsgBox("Do you want to delete this line?", vbQuestion + vbYesNo, "Delete Line") = vbYes Then txtTotal.Text = Val(txtTotal) - Val(fgSale.TextMatrix(fgSale.Row, 4))
Else MsgBox "Blank or Last line can not be deleted", vbCritical, "Message " Exit Sub End If
Case 2, 3 'Total of Row i.e Qty * Price fgSale.TextMatrix(fgSale.Row, 4) = Val(fgSale.TextMatrix(fgSale.Row, 2)) * Val(fgSale.TextMatrix(fgSale.Row, 3))
Private Sub Form_KeyPress(KeyAscii As Integer) 'Changing Control focus on Enter ChangeFocusOnEnter KeyAscii, Me
End Sub
'Calling Data for navigation Set RsNAV = New ADODB.Recordset If RsNAV.State = 1 Then RsNAV.Close RsNAV.Open "Select * from Sale_Main Order By SaleId", Con, adOpenStatic, adLockOptimistic
End Sub
Public Sub FillGridAccounts() 'Filling all Accounts Data in Search grid If ObjectFoucs = True Then ' If focus on TxtName SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType NOT IN ('Product')" Else ' If focus on Product Grid
SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType IN ('Product')" End If
Private Sub TxtGrdSrch_Change() Call SearchRecord End Sub Public Sub SearchRecord() 'Filling the Search grid with Critarial Data
MshSearch.Rows = 2 MshSearch.Row = 0
SearchedRowCount = 0
If ObjectFoucs = True Then ' If focus on TxtName SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType NOT IN ('Product') And AcTitle Like '" & TxtGrdSrch.Text & "%'" Else ' If focus on Product Grid
SQLQry = "SELECT ViewHeadWise.AcId, ViewHeadWise.AcTitle, ViewHeadWise.AcType FROM ViewHeadWise Where AcType IN ('Product') And AcTitle Like '" & TxtGrdSrch.Text & "%'" End If
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open SQLQry, Con, adOpenStatic, adLockReadOnly
MshSearch.Clear
With MshSearch .TextMatrix(0, 0) = "ID" .TextMatrix(0, 1) = "Account Title" .TextMatrix(0, 2) = "Account Type" End With
End Sub
If ObjectFoucs = True Then TxtAcCode.Text = Val(MshSearch.TextMatrix(MshSearch.Row, 0)) TxtName.Text = MshSearch.TextMatrix(MshSearch.Row, 1) TxtName.SetFocus ObjectFoucs = False Else 'Checking for duplicate entry in grid Call CheckDuplicate
If Duplicate = True Then Exit Sub End If fgSale.TextMatrix(fgSale.Row, 1) = MshSearch.TextMatrix(MshSearch.Row, 1) fgSale.TextMatrix(fgSale.Row, 5) = MshSearch.TextMatrix(MshSearch.Row, 0) fgSale.TextMatrix(fgSale.Row, 6) = Val(mAvgCost)
fgSale.SetFocus
End Sub
For dRow = 1 To fgSale.Rows - 2 If fgSale.TextMatrix(dRow, 5) = MshSearch.TextMatrix(MshSearch.Row, 0) Then MsgBox "Account Title aleready selected", vbInformation, "Message" Duplicate = True Exit Sub Else Duplicate = False End If Next
End Sub
If KeyAscii = 8 Then If TxtGrdSrch.Text <> "" Then TxtGrdSrch.Text = Left$(TxtGrdSrch.Text, (Len(TxtGrdSrch.Text) - 1)) ElseIf KeyAscii = 13 Then KeyAscii = 0 Else TxtGrdSrch.Text = TxtGrdSrch.Text + Chr$(KeyAscii) End If
End Sub
Private Sub TxtGrdSrch_KeyPress(KeyAscii As Integer) If KeyAscii = 27 Then PicSrchGrid.Visible = False fgSale.SetFocus Exit Sub End If End Sub
'Getting data from Sale Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "SELECT SaleId, SaleDate, TotalAmount from Sale_Main", Con, adOpenStatic, adLockOptimistic
'Getting Supplier Data Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Accounts.AcId, Accounts.AcTitle, Sale_Detail.SaleId FROM Accounts INNER JOIN Sale_Detail ON Accounts.AcId = Sale_Detail.AcId where SaleId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic TxtAcCode.Text = Val(RS(0)) TxtName.Text = RS(1)
'Getting data from Sale_Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT * from ViewSale where SaleId = " & Val(txtId) & ""
fgSale.Rows = 2 fgSale.Row = 1
For rCount = 1 To RS.RecordCount fgSale.TextMatrix(fgSale.Row, 1) = RS(0) fgSale.TextMatrix(fgSale.Row, 2) = Val(RS(1)) fgSale.TextMatrix(fgSale.Row, 3) = Val(RS(2)) 'Prod Name 'Qty 'Price
RS.MoveNext Next
End Sub
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Exit Sub Else Call NAVData End If End Sub
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
End Sub
lblnav.Caption = Val(lblnav) + 1
If RsNAV.EOF = True Then lblnav.Caption = Val(lblnav) - 1 MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If End Sub
lblnav.Caption = Val(lblnav) - 1
lblnav.Caption = Val(lblnav) + 1 MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else Call NAVData End If
End Sub
'Getting Supplier Data Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Accounts.AcId, Accounts.AcTitle, Sale_Detail.SaleId FROM Accounts INNER JOIN Sale_Detail ON Accounts.AcId = Sale_Detail.AcId where SaleId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic TxtAcCode.Text = Val(RS(0)) TxtName.Text = RS(1)
'Getting data from Sale_Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT * from ViewSale where SaleId = " & Val(txtId) & ""
fgSale.Rows = 2 fgSale.Row = 1
For rCount = 1 To RS.RecordCount fgSale.TextMatrix(fgSale.Row, 1) = RS(0) fgSale.TextMatrix(fgSale.Row, 2) = Val(RS(1)) fgSale.TextMatrix(fgSale.Row, 3) = Val(RS(2)) 'Prod Name 'Qty 'Price
fgSale.TextMatrix(fgSale.Row, 5) = Val(RS(3))
'Prod Code
RS.MoveNext Next
Calculatetotal
End Sub
Public Sub AutoId() 'Calling MaxNumber function to get Auto Id for the record MaxNumber "SaleId", "Max_Codes" txtId.Text = Val(MaxNmbr) End Sub
txtTotal.Text = ""
For mRow = 1 To fgSale.Rows - 1 txtTotal.Text = Val(txtTotal) + Val(fgSale.TextMatrix(mRow, 4)) Next mRow End Sub
Private Sub TxtName_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 32 And Shift = 2 Then PicSrchGrid.Visible = True TxtGrdSrch.Text = ""
FillGridAccounts SetGridAccounts
MshSearch.Col = 0 MshSearch.Row = 1
MshSearch.SetFocus End If
End Sub
Public Sub SetGridAccounts() 'Setting of Search Grid With MshSearch .ColWidth(1) = 2500 .ColWidth(2) = 1500
.RowHeight(0) = 400
End With
End Sub
Private Sub TxtName_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then fgSale.SetFocus Else KeyAscii = 0 Exit Sub End If
End Sub
'Opening Stock Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Qty from Product_Openings where ProdId = " & Val(fgSale.TextMatrix(fgSale.Row, 5)) & "", Con, adOpenStatic, adLockOptimistic OpQty = Val(RS(0))
'Purchases Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from Purchase_Detail where ProdId = " & Val(fgSale.TextMatrix(fgSale.Row, 5)) & " GROUP By AcId", Con, adOpenStatic, adLockOptimistic PurQty = Val(RS(0))
'Sales Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from Sale_Detail where ProdId = " & Val(fgSale.TextMatrix(fgSale.Row, 5)) & " Group By AcId", Con, adOpenStatic, adLockOptimistic SaleQty = Val(RS(0))
lblstock.Caption = "Available Stock : " & Val(Stock) 'Getting Product Price Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select SalePrice from Accounts where AcId = " & Val(fgSale.TextMatrix(fgSale.Row, 5)) & "", Con, adOpenStatic, adLockOptimistic
fgSale.TextMatrix(fgSale.Row, 3) = Val(RS(0))
End Sub
Public Sub FindRecord() mSqlQry = "Select * from Sale_Main Where SaleId = " & Val(txtFindId) & ""
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open mSqlQry, Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then MsgBox "No sale found with this ID", vbCritical, "Message.." txtFindId.SetFocus Exit Sub Else ShowFoundData End If
End Sub
RS.Open "SELECT SaleId, SaleDate, TotalAmount from Sale_Main Where SaleId = " & Val(txtFindId) & "", Con, adOpenStatic, adLockOptimistic
'Getting Supplier Data Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Accounts.AcId, Accounts.AcTitle, Sale_Detail.SaleId FROM Accounts INNER JOIN Sale_Detail ON Accounts.AcId = Sale_Detail.AcId where SaleId = " & Val(txtId) & "", Con, adOpenStatic, adLockOptimistic TxtAcCode.Text = Val(RS(0)) TxtName.Text = RS(1)
'Getting data from Sale_Detail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT * from ViewSale where SaleId = " & Val(txtId) & ""
fgSale.Rows = 2 fgSale.Row = 1
For rCount = 1 To RS.RecordCount fgSale.TextMatrix(fgSale.Row, 1) = RS(0) fgSale.TextMatrix(fgSale.Row, 2) = Val(RS(1)) fgSale.TextMatrix(fgSale.Row, 3) = Val(RS(2)) 'Prod Name 'Qty 'Price
RS.MoveNext Next
End Sub
lbl(3).ForeColor = vbWhite
lbl(3).Font.Underline = False
End Sub
Public Sub GetAvgCostUpdate() 'Getting Avg Price on Updating the existing task Dim myRow As Integer For myRow = 1 To fgSale.Rows - 2 Set RsMisc = New ADODB.Recordset If RsMisc.State = 1 Then RsMisc.Close RsMisc.Open "Select PurAvg,ProdId from Avg_Cost where ProdId = " & Val(fgSale.TextMatrix(myRow, 5)) & "", Con, adOpenStatic, adLockOptimistic If IsNull(RsMisc(0)) Then fgSale.TextMatrix(myRow, 6) = 0 Else fgSale.TextMatrix(myRow, 6) = Val(RsMisc(0)) End If
6. frmTransaction.frm
This form creates the interface for the function of creating transaction entries, i.e. credit and debit.
Coding:
Dim Duplicate As Boolean Dim RowSelect As Integer Dim rCount As Integer
GridSetting
Call AutoId
Case 1
'Save
'Checking Data to Save If Val(fgTransaction.Rows) < 3 Then MsgBox "No data to save", vbInformation, "Message" Exit Sub End If
'Validation for Equal Balances of Debit and Credit Side If Not Val(txtDebit) = Val(txtCredit) Then MsgBox "Debit and Credit sides should be equal", vbCritical, "Message" Exit Sub End If
Con.Execute "insert into Transaction_Main (TransId,TransDate,TransType,Posted,TransRef) values (" & Val(txtId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , '" & TransactionType & "' ,'" & "N" & "', '" & TransactionRef & "')"
'Getting Maximum Code for transaction_Detail MaxNumber "TransDetId", "Max_Codes" TransactionId = Val(MaxNmbr) mdescript = fgTransaction.TextMatrix(FgTransactionRow, 2) + " V/No " & Val(txtId) Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TransactionId) & ", " & Val(txtId) & ", " & Val(fgTransaction.TextMatrix(FgTransactionRow, 5)) & ", '" & mdescript & "', " & Val(fgTransaction.TextMatrix(FgTransactionRow, 3)) & ", " & Val(fgTransaction.TextMatrix(FgTransactionRow, 4)) & ")"
Next
'Deleting old records from TransactionMain and Transaction Detail Con.Execute "Delete from Transaction_Detail where TranId = " & Val(txtId) & "" Con.Execute "Delete from Transaction_Main where TransId = " & Val(txtId) & ""
'Checking Data to Save If Val(fgTransaction.Rows) < 3 Then MsgBox "No data to save", vbInformation, "Message" Exit Sub End If
'Validation for Equal Balances of Debit and Credit Side If Not Val(txtDebit) = Val(txtCredit) Then MsgBox "Debit and Credit sides should be equal", vbCritical, "Message" Exit Sub End If
Con.Execute "insert into Transaction_Main (TransId,TransDate, TransType, Posted,TransRef) values (" & Val(txtId) & ", '" & Format(Dtp1.Value, "mm/dd/yyyy") & "' , '" & TransactionType & "' ,'" & "N" & "', '" & TransactionRef & "')"
'Getting Maximum Code for transaction_Detail MaxNumber "TransDetId", "Max_Codes" TransactionId = Val(MaxNmbr) mdescript = fgTransaction.TextMatrix(FgTransactionRow, 2) + " V/No " & Val(txtId) Con.Execute "Insert into Transaction_Detail (TranDetId, TranId, AcId, Descript, DrAmount, CrAmount) values (" & Val(TransactionId) & ", " & Val(txtId) & ", " & Val(fgTransaction.TextMatrix(FgTransactionRow, 5)) & ", '" & mdescript & "', " &
Val(fgTransaction.TextMatrix(FgTransactionRow, 3)) & ", " & Val(fgTransaction.TextMatrix(FgTransactionRow, 4)) & ")"
Next
End If
Case 2 Clear Me
'Cancel
fgTransaction.Clear
GridSetting
Call ExistData
Dtp1.SetFocus
Case 3
vbYesNo, "Delete Voucher") = vbYes Then If MsgBox("System will be unable to recover the loss data. Continue ?", vbQuestion + vbYesNo, "Delete Voucher") = vbYes Then 'Deleting data Con.Execute "Delete from transaction_Detail where TranId = " & Val(txtId) & "" Con.Execute "Delete from transaction_Main where TransId = " & Val(txtId) & "" MsgBox "Voucher Deleted", vbInformation, "Message" lbl_Click (2)
End If End If
'Find
Case 5 Unload Me
'Exit
End Select
End Sub
Case 0
'Move First
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Exit Sub Else Call NAVData End If
Case 1
'Move previous
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else Call NAVData End If
Case 2
'Move Next
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
Case 3
'Move last
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
End Select
End Sub
Private Sub lblnav_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3 MouseOver lblnav(Index) End Select
End Sub
Private Sub Image_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseNormalOnLbl End Sub
Private Sub lbl_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Select Case Index Case 0, 1, 2, 3, 4, 5 MouseOver lbl(Index)
End Select
End Sub
Private Sub cmdFind_Click() If txtFindId.Text = "" Or Val(txtFindId) = 0 Then MsgBox "Enter Transaction ID", vbCritical, "Message.." txtFindId.SetFocus txtFindId.Text = "" Exit Sub End If
Call FindRecord
End Sub
Private Sub fgTransaction_KeyDown(KeyCode As Integer, Shift As Integer) 'If CTRL + SPACE is pressed If fgTransaction.Col = 1 Then If KeyCode = 32 And Shift = 2 Then PicSrchGrid.Visible = True TxtGrdSrch.Text = ""
FillGridAccounts SetGridAccounts
If fgTransaction.Rows > 2 And fgTransaction.TextMatrix(fgTransaction.Row, 1) <> "" Then If MsgBox("Do you want to delete this line>", vbQuestion + vbYesNo, "Delete Line") = vbYes Then txtDebit.Text = Val(txtDebit) - Val(fgTransaction.TextMatrix(fgTransaction.Row, 3)) txtCredit.Text = Val(txtCredit) - Val(fgTransaction.TextMatrix(fgTransaction.Row, 4))
Else MsgBox "Blank or Last line can not be deleted", vbCritical, "Message " Exit Sub End If
Case 1 txtDebit.Text = "" txtCredit.Text = "" For RowNum = 1 To fgTransaction.Rows - 1 mDebit = Val(mDebit) + Val(fgTransaction.TextMatrix(RowNum, 3)) mCredit = Val(mCredit) + Val(fgTransaction.TextMatrix(RowNum, 4)) Next
End Select
End Sub
'Calling Data for navigation Set RsNAV = New ADODB.Recordset If RsNAV.State = 1 Then RsNAV.Close RsNAV.Open "Select * from Transaction_Main Where TransType = '" & "Voucher" & "' Order By TransId", Con, adOpenStatic, adLockOptimistic
End Sub
End Sub
.ColWidth(0) = 250 .ColWidth(1) = 2500 .ColWidth(2) = 4400 .ColWidth(3) = 1475 .ColWidth(4) = 1475 .ColWidth(5) = 0 .ColWidth(6) = 0
.RowHeight(0) = 400
.Rows = 2
.TextMatrix(0, 4) = "Credit"
Public Sub SetGridAccounts() 'Setting of Search Grid With MshSearch .ColWidth(1) = 2500 .ColWidth(2) = 1500
.RowHeight(0) = 400
.ColAlignmentFixed(0) = 4
.ColAlignmentFixed(1) = 4 .ColAlignmentFixed(2) = 4
End With
End Sub
Public Sub FillGridAccounts() 'Filling all Accounts Data in Search grid SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise"
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) MouseNormalOnLbl End Sub
Private Sub TxtGrdSrch_Change() Call SearchRecord End Sub Public Sub SearchRecord() 'Filling the Search grid with Critarial Data
MshSearch.Rows = 2 MshSearch.Row = 0
SearchedRowCount = 0
SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcTitle Like '" & TxtGrdSrch.Text & "%'"
With MshSearch .TextMatrix(0, 0) = "ID" .TextMatrix(0, 1) = "Account Title" .TextMatrix(0, 2) = "Account Type" End With
RS.MoveNext Next
End Sub
For dRow = 1 To fgTransaction.Rows - 2 If fgTransaction.TextMatrix(dRow, 5) = MshSearch.TextMatrix(MshSearch.Row, 0) Then MsgBox "Account Title aleready selected", vbInformation, "Message" Duplicate = True Exit Sub Else Duplicate = False
End If Next
End Sub
If KeyAscii = 8 Then If TxtGrdSrch.Text <> "" Then TxtGrdSrch.Text = Left$(TxtGrdSrch.Text, (Len(TxtGrdSrch.Text) - 1)) ElseIf KeyAscii = 13 Then KeyAscii = 0 Else TxtGrdSrch.Text = TxtGrdSrch.Text + Chr$(KeyAscii)
End If
End Sub
Private Sub TxtGrdSrch_KeyPress(KeyAscii As Integer) If KeyAscii = 27 Then PicSrchGrid.Visible = False fgTransaction.SetFocus Exit Sub End If End Sub
'Getting data from Purchase Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "SELECT TransId, TransDate, TransType from Transaction_Main Where TransType = '" & "Voucher" & "'", Con, adOpenStatic, adLockOptimistic
'Getting data from TransactionDetail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT Accounts.AcTitle, Transaction_Detail.Descript, Transaction_Detail.DrAmount, Transaction_Detail.CrAmount, Accounts.AcId, Transaction_Detail.TranDetId, Transaction_Main.TransId" & _ " FROM Transaction_Main INNER JOIN (Accounts INNER JOIN Transaction_Detail ON Accounts.AcId = Transaction_Detail.AcId) ON Transaction_Main.TransId = Transaction_Detail.TranId" & _ " WHERE Transaction_Main.TransId = " & Val(txtId) & ""
fgTransaction.Rows = 2
fgTransaction.Row = 1
For rCount = 1 To RS.RecordCount fgTransaction.TextMatrix(fgTransaction.Row, 1) = RS(0) fgTransaction.TextMatrix(fgTransaction.Row, 2) = RS(1) fgTransaction.TextMatrix(fgTransaction.Row, 3) = RS(2) fgTransaction.TextMatrix(fgTransaction.Row, 4) = RS(3) fgTransaction.TextMatrix(fgTransaction.Row, 5) = RS(4)
RS.MoveNext Next
End Sub
lblnav.Caption = "1"
If RsNAV.BOF = True Then MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Exit Sub Else Call NAVData End If End Sub
If RsNAV.EOF = True Then MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If
End Sub
lblnav.Caption = Val(lblnav) + 1
If RsNAV.EOF = True Then lblnav.Caption = Val(lblnav) - 1 MsgBox "Last Record", vbInformation, "Message" RsNAV.MoveLast Else Call NAVData End If End Sub
lblnav.Caption = Val(lblnav) - 1
If RsNAV.BOF = True Then lblnav.Caption = Val(lblnav) + 1 MsgBox "First Record", vbInformation, "Message" RsNAV.MoveFirst Else Call NAVData End If
End Sub
'Getting data from TransactionDetail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT Accounts.AcTitle, Transaction_Detail.Descript, Transaction_Detail.DrAmount, Transaction_Detail.CrAmount, Accounts.AcId, Transaction_Detail.TranDetId, Transaction_Main.TransId" & _ " FROM Transaction_Main INNER JOIN (Accounts INNER JOIN Transaction_Detail ON Accounts.AcId = Transaction_Detail.AcId) ON Transaction_Main.TransId = Transaction_Detail.TranId" & _ " WHERE Transaction_Main.TransId = " & Val(txtId) & ""
fgTransaction.Rows = 2 fgTransaction.Row = 1
For rCount = 1 To RS.RecordCount fgTransaction.TextMatrix(fgTransaction.Row, 1) = RS(0) fgTransaction.TextMatrix(fgTransaction.Row, 2) = RS(1) fgTransaction.TextMatrix(fgTransaction.Row, 3) = RS(2) fgTransaction.TextMatrix(fgTransaction.Row, 4) = RS(3)
fgTransaction.TextMatrix(fgTransaction.Row, 5) = RS(4)
RS.MoveNext Next
End Sub
Public Sub AutoId() 'Calling MaxNumber function to get Auto Id for the record MaxNumber "TransId", "Max_Codes" txtId.Text = Val(MaxNmbr) End Sub
Public Sub FindRecord() mSqlQry = "Select * from Transaction_Main Where TransType = '" & "Voucher" & "' and TransId = " & Val(txtFindId) & ""
If RS.State = 1 Then RS.Close RS.Open mSqlQry, Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then MsgBox "No transaction found with this ID", vbCritical, "Message.." txtFindId.SetFocus Exit Sub Else ShowFoundData End If
End Sub
Public Sub ShowFoundData() 'Getting data from TransactionMain Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "Select * from Transaction_Main Where TransType = '" & "Voucher" & "' and TransId = " & Val(txtFindId) & "", Con, adOpenStatic, adLockOptimistic
'Getting data from TransactionDetail Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
mSqlQry = "SELECT Accounts.AcTitle, Transaction_Detail.Descript, Transaction_Detail.DrAmount, Transaction_Detail.CrAmount, Accounts.AcId, Transaction_Detail.TranDetId, Transaction_Main.TransId" & _ " FROM Transaction_Main INNER JOIN (Accounts INNER JOIN Transaction_Detail ON Accounts.AcId = Transaction_Detail.AcId) ON Transaction_Main.TransId = Transaction_Detail.TranId" & _ " WHERE Transaction_Main.TransId = " & Val(txtId) & ""
fgTransaction.Rows = 2
fgTransaction.Row = 1
For rCount = 1 To RS.RecordCount fgTransaction.TextMatrix(fgTransaction.Row, 1) = RS(0) fgTransaction.TextMatrix(fgTransaction.Row, 2) = RS(1) fgTransaction.TextMatrix(fgTransaction.Row, 3) = RS(2) fgTransaction.TextMatrix(fgTransaction.Row, 4) = RS(3) fgTransaction.TextMatrix(fgTransaction.Row, 5) = RS(4)
RS.MoveNext Next
End Sub
7. frmReport.frm
This form creates the interface for the generation of various reports of purchase, sales, accounts, stocks, income statement etc. depending upon the criterion of categorization and date chosen.
Coding:
Dim nodbb As Node Dim VRun As String '-----------------------------Dim RsLov As ADODB.Recordset Dim a As Single Dim DrBal As Double Dim CrBal As Double Dim mDateQry As String 'Variable For Loop 'Variable for Debit Balance 'Variable for Credit Balance 'Variable for storing BETWEEN DATES Query
Dim OpBal As Double Dim MaxId As Double Dim DtFrom As Date Dim DtTo As Date
'Difference between Total DR and Total CR for Opening 'Id for Ledger Report 'Date for COG (FROM) 'Date for COG (TO)
'-------------------------------
Public Sub cmdExit_Click() If PicSrchGrid.Visible = True Then PicSrchGrid.Visible = False Exit Sub End If
Private Sub CMDexit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) CmdExit.Font.Bold = True End Sub Private Sub CMdexit_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '' Shape1(6).BackColor = &H568C73
End Sub
Private Sub CMDexit_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) CmdExit.Font.Bold = False End Sub
Private Sub CmdLovCancel2_Click() Select Case VRun Case "Accounts Status" TxtLookup1.SetFocus Case "Daily Collection List" TxtDate.SetFocus End Select PicSrchGrid.Visible = False If RsLov.State = 1 Then RsLov.Close End Sub Private Sub CmdLovOK2_Click() Select Case VRun Case "Accounts Ledger" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
Case "Account Wise Receipts" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub
Case "Account Wise Payments" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 1) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 0)
Case "Supplier Wise Purchase History" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
Case "Product Wise Purchase History" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
Case "Product Wise Sale History" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
Case "Customer Wise Sale History" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
Case "Month Wise Account Status" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode.Text = MshSearch.TextMatrix(MshSearch.Row, 1) TxtLookup.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup.SetFocus
Case "Accounts Status" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode1.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup1.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
Case "Receivable" If MshSearch.Rows <= 1 Then CmdLovCancel2_Click: Exit Sub TxtLookupCode1.Text = MshSearch.TextMatrix(MshSearch.Row, 0) TxtLookup1.Text = MshSearch.TextMatrix(MshSearch.Row, 1)
If PicDateBw.Enabled = True Then If TxtFrom.Value > TxtTo.Value Then MsgBox "From Date value must be less than To Date value", vbInformation, "Date error" TxtFrom.SetFocus Exit Sub End If End If
mDateQry = " BETWEEN #" & DtFrom & "# And #" & DtTo & "#"
If TxtLookup.Text = "ALL" Then StrQry = "Select AcId, AcTitle, AcType, Balance from ViewAccountStatus Where AcType NOT IN ('Product') order By AcId" dataRepAccountStatus.Show vbModal
Else StrQry = "Select AcId, AcTitle, AcType, Balance from ViewAccountStatus where AcType = '" & TxtLookup.Text & "' order By AcId" dataRepAccountStatus.Show vbModal
End If
Else StrQry = "Select AcId, AcTitle, AcType, Balance from ViewAccountStatus where AcType = '" & TxtLookup.Text & "' and AcId = " & Val(TxtLookupCode1) & " order By AcId" dataRepAccountStatus.Show vbModal
End If
If TxtLookup.Text = "ALL" Then StrQry = "Select Code,Remarks from Accounts order By code" RepBalances.Sections("ReportHeader").Controls("LblRepType").Caption = "ALL
BALANCE"
'' ''
Else StrQry = "Select Code,Remarks from Accounts where AccType = '" &
UCase(TxtLookup.Text) & " BALANCE" '' '' '' '' Else StrQry = "Select Code,Remarks from Accounts where AccType = '" & End If
TxtLookup.Text & "' and Code = " & Val(TxtLookupCode1) & " order By code" '' '' '' Call BalanceRep End If
If TxtLookup.Text = "" Then MsgBox "Select Month using Ctrl+Space", vbCritical, "Message" TxtLookup.SetFocus Exit Sub End If
If TxtLookup1.Text = "" Then MsgBox "Enter YEAR for Balance Sheet", vbCritical, "Message..." TxtLookup1.SetFocus Exit Sub End If
Call MonthDates
'' ''
If TxtLookup.Text = "ALL" Then StrQry = "Select Code,Remarks from Accounts order By code" RepBalances.Sections("ReportHeader").Controls("LblRepType").Caption = "ALL
BALANCE" '' '' Else StrQry = "Select Code,Remarks from Accounts where AccType = '" &
''
RepBalances.Sections("ReportHeader").Controls("LblRepType").Caption =
UCase(TxtLookup.Text) & " BALANCE" '' '' '' '' Else StrQry = "Select Code,Remarks from Accounts where AccType = '" & End If
TxtLookup.Text & "' and Code = " & Val(TxtLookupCode1) & " order By code" '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' If TxtLookup1.Text = "" Then MsgBox "Enter YEAR for COG", vbCritical, "Message..." TxtLookup1.SetFocus Exit Sub End If If TxtLookup.Text = "" Then MsgBox "Select Month using Ctrl+Space", vbCritical, "Message" TxtLookup.SetFocus Exit Sub End If Case "Cost Of Goods Sold" Call BalanceRep End If
DeRep.CashReceipts TxtFrom.Value, TxtTo.Value RepCashReceipts.Sections("ReportHeader").Controls("LblDate").Caption = "From : " & " & "To : " & TxtTo.Value
'' ''
DeRep.CashReceiptsByAccount TxtFrom.Value, TxtTo.Value, Val(TxtLookupCode) RepCashReceiptsByAccount.Sections("ReportHeader").Controls("LblDate").Caption = " & "To : " & TxtTo.Value
"From : " & TxtFrom.Value & " '' '' '' '' '' '' '' '' '' ''
DeRep.CashPayment TxtFrom.Value, TxtTo.Value RepCashPayments.Sections("ReportHeader").Controls("LblDate").Caption = "From : " " & "To : " & TxtTo.Value
''
"From : " & TxtFrom.Value & " '' '' '' '' '' '' '' '' '' ''
TxtLookup.Text '' '' '' '' '' '' '' '' '' '' '' If Not IsNumeric(TxtLookup) Then Case "Issues" If TxtLookup.Text = "" Then MsgBox "Enter meter number", vbInformation, "Message" TxtLookup.SetFocus Exit Sub End If Load RepVehicles RepVehicles.Show 1
'' '' '' '' '' '' '' '' '' '' ''
MsgBox "Enter digits only", vbInformation, "Message" TxtLookup.SetFocus Exit Sub End If
DeRep.MeterIssue TxtFrom.Value, TxtTo.Value, Val(TxtLookup) RepMeterIssue.Sections("ReportHeader").Controls("LblDate").Caption = "From : " & " & "To : " & TxtTo.Value
TxtFrom.Value & " '' '' '' '' '' '' '' '' '' '' '' '' Case "Reading"
If TxtLookup.Text = "" Then MsgBox "Enter meter number", vbInformation, "Message" TxtLookup.SetFocus Exit Sub End If
'' '' '' '' '' '' '' '' '' ''
DeRep.MeterReading TxtFrom.Value, TxtTo.Value, Val(TxtLookup) RepMeterReading.Sections("ReportHeader").Controls("LblDate").Caption = "From : " & " & "To : " & TxtTo.Value
RepMeterReading.Sections("ReportHeader").Controls("LblMeterCode").Caption = "Meter
Number : " & Val(TxtLookup) '' '' '' '' '' '' '' '' '' '' '' DeRep.MeterStock Case "Meter Stock" Call MeterStock If DeRep.rsMeterStock.State = 1 Then DeRep.rsMeterStock.Close Load RepMeterReading RepMeterReading.Show 1
'' ''
"dd/mmm/yyyy - HH:MM") '' '' '' '' '' '' '' '' '' '' DeRep.ReminderMain TxtLookup.Text Load RepReminderByCode RepReminderByCode.Show 1 Case "Code Wise Remaining" If DeRep.rsReminderMain.State = 1 Then DeRep.rsReminderMain.Close Load RepMeterStock RepMeterStock.Show 1
Private Sub CmdRun_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) CmdRun.Font.Bold = True End Sub Private Sub CmdRun_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '' Shape1(7).BackColor = &H568C73
End Sub Private Sub CmdRun_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) CmdRun.Font.Bold = False End Sub
dataRepIncomeStat.Show vbModal
'''''Dim NetSale As Single '''''Dim BegInv As Single '''''Dim Purchase As Single '''''Dim AvblForSale As Single '''''Dim EndingInv As Single '''''Dim COGSold As Single '''''Dim Gross As Single '''''Dim OtherIncome As Single
'''''Dim Expense As Single '''''Dim NetProfit As Single ''''' '''''Dim mDateQry As String ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' "#" ''''' ''''' '''''' NET SALES OF THE DEFINED PERIOD ''''' Set RS = New ADODB.Recordset mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & NetSale = 0 BegInv = 0 Purchase = 0 AvblForSale = 0 EndingInv = 0 COGSold = 0 Gross = 0 OtherIncome = 0 Expense = 0 NetProfit = 0
''''' '''''
If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from Sale_Main where SaleDate" & mDateQry, Con,
adOpenStatic, adLockOptimistic ''''' ''''' ''''' ''''' ''''' ''''' '''''' OPENING INVENTORY BEFORE DEFINED PERIOD ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' 'Value of Product Openings Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Amount), Sum(Qty) from Product_Openings", Con, adOpenStatic, BeforePeriod = " < #" & FrmRep.TxtFrom.Value & "#" Dim ProductOpenings As Single Dim OpQty As Single Dim OpAvgPrice As Single Dim BeforePeriod As String Dim PurValueBefore As Single Dim SalValueBefore As Single If IsNull(RS(0)) Then NetSale = 0 Else NetSale = Val(RS(0)) End If
adLockOptimistic
''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' '''''
'Value of Purchase before given period Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from Purchase_Main where PurDate " &
BeforePeriod, Con, adOpenStatic, adLockOptimistic ''''' ''''' ''''' If IsNull(RS(0)) Then PurValueBefore = 0 Else
'Value of Sale before given period Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from Sale_Main where SaleDate " & BeforePeriod,
Con, adOpenStatic, adLockOptimistic ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' '''''' NET PURCHASES OF THE DEFINED PERIOD ''''' ''''' Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close 'Calculating Begining Inventory BegInv = Val(ProductOpenings) + Val(PurValueBefore) - Val(SalValueBefore) If IsNull(RS(0)) Then SalValueBefore = 0 Else SalValueBefore = Val(RS(0)) End If
'''''
Con, adOpenStatic, adLockOptimistic ''''' ''''' ''''' ''''' ''''' ''''' '''''' CALCULATING VALUE OF GOODS AVAILABALE FOR SALE ''''' ''''' ''''' '''''' ENDING INVENTORY OF DEFINED PERIOD ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' 'Value of Product Openings 'Taken from Variable PRODUCTOPENINGS AfterPeriod = "#" & FrmRep.TxtTo.Value & "#" Dim AfterPeriod As String Dim PurValueAfter As Single Dim SalValue As Single Dim AvgCost As Single Dim SaleQty As Single AvblForSale = Val(BegInv) + Val(Purchase) If IsNull(RS(0)) Then Purchase = 0 Else Purchase = Val(RS(0)) End If
''''' ''''' ''''' ''''' ''''' 'Value of Purchase till Last Date Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from Purchase_Main where PurDate " &
AfterPeriod, Con, adOpenStatic, adLockOptimistic ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' 'Avg Purchase Cost till last date Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Sum(Purchase_Detail.Qty) AS TotalQty, If IsNull(RS(0)) Then PurValueAfter = 0 Else PurValueAfter = Val(RS(0)) End If
Purchase_Main.TotalAmount AS TotalAmount, TotalAmount/TotalQty AS Cost FROM Purchase_Detail INNER JOIN Purchase_Main ON Purchase_Detail.PurId = Purchase_Main.PurId GROUP BY Purchase_Main.TotalAmount, Purchase_Detail.Qty where Purchase_Main.PurDate " & AfterPeriod, Con, adOpenStatic, adLockOptimistic ''''' ''''' ''''' ''''' ''''' If Val(Cost) > 0 Then AvgCost = Val(Cost) + Val(OpAvgPrice) / 2 Else AvgCost = Val(OpAvgPrice) End If
''''' ''''' ''''' ''''' ''''' ''''' ''''' Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "SELECT Sale_Main.SaleDate, Sum(Sale_Detail.Qty) AS SumOfQty FROM 'Cost of Sale till Last Date
Sale_Main INNER JOIN Sale_Detail ON Sale_Main.SaleId = Sale_Detail.SaleId GROUP BY Sale_Main.SaleDate, Sale_Detail.Qty HAVING Sale_Main.SaleDate <= " & AfterPeriod, Con, adOpenStatic, adLockOptimistic ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' 'Calculating Ending Inventory EndingInv = Val(ProductOpenings) + Val(PurValueAfter) - Val(SalValue) If Val(EndingInv) < 0 Then EndingInv = 0 End If If IsNull(RS(1)) Then SaleQty = 0 Else SaleQty = Val(RS(1)) SalValue = Val(AvgCost) * Val(SaleQty) End If
'''''' COST OF GOODS SOLD ''''' ''''' '''''' GROSS PROFIT ''''' ''''' Gross = Val(NetSale) - Val(COGSold) COGSold = Val(AvblForSale) - Val(EndingInv)
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 116 Then CmdRun_Click End If End Sub 'F5
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = 27 Then cmdExit_Click End If End Sub
Me.Left = Me.Left PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite PicCode.BackColor = vbWhite PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
TxtDate.Day = Day(Date) TxtDate.Month = Month(Date) TxtDate.Year = Year(Date) TxtFrom.Day = Day(Date) TxtFrom.Month = Month(Date) TxtFrom.Year = Year(Date) TxtTo.Day = Day(Date) TxtTo.Month = Month(Date) TxtTo.Year = Year(Date)
nodbb.Expanded = True ' ==============[PURCHASE]=============== TV.Nodes.Add "Root", tvwChild, "A", "Purchase", 6 TV.Nodes.Add "A", tvwChild, "A1", "Date Wise Purchase History", 1 TV.Nodes.Add "A", tvwChild, "A2", "Supplier Wise Purchase History", 1 TV.Nodes.Add "A", tvwChild, "A3", "Product Wise Purchase History", 1 TV.Nodes.Item("A").Bold = True
'
==============[SALES]=============== TV.Nodes.Add "Root", tvwChild, "B", "Sales", 6 TV.Nodes.Add "B", tvwChild, "B2", "Date Wise Sale History", 1 TV.Nodes.Add "B", tvwChild, "B3", "Customer Wise Sale History", 1 TV.Nodes.Add "B", tvwChild, "B4", "Product Wise Sale History", 1 TV.Nodes.Item("B").Bold = True
'
==============[ACCOUNTS]=============== TV.Nodes.Add "Root", tvwChild, "C", "Accounts", 6 TV.Nodes.Add "C", tvwChild, "C1", "Accounts Status", 1 TV.Nodes.Add "C", tvwChild, "C2", "Accounts Ledger", 1 TV.Nodes.Item("C").Bold = True
'
TV.Nodes.Add "D", tvwChild, "D1", "Stock Status", 1 TV.Nodes.Add "D", tvwChild, "D2", "Product Price List", 1 TV.Nodes.Add "D", tvwChild, "D3", "Reorder Status", 1 TV.Nodes.Add "D", tvwChild, "D4", "Products To Reorder", 1 TV.Nodes.Item("D").Bold = True
'
==============[FINANCIALS]=============== TV.Nodes.Add "Root", tvwChild, "E", "Financial Reports", 6 TV.Nodes.Add "E", tvwChild, "E1", "Trial Balance", 1 TV.Nodes.Add "E", tvwChild, "E2", "Income Statement", 1 TV.Nodes.Item("E").Bold = True
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '' '' Shape1(6).BackColor = &H96BEAE Shape1(7).BackColor = &H96BEAE
End Sub
End Sub
If TxtLookup.Text = "ALL" Then PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite Else PicLookup1.Enabled = True PicLookup1.BackColor = &HC0C0C0 TxtLookup1.SetFocus End If
End If
End Sub
Else
End If End If
End Sub
Private Sub MshSearch_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then CmdLovOK2_Click TxtLookup.SetFocus End If If KeyAscii = 27 Then CmdLovCancel2_Click End If
If KeyAscii = 8 Then If TxtGrdSrch.Text <> "" Then TxtGrdSrch.Text = Left$(TxtGrdSrch.Text, (Len(TxtGrdSrch.Text) - 1)) ElseIf KeyAscii = 13 Then KeyAscii = 0 Else TxtGrdSrch.Text = TxtGrdSrch.Text + Chr$(KeyAscii) End If
End Sub
Private Sub TV_NodeClick(ByVal Node As MSComctlLib.Node) '====================Purchase Report Start========================== If Node = "Reports" Then VRun = "" TxtLookup = "" TxtLookupCode = "" TxtLookup1 = "" TxtLookupCode1 = "" TxtCode = "" TxtToCode = "" PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup1.Enabled = False PicLookup.BackColor = vbWhite PicLookup1.BackColor = vbWhite PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite
PicCode.BackColor = vbWhite
'----------------------------------------------------------'--------------Accounts Reports------------------ElseIf Node = "Accounts Status" Then VRun = "Accounts Status" ListLov.Clear Call AccountType
PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite PicCode.BackColor = vbWhite TxtLookup.SetFocus PicLookup1.Enabled = True PicLookup1.BackColor = &HC0C0C0
VRun = "Trial Balance" PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite PicCode.BackColor = vbWhite PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite
PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite PicCode.BackColor = vbWhite PicLookup1.Enabled = True PicLookup1.BackColor = &HC0C0C0 TxtLookup.SetFocus
ElseIf Node = "Accounts Ledger" Then VRun = "Accounts Ledger" ListLov.Clear Call AccountType
PicDateBw.Enabled = True PicDateBw.BackColor = &HC0C0C0 PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
ElseIf Node = "Income Statement" Then VRun = "Income Statement" PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite
PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite TxtFrom.SetFocus
PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite PicCode.BackColor = vbWhite PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite PicCode.BackColor = vbWhite PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
PicDateBw.Enabled = False PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = vbWhite
ElseIf Node = "Daily Cash Book" Then VRun = "Daily Cash Book"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite TxtFrom.SetFocus PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
ElseIf Node = "Date Wise Purchase History" Then VRun = "Date Wise Purchase History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite TxtFrom.SetFocus PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
ElseIf Node = "Supplier Wise Purchase History" Then VRun = "Supplier Wise Purchase History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0
ElseIf Node = "Product Wise Purchase History" Then VRun = "Product Wise Purchase History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite TxtFrom.SetFocus PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
ElseIf Node = "Product Wise Sale History" Then VRun = "Product Wise Sale History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite TxtFrom.SetFocus PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
PicDateBw.Enabled = False PicCode.Enabled = True PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite
ElseIf Node = "Date Wise Sale History" Then VRun = "Date Wise Sale History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite TxtFrom.SetFocus PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
ElseIf Node = "Customer Wise Sale History" Then VRun = "Customer Wise Sale History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite PicDateBw.BackColor = &HC0C0C0 PicCode.BackColor = vbWhite TxtFrom.SetFocus PicLookup1.Enabled = False PicLookup1.BackColor = vbWhite
ElseIf Node = "Vehicle Wise Sale History" Then VRun = "Vehicle Wise Sale History"
PicDateBw.Enabled = True PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicDate.BackColor = vbWhite
ElseIf Node = "Product Price List" Then VRun = "Product Price List"
PicDateBw.Enabled = False PicDateBw.BackColor = vbWhite PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite
PicDateBw.Enabled = True PicDateBw.BackColor = &HC0C0C0 PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
'RECEIPTS ElseIf Node = "Date Wise Receipts" Then VRun = "Date Wise Receipts"
PicDateBw.Enabled = True PicDateBw.BackColor = &HC0C0C0 PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False
ElseIf Node = "Account Wise Receipts" Then VRun = "Account Wise Receipts"
PicDateBw.Enabled = True PicDateBw.BackColor = &HC0C0C0 PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
'PAYMENTS ElseIf Node = "Date Wise Payments" Then VRun = "Date Wise Payments"
PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
ElseIf Node = "Account Wise Payments" Then VRun = "Account Wise Payments"
PicDateBw.Enabled = True PicDateBw.BackColor = &HC0C0C0 PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
PicDateBw.Enabled = False PicDateBw.BackColor = vbWhite PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtLookup.SetFocus
PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
PicDateBw.Enabled = True PicDateBw.BackColor = &HC0C0C0 PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite TxtFrom.SetFocus
PicDateBw.Enabled = False PicDateBw.BackColor = vbWhite PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = False PicLookup.BackColor = vbWhite PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False PicDate.BackColor = vbWhite
ElseIf Node = "Code Wise Remaining" Then VRun = "Code Wise Remaining"
PicDateBw.Enabled = False PicDateBw.BackColor = vbWhite PicCode.Enabled = False PicDate.Enabled = False PicLookup.Enabled = True PicLookup.BackColor = &HC0C0C0 PicLookup1.BackColor = vbWhite PicLookup1.Enabled = False
End If TxtLookup = "" TxtLookupCode = "" TxtLookup1 = "" TxtLookupCode1 = "" TxtCode = "" TxtToCode = "" End Sub
End Sub
Private Sub TxtFrom_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then TxtTo.SetFocus End If
End Sub
Private Sub TxtLookup_Change() If TxtLookup.Text = "" Then TxtLookupCode.Text = "" End If End Sub
End Sub Private Sub TxtLookup_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 32 And Shift = 2 Then
Select Case VRun Case "Accounts Status" ListLov.Clear ListLov.Visible = True ListLov.SetFocus Call AccountType
Case "Accounts Ledger" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear Call AccountsData
Case "Account Wise Receipts" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear Call AccountsData
Call AccountsData
Case "Department Vehicles" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear Call AccountsData
Case "Supplier Wise Purchase History" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear Call AccountsData
Case "Product Wise Purchase History" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear Call AccountsData
Case "Product Wise Sale History" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear Call AccountsData
Case "Customer Wise Sale History" PicSrchGrid.Visible = True TxtGrdSrch.Text = "" ListLov.Clear
Call AccountsData
''Public Sub StockStatus() '' '' '' '' '' '' '' Connect.Cn.Execute "delete from RepStockStat" DataEnvironment2.ProductsStatus Val(TxtLookupCode) For a = 1 To DataEnvironment2.rsProductsStatus.RecordCount If RsDTrans.State = 1 Then RsDTrans.Close RsDTrans.Open "Select sum(purchasedetail.qtys)from purchasedetail inner join
purchaseheader on purchasedetail.purcode=purchaseheader.purcode where productCode= " & Val(DataEnvironment2.rsProductsStatus("ProductCode")) & " and purchaseheader.purdate< '" & Format(TxtFrom.Value, "DD-MMM-YY") & " 00:00:00.000'", Connect.Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' If IsNull(RsDTrans(0)) = False Then DrSum = RsDTrans(0) Else DrSum = 0 End If RsDTrans.Close
'' ''
If RsDTrans.State = 1 Then RsDTrans.Close RsDTrans.Open "Select sum(salesdetail.qty)from salesdetail inner join salesheader on
salesdetail.salcode=salesheader.salcode where productCode= " & Val(DataEnvironment2.rsProductsStatus("ProductCode")) & " and salesheader.saldate< '" & Format(TxtFrom.Value, "DD-MMM-YY") & " 00:00:00.000'", Connect.Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' '' If IsNull(RsDTrans(0)) = False Then CrSum = RsDTrans(0) Else CrSum = 0 End If RsDTrans.Close OpBal = DrSum - CrSum RsDTrans.Open "Select sum(purchasedetail.qtys),sum(purchasedetail.bonus) from
purchasedetail inner join purchaseheader on purchasedetail.purcode=purchaseheader.purcode where purchasedetail.productCode= " & Val(DataEnvironment2.rsProductsStatus("ProductCode")) & " and purchaseheader.purdate between '" & Format(TxtFrom.Value, "DD-MMM-YY") & " 00:00:00.000'" & " And '" & Format(TxtTo.Value, "DD-MMM-YY") & " 00:00:00.000'", Connect.Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' If IsNull(RsDTrans(0)) = False Then Rec = RsDTrans(0) TBonus = RsDTrans(1) Else Rec = 0 TBonus = 0 End If
'' ''
salesdetail.salcode=salesheader.salcode where salesdetail.productCode= " & Val(DataEnvironment2.rsProductsStatus("ProductCode")) & " and salesheader.saldate between '" & Format(TxtFrom.Value, "DD-MMM-YY") & " 00:00:00.000'" & " And '" & Format(TxtTo.Value, "DD-MMM-YY") & " 00:00:00.000'", Connect.Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' '' If IsNull(RsDTrans(0)) = False Then TSale = RsDTrans(0) Else TSale = 0 End If RsDTrans.Close If RsDTrans.State = 1 Then RsDTrans.Close RsDTrans.Open "Select sum(salesdetail.qty)from salesdetail inner join salesheader on
salesdetail.salcode=salesheader.salcode where productCode= " & Val(DataEnvironment2.rsProductsStatus("ProductCode")) & " and salesheader.saldate= '" & Format(TxtTo.Value, "DD-MMM-YY") & " 00:00:00.000'", Connect.Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' '' If IsNull(RsDTrans(0)) = False Then DSale = RsDTrans(0) Else DSale = 0 End If RsDTrans.Close '**************** insert into RepStockStat VSQL = "INSERT INTO RepStockStat VALUES ("
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' ''
VSQL = VSQL & a & ",'" & DataEnvironment2.rsProductsStatus("ProductName") VSQL = VSQL & "','" & DataEnvironment2.rsProductsStatus("Packing") VSQL = VSQL & "'," & DataEnvironment2.rsProductsStatus("PrincipalCode") VSQL = VSQL & "," & DataEnvironment2.rsProductsStatus("Rate") VSQL = VSQL & "," & OpBal VSQL = VSQL & "," & Rec VSQL = VSQL & "," & OpBal + Rec VSQL = VSQL & "," & DSale VSQL = VSQL & "," & TSale VSQL = VSQL & "," & TSale * DataEnvironment2.rsProductsStatus("Rate") VSQL = VSQL & "," & DataEnvironment2.rsProductsStatus("Claim") VSQL = VSQL & "," & DataEnvironment2.rsProductsStatus("Bonus") VSQL = VSQL & "," & DataEnvironment2.rsProductsStatus("CurBal") VSQL = VSQL & "," & DataEnvironment2.rsProductsStatus("TotalAmount") VSQL = VSQL & ",'" & TxtTo.Value VSQL = VSQL & "'," & TBonus & ")" Cn.Execute VSQL MsgBox DataEnvironment2.rsProductsStatus(1) & ", " & OpBal DataEnvironment2.rsProductsStatus.MoveNext Next DataEnvironment2.rsProductsStatus.Close
''
End Sub
Private Sub TxtLookup_LostFocus() If TxtLookup.Text = "ALL" Then TxtLookup1.Text = "" End If End Sub
End Sub
Private Sub TxtLookup1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 32 And Shift = 2 Then Select Case VRun
MshSearch.SetFocus
End Sub
Private Sub TxtTo_KeyDown(KeyCode As Integer, Shift As Integer) On Error Resume Next If KeyCode = 13 Then TxtLookup.SetFocus On Error Resume Next
'
SelectAll TxtLookup
End Sub Public Sub BalanceRep() 'FAROOQ ''''''Deleting old records ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''''Opening Accounts Table ''''' ''''' ''''' ''''' ''''' ''''' ''''''Opening record set for Debit Transactions ''''' ''''' Set RsDrt = New ADODB.Recordset If RsDrt.State = 1 Then RsDrt.Close Set RsAcc = New ADODB.Recordset If RsAcc.State = 1 Then RsAcc.Close RsAcc.Open StrQry, Db, adOpenStatic, adLockPessimistic Dim Vc1 As Single For Vc1 = 1 To RsAcc.RecordCount RepBalances.Refresh Db.Execute "Delete from TblRep" Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Delete * from TblRep", Db, adOpenStatic, adLockOptimistic
'''''
RsAcc.Fields("Code"), Db, adOpenStatic, adLockPessimistic ''''' ''''' ''''' ''''' ''''' ''''' ''''''Opening record set for Credit Transactions ''''' ''''' ''''' Set RsCrt = New ADODB.Recordset If RsCrt.State = 1 Then RsCrt.Close RsCrt.Open "Select Sum(Amount) from CRTGLT where AccountCode = " & If IsNull(RsDrt(0)) Then DrBal = 0 Else DrBal = Val(RsDrt(0)) End If
RsAcc.Fields("Code"), Db, adOpenStatic, adLockPessimistic ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''''Generating Difference between Total Debit and Total Credit ''''' ''''' ''''' Dim VBal As Double VBal = Val(DrBal) - Val(CrBal) If IsNull(RsCrt(0)) Then CrBal = 0 Else CrBal = Val(RsCrt(0)) End If
''''''Inserting data into TblRep ''''' Db.Execute "INSERT INTO TblRep (Code, Descrip, TotalDr, TotalCr, Balance, DrCr) VALUES ("
& Val(RsAcc("Code")) & ", '" & RsAcc("Name") & "', " & Val(DrBal) & ", " & Val(CrBal) & ", " & Val(VBal) & ", '" & "-" & "' )" ''''' '''''''''Updating Record to know that is the balacne DR or CR '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' '''''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' ''''' On Error Resume Next RsAcc.MoveNext Next DrBal = 0 CrBal = 0 VBal = 0 If Val(VBal) > 0 Then Db.Execute "UPDATE TblRep SET DrCr = '" & "Dr" & "' WHERE TotalDr > 0" ElseIf Val(VBal) < 0 Then Db.Execute "UPDATE TblRep SET DrCr = '" & "Cr" & "' WHERE TotalCr > 0" Else Db.Execute "UPDATE TblRep SET DrCr = '" & "--" & "' WHERE BALANCE = 0" End If
DeRep.Balances
DeRep.rsBalances.Requery
End Sub Public Sub AccountType() Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT DISTINCT AcType FROM Accounts Where AcType not in ('Product')", Con, adOpenStatic, adLockReadOnly For a = 1 To RsLov.RecordCount ListLov.AddItem RsLov(0) RsLov.MoveNext Next ListLov.AddItem "ALL" End Sub
'''Deleting old records '' '' '''Opening Accounts Table '' '' '' '' '' '' '' '''Opening record set for Debit Transactions '' '' '' Set RsDrt = New ADODB.Recordset If RsDrt.State = 1 Then RsDrt.Close RsDrt.Open "Select Sum(Amount) from DRt where AccountCode = " & Dim Vc1 As Single For Vc1 = 1 To RsAcc.RecordCount Set RsAcc = New ADODB.Recordset If RsAcc.State = 1 Then RsAcc.Close RsAcc.Open "Select Code,Remarks from Accounts", Cn, adOpenStatic, adLockPessimistic Cn.Execute "Delete from TblTrial"
RsAcc.Fields("Code"), Cn, adOpenStatic, adLockPessimistic '' '' '' '' '' '' '''Opening record set for Credit Transactions '' Set RsCrt = New ADODB.Recordset If IsNull(RsDrt(0)) Then DrBal = 0 Else DrBal = RsDrt(0) End If
'' ''
If RsCrt.State = 1 Then RsCrt.Close RsCrt.Open "Select Sum(Amount) from CRt where AccountCode = " &
RsAcc.Fields("Code"), Cn, adOpenStatic, adLockPessimistic '' '' '' '' '' '' '' '''Generating Difference between Total Debit and Total Credit for each account '' '' '' '' Cn.Execute "INSERT INTO TblTrial (Code, Descrip, Debit, Credit,Id) VALUES (" & Dim VBal As Double VBal = Val(DrBal) - Val(CrBal) If IsNull(RsCrt(0)) Then CrBal = 0 Else CrBal = RsCrt(0) End If
Val(RsAcc("Code")) & ", '" & RsAcc("Remarks") & "',0,0, " & Val(Vc1) & ")" '' '''Updating Record to know that is the balacne DR or CR '' '' '' '' & "" '' End If If Val(VBal) > 0 Then Cn.Execute "UPDATE TblTrial SET Debit = " & Val(VBal) & " where Id = " & Val(Vc1) & "" ElseIf Val(VBal) < 0 Then Cn.Execute "UPDATE TblTrial SET Credit = " & Abs(Val(VBal)) & " where Id = " & Val(Vc1)
'' '' '' '' '' '''Getting the difference between Total Debit and Total Credit '' '' '' Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select sum(Debit),sum(Credit) from TblTrial", Cn, adOpenStatic, VBal = 0 RsAcc.MoveNext Next
adLockReadOnly '' '' '' VBal = Val(RsLov(0)) - Val(RsLov(1)) If Val(VBal) > 0 Then RepTrial.Sections("Section5").Controls("LblDif").Caption = "Dr. Diff: " &
Format(Val(VBal), "##,#.00") '' '' ElseIf Val(VBal) < 0 Then RepTrial.Sections("Section5").Controls("LblDif").Caption = "Cr. Diff: " &
Format(Val(VBal), "##,#.00") '' '' '' '' '''Showing Report '' '' If De1.rsRepTrial.State = 1 Then De1.rsRepTrial.Close RepTrial.Refresh Else RepTrial.Sections("Section5").Controls("LblDif").Caption = Format(0, "##,#.00") End If
'' ''
''End Sub
Case "Supplier Wise Purchase History" SetSearchGrid FillGridAccounts MshSearch.Col = 0 MshSearch.Row = 1 MshSearch.SetFocus
Case "Customer Wise Sale History" SetSearchGrid FillGridAccounts MshSearch.Col = 0 MshSearch.Row = 1 MshSearch.SetFocus
Case "Product Wise Sale History" SetSearchGrid FillGridAccounts MshSearch.Col = 0 MshSearch.Row = 1 MshSearch.SetFocus
Case "Month Wise Account Status" Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT Code,Name FROM Accounts ORDER BY Remarks", Con, adOpenStatic, adLockReadOnly
Case "Receivable" Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Code,Name from Accounts Where AccType = '" & ListLov & "' order By Remarks", Con, adOpenStatic, adLockReadOnly Set MshSearch.DataSource = RsLov PicSrchGrid.Visible = True MshSearch.ColWidth(0) = 1000 MshSearch.ColWidth(1) = 4000 MshSearch.SetFocus
Case "Payable" Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Code,Name from Accounts Where AccType = '" & ListLov & "' order By Remarks", Con, adOpenStatic, adLockReadOnly Set MshSearch.DataSource = RsLov PicSrchGrid.Visible = True MshSearch.ColWidth(0) = 1000
Public Sub AccLedger() Dim DtFrom As Date Dim DtTo As Date Dim mBalance As Single Dim DrOpBal As Single Dim CrOpBal As Single Dim DrCr As String Dim RunningBal As Double
mDateQry = " BETWEEN #" & DtFrom & "# And #" & DtTo & "#"
'Getting Opening Balance for the selected Account Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(DrAmount),Sum(CrAmount) from ViewAccountLedger where TransDate < #" & DtFrom & "# and AcID = " & Val(TxtLookupCode) & "", Con, adOpenStatic, adLockOptimistic 'If result is NULL If IsNull(RS(0)) Or IsNull(RS(1)) Then mBalance = 0 Else mBalance = Val(RS(0)) - Val(RS(1)) End If
'Finding DR/CR/Nill balance If Val(mBalance) > 0 Then DrOpBal = Val(mBalance) CrOpBal = 0 DrCr = "DR" ElseIf Val(mBalance) < 0 Then CrOpBal = Abs(Val(mBalance)) DrOpBal = 0 DrCr = "CR" Else
'Saving Opening Balance in REPACLEDGER Con.Execute "Insert into RepAcLedger Values( " & Val(TxtLookupCode) & ", '" & Format(DtFrom - 1, "dd/mm/yyyy") & "', '" & "Last Balance (C/F)" & "', " & Val(DrOpBal) & ", " & Val(CrOpBal) & ", " & Abs(Val(mBalance)) & ", '" & DrCr & "') "
'Fetching Data into RepAcLedger Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from ViewAccountLedger where AcId = " & Val(TxtLookupCode) & " and TransDate " & mDateQry, Con, adOpenStatic, adLockOptimistic RS.Requery
While Not RS.EOF = True RunningBal = Val(mBalance) + Val(RS(4)) - Val(RS(5)) mBalance = RunningBal
ElseIf Val(RunningBal) < 0 Then DrCr = "CR" Else DrCr = "NILL" End If
' DR CR balance
AcID drcr
Date
Desc
Con.Execute "Insert into RepAcLedger Values( " & Val(RS(0)) & ", '" & Format(RS(2), "dd/mm/yyyy") & "', '" & RS(3) & "', " & Val(RS(4)) & ", " & Val(RS(5)) & ", " & Val(RunningBal) & ", '" & DrCr & "') " RS.MoveNext Wend
daraRepAcLedger.Show vbModal
End Sub
ListLov.AddItem "March" ListLov.AddItem "April" ListLov.AddItem "May" ListLov.AddItem "June" ListLov.AddItem "July" ListLov.AddItem "August" ListLov.AddItem "September" ListLov.AddItem "October" ListLov.AddItem "November" ListLov.AddItem "December" End Sub
Public Sub MonthDates() 'Days of Monthts for Calcutaing COG If TxtLookup.Text = "January" Then DtFrom = "01-Jan-" & TxtLookup1.Text DtTo = "31-Jan-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "February" Then DtFrom = "01-Feb-" & TxtLookup1.Text DtTo = "28-Feb-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "April" Then DtFrom = "01-Apr-" & TxtLookup1.Text DtTo = "30-Apr-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "May" Then DtFrom = "01-May-" & TxtLookup1.Text DtTo = "31-May-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "June" Then DtFrom = "01-Jun-" & TxtLookup1.Text DtTo = "30-Jun-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "July" Then DtFrom = "01-Jul-" & TxtLookup1.Text DtTo = "31-Jul-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "August" Then DtFrom = "01-Aug-" & TxtLookup1.Text DtTo = "31-Aug-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "September" Then DtFrom = "01-Sep-" & TxtLookup1.Text DtTo = "30-Sep-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "October" Then DtFrom = "01-Oct-" & TxtLookup1.Text DtTo = "31-Oct-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "November" Then DtFrom = "01-Nov-" & TxtLookup1.Text DtTo = "30-Nov-" & TxtLookup1.Text
ElseIf TxtLookup.Text = "December" Then DtFrom = "01-Dec-" & TxtLookup1.Text DtTo = "31-Dec-" & TxtLookup1.Text
End If
End Sub
TxtTo.Value = DtTo
MDateQry = " BETWEEN '" & TxtFrom.Value & "' And '" & TxtTo.Value & "'"
'''Sales during the given period '' '' '' '' '' Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT SUM(SaleDetail.TotalAmount) FROM Sale INNER JOIN SaleDetail ON Dim mTotalSales As Double
Sale.Code = SaleDetail.Code INNER JOIN Product ON SaleDetail.ProductCode = Product.Code WHERE Product.Type IN ('Billets/Ingots') and Sale.TDate" & MDateQry, Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' RepIncomeStatement.Sections("Section2").Controls("LblTotalSale").Caption = If IsNull(RsLov(0)) Then mTotalSales = 0 Else mTotalSales = Val(RsLov(0)) End If
Val(mTotalSales) '' '''Sales Return during the period '' Dim mSaleRet As Double
'' '' '' '' Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT SUM(SaleDetailR.TotalAmount)FROM SaleR INNER JOIN SaleDetailR
ON SaleR.Code = SaleDetailR.Code INNER JOIN Product ON SaleDetailR.ProductCode = Product.Code WHERE Product.Type IN ('Billets/Ingots') and SaleR.TDate" & MDateQry, Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' '' '''Sales Discounts during the period '' '' '' '' '' Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT SUM(Drt.Amount) FROM GLT INNER JOIN DRT ON GLT.Code = Dim mSaleDiscount As Double RepIncomeStatement.Sections("Section2").Controls("LblSaleRet").Caption = Val(mSaleRet) If IsNull(RsLov(0)) Then mSaleRet = 0 Else mSaleRet = Val(RsLov(0)) End If
DRT.Code INNER JOIN Accounts ON DRT.AccountCode = Accounts.Code WHERE (Accounts.AccType IN ('Discount Allowed')) and Glt.Tdate" & MDateQry, Cn, adOpenStatic, adLockReadOnly
''
If IsNull(RsLov(0)) Then
RepIncomeStatement.Sections("Section2").Controls("LblDiscount").Caption =
Val(mSaleDiscount) '' '''Calculating NetSales '' '' '' '' '' '''Gross Profit '' '' '' Dim mGrossProfit As Double mGrossProfit = Val(mNetSale) - Val(mCOG) RepIncomeStatement.Sections("Section2").Controls("LblGross").Caption = mNetSale = Val(mTotalSales) - Val(mSaleRet) + Val(mSaleDiscount) RepIncomeStatement.Sections("Section2").Controls("LblNetSale").Caption = Val(mNetSale) Dim mNetSale As Double
''
StrQry = "SELECT Code, Remarks FROM Accounts WHERE AccType IN ('Opeating Expense')
AND AccType NOT LIKE '%Tax%'" '' '''========================Copying Data to TblRep=========================== '' '''Deleting old records '' '' '' '''Opening Accounts Table '' '' '' '' '' '' '''Opening record set for Debit Transactions '' '' '' Set RsDrt = New ADODB.Recordset If RsDrt.State = 1 Then RsDrt.Close RsDrt.Open "SELECT SUM(DRT.Amount) FROM GLT INNER JOIN DRT ON GLT.Code Set RsAcc = New ADODB.Recordset If RsAcc.State = 1 Then RsAcc.Close RsAcc.Open StrQry, Cn, adOpenStatic, adLockPessimistic Dim Vc1 As Single For Vc1 = 1 To RsAcc.RecordCount Cn.Execute "Delete from TblRep" RepBalances.Refresh
= DRT.Code where DRT.AccountCode = " & RsAcc.Fields("Code") & " and GLT.Tdate" & MDateQry, Cn, adOpenStatic, adLockPessimistic '' '' If IsNull(RsDrt(0)) Then DrBal = 0
'''Opening record set for Credit Transactions '' '' '' Set RsCrt = New ADODB.Recordset If RsCrt.State = 1 Then RsCrt.Close RsCrt.Open "SELECT SUM(CRT.Amount) FROM GLT INNER JOIN CRT ON GLT.Code
= CRT.Code where CRT.AccountCode = " & RsAcc.Fields("Code") & " and GLT.TDate" & MDateQry, Cn, adOpenStatic, adLockPessimistic '' '' '' '' '' '' '' '''Generating Difference between Total Debit and Total Credit '' '' '' '''Inserting data into TblRep '' Cn.Execute "INSERT INTO TblRep (Code, Descrip,TotalDr, TotalCr, Balance, DrCr) VALUES (" & Dim VBal As Double VBal = Val(DrBal) - Val(CrBal) If IsNull(RsCrt(0)) Then CrBal = 0 Else CrBal = Val(RsCrt(0)) End If
Val(RsAcc("Code")) & ", '" & RsAcc("Remarks") & "', " & Val(DrBal) & ", " & Val(CrBal) & ", " & Abs(Val(VBal)) & ", '" & "-" & "' )"
'' '''Updating Record to know that is the balacne DR or CR '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(Balance) from TblRep", Cn, adOpenStatic, adLockReadOnly Dim mTotalOperating As Double RsAcc.MoveNext Next DrBal = 0 CrBal = 0 VBal = 0 If Val(VBal) > 0 Then Cn.Execute "UPDATE TblRep SET DrCr = '" & "Dr" & "' WHERE TotalDr > 0" ElseIf Val(VBal) < 0 Then Cn.Execute "UPDATE TblRep SET DrCr = '" & "Cr" & "' WHERE TotalCr > 0" Else Cn.Execute "UPDATE TblRep SET DrCr = '" & "--" & "' WHERE BALANCE = 0" End If
Val(mTotalOperating) '''Net Income '' '' '' Dim mNetIncome As Double mNetIncome = Val(mGrossProfit) - Val(mTotalOperating) RepIncomeStatement.Sections("Section5").Controls("LblNetIncome").Caption =
Val(mNetIncome) '' '''Other Income '' '' '' '' Dim mOtherIncome As Double Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT SUM(CRT.Amount) FROM GLT INNER JOIN CRT ON GLT.Code =
Accounts.AccType = 'Other Income' and GLT.Tdate" & MDateQry, Cn, adOpenStatic, adLockReadOnly '' '' '' '' '' '' '' RepIncomeStatement.Sections("Section5").Controls("LblOtherIncome").Caption = If IsNull(RsLov(0)) Then mOtherIncome = 0 Else mOtherIncome = Val(RsLov(0)) End If
Val(mOtherIncome) '''Net Income before tax '' '' '' Dim NetBeforeTax As Double NetBeforeTax = Val(mNetIncome) + Val(mOtherIncome) RepIncomeStatement.Sections("Section5").Controls("LblIncomeBeforeTax").Caption =
Val(NetBeforeTax) '' '''Finding Taxes Amount '' '' '' '' Dim mTaxes As Double Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "SELECT SUM(DRT.Amount) FROM GLT INNER JOIN DRT ON GLT.Code =
DRT.Code INNER JOIN Accounts ON DRT.AccountCode = Accounts.Code WHERE Accounts.AccType like '%Tax%' and GLT.Tdate" & MDateQry, Cn, adOpenStatic, adLockReadOnly '' '' If IsNull(RsLov(0)) Then mTaxes = 0
RepIncomeStatement.Sections("Section5").Controls("LblTaxes").Caption = Val(mTaxes)
'''Net Income After Taxes '' '' '' '' NetAfterTax = Val(NetBeforeTax) - Val(mTaxes) RepIncomeStatement.Sections("Section5").Controls("LblIncomeAfterTax").Caption = Dim NetAfterTax As Double
''Public Sub BalanceSheet() '''Deleting Old Records '' '' '''Categorized Trial Balance '' '' '' Set RsAcc = New ADODB.Recordset If RsAcc.State = 1 Then RsAcc.Close RsAcc.Open "Select MainHead,Code,Remarks from Accounts Where MainHead in (1,2,3)", Cn.Execute "Delete from TblTrialCat"
Dim Vc1 As Single For Vc1 = 1 To RsAcc.RecordCount Set RsAcType = New ADODB.Recordset If RsAcType.State = 1 Then RsAcType.Close RsAcType.Open "Select Code from AccountTypes where Code = " &
Val(RsAcc("MainHead")) & "", Cn, adOpenStatic, adLockReadOnly '' '''Opening record set for Debit Transactions '' '' '' Set RsDrt = New ADODB.Recordset If RsDrt.State = 1 Then RsDrt.Close RsDrt.Open "Select Sum(Amount) from DRt where AccountCode = " &
RsAcc("Code"), Cn, adOpenStatic, adLockPessimistic '' '' '' '' '' '' '''Opening record set for Credit Transactions '' '' '' Set RsCrt = New ADODB.Recordset If RsCrt.State = 1 Then RsCrt.Close RsCrt.Open "Select Sum(Amount) from CRt where AccountCode = " & If IsNull(RsDrt(0)) Then DrBal = 0 Else DrBal = RsDrt(0) End If
'''Generating Difference between Total Debit and Total Credit for each account '' '' '' '''Inserting Values into TblTrialCat '' Cn.Execute "INSERT INTO TblTrialCat (MainHead,Code, Descrip, Debit, Credit,Id) VALUES (" Dim VBal As Double VBal = Val(DrBal) - Val(CrBal)
& Val(RsAcType("Code")) & ", " & Val(RsAcc("Code")) & ", '" & RsAcc("Remarks") & "',0,0, " & Val(Vc1) & ")" '' '''Updating Record to know that is the balacne DR or CR '' '' "" '' '' ElseIf Val(VBal) < 0 Then Cn.Execute "UPDATE TblTrialCat SET Credit = " & Abs(Val(VBal)) & " where Id = " & If Val(VBal) > 0 Then Cn.Execute "UPDATE TblTrialCat SET Debit = " & Val(VBal) & " where Id = " & Val(Vc1) &
RsAcc.MoveNext Next
'''Showing Report '' '' '' '' '' ''End Sub Public Sub ExactRecords() Dim ExactRowCount As Integer If De1.rsTrialCatMain.State = 1 Then De1.rsTrialCatMain.Close RepTrialCat.Refresh Load RepTrialCat RepTrialCat.Show 1
MshSearch.Rows = 2 MshSearch.Row = 1
ExactRowCount = 0
If TxtGrdSrch.Text = "" Then SQLQry = "Select Code, Name, AccType from Accounts where Disable = 0" Else
SQLQry = "Select Code, Name, AccType from Accounts Where Disable = 0 And Name Like '" & TxtGrdSrch.Text & "%'" End If
Set RsSrch = New ADODB.Recordset If RsSrch.State = 1 Then RsSrch.Close RsSrch.Open SQLQry, dB, adOpenStatic, adLockReadOnly
RsSrch.MoveNext Next
Dim mProdName As String Dim mOpQty Dim mPurQty Dim mSalQty As Single As Single As Single
Set RsMisc = New ADODB.Recordset If RsMisc.State = 1 Then RsMisc.Close RsMisc.Open "Select AcId,AcTitle,ReOrderPoint from Accounts where AcType = 'Product'", Con, adOpenStatic, adLockOptimistic
mProdId = Val(RsMisc(0)) mProdName = RsMisc(1) mReOrderQty = Val(RsMisc(2)) 'Opening Stock Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "Select * from Product_Openings where ProdId = " & Val(mProdId) & "", Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then GoTo CheckPurchase
CheckPurchase: 'Purchases Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from Purchase_Detail where ProdId = " & Val(mProdId) & "", Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then mPurQty = 0 GoTo CheckSales Else mPurQty = Val(RS(0)) End If RS.Close Set RS = Nothing
If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from Sale_Detail where ProdId = " & Val(mProdId) & "", Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then mSalQty = 0 GoTo MyStock Else mSalQty = Val(RS(0)) End If
'Fetching Data into RepStockStatus Con.Execute "Insert Into RepStockStatus Values(" & Val(mProdId) & ", '" & mProdName & "', " & Val(AvblStock) & ", " & Val(mReOrderQty) & ")"
RsMisc.MoveNext Next
dataRepStockStatus.Show vbModal
End Sub
Public Sub PurchaseHistoryByDate() dataRepPurchaseByDate.Show vbModal ''SELECT Purchase_Main.PurId, Purchase_Main.PurDate, Accounts.AcId, Accounts.AcTitle, Purchase_Main.TotalAmount FROM (Purchase_Main INNER JOIN Purchase_Detail ON Purchase_Main.PurId = Purchase_Detail.PurId) INNER JOIN Accounts ON Purchase_Detail.AcId = Accounts.AcId;
End Sub
WaitMode
RepStockAdjustment.Sections("Section4").Controls("LblDate").Caption = "From: " & TxtFrom.Value & " " & "To: " & TxtTo.Value
RepStockAdjustment.Sections("Section4").Controls("LblAdjType").Caption = UCase(TxtLookup.Text)
Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select VehNo from VehicleReg", dB, adOpenStatic, adLockOptimistic If RsLov.RecordCount <= 0 Then Exit Sub End If
RsLov.MoveNext Next
End Sub
RepInvoicePrint.Sections("ReportHeader").Controls("LblDate").Caption = "From: " & TxtFrom.Value & " " & "To: " & TxtTo.Value
Public Sub DeptData() 'Getting Dept Code for the selected Veh Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select DeptCode From VehicleReg Where VehNo = '" & TxtLookup.Text & "'", dB, adOpenStatic, adLockOptimistic
'Getting Dept Name for the Selected Veh Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Name from Customer Where Code = " & Val(RsLov(0)) & "", dB, adOpenStatic, adLockOptimistic DeptName = RS(0) End Sub
Public Sub MeterStock() Dim Vc1 As Integer Dim mOpStock Dim mIssue Dim mAvbl As Single As Single As Single As Single
As Single
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Code from MeterInfo", dB, adOpenStatic, adLockOptimistic
If RS.EOF = True Then MsgBox "No data found", vbInformation, "Message" Exit Sub End If
'Op Stock Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select OpStock from MeterInfo Where Code = " & Val(Vc1) & "", dB, adOpenForwardOnly, adLockReadOnly If IsNull(RsLov(0)) Then mOpStock = 0 Else mOpStock = Val(RsLov(0)) End If
'Issue Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(Qty) from MeterIssue Where MeterCode = " & Val(Vc1) & "", dB, adOpenForwardOnly, adLockReadOnly If IsNull(RsLov(0)) Then mIssue = 0 Else mIssue = Val(RsLov(0)) End If
'Consumption Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(ClosingReading)-Sum(OpReading)+Sum(TestQty) from MeterReading Where MeterCode = " & Val(Vc1) & "", dB, adOpenForwardOnly, adLockReadOnly If IsNull(RsLov(0)) Then mConsume = 0 Else mConsume = Val(RsLov(0)) End If
dB.Execute "INSERT INTO TblMeterStock(MeterCode,OpStock,Issue,Avbl,Consume,Diff) VALUES(" & Val(Vc1) & ", " & Val(mOpStock) & ", " & Val(mIssue) & ", " & Val(mAvbl) & ", " & Val(mConsume) & ", " & Val(mDiff) & " )"
Public Sub Pause(ByVal Delay As Single) Dim X As Single X = Timer + Delay Do While X > Timer DoEvents Loop End Sub ' Add a delay to the current time ' and waits for the current time ' to catch up.
Public Sub CashBookData() Dim CashAccountCode Dim DrCash Dim CrCash Dim LastCash Dim CrSale Dim CashSale Dim Receipts Dim CrPurchase Dim CashPurchase Dim Payments As Integer
Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Code from Accounts Where AccType In ('Cash')", dB, adOpenStatic, adLockOptimistic
If RsLov.EOF = True Then MsgBox "Cash Account not found", vbInformation, "Message" Exit Sub Else CashAccountCode = Val(RsLov(0)) End If
Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(Amount) from DrtGlt Where AccountCode = " & Val(CashAccountCode) & " And Tdate < #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic If IsNull(RsLov(0)) Then
Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RS.Close RsLov.Open "Select Sum(Amount) from CrtGlt Where AccountCode = " & Val(CashAccountCode) & " And Tdate < #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic
'=============== Getting Today's Credit Sale Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close
RsLov.Open "Select Sum(TotalAmount) from Sale Where SaleType = '" & "Credit" & "' And Tdate = #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic
'=============== Getting Today's Cash Sale Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(TotalAmount) from Sale Where SaleType = '" & "Cash" & "' And Tdate = #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic
'=============== Getting Today's Receipts Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close
RsLov.Open "Select Sum(Amount) from DrtGlt Where AccountCode = " & Val(CashAccountCode) & " And Tdate = #" & TxtFrom.Value & "# And TType Not In ('SAL')", dB, adOpenStatic, adLockOptimistic If IsNull(RsLov(0)) Then Receipts = 0 Else Receipts = Val(RsLov(0)) End If
'=============== Getting Today's Credit Purchase Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(TotalAmount) from Purchase Where PurchaseType = '" & "Credit" & "' And Tdate = #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic
Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(TotalAmount) from Purchase Where PurchaseType = '" & "Cash" & "' And Tdate = #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic
'=============== Getting Today's Payments Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(Amount) from CrtGlt Where AccountCode = " & Val(CashAccountCode) & " And Tdate = #" & TxtFrom.Value & "# And TType Not In ('PUR')", dB, adOpenStatic, adLockOptimistic If IsNull(RsLov(0)) Then Payments = 0 Else Payments = Val(RsLov(0)) End If
'=============== Getting Today's Credit Sale (To balance on both sides with the caption name {Parties})
Set RsLov = New ADODB.Recordset If RsLov.State = 1 Then RsLov.Close RsLov.Open "Select Sum(TotalAmount) from Sale Where SaleType = '" & "Credit" & "' And Tdate = #" & TxtFrom.Value & "#", dB, adOpenStatic, adLockOptimistic
'Showing Totals In the Report 'CREDIT SIDE RepCashBook.Sections("Section2").Controls("LblLastCash").Caption = Val(LastCash) RepCashBook.Sections("Section2").Controls("LblCreditSale").Caption = Val(CrSale) RepCashBook.Sections("Section2").Controls("LblCashSale").Caption = Val(CashSale) RepCashBook.Sections("Section2").Controls("LblCashReceipts").Caption = Val(Receipts)
'CREDIT SIDE TOTAL CreditTotal = Val(LastCash) + Val(CrSale) + Val(CashSale) + Val(Receipts) + Val(CrPurchase) RepCashBook.Sections("Section2").Controls("LblCreditTotal").Caption = Val(CreditTotal)
'DEBIT SIDE TOTAL DebitTotal = Val(CrPurchase) + Val(CashPurchase) + Val(Payments) + Val(Parties) RepCashBook.Sections("Section2").Controls("LblDebitTotal").Caption = Val(DebitTotal)
RepCashBook.Show 1
End Sub
Public Sub SetSearchGrid() 'Setting of Search Grid With MshSearch .ColWidth(1) = 2500 .ColWidth(2) = 1500
.RowHeight(0) = 400
End With
End Sub
'Filling all Accounts Data in Search grid Select Case VRun Case "Accounts Status" SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcType = '" & TxtLookup.Text & "'"
Case "Accounts Ledger" SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcType NOT in ('Product')"
Case "Supplier Wise Purchase History" SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcType in ('Customer','Supplier')"
Case "Product Wise Purchase History" SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcType in ('Product')"
Case "Customer Wise Sale History" SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcType in ('Customer','Supplier')"
Case "Product Wise Sale History" SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcType in ('Product')"
End Select
RS.Open SQLQry, Con, adOpenStatic, adLockReadOnly If RS.RecordCount <= 0 Then MsgBox "No data found", vbInformation, "Message" Exit Sub End If Set MshSearch.DataSource = RS End Sub
Public Sub SearchRecord() 'Filling the Search grid with Critarial Data
MshSearch.Rows = 2 MshSearch.Row = 0
SearchedRowCount = 0
SQLQry = "Select AcId, AcTitle, AcType from ViewHeadWise where AcTitle Like '" & TxtGrdSrch.Text & "%'"
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open SQLQry, Con, adOpenStatic, adLockReadOnly
With MshSearch .TextMatrix(0, 0) = "ID" .TextMatrix(0, 1) = "Account Title" .TextMatrix(0, 2) = "Account Type" End With
RS.MoveNext Next
End Sub
Public Sub ProductsToReorder() dataRepProductToReorder.Show vbModal End Sub Public Sub TrialBalanceData() Dim AcId As Single Dim AcTitle As String Dim SumofDR As Single Dim SumofCr As Single Dim Balance As Single Dim DrBal As Single Dim CrBal As Single
'Copying data from ViewTrialBalance to RepTrialBalance Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from ViewTrialBalance", Con, adOpenStatic, adLockOptimistic While Not RS.EOF = True AcId = Val(RS(0)) AcTitle = RS(1) SumofDR = Val(RS(2)) SumofCr = Val(RS(3)) Balance = Val(RS(2)) - Val(RS(3))
If Balance > 0 Then DrBal = Abs(Balance) CrBal = 0 ElseIf Balance < 0 Then CrBal = Abs(Balance) DrBal = 0 Else DrBal = 0 CrBal = 0 End If
Con.Execute "Insert into RepTrialBalance(Id,Title,Dr,Cr) Values (" & Val(AcId) & ", '" & AcTitle & "', " & Val(DrBal) & ", " & Val(CrBal) & ")" RS.MoveNext
Wend
'Getting Total of both (Debit / Credit Side) Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Dr),Sum(Cr) from RepTrialBalance", Con, adOpenStatic, adLockOptimistic
'=============================================REPORT======== =======================================
.Sections("Section1").Controls("Text1").DataField = "Id" .Sections("Section1").Controls("Text2").DataField = "Title" .Sections("Section1").Controls("Text3").DataField = "DR" .Sections("Section1").Controls("Text4").DataField = "CR" End With
End Sub
Public Sub IncomeStatData() Dim NetSale Dim COG Dim ProfitB4OtherIncome Dim OtherIncome As Single As Single As Single As Single
As Single As Single
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
' NET SALES OF THE DEFINED PERIOD Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from Sale_Main where SaleDate" & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then NetSale = 0 Else NetSale = Val(RS(0)) End If
Con.Execute "Update RepIncomeStat Set Amount = " & Val(NetSale) & " where Id =1"
' COST OF GOODS SOLD Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "Select Sum(Qty*PurAvg) from ProfitLoss where SaleDate" & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then COG = 0 Else COG = Val(RS(0)) End If
Con.Execute "Update RepIncomeStat Set Amount = " & Val(COG) & " where Id =2"
Con.Execute "Update RepIncomeStat Set Amount = " & Val(ProfitB4OtherIncome) & " where Id =3"
' GET OTHER INCOME Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(OtherIncome) from ViewOtherIncome where TransDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then
Con.Execute "Update RepIncomeStat Set Amount = " & Val(OtherIncome) & " where Id =4"
Con.Execute "Update RepIncomeStat Set Amount = " & Val(Gross) & " where Id =5"
' GET EXPENSE Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalExp) from ViewExpense where TransDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Expense = 0 Else Expense = Val(RS(0)) End If
Con.Execute "Update RepIncomeStat Set Amount = " & Val(Expense) & " where Id =6"
' NET PROFIT NetProfit = Val(Gross) - Val(Expense) Con.Execute "Update RepIncomeStat Set Amount = " & Val(NetProfit) & " where Id =7"
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from RepIncomeStat", Con, adOpenStatic, adLockReadOnly
With dataRepIncomeStat
.Sections("Section2").Controls("lblNetSale").Caption = Val(NetSale) .Sections("Section2").Controls("lblCOG").Caption = Val(COG) .Sections("Section2").Controls("lblGross").Caption = Val(ProfitB4OtherIncome) .Sections("Section2").Controls("lblOtherIncome").Caption = Val(OtherIncome) .Sections("Section2").Controls("lblExpense").Caption = Val(Expense) .Sections("Section2").Controls("lblNetProfit").Caption = Val(NetProfit)
.Sections("Section4").Controls("lblPeriod").Caption = "From " & FrmRep.TxtFrom.Value & " To " & FrmRep.TxtTo.Value
.Show vbModal
End With
End Sub
MODULES
1. modConnection.bas
18
Public Con As New ADODB.Connection Public RS As New ADODB.Recordset Public RsNAV As New ADODB.Recordset Public InsertRecord As New ADODB.Recordset Public UpdateRecord As New ADODB.Recordset Public RsMisc As New ADODB.Recordset
Public Sub dbConnection() Set Con = New ADODB.Connection Con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Database\IMSDB.mdb;Persist Security Info=False" Con.Open End Sub
Public Sub Main() Call dbConnection frmLogin.Show '' '' Load frmStart frmStart.Show
End Sub
2. modMisc.bas
Public ctl As Control
Public RsMax As New ADODB.Recordset Public MaxNmbr As Integer Public mHeadId As Integer Public TrialDr As Double Public TrialCr As Double Public TransactionType As String Public TransactionRef As String Public StrQry As String 'Variable Reporting
'Declaring SLEEP API for using as wait between work Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'Switching On / Off buttons according to the mode Public Function Modes(pNew As Boolean, pOther As Boolean, Frm As Object) 'If new record then If pNew = True Then Frm.lbl(0).Enabled = False Frm.lbl(3).Enabled = False Frm.lbl(4).Enabled = False Frm.lbl(5).Enabled = False
'If Not new record then ElseIf pOther = True Then Frm.lbl(0).Enabled = True
'On GotFocus Highlight the Text Public Function High(txt As TextBox) txt.SelStart = 0 txt.SelLength = Len(txt) End Function
'Set focus to the next control usong Enter Public Function Cng(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys vbTab KeyAscii = 0 End If
End Function
'Clear all text Boxes and Combo Boxes Public Function Clear(Frm As Form)
If TypeOf ctl Is TextBox Then ctl.Text = "" ElseIf TypeOf ctl Is ComboBox Then ctl.ListIndex = -1 End If
Next
End Function
'Only numbers in textbox Public Function ONU(KeyAscii As Integer, txt As TextBox) If KeyAscii > 47 And KeyAscii < 58 Or KeyAscii = 8 Or KeyAscii = 46 Then
If KeyAscii = 46 Then
Else txt.Text = txt.Text End If Else End If Else KeyAscii = 0 End If End Function
'Getting Maximum number for Code field Public Function MaxNumber(FieldName As String, TableName As String) Set RsMax = New ADODB.Recordset If RsMax.State = 1 Then RsMax.Close RsMax.Open "SELECT Max(" & FieldName & ") + 1 from " & TableName & " where MaxCode =1", Con, adOpenDynamic, adLockOptimistic
MaxNmbr = Val(MaxNumber)
End Function
'Updating Maximum Number Public Function UpdateMaxNumber(FieldName As String, TBox As Integer) Con.Execute "Update Max_Codes Set " & FieldName & " = " & Val(TBox) & "" End Function Public Sub ChangeFocusOnEnter(KeyAscii As Integer, Frm As Object) If KeyAscii = vbKeyReturn Then SendKeys vbTab End If End Sub
Public Function MouseOver(mLabel As Label) mLabel.ForeColor = vbYellow mLabel.Font.Underline = True End Function
3. modNavigation.bas
'Locking the Navigation Button on New Record Public Function LockNav(Frm As Object) Frm.lblnav(0).Enabled = False Frm.lblnav(1).Enabled = False
'UnLocking the Navigation Button on Cancel Public Function UnLockNav(Frm As Object) Frm.lblnav(0).Enabled = True Frm.lblnav(1).Enabled = True Frm.lblnav(2).Enabled = True Frm.lblnav(3).Enabled = True End Function
4. modWriteInGrid.bas
'If First Row selected then Select Case Msh.Row Case 0 KeyAscii = 0
Case 1
'If ENTER is pressed on Account Name Column then move to next column If KeyAscii = 13 Then SendKeys "{right}" Exit Function End If
'---------------------------------------------------------
Case 8: 'IF KEY IS BACKSPACE THEN If Msh.Text <> "" Then Msh.Text = Left$(Msh.Text, (Len(Msh.Text) - 1))
Case Is < 4 '----------Move Curssor to Right Side untill col >= 3-----Msh.SetFocus SendKeys "{right}"
Case 4 Msh.SetFocus If (Msh.Row + 1) = Msh.Rows Then ''-------- Null Value Chk in last col---------------
'If values are missing in Debit and Credit Side If Len(Msh.TextMatrix(Msh.Row, 1)) = 0 Or Msh.TextMatrix(Msh.Row, 1) = "" Then MsgBox "Select Account Name", vbInformation, "Message" Msh.Col = 1 Exit Function End If
'If values are missing in Debit and Credit Side If Val(Msh.TextMatrix(Msh.Row, 3)) = 0 And Val(Msh.TextMatrix(Msh.Row, 4)) = 0 Then MsgBox "Enter Debit / Credit Amount", vbInformation, "Message" Msh.Col = 3 Exit Function End If
'If values are in both Debit and Credit Side If Val(Msh.TextMatrix(Msh.Row, 3)) > 0 And Val(Msh.TextMatrix(Msh.Row, 4)) > 0 Then MsgBox "Enter Only Debit OR Credit Amount", vbInformation, "Message" Msh.Col = 3 Exit Function End If
'''
'''
frmTransaction.txtCredit = Val(frmTransaction.txtCredit) +
End If
End Select
Case Else 'KeyAscii Select ''-------write any code for Any Validation------------Select Case Msh.Col Case 3, 4 ''-------Allow Number Validation------------ONUGrid KeyAscii, Msh End Select ''-------------Write Data in Cells---------Msh.Text = Msh.Text + Chr$(KeyAscii) ''-------------------------------------
End Select 'KeyAscii Select End Function 'Only numbers in Grid Public Function ONUGrid(KeyAscii As Integer, txt As MSHFlexGrid) If KeyAscii > 47 And KeyAscii < 58 Or KeyAscii = 8 Or KeyAscii = 46 Then
If KeyAscii = 46 Then
If InStr(txt.Text, ".") Then KeyAscii = 0 Exit Function Else txt.Text = txt.Text End If Else End If Else KeyAscii = 0 End If End Function
.ColWidth(0) = 400 .ColWidth(1) = 5200 .ColWidth(2) = 1000 .ColWidth(3) = 1000 .ColWidth(4) = 1500 .ColWidth(5) = 0 .ColWidth(6) = 0 'Product description 'Qty 'Rate 'Amount 'Product Code 'Avg Cost
'Column Captions
Public Function EditGridPS(Msh As MSHFlexGrid, KeyAscii As Integer) ' Purchase / Sale Grid Edit
'If First Row selected then Select Case Msh.Row Case 0 KeyAscii = 0 Exit Function End Select
Case 1
'If ENTER is pressed on Product Name Column then move to next column If KeyAscii = 13 Then SendKeys "{right}"
'---------------------------------------------------------
Case 8: 'IF KEY IS BACKSPACE THEN If Msh.Text <> "" Then Msh.Text = Left$(Msh.Text, (Len(Msh.Text) - 1))
Case Is < 3 '----------Move Curssor to Right Side untill col >= 3-----Msh.SetFocus SendKeys "{right}"
Case 3 Msh.SetFocus If (Msh.Row + 1) = Msh.Rows Then ''-------- Null Value Chk in last col---------------
'If Product Name is missing If Len(Msh.TextMatrix(Msh.Row, 1)) = 0 Or Msh.TextMatrix(Msh.Row, 1) = "" Then MsgBox "Select Product Name", vbInformation, "Message" Msh.Col = 1 Exit Function End If
'If values are missing of Qty or Price If Val(Msh.TextMatrix(Msh.Row, 2)) = 0 Or Val(Msh.TextMatrix(Msh.Row, 3)) = 0 Then MsgBox "Enter Quantity / Price", vbInformation, "Message" Msh.Col = 2 Exit Function End If
'Total of Row i.e Qty * Price Msh.TextMatrix(Msh.Row, 4) = Val(Msh.TextMatrix(Msh.Row, 2)) * Val(Msh.TextMatrix(Msh.Row, 3))
End If
End Select
Case Else 'KeyAscii Select ''-------write any code for Any Validation------------Select Case Msh.Col Case 2, 3, 4 ''-------Allow Number Validation------------ONUGrid KeyAscii, Msh End Select ''-------------Write Data in Cells---------Msh.Text = Msh.Text + Chr$(KeyAscii) ''------------------------------------End Select 'KeyAscii Select
End Function
'If First Row selected then Select Case Msh.Row Case 0 KeyAscii = 0 Exit Function End Select
Case 1
'If ENTER is pressed on Account Name Column then move to next column If KeyAscii = 13 Then SendKeys "{right}" Exit Function
End If
'---------------------------------------------------------
Case 8: 'IF KEY IS BACKSPACE THEN If Msh.Text <> "" Then Msh.Text = Left$(Msh.Text, (Len(Msh.Text) - 1))
Case Is < 5 '----------Move Curssor to Right Side untill col >= 3-----Msh.SetFocus SendKeys "{right}"
Case 5
Msh.SetFocus If (Msh.Row + 1) = Msh.Rows Then ''-------- Null Value Chk in last col---------------
'If values are missing in Debit and Credit Side If Len(Msh.TextMatrix(Msh.Row, 1)) = 0 Or Msh.TextMatrix(Msh.Row, 1) = "" Then MsgBox "Select Account Name", vbInformation, "Message" Msh.Col = 1 Exit Function End If
'If values are missing in Debit and Credit Side If Val(Msh.TextMatrix(Msh.Row, 4)) = 0 And Val(Msh.TextMatrix(Msh.Row, 5)) = 0 Then MsgBox "Enter Debit / Credit Amount", vbInformation, "Message" Msh.Col = 4 Exit Function End If
'If values are in both Debit and Credit Side If Val(Msh.TextMatrix(Msh.Row, 4)) > 0 And Val(Msh.TextMatrix(Msh.Row, 5)) > 0 Then MsgBox "Enter Only Debit OR Credit Amount", vbInformation, "Message"
End If
End Select
Case Else 'KeyAscii Select ''-------write any code for Any Validation------------Select Case Msh.Col Case 3, 4, 5 ''-------Allow Number Validation------------ONUGrid KeyAscii, Msh End Select ''-------------Write Data in Cells----------
5. modWriteOnPictureBox.bas
Public Sub PrintToCenter(Msg As String, PicBox As PictureBox, FormTop As Boolean)
If FormTop = False Then With PicBox .AutoRedraw = -1 .Font = "Courier New" .FontSize = 8 .FontBold = False .ForeColor = vbBlack
HalfWidth = .TextWidth(Msg) / 2
HalfHeight = .TextHeight(Msg) / 2 ' Calculate one-half height. .CurrentX = .ScaleWidth / 2 - HalfWidth ' Set X. .CurrentY = .ScaleHeight / 2 - HalfHeight ' Set Y. End With
Else
With PicBox .AutoRedraw = -1 .Font = "Courier New" .FontSize = 14 .FontBold = True .ForeColor = vbWhite
HalfWidth = .TextWidth(Msg) / 2
HalfHeight = .TextHeight(Msg) / 2 ' Calculate one-half height. .CurrentX = .ScaleWidth / 2 - HalfWidth ' Set X. .CurrentY = .ScaleHeight / 2 - HalfHeight ' Set Y. End With End If
End Sub
REPORTS
1. daraRepAcLedger.Dsr
19
modConnection.dbConnection
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from RepAcLedger", Con, adOpenStatic, adLockOptimistic RS.Requery
'PAGE HEADER .Sections("Section2").Controls("lblAcId").Caption = Val(FrmRep.TxtLookupCode) .Sections("Section2").Controls("lblAcTitle").Caption = " " & FrmRep.TxtLookup.Text .Sections("Section2").Controls("lblDateFrom").Caption = FrmRep.TxtFrom.Value
.Sections("Section2").Controls("lblDateTo").Caption = FrmRep.TxtTo.Value 'DETAIL SECTION .Sections("Section1").Controls("txtdate").DataField = "tdate" .Sections("Section1").Controls("txtDescript").DataField = "Descript" .Sections("Section1").Controls("txtDebit").DataField = "Dr" .Sections("Section1").Controls("txtCredit").DataField = "Cr" .Sections("Section1").Controls("txtBalance").DataField = "Balance" .Sections("Section1").Controls("txtDrCr").DataField = "DrCr"
2. dataRepAccountStatus.Dsr
This report is to display the account status. Coding:
Dim DrAmt As Single Dim CRAmt As Single Dim Balance As Single
.Sections("Section4").Controls("lblTitle").Caption = UCase(FrmRep.TxtLookup.Text) & " ACCOUNTS STATUS" .Sections("Section4").Controls("lblDate").Caption = Format(Date, "dd/mm/yyyy") End With
If Not FrmRep.TxtLookup.Text = "ALL" Then Me.Sections("Section5").Controls("lblNote").Visible = False Else Me.Sections("Section5").Controls("lblNote").Visible = True End If
' Drop the Temp Accounts Status table if it already exists. On Error Resume Next Con.Execute "DROP TABLE RepAccountStatus" On Error Resume Next
' Create the table. Con.Execute _ "CREATE TABLE RepAccountStatus(" & _ "AcId INTEGER NOT NULL," & _
"AcType
' Fetching Data into RepAccountStatus Table Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open StrQry, Con, adOpenStatic, adLockOptimistic
While Not RS.EOF = True If Val(RS(3)) > 0 Then CRAmt = 0 DrAmt = Val(RS(3)) ElseIf Val(RS(3)) < 0 Then DrAmt = 0 CRAmt = Val(RS(3)) Else DrAmt = 0 CRAmt = 0 End If
Con.Execute "Insert into RepAccountStatus Values( " & Val(RS(0)) & ", '" & RS(1) & "', '" & RS(2) & "', " & Val(DrAmt) & ", " & Abs(Val(CRAmt)) & ")"
RS.MoveNext Wend
'Getting data from Table Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from RepAccountStatus", Con, adOpenStatic, adLockOptimistic
.Sections("Section1").Controls("txtId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtType").DataField = "AcType" .Sections("Section1").Controls("txtDr").DataField = "DR" .Sections("Section1").Controls("txtCr").DataField = "CR"
End With
End Sub
Private Sub DataReport_Terminate() ' Drop the Temp Accounts Status table on exit. RS.Close Set RS = Nothing Con.Execute "DROP TABLE RepAccountStatus"
End Sub
3. dataRepIncomeStat.Dsr
This report is to display the income statement. Coding:
Private Sub DataReport_Error(ByVal JobType As MSDataReportLib.AsyncTypeConstants, ByVal Cookie As Long, ByVal ErrObj As MSDataReportLib.RptError, ShowError As Boolean)
End Sub
4. dataRepPriceList.Dsr
This report is to display the price list. Coding:
Private Sub DataReport_Initialize()
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select AcId, AcTitle, SalePrice from Accounts where Actype = 'Product'", Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then Exit Sub End If
End Sub
5. dataRepProductToReorder.Dsr
This report is to display the list of products with their reoder status. Coding:
Private Sub DataReport_Initialize() Dim mProdId As Integer
Dim mProdName As String Dim mOpQty Dim mPurQty Dim mSalQty As Single As Single As Single
Set RsMisc = New ADODB.Recordset If RsMisc.State = 1 Then RsMisc.Close RsMisc.Open "Select AcId,AcTitle,ReOrderPoint from Accounts where AcType = 'Product'", Con, adOpenStatic, adLockOptimistic
mProdId = Val(RsMisc(0)) mProdName = RsMisc(1) mReOrderQty = Val(RsMisc(2)) 'Opening Stock Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close
RS.Open "Select * from Product_Openings where ProdId = " & Val(mProdId) & "", Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then GoTo CheckPurchase Else mOpQty = Val(RS(1))
CheckPurchase: 'Purchases Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from Purchase_Detail where ProdId = " & Val(mProdId) & "", Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then mPurQty = 0 GoTo CheckSales Else mPurQty = Val(RS(0)) End If RS.Close Set RS = Nothing
RS.Open "Select Sum(Qty) from Sale_Detail where ProdId = " & Val(mProdId) & "", Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then mSalQty = 0 GoTo MyStock Else mSalQty = Val(RS(0)) End If
If AvblStock < mReOrderQty Then 'Fetching Data into RepStockStatus Con.Execute "Insert Into RepProductsToReorder Values(" & Val(mProdId) & ", '" & mProdName & "', " & Val(AvblStock) & ", " & Val(mReOrderQty) & ")" End If
RsMisc.MoveNext
Next
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from RepProductsToReorder", Con, adOpenStatic, adLockPessimistic
End With
End Sub
6. dataRepPurchaseByDate.Dsr
This report is to display the purchase details ordered by date. Coding:
Dim mDateQry As String Dim mTotal As Single Private Sub DataReport_Initialize()
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from ViewRepPurchase where PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
.Sections("Section4").Controls("lbldate").Caption = "From " & Format(FrmRep.TxtFrom.Value, "dd/mm/yyyy") & " To " & Format(FrmRep.TxtTo.Value, "dd/mm/yyyy")
.Sections("Section1").Controls("txtId").DataField = "PurId" .Sections("Section1").Controls("txtDate").DataField = "PurDate" .Sections("Section1").Controls("txtAcId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtAmount").DataField = "TotalAmount" End With
If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from ViewRepPurchase where PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
Me.Sections("Section5").Controls("lblTotal").Caption = Val(RS(0))
End Sub
7. dataRepPurchaseByProduct.Dsr
This report is to display the purchase details ordered by product. Coding:
Dim mDateQry As String Private Sub DataReport_Initialize()
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from ViewPurchaseByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
.Sections("Section2").Controls("lblProdId").Caption = Val(FrmRep.TxtLookupCode) .Sections("Section2").Controls("lblProdName").Caption = FrmRep.TxtLookup .Sections("Section2").Controls("lblDateFrom").Caption = Format(FrmRep.TxtFrom.Value, "dd/mm/yyyy") .Sections("Section2").Controls("lblDateTo").Caption = Format(FrmRep.TxtTo.Value, "dd/mm/yyyy") 'DETAIL .Sections("Section1").Controls("txtDate").DataField = "PurDate" .Sections("Section1").Controls("txtPurId").DataField = "PurId" .Sections("Section1").Controls("txtAcId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtQty").DataField = "Qty" .Sections("Section1").Controls("txtPrice").DataField = "Price" .Sections("Section1").Controls("txtAmount").DataField = "Amount" End With
'Total Qty Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from ViewPurchaseByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblTotalQty").Caption = Val(RS(0))
'Avg Price Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select AVG(Price) from ViewPurchaseByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblAvgPrice").Caption = Val(RS(0))
'Total Amount Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Amount) from ViewPurchaseByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblTotalAmount").Caption = Val(RS(0))
End Sub
8. dataRepPurchaseBySupplier.Dsr
This report is to display the purchase details ordered by supplier. Coding:
Dim mDateQry As String Dim mTotal As Single Private Sub DataReport_Initialize()
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
If RS.State = 1 Then RS.Close RS.Open "Select * from ViewRepPurchase where AcId = " & Val(FrmRep.TxtLookupCode) & " and PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
.Sections("Section2").Controls("lblAcId").Caption = Val(FrmRep.TxtLookupCode) .Sections("Section2").Controls("lblAcTitle").Caption = FrmRep.TxtLookup .Sections("Section2").Controls("lblDateFrom").Caption = Format(FrmRep.TxtFrom.Value, "dd/mm/yyyy") .Sections("Section2").Controls("lblDateTo").Caption = Format(FrmRep.TxtTo.Value, "dd/mm/yyyy") 'DETAIL .Sections("Section1").Controls("txtId").DataField = "PurId" .Sections("Section1").Controls("txtDate").DataField = "PurDate" .Sections("Section1").Controls("txtAcId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtAmount").DataField = "TotalAmount" End With
RS.Open "Select Sum(TotalAmount) from ViewRepPurchase where AcId = " & Val(FrmRep.TxtLookupCode) & " and PurDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If Me.Sections("Section5").Controls("lblTotal").Caption = Val(RS(0))
End Sub
9. dataRepReorderPoint.Dsr
This report is to display the reorder point. Coding:
Private Sub DataReport_Initialize() Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select AcId, AcTitle, ReOrderPoint from Accounts where Actype = 'Product'", Con, adOpenStatic, adLockOptimistic If RS.RecordCount <= 0 Then Exit Sub End If
With Me
End Sub
10. dataRepSaleByCustomer.Dsr
This report is to display the sales details ordered by customer. Coding:
Dim mDateQry As String Dim mTotal As Single Private Sub DataReport_Initialize()
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
RS.Open "Select * from ViewRepSale where AcId = " & Val(FrmRep.TxtLookupCode) & " and SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
.Sections("Section2").Controls("lblAcId").Caption = Val(FrmRep.TxtLookupCode) .Sections("Section2").Controls("lblAcTitle").Caption = FrmRep.TxtLookup .Sections("Section2").Controls("lblDateFrom").Caption = Format(FrmRep.TxtFrom.Value, "dd/mm/yyyy") .Sections("Section2").Controls("lblDateTo").Caption = Format(FrmRep.TxtTo.Value, "dd/mm/yyyy")
.Sections("Section1").Controls("txtId").DataField = "SaleId" .Sections("Section1").Controls("txtDate").DataField = "SaleDate" .Sections("Section1").Controls("txtAcId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtAmount").DataField = "TotalAmount" End With
RS.Open "Select Sum(TotalAmount) from ViewRepSale where AcId = " & Val(FrmRep.TxtLookupCode) & " and SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblTotal").Caption = Val(RS(0))
End Sub
11. dataRepSaleByDate.Dsr
This report is to display the sales details ordered by date. Coding:
Dim mDateQry As String Dim mTotal As Single Private Sub DataReport_Initialize()
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
RS.Open "Select * from ViewRepSale where SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
.Sections("Section4").Controls("lbldate").Caption = "From " & Format(FrmRep.TxtFrom.Value, "dd/mm/yyyy") & " To " & Format(FrmRep.TxtTo.Value, "dd/mm/yyyy")
.Sections("Section1").Controls("txtId").DataField = "SaleId" .Sections("Section1").Controls("txtDate").DataField = "SaleDate" .Sections("Section1").Controls("txtAcId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtAmount").DataField = "TotalAmount" End With
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(TotalAmount) from ViewRepSale where SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblTotal").Caption = Val(RS(0))
End Sub
12. dataRepSaleByProduct.Dsr
This report is to display the sales details by product. Coding:
Dim mDateQry As String Private Sub DataReport_Initialize()
mDateQry = " BETWEEN #" & FrmRep.TxtFrom.Value & "# And #" & FrmRep.TxtTo.Value & "#"
Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from ViewSaleByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic
.Sections("Section2").Controls("lblProdId").Caption = Val(FrmRep.TxtLookupCode) .Sections("Section2").Controls("lblProdName").Caption = FrmRep.TxtLookup .Sections("Section2").Controls("lblDateFrom").Caption = Format(FrmRep.TxtFrom.Value, "dd/mm/yyyy") .Sections("Section2").Controls("lblDateTo").Caption = Format(FrmRep.TxtTo.Value, "dd/mm/yyyy") 'DETAIL .Sections("Section1").Controls("txtDate").DataField = "SaleDate" .Sections("Section1").Controls("txtSaleId").DataField = "SaleId" .Sections("Section1").Controls("txtAcId").DataField = "AcId" .Sections("Section1").Controls("txtTitle").DataField = "AcTitle" .Sections("Section1").Controls("txtQty").DataField = "Qty" .Sections("Section1").Controls("txtPrice").DataField = "Price" .Sections("Section1").Controls("txtAmount").DataField = "Amount" End With
'Total Qty Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Qty) from ViewSaleByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblTotalQty").Caption = Val(RS(0))
'Avg Price Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select AVG(Price) from ViewSaleByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblAvgPrice").Caption = Val(RS(0))
'Total Amount Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select Sum(Amount) from ViewSaleByProduct where ProdId = " & Val(FrmRep.TxtLookupCode) & " and SaleDate " & mDateQry, Con, adOpenStatic, adLockOptimistic If IsNull(RS(0)) Then Exit Sub End If
Me.Sections("Section5").Controls("lblTotalAmount").Caption = Val(RS(0))
End Sub
13. dataRepStockStatus.Dsr
This report is to display the status of the stock. Coding:
Private Sub DataReport_Initialize() Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from RepStockStatus", Con, adOpenStatic, adLockOptimistic
'Refreshing RepTrialBalance Table Set RS = New ADODB.Recordset If RS.State = 1 Then RS.Close RS.Open "Select * from RepTrialBalance", Con, adOpenStatic, adLockOptimistic RS.Requery Me.Sections("Section5").Controls("LblTotalDr").Caption = Val(TrialDr) Me.Sections("Section5").Controls("LblTotalCr").Caption = Val(TrialCr)
End Sub
USER INTERFACE
20
1. Login Screen
2. Main Menu
3. Account Creation
4. Purchase Entry
5. Sales Entry
6. Transactions Entry
8. Reports