Последнее время на Хабре стали все чаще появляться статьи, посвященные 1С как среде разработки приложений. Статьи по смыслу более концептуальные, чем прикладные; авторы делают обзор платформы «1C:Предприятие 8» в целом, пытаются понять, хороша или плоха технология создания бизнес-приложений, предлагаемая 1С.
Не буду обсуждать, прав ли каждый из авторов или нет; у платформы 1С, как у любой технологии, есть свои преимущества и недостатки. А есть и свои интересные особенности, свои наработки и механизмы. Вот о них и хочется поговорить. А еще — хочется написать статью про 1С для людей, с 1С незнакомых, статью, которая показывает, какое место 1С занимает в ряду аналогичных программных продуктов. Мне лично такой ознакомительной обзорной статьи очень не хватало, когда я еще не был знаком с 1С, но был знаком с рядом других ERP продуктов.
Итак, начнем!
Что производит фирма 1С?
Думаю, широкая публика на этот вопрос ответит: «1С:Бухгалтерию». Кто-то вспомнит обучающие программы или знаменитую серию игр «ИЛ-2 Штурмовик».
Участники Хабра, конечно, в курсе, что Купить 1с – это не только «1С:Бухгалтерия», что есть целая система программ «1С:Предприятие», включающая средства разработки бизнес-приложений и бизнес-приложения, созданные с помощью этих средств. А уж с помощью средств разработки 1С написаны и бухгалтерия, и CRM, и ERP (с внедрениями на тысячи и десятки тысяч пользователей), и многое другое.
ERP-системы — наиболее интересные и насыщенные по функционалу бизнес-приложения; посмотрим на их примере, какое место технологии «1С:Предприятия» занимают в ряду аналогов.
Какие бывают ERP
Какое самое ценное свойство ERP систем (да и любых бизнес-приложений)? На мой взгляд – это гибкость, возможность приспосабливаться к бизнес-процессам конечного пользователя как можно меньшей ценой.
Понятно, что, программируя ERP систему, все варианты бизнес-процессов предусмотреть невозможно. На помощь приходит параметризация; вводя в систему параметры, которые может изменить в настройках системы пользователь (консультант, администратор), мы повышаем гибкость системы сравнительно небольшой ценой. Первые ERP системы были parameter-driven, т.е. настраиваемые с помощью параметров.
Не все бизнес-кейсы можно предусмотреть и в параметризуемых системах. Когда одной настройкой параметров не обойтись – надо менять исходный код. Тут перед производителем ERP встает вопрос – менять код самому под нужды потребителей и выпускать обновления или поставлять систему в исходных кодах, чтобы пользователи могли сами переписать систему под свои нужды (что, кстати, не освобождает производителя от выпуска обновлений — система должна развиваться, поддерживать новый функционал, чтобы быть конкурентоспособной).
Отдельный вопрос – выбор языка программирования для написания ERP системы. Бо́льшая часть ERP системы – это бизнес-логика, для которой обычные языки программирования типа С++ не всегда подходят наилучшим образом. В идеале бизнес-логику хорошо бы программировать на высокоуровневом языке, способном обеспечить бизнес-программисту максимальный комфорт при написании бизнес-логики, абстрагировать его от низкоуровневых деталей (особенностей работы с базами данных, подсистемой файлового ввода-вывода и печати, оконной подсистемой пользовательского интерфейса и т.п.). Конечно, в этом случае надо еще создать и компилятор/интерпретатор для этого языка и среду разработки.
Имеем матрицу возможных сочетаний:
- открытый или закрытый код приложения (тут я имею в виду не open source в обычном его понимании, а возможность поставки исходного кода приложения, в том числе и за отдельную плату).
- язык программирования бизнес логики – «обычный» (С/Java/Perl/…) или специально разработанный, проприетарный.
Бизнес-приложения, созданные с помощью технологий «1C: Предприятия» — это системы с открытым прикладным исходным кодом, написанным на проприетарном языке, у которого нет короткого названия; официально его называют «Встроенный язык программирования 1С: Предприятие», неофициально и коротко – «язык 1С».
Большинство лидеров современного ERP рынка – это системы с открытым кодом. Возможность изменять исходный код «на местах» дает огромную гибкость и конкурентное преимущество. Продукты с закрытым кодом вынуждены использовать другие приемы; самый распространенный ход – аналог CallBacks, возможность повесить кастомный код на предопределенные события, как визуальные (открытие-закрытие формы, выбор из списка значений, …), так и бизнес-событие (обработка заказа, ввод счета на продажу, …). В некоторых системах есть возможность написать свои обработчики на C# (или других распространенных языках), в других для этого есть Visual Basic for Applications, лицензированный у Microsoft и т.п.