As you learned in this lesson, when you create a query, the platform provides a number of virtual tables as data sources. "Virtual" is a good name for them because a virtual table is a result of a query that the platform generates during the script execution.
Actually, developers can implement retrieving data available in virtual tables without using any virtual tables. However, the algorithm for retrieving that data will not be optimal for the following two reasons.
First, all of the virtual tables are parameterized. In other words, developers can define some parameters that the platform uses to generate a query that creates a virtual table.
When a developer specifies virtual table parameters, the parameters are not always simply plugged into the query text. Depending on the virtual table parameters, the platform might generate DIFFERENT queries for getting a single virtual table, which are optimized based on the assortment of parameters.
Second, a developer is not always able to access all the data available to the platform. For example, they basically have access to all information register data that the platform uses to generate a virtual table query, but accumulation register virtual tables are quite different. Here the platform generates queries dynamically based not only on the parameters, but also on the period of the totals calculated in the register. The resulting query depends on the calculated totals, which are simply not available at the query development stage.
Of course a developer can implement a search through all the accumulation register records and get the data that is normally provided in a virtual table. But obviously this query would be less efficient and would require more of the developer’s time and effort.