Данная публикация создана как ответ на весьма поверхностную и однобокую публикацию «Почему 1С это плохо и почему так не любят 1С программистов». Судя по комментариям, многие далеки от понимания того, что, собственно, представляет собой программирование на 1С.
В понимании большинства программистов 1С — это бухгалтерия. Так было во времена до 6.0 включительно. Начиная с версии 7.5 приложение состоит из 2-х частей – платформа, написанная на С++, и конфигурация, включающая в себя описание структуры таблиц, визуальные объекты и код на языке 1С, очень похожий на Visual Basic.
Из этого всего следует, что средствами платформы можно решать весьма широкий круг задач, в том числе никак не связанных с бухгалтерией. Все то, что без 1С решается связкой клиентское приложение + БД. Не так давно компания стала выпускать библиотеки, которые являются базой для типовых конфигураций, но могут также использоваться в проектах сторонних разработчиков — библиотека стандартных подсистем и библиотека подключаемого оборудования. Они содержат инфраструктурный функционал, например, ведение списка пользователей, встроенный почтовый клиент, обмен по правилам обмена и т.п. Плюсом является то, что они хорошо описаны и могут быть внедрены частично.
Как описано в п.1, платформа и конфигурация — это разные программные продукты, их делают разные группы разработчиков, которые, по моим данным, мало общаются друг с другом. Платформу делают очень опытные разработчики, многие участвуют в ее разработке со времен 7.5, т.е. с 1996 года. С конфигурациями же все гораздо хуже. Конфигураций много, можно даже сказать — безумно много. Авторов там великое множество, а опыт некоторых вызывает большие вопросы. Судя по кадровой политике, с авторами конфигураций особо не церемонятся и не держат. Например, новое флагманское решение «ERP. Управление предприятием 2.0» пишет абсолютно новая молодая команда. Команда, которая разрабатывала предыдущее флагманское решение – «Управление производственным предприятием» (УПП) – осталась не у дел.
Из этого следует, что качество платформы будет всегда лучше качества типовых конфигураций от компании 1С.
Пример 1С демонстрирует, что отечественные ИТ-компании весьма успешные и могут создавать программные продукты мирового уровня. В платформе 1С есть уникальные для мирового рынка учетных систем решения. Например:
3.1. Использование табличного документа для макета, причем разные строки могут иметь разный формат колонок (т.е. разное количество колонок в разных строках). При экспорте из этого формата в XLS выполняется создание необходимого количества колонок для отражения всех форматов;
3.2. Схема компоновки данных (СКД), которая может строить отчетность любой сложности на основании данных из таблиц текущей БД, таблиц внешних источников данных SQL или OLAP, произвольных таблиц из памяти. В тексте запроса, составленном на языке, являющимся подмножеством языка SQL можно указать места вставки полей выбора, отборов, сортировки. После настройки отчета СКД преобразует шаблон запроса в конечный вид отправляемый на сервер БД. При этом СКД вычисляет поля и временные таблицы запроса которые не нужны для результата, и они исключаются из запросов;
3.3. Возможность разработки в Windows и Linux, на русском и английском языках. Запускать приложения можно на Windows, Linux, через веб-браузер, на iOS, Android. При этом для выполнения функционала 1С в браузере выполняется автоматическая трансляция с языка 1С в JavaScript;
3.4. Использование собственного языка запросов позволяет работать приложению с любой из следующих баз данных Microsoft SQL Server, Oracle Database, IBM DB2, Postgre SQL, файловая база 1С. Для правильной работы с версионными базами данных Oracle и Postgre используется собственный механизм блокировок;
3.5. Использование UUID в качестве идентификаторов строк в базе данных позволяет упростить задачи интеграции различных систем на 1С между собой;
3.6. Механизм внешних компонент, позволяющий создавать компоненты на C++ для разных всех поддерживаемых платформой ОС и браузеров;
3.7. Ограничение прав доступа на уровне записей с помощью шаблонов запросов, что дает неограниченные возможности по тонкой настройке прав;
3.8. Полное отделение структуры БД от структуры приложения. Имена таблиц и полей БД генерируются автоматически, что, во-первых, заставляет пользоваться механизмами интеграции платформы, а во-вторых позволяет делать нормальные названия элементов структуры приложения (метаданных) на русском языке;
3.9. Механизм распределенных информационных баз, который позволяет создать неограниченное количество узлов текущей ИБ, куда будут выгружаться и из которых будут загружаться изменения в данных и выгружаться изменения конфигурации.
И что самое приятное – ее разработчики не боятся двигаться вперед и решают весьма амбициозные задачи. На мой взгляд, платформа 1С возникла в очень удачный момент времени – производительность и объем памяти компьютеров стал достаточным для реализации весьма смелых проектных решений, пусть даже не всегда оптимальных.
Изначально платформа разрабатывалась для возможности людям далеким от программирования (даже не имеющим технического образования) выполнять доработки системы. Для платформы 7.* это было справедливо, она была очень компактная, понятная, пусть и немного запутанная. С выпуском 8.0 планка для разработчика была задрана очень высоко, а учитывая все, что есть в платформе 8.3, можно с уверенностью сказать – специалисту без технического образования стать хорошим разработчиком практически нереально, хотя само понятие хорошего разработчика в среде 1С очень размыто.
Объем типовой конфигурации УПП ~ 3 млн. строк кода, не считая структуры БД, макетов отчетов, ролей и т.п. Отсутствие строгой типизации и русский язык просто притягивают многих далеких от программирования людей что-то поменять, в результате чего что-то перестает работать.
Отсюда и возникновение термина «программист 1С» как низшей касты среди разработчиков. Разработчики платформы в чем-то сами способствуют такому положению вещей, иначе давно бы исключили конструктор запросов из конфигуратора. Более-менее сложные запросы, написанные с помощью него – прямые кандидаты на govnokod.ru.
1С разный бывает. Можно работать в не-ИТ компании, можно работать в ИТ-компании, можно даже в самой 1С работать. И 1С во всех этих местах разный. Если работать в крупной компании-франчайзи, то работа программиста мало отличается от работы в других ИТ-компаниях.
Одним из заблуждений является то, что хороший программист 1С должен знать бухгалтерию. Категорически нет, бухгалтерию должен знать аналитик по бухгалтерскому учету, производство и учет затрат – аналитик по управленческому учету, расчет зарплаты – аналитик по учету зарплаты. Знание вышеуказанных областей для разработчика на 1С нужно ровно в том объеме, чтобы понять, что от него хочет аналитик. Ровно как системный программист должен знать основы ОС, а web-программист основы верстки. А вот что должен знать хороший разработчик на 1С, так это:
4.1. Принципы работы СУБД, планировщик запросов, блокировки;
4.2. Минимизация обмена данными между клиентом, сервером приложений и базой данных;
4.3. Работу с COM, ADO, XML, SOAP, недавно появился REST API.
Разумеется, для написания качественного кода на нужно читать литературу, касающуюся просто технологии разработки ПО, а еще лучше иметь опыт разработки на других языках программирования. К сожалению, подавляющее большинство программистов 1С об этом даже не догадываются.
Несмотря на все плюсы, проблемы у платформы действительно есть. Более того, многие из них не решаются десятилетия
5.1. Отсутствие возможности плагинов в конфигураторе. Для платформы 7.7 есть проект openConf. Для 8.* есть проект «Снегопат». Но это все фактически хаки, что весьма печально сказывается на возможности их применения и качеству поддержки;
5.2. Низкая производительность виртуальной машины, выполняющей p-code, т.к. не используется бинарная трансляция. Сейчас это обстоятельство стало влиять на подходы разработчиков типовых конфигураций от 1С – стали повсеместно использоваться запросы;
5.3. Отсутствие возможности делать тонкую настройку структуры БД и запросов для конкретной БД. Например, дополнительные индексы приходится добавлять средствами БД, что является нарушением лицензионного соглашения;
5.4. Отсутствие возможности наследования между обработками, что позволило как-то компенсирования отсутствие ООП. В проекте openconf для 7.7 эта возможность была и очень радовала;
5.5. Использование собственного хранилища конфигурации. При этом вся конфигурация может быть выгружена/загружена в формате xml, но каждая загрузка/выгрузка не анализирует изменения в файлах, поэтому все файлы в каталоге тупо перезаписывается, что, во-первых, делает процесс долгим (для конфигураций объекма УПП, порядка 15 минут), а во-вторых делает невозможным использование системы контроля версий. В openconf для 7.7 эта проблема была решена;
5.6. Отсутствует возможность получения номера строки выборки в запросе, хотя в основных БД эта функция есть (ROW_NUMBER для SQL Server), хотя для остальных БД платформа могла бы делать необходимое левое соединение с пометкой на производительность в документации, как это сделано для других конструкций языка запросов;
5.7. Отсутствие понятия проекта в конфигураторе, что могло бы помочь с переносом изменений из тестовой среды в рабочую;
5.8. Стандартный механизм обновления конфигураций использует простое сравнение текстов и объектов, а не merge, хотя старая версия типового функционала присутствует внутри конфигурации.
О многих из этих проблем компания 1С знает и уже долгое время готовит новый конфигуратор, написанный на Eclipse Platform, но, когда его, наконец, выпустят — никто не знает.
В следующей публикации я постараюсь объяснить недостатки типовых решений от компании 1С на примере старой флагманской конфигурации «Управление производственным предприятием», особенно с учетом выхода нового флагмана «ERP Управление предприятием 2.0».
1. Платформа и конфигурация
В понимании большинства программистов 1С — это бухгалтерия. Так было во времена до 6.0 включительно. Начиная с версии 7.5 приложение состоит из 2-х частей – платформа, написанная на С++, и конфигурация, включающая в себя описание структуры таблиц, визуальные объекты и код на языке 1С, очень похожий на Visual Basic.
Из этого всего следует, что средствами платформы можно решать весьма широкий круг задач, в том числе никак не связанных с бухгалтерией. Все то, что без 1С решается связкой клиентское приложение + БД. Не так давно компания стала выпускать библиотеки, которые являются базой для типовых конфигураций, но могут также использоваться в проектах сторонних разработчиков — библиотека стандартных подсистем и библиотека подключаемого оборудования. Они содержат инфраструктурный функционал, например, ведение списка пользователей, встроенный почтовый клиент, обмен по правилам обмена и т.п. Плюсом является то, что они хорошо описаны и могут быть внедрены частично.
2. Авторы
Как описано в п.1, платформа и конфигурация — это разные программные продукты, их делают разные группы разработчиков, которые, по моим данным, мало общаются друг с другом. Платформу делают очень опытные разработчики, многие участвуют в ее разработке со времен 7.5, т.е. с 1996 года. С конфигурациями же все гораздо хуже. Конфигураций много, можно даже сказать — безумно много. Авторов там великое множество, а опыт некоторых вызывает большие вопросы. Судя по кадровой политике, с авторами конфигураций особо не церемонятся и не держат. Например, новое флагманское решение «ERP. Управление предприятием 2.0» пишет абсолютно новая молодая команда. Команда, которая разрабатывала предыдущее флагманское решение – «Управление производственным предприятием» (УПП) – осталась не у дел.
Из этого следует, что качество платформы будет всегда лучше качества типовых конфигураций от компании 1С.
3. Технологичность
Пример 1С демонстрирует, что отечественные ИТ-компании весьма успешные и могут создавать программные продукты мирового уровня. В платформе 1С есть уникальные для мирового рынка учетных систем решения. Например:
3.1. Использование табличного документа для макета, причем разные строки могут иметь разный формат колонок (т.е. разное количество колонок в разных строках). При экспорте из этого формата в XLS выполняется создание необходимого количества колонок для отражения всех форматов;
3.2. Схема компоновки данных (СКД), которая может строить отчетность любой сложности на основании данных из таблиц текущей БД, таблиц внешних источников данных SQL или OLAP, произвольных таблиц из памяти. В тексте запроса, составленном на языке, являющимся подмножеством языка SQL можно указать места вставки полей выбора, отборов, сортировки. После настройки отчета СКД преобразует шаблон запроса в конечный вид отправляемый на сервер БД. При этом СКД вычисляет поля и временные таблицы запроса которые не нужны для результата, и они исключаются из запросов;
3.3. Возможность разработки в Windows и Linux, на русском и английском языках. Запускать приложения можно на Windows, Linux, через веб-браузер, на iOS, Android. При этом для выполнения функционала 1С в браузере выполняется автоматическая трансляция с языка 1С в JavaScript;
3.4. Использование собственного языка запросов позволяет работать приложению с любой из следующих баз данных Microsoft SQL Server, Oracle Database, IBM DB2, Postgre SQL, файловая база 1С. Для правильной работы с версионными базами данных Oracle и Postgre используется собственный механизм блокировок;
3.5. Использование UUID в качестве идентификаторов строк в базе данных позволяет упростить задачи интеграции различных систем на 1С между собой;
3.6. Механизм внешних компонент, позволяющий создавать компоненты на C++ для разных всех поддерживаемых платформой ОС и браузеров;
3.7. Ограничение прав доступа на уровне записей с помощью шаблонов запросов, что дает неограниченные возможности по тонкой настройке прав;
3.8. Полное отделение структуры БД от структуры приложения. Имена таблиц и полей БД генерируются автоматически, что, во-первых, заставляет пользоваться механизмами интеграции платформы, а во-вторых позволяет делать нормальные названия элементов структуры приложения (метаданных) на русском языке;
3.9. Механизм распределенных информационных баз, который позволяет создать неограниченное количество узлов текущей ИБ, куда будут выгружаться и из которых будут загружаться изменения в данных и выгружаться изменения конфигурации.
И что самое приятное – ее разработчики не боятся двигаться вперед и решают весьма амбициозные задачи. На мой взгляд, платформа 1С возникла в очень удачный момент времени – производительность и объем памяти компьютеров стал достаточным для реализации весьма смелых проектных решений, пусть даже не всегда оптимальных.
4. Разработчики
Изначально платформа разрабатывалась для возможности людям далеким от программирования (даже не имеющим технического образования) выполнять доработки системы. Для платформы 7.* это было справедливо, она была очень компактная, понятная, пусть и немного запутанная. С выпуском 8.0 планка для разработчика была задрана очень высоко, а учитывая все, что есть в платформе 8.3, можно с уверенностью сказать – специалисту без технического образования стать хорошим разработчиком практически нереально, хотя само понятие хорошего разработчика в среде 1С очень размыто.
Объем типовой конфигурации УПП ~ 3 млн. строк кода, не считая структуры БД, макетов отчетов, ролей и т.п. Отсутствие строгой типизации и русский язык просто притягивают многих далеких от программирования людей что-то поменять, в результате чего что-то перестает работать.
Отсюда и возникновение термина «программист 1С» как низшей касты среди разработчиков. Разработчики платформы в чем-то сами способствуют такому положению вещей, иначе давно бы исключили конструктор запросов из конфигуратора. Более-менее сложные запросы, написанные с помощью него – прямые кандидаты на govnokod.ru.
1С разный бывает. Можно работать в не-ИТ компании, можно работать в ИТ-компании, можно даже в самой 1С работать. И 1С во всех этих местах разный. Если работать в крупной компании-франчайзи, то работа программиста мало отличается от работы в других ИТ-компаниях.
Одним из заблуждений является то, что хороший программист 1С должен знать бухгалтерию. Категорически нет, бухгалтерию должен знать аналитик по бухгалтерскому учету, производство и учет затрат – аналитик по управленческому учету, расчет зарплаты – аналитик по учету зарплаты. Знание вышеуказанных областей для разработчика на 1С нужно ровно в том объеме, чтобы понять, что от него хочет аналитик. Ровно как системный программист должен знать основы ОС, а web-программист основы верстки. А вот что должен знать хороший разработчик на 1С, так это:
4.1. Принципы работы СУБД, планировщик запросов, блокировки;
4.2. Минимизация обмена данными между клиентом, сервером приложений и базой данных;
4.3. Работу с COM, ADO, XML, SOAP, недавно появился REST API.
Разумеется, для написания качественного кода на нужно читать литературу, касающуюся просто технологии разработки ПО, а еще лучше иметь опыт разработки на других языках программирования. К сожалению, подавляющее большинство программистов 1С об этом даже не догадываются.
5. Проблемы платформы
Несмотря на все плюсы, проблемы у платформы действительно есть. Более того, многие из них не решаются десятилетия
5.1. Отсутствие возможности плагинов в конфигураторе. Для платформы 7.7 есть проект openConf. Для 8.* есть проект «Снегопат». Но это все фактически хаки, что весьма печально сказывается на возможности их применения и качеству поддержки;
5.2. Низкая производительность виртуальной машины, выполняющей p-code, т.к. не используется бинарная трансляция. Сейчас это обстоятельство стало влиять на подходы разработчиков типовых конфигураций от 1С – стали повсеместно использоваться запросы;
5.3. Отсутствие возможности делать тонкую настройку структуры БД и запросов для конкретной БД. Например, дополнительные индексы приходится добавлять средствами БД, что является нарушением лицензионного соглашения;
5.4. Отсутствие возможности наследования между обработками, что позволило как-то компенсирования отсутствие ООП. В проекте openconf для 7.7 эта возможность была и очень радовала;
5.5. Использование собственного хранилища конфигурации. При этом вся конфигурация может быть выгружена/загружена в формате xml, но каждая загрузка/выгрузка не анализирует изменения в файлах, поэтому все файлы в каталоге тупо перезаписывается, что, во-первых, делает процесс долгим (для конфигураций объекма УПП, порядка 15 минут), а во-вторых делает невозможным использование системы контроля версий. В openconf для 7.7 эта проблема была решена;
5.6. Отсутствует возможность получения номера строки выборки в запросе, хотя в основных БД эта функция есть (ROW_NUMBER для SQL Server), хотя для остальных БД платформа могла бы делать необходимое левое соединение с пометкой на производительность в документации, как это сделано для других конструкций языка запросов;
5.7. Отсутствие понятия проекта в конфигураторе, что могло бы помочь с переносом изменений из тестовой среды в рабочую;
5.8. Стандартный механизм обновления конфигураций использует простое сравнение текстов и объектов, а не merge, хотя старая версия типового функционала присутствует внутри конфигурации.
О многих из этих проблем компания 1С знает и уже долгое время готовит новый конфигуратор, написанный на Eclipse Platform, но, когда его, наконец, выпустят — никто не знает.
В следующей публикации я постараюсь объяснить недостатки типовых решений от компании 1С на примере старой флагманской конфигурации «Управление производственным предприятием», особенно с учетом выхода нового флагмана «ERP Управление предприятием 2.0».