This publication was created as a response to a very superficial and one-sided publication
“Why 1C is bad and why 1C programmers do not like it so much” . Judging by the comments, many are far from understanding what, in fact, is programming on 1C.
1. Platform and configuration
In the understanding of most programmers 1C - is accounting. So it was in times before 6.0 inclusive. Starting from version 7.5, the application consists of 2 parts - a platform written in C ++ and a configuration that includes the description of the table structure, visual objects and 1C code, very similar to Visual Basic.
From all this it follows that the platform can solve a very wide range of tasks, including those that are not related to accounting. All that without 1C is solved by a bunch of client application + DB. Not so long ago, the company began to produce libraries that are the basis for typical configurations, but can also be used in third-party projects - a library of standard subsystems and a library of connected equipment. They contain infrastructure functionality, for example, maintaining a list of users, built-in mail client, exchange according to exchange rules, etc. The advantage is that they are well described and can be partially implemented.
2. Authors
As described in Clause 1, the platform and configuration are different software products, they are made by different groups of developers who, according to my data, have little contact with each other. The platform has been made by very experienced developers, many have been involved in its development since 7.5, i.e. since 1996. With configurations everything is much worse. There are many configurations, one can even say - insanely many. There are a great many authors there, and the experience of some raises big questions. Judging by the personnel policy, they don’t stand on ceremony with the authors of the configurations and do not hold. For example, the new flagship solution “ERP. Enterprise Management 2.0 ”writes a completely new young team. The team that developed the previous flagship solution - “Manufacturing Enterprise Management” (UPP) - remained out of work.
From this it follows that the quality of the platform will always be better than the quality of typical configurations from 1C.
')
3. Manufacturability
Example 1C demonstrates that domestic IT companies are very successful and can create world-class software products. The 1C platform has unique solutions for the global market of accounting systems. For example:
3.1. Using a spreadsheet document for the layout, with different rows may have a different column format (i.e. a different number of columns in different rows). When exporting from this format to XLS, the required number of columns is created to reflect all the formats;
3.2. Data Composition Scheme (ACS), which can build reports of any complexity based on data from tables of the current database, tables of external SQL or OLAP data sources, arbitrary tables from memory. In the query text, compiled in a language that is a subset of the SQL language, you can specify the place of insertion of selection fields, selections, sorting. After setting up the ACS report, it converts the request template to the final view sent to the database server. In this case, the ACS calculates the fields and temporary tables of the query that are not needed for the result, and they are excluded from the queries;
3.3. Ability to develop in Windows and Linux, in Russian and English. You can run applications on Windows, Linux, via a web browser, on iOS, Android. At the same time, to perform the 1C functional in the browser, automatic translation from 1C to JavaScript is performed;
3.4. Using your own query language allows the application to work with any of the following Microsoft SQL Server databases, Oracle Database, IBM DB2, Postgre SQL, 1C file base. To work properly with versioned databases Oracle and Postgre uses its own locking mechanism;
3.5. Using the UUID as identifiers of rows in the database allows you to simplify the tasks of integrating various systems on 1C among themselves;
3.6. The mechanism of external components that allows you to create components in C ++ for all different platforms supported by the OS and browsers;
3.7. Restriction of access rights at the record level using query templates, which gives unlimited possibilities for fine-tuning rights;
3.8. Complete separation of the database structure from the application structure. The names of the tables and database fields are generated automatically, which, firstly, makes use of the platform integration mechanisms, and secondly, allows you to make normal names for the elements of the application structure (metadata) in Russian;
3.9. The mechanism of distributed information databases, which allows you to create an unlimited number of nodes of the current IS, where changes in data will be downloaded and configuration changes will be downloaded and unloaded.
And best of all - its developers are not afraid to move forward and solve very ambitious tasks. In my opinion, the 1C platform arose at a very good point in time - the performance and memory capacity of computers was sufficient to implement very bold design solutions, even if not always optimal.
4. Developers
Initially, the platform was designed to enable people far from programming (even without technical education) to perform system refinements. For platform 7. * it was fair, it was very compact, understandable, albeit a bit confusing. With the release of 8.0, the developer’s bar was raised very high, and taking into account all that is in platform 8.3, it is safe to say that it is almost impossible for a specialist without technical education to become a good developer, although the very concept of a good developer in 1C is very vague.
The amount of typical configuration of the SCP is ~ 3 million lines of code, not counting the database structure, report layouts, roles, etc. The lack of strict typing and the Russian language simply attract many people who are far from programming to change something, as a result of which something stops working.
Hence the emergence of the term "1C programmer" as the lowest caste among developers. In some ways, platform developers themselves contribute to this state of affairs, otherwise they would have excluded the query designer from the configurator long ago. More or less complex queries written with it are direct candidates for
govnokod.ru .
1C is different. You can work in a non-IT company, you can work in an IT company, you can even work in 1C itself. And 1C in all these places is different. If you work in a large franchisee company, then the work of a programmer differs little from work in other IT companies.
One of the misconceptions is that a good 1C programmer should know accounting. Absolutely not, an accounting analyst should know the accounting, production and cost accounting - a management accounting analyst, a payroll accounting - a payroll accounting analyst. Knowledge of the above areas for the developer on 1C is needed exactly in that volume in order to understand what the analyst wants from him. Exactly how a system programmer should know the basics of the OS, and the web programmer of the basic layout. But what a good developer on 1C should know is:
4.1. The principles of the DBMS, query planner, blocking;
4.2. Minimizing the exchange of data between the client, the application server and the database;
4.3. Work with COM, ADO, XML, SOAP, recently appeared REST API.
Of course, to write high-quality code you do not need to read literature on software development technology, or even better, have experience developing in other programming languages. Unfortunately, the vast majority of 1C programmers do not even realize this.
5. Platform problems
Despite all the advantages, the platform really has problems. Moreover, many of them are hesitant for decades.
5.1. The absence of the possibility of plug-ins in the configurator. For platform 7.7, there is an openConf project. For 8. * there is a project "Snowpane". But these are all actually hacks, which is very sad for their use and the quality of support;
5.2. Poor performance of the virtual machine running p-code, because Binary translation is not used. Now this circumstance has begun to influence the approaches of the developers of typical configurations from 1C - queries have become widely used;
5.3. The inability to fine-tune the database structure and queries for a specific database. For example, additional indices have to be added by means of the database, which is a violation of the license agreement;
5.4. The lack of possibility of inheritance between treatments, which allowed somehow compensate for the lack of OOP. In the openconf project for 7.7 this opportunity was and very pleased;
5.5. Use your own configuration storage. In this case, the entire configuration can be uploaded / downloaded in xml format, but each upload / download does not analyze changes in the files, so all files in the directory are stupidly overwritten, which, first, makes the process long (for UPP configurations, about 15 minutes ), and secondly makes it impossible to use a version control system. In openconf for 7.7, this problem was solved;
5.6. There is no possibility to get the sample line number in the query, although this function is in the main databases (ROW_NUMBER for SQL Server), although for other databases the platform could make the necessary left connection marked for performance in the documentation, as was done for other query language constructions;
5.7. The lack of a project concept in the configurator, which could help with transferring changes from the test environment to the work environment;
5.8. The standard configuration update mechanism uses a simple comparison of texts and objects, rather than merge, although the old version of the typical functionality is present inside the configuration.
The company 1C knows about many of these problems and has been preparing a new configurator for a long time, written on the Eclipse Platform, but when it is finally released, nobody knows.
In the next post, I will try to explain the shortcomings of typical solutions from 1C using the example of the old flagship configuration “Manufacturing Enterprise Management”, especially considering the release of the new flagship ERP Enterprise Management 2.0.