Средства автоматизации экономической деятельности даже близко не подошли к идеалу, так как в общем виде в экономических системах решается практически не решаемая задача — обрабатывать бесконечное количество информации с бесконечным разнообразием логических схем и правил, причем за бесконечно малое время. Разумеется, к этому еще необходимо прибавить тенденцию к усложнению функций программ, с одной стороны, и к упрощению их освоения и использования — с другой.
Начнем с определения номинаций негласного конкурса под условным названием «рынок экономического ПО», в котором участвует пакет «1С:Предприятие». Заметим, что в качестве объективного и весьма представительного жюри выступают клиенты, выбирающие и использующие программы, причем оценки они ставят даже не рублем, а количеством используемых копий продукта. Наиболее интересен опыт использования «1С:Предприятия» в двух классах программ:
- готовые решения для автоматизации экономической деятельности;
- средства разработки экономического ПО.
И хотя существует другая классификация экономического ПО: бухгалтерские программы, системы для автоматизации торговли, системы для автоматизации производства и т.д., — именно на стыке двух указанных классов лежит обычно большинство дискуссионных вопросов относительно экономического ПО. Что такое бухгалтерское, а что такое торговое ПО, всем понятно, и такая классификация не вызывает серьезных разногласий. А вот выяснение, где кончаются готовые решения и начинаются средства разработки, часто выливается в горячие дискуссии. Например, продукты «1С» обычно называют конструктором, хотя используется «1С:Предприятие» в большем числе случаев именно как готовое решение. Просто в профессиональной среде разработчиков не берется во внимание, что несколько десятков тысяч бухгалтеров используют продукты системы «1С:Предприятие» как они есть, т. е. без сложных настроек и доработок.
Как выбирают экономическое ПО?
Представим себе типовую картину выбора программного обеспечения для автоматизации конкретной организации. Можно выделить четыре основных пути, по которым скорее всего пойдет специалист, отвечающий за автоматизацию на предприятии:
- покупка и внедрение полностью готового прикладного решения;
- покупка готового прикладного решения с возможностью адаптации его под особенности конкретной организации;
- создание оригинального прикладного решения на основе специализированного средства разработки;
- создание оригинального прикладного решения с помощью универсальных средств разработки.
Если в последнем случае обычно используют такие пакеты, как Delphi, MS Visual Basic, MS FoxPro, Power Builder и т. д., то первый, второй и третий варианты выбора могут опираться на применение программных компонентов системы «1С:Предприятие». Практически все лидеры рынка экономического ПО предлагают программные продукты, удовлетворяющие первому и второму вариантам. И разумеется, основные объемы продаж экономических программ фирмы «1С» также относятся к этим категориям выбора.
Однако остановимся на рассмотрении третьего варианта — создании оригинального прикладного решения на основе специализированного средства разработки. В этом случае определяющую роль при выборе обычно играют три фактора:
- гибкость (свобода в создании прикладного решения);
- скорость, простота и удобство создания и модификации решения;
- качество и технологичность получаемого решения.
В каждом конкретном случае выбор осуществляется на основании оптимального соотношения всех этих факторов. Качество и технологичность решения при использовании универсальных средств во многом задаются уровнем знаний разработчика и временны,ми затратами. Выбор в пользу «1С:Предприятия» обусловлен удобством и высокой скоростью создания прикладного решения при вполне современной технологичности и достаточной гибкости. Причем на «1С:Предприятие» ориентируются главным образом те специалисты и организации, для которых разработка экономических решений является именно бизнесом, а не предметом научного интереса, поскольку в последнем случае такие характеристики, как стоимость решения или технологичность сопровождения, обычно не рассматриваются.
Архитектура «1C:Предприятия»
В основе «1С:Предприятия» лежит технологическая платформа, позволяющая эффективно создавать и модифицировать прикладные решения. Ориентация на реальную возможность изменения пользователями и партнерами прикладных решений, поставляемых фирмой «1С», а также на разработку ими собственных модулей и определила основные принципы архитектуры «1С:Предприятия».
Необходимость «подстройки» прикладного решения осознают практически все разработчики экономического ПО. Однако между гипотетической и реализованной возможностью модификации, согласитесь, большая разница. Так, любая программа для автоматизации экономической деятельности, написанная на Си++ или на языке более высокого уровня, например Delphi или Visual Basic, будет содержать несколько сотен тысяч строк исходного текста. И даже покупка ее с исходными текстами не даст реальной возможности модификации прикладной части. Чтобы разобраться и внести изменения в такую программу, по-хорошему нужен коллектив специалистов, «числом и умением» равный фирме-разработчику. На практике большинство поставщиков экономического ПО имеют собственные средства разработки, упрощающие создание и модификацию прикладных решений.
Имеет ли рассматриваемая нами проблема идеальное решение? Пока нет, ведь чем сложнее прикладная задача, тем выше должен быть уровень специалиста, которому надо ее решать. Заметим, однако, что конфигурации «1С:Предприятия» реально модифицируют ИТ-менеджеры торговой фирмы, а на уровне отдельной бухгалтерии и просто опытные бухгалтеры.
Программисты фирмы «1С» создали такую модель проектирования, которая делает вполне реальной возможность модификации прикладной части.
Структуры данных
Пожалуй, наиболее существенной особенностью «1С:Предприятия» является принцип проектирования структур данных прикладных решений в терминах объектов. Традиционные универсальные средства, применяемые для разработки прикладных решений, а также инструментальные средства, созданные разработчиками экономического ПО, обычно предполагают проектирование структур в терминах реляционных таблиц. Разумеется, этот подход не накладывает никаких ограничений на реализацию информационной модели. Однако именно набор типовых объектов предметной области позволяет избавить проектировщика от целого этапа разработки и большого комплекса проблем, встающих при проектировании структур таблиц базы данных.
Специалисты, имеющие опыт разработки экономических решений, хорошо знают, что реляционная модель далеко не всегда хороша для экономических задач, и зачастую для получения желаемой функциональности приходится строить весьма сложные структуры взаимосвязанных таблиц. Объекты «1С:Предприятия» автоматически создают все необходимые таблицы базы данных и поддерживают взаимосвязи между ними. Например, переход от одноуровневого справочника к пятиуровневому достигается просто установкой количества уровней в параметрах справочника. Для сравнения представьте себе объем изменений в структурах данных и объем исходного текста, который был бы необходим при реализации многоуровневого справочника на языке высокого уровня с использованием реляционных таблиц базы данных.
В самих типовых объектах «1С:Предприятия» заложена стандартная совокупность функций, которая актуальна для всех объектов конкретного типа. Так, для документов поддерживается уникальность номеров и автоматическая нумерация.
Одним из ярких примеров преимущества проектирования в терминах объектов является механизм автоматического связывания данных. Если при проектировании структуры какого-либо объекта необходимо включить в состав реквизитов ссылки на другой объект, то достаточно просто указать в качестве типа реквизита один из уже описанных ранее объектов. Причем все необходимые действия по «обслуживанию» установленной между объектами связи система будет выполнять самостоятельно. Например, если включить в документ «Счет» реквизит «Справочник.Товары», то при вводе документа будет автоматически выполняться выбор элемента справочника. Ссылка будет поддерживаться при любых изменениях в справочнике товаров, а при удалении товара будет обеспечен контроль ссылочной целостности.
Механизмы учета
Объекты «1С:Предприятия» существенно упрощают не только проектирование и поддержание структуры БД. Второй их важной особенностью является то, что они реализуют существенную часть бизнес-логики задачи автоматизации, т. е. содержат определенные алгоритмы и свойства, нацеленные на решение учетных и управленческих задач. Три функциональных компоненты «1С:Предприятия» поддерживают основные механизмы учета:
- оперативный учет;
- бухгалтерский учет;
- сложные периодические расчеты.
Настройка этих механизмов выполняется визуально и обеспечивает не только работу со всеми необходимыми структурами данных, но и расчетные и аналитические операции.
Еще не возникало ситуации, чтобы разработчикам прикладных решений не хватило возможностей механизма бухгалтерского учета, реализованного в «1С:Предприятии». Причем данный механизм никак не навязывает разработчику собственно принципов ведения бухгалтерского учета. Заметим, что создание подобного инструмента с нуля является весьма непростой задачей, даже если использовать хотя бы часть возможностей из тех, что реализованы в компоненте «Бухгалтерский учет» системы «1С:Предприятия», а это многоуровневый план счетов с фиксированной или переменной разрядностью номеров; многоуровневый и многомерный аналитический учет; многовалютный учет; учет по нескольким планам счетов; учет по нескольким организациям (юридическим лицам); опциональное ведение количественного, суммового и валютного учета по отдельным разрезам аналитики и т.д. Система предоставляет разработчику инструмент для манипулирования итогами, который сводит построение весьма сложных запросов по всем перечисленным «степеням свободы» всего к нескольким строчкам.
Опыт показывает, что построение прикладного решения из набора объектов с описанными свойствами существенно упрощает его дальнейшую модификацию. Для подтверждения этого тезиса проанализируем не идеальную ситуацию качественной поддержки, а реальную картину из жизни. Решения для малого и среднего бизнеса в нашей стране внедряются и поддерживаются обычно либо сторонними организациями, либо специалистами-индивидуалами на договорной основе, либо штатными программистами (ИТ-менеджерами). При этом часто заказчик попадает в зависимость от исполнителя, так как передача функций поддержки другому специалисту обычно провоцирует создание нового решения, что может вызвать дисбаланс системы. Понятно, чем грозит хотя бы временная приостановка работы экономического ПО предприятия. Поэтому очень важным критерием при выборе прикладного решения является возможность передачи его поддержки. Структура конфигурации «1C:Предприятия» сама по себе определяет четко организованную схему построения прикладного решения. Специалист, знакомый с объектами «1С:Предприятия», практически за несколько минут может по составу объектов понять основные принципы конфигурации.
Тот факт, что состав объектов конфигурации является формализованным описанием как структуры данных, так и бизнес-логики прикладной задачи, делает вполне реальной модификацию типовых конфигураций, поставляемых фирмой «1С».
Интерфейс
Общее направление развития компьютерных программ говорит о неуклонном увеличении доли затрат на разработку интерфейса при создании ПО. И хотя экономическое ПО обычно несколько отстает в этом процессе, тем не менее требования к интерфейсам экономических программ неуклонно растут.
Разработчик конфигурации «1С:Предприятия» полностью изолирован от подробностей API Windows. Практически все проектирование интерфейса выполняется визуально. И даже это визуальное создание интерфейса выполняется только тогда, когда в этом есть необходимость. Например, создав структуру справочника, можно тут же начать его использовать — все необходимые формы система создает сама. Конечно, можно в любой момент изменить эти формы, расставив в них реквизиты в более удобном порядке, внеся дополнительные элементы оформления, а также управляющие элементы.
В отличие от стандартных средств разработки, в которых форма создается как некоторый обособленный объект и затем уже связывается с данными, в «1С:Предприятии» большинство форм принадлежат объектам конфигурации (справочникам, документам, журналам и т. д.). Это позволяет системе автоматически создать форму со всеми необходимыми свойствами. Кроме того, при визуальном редактировании форм связывание элементов диалога с данными происходит автоматически в момент размещения в форме реквизитов справочника, документа и т. д. Разумеется, существует возможность включать в любую форму дополнительные элементы диалога, а также создавать дополнительные формы, не привязанные к объектам данных. Использование отдельных форм несколько более трудоемко и применяется обычно при решении специальных задач.
При разработке диалогов в «1С:Предприятии» применяется несколько решений, которые существенно упрощают проектирование внешнего вида формы.
Для полей ввода система автоматически устанавливает все необходимые свойства в зависимости от выбранного типа данных. Например, если вставить в форму поле ввода типа «Счет» (имеется в виду не документ «Счет», а бухгалтерский счет), то система автоматически установит у этого поля маску для удобного ввода номера счета и разместит в правой части поля ввода кнопку для выбора счета из плана счетов.
Кроме того, можно cказать о так называемых «вычисляемых полях». Они применяются в тех случаях, когда в форме нужно вывести некоторое значение, зависящее от других данных. Для этого достаточно создать элемент диалога и написать в нем выражение на встроенном языке. Программа будет автоматически обновлять данное поле при различных действиях пользователя. Например, для того чтобы показать в форме накладной остаток на складе, достаточно написать в поле вызов функции обращения к итогам по выбранному складу и товару. При изменении значений в полях «склад» и «товар» остаток на экране будет автоматически обновляться.
Встроенный язык
Одна из самых дискутируемых тем — это язык пакета «1С:Предприятие».
На первый взгляд, использование стандартных языков, например Visual Basic, дает очевидное преимущество: специалистам, осваивающим «1С:Предприятие», синтаксис будет уже знаком. Однако заметим, что это преимущество не столь существенно, как кажется. Для специалиста, знакомого с программированием, освоение таких конструкций языка, как циклы, условные операторы, объявление процедур и переменных, не составляет практически никакого труда. Для тех же, кто еще не знаком с программированием (например, бухгалтеров, начинающих самостоятельно настраивать «1С:Бухгалтерию»), не столь важно, на каком языке программирования созданы простейшие конструкции. Наиболее существенную роль в освоении любой программируемой системы играет состав объектов, их свойств и методов, изучение которых, разумеется, мало зависит от самого языка программирования. Таким образом, преимущество использования стандартного языка не столь очевидно.
Кроме того, не секрет, что типы данных, поддерживаемые стандартными языками, не всегда хорошо подходят для решения экономических задач. Создание собственного языка позволило обеспечить необходимый набор типов, а также их эффективную и естественную языковую поддержку.
Одним из наиболее важных типов данных для экономических задач является числовой тип с фиксированной точкой. Использование в ранних версиях «1С:Бухгалтерии» стандартной математики языка Си++ вызвало массу проблем с вычислениями, а при переходе к 32-разрядной архитектуре и вовсе заставило создать собственный тип данных для денежных величин. Своя же математика позволяет не только поддерживать любую разрядность, но и дает возможность решить такую проблему, как поддержка двух принципов округления, которые приняты в различных законодательных актах бывших республик СССР (1.5=1 и 1.5=2).
Еще более важно, что полноценная реализация создаваемых объектов возможна именно в собственном языке. Так, например, справочник «Товары» содержит данные, которые могут быть использованы при проектировании структур других объектов. Использование в языке типов данных, отражающих объекты предметной области, существенно упрощает проектирование и улучшает «читаемость» и понимание алгоритма.
Возможность построить свою типизацию явилась, разумеется, далеко не единственной причиной, по которой было решено создать собственный встроенный язык. Создаваемое нами средство разработки должно было стать инструментом не только профессиональных программистов, но и пользователей недорогих версий программы «1С:Бухгалтерия», самостоятельно настраивающих ее с учетом особенностей конкретных организаций. Поэтому был реализован встроенный язык в полностью двуязычной среде: все синтаксические конструкции могут быть написаны и на русском, и на английском языках, хотя при работе с объектами предметной области пользоваться русскими терминами проще даже опытным программистам (сложные названия типа «ВыбратьОперацииСПроводками», лучше запоминаются по-русски).
Особенности построения встроенного языка напрямую соприкасаются с описанной выше моделью проектирования структур данных. То, что вся разработка конфигурации ведется на основе использования стандартных объектов системы, позволяет разработчику прикладных решений применять соответствующие им объекты встроенного языка, имеющие большой набор функций и высокую гибкость. Так, объект языка «Бухгалтерские-
Итоги» реализует сложное обращение к данным бухгалтерских итогов с самыми разнообразными разрезами по счетам, субсчетам, аналитике, периодам, валютам и т. д. Получение подобной информации при манипулировании таблицами базы данных потребовало бы для построения несложного бухгалтерского отчета написать несколько тысяч строк, тогда как использование объекта «БухгалтерскиеИтоги» позволяет получить аналогичные данные с помощью всего нескольких строк.
Итак, модификация прикладного решения зависит от сложности понимания и объема алгоритмов. На что обычно «расходуются» тысячи строк исходного текста, являющиеся неотъемлемой частью солидной экономической программы на стандартном языке программирования? Можно выделить три основных направления, три группы задач, на решение которых направлены усилия программистов:
- собственно алгоритмы обработки данных предметной области;
- интерфейс;
- технологические вопросы работы программы.
К первой группе относится, безусловно, вся бизнес-логика приложения (алгоритмы расчета зарплаты, вычисление износа основных средств, отражение в оперативном учете прихода и расхода товаров, получение бухгалтерских отчетов и многое-многое другое). Мы уже говорили, что возможности «1С:Предприятия» позволяют минимизировать усилия на разработку этих алгоритмов. Причем часть этой бизнес-логики вообще выполняется на уровне самой системы без написания каких-либо конструкций встроенного языка. Однако очевидно, что полностью избежать алгоритмического описания невозможно. Такие процессы, как расчет зарплаты, списание товаров, получение бухгалтерской и налоговой отчетности, могут быть описаны только алгоритмически. Необходимые алгоритмы в «1С:Предприятии» описываются при помощи стандартных объектов достаточно лаконично, т. е. таким образом, чтобы, глядя на алгоритм, можно было понять описываемую им бизнес-логику.
Ко второй группе относится управление окнами, меню, мышью, клавиатурой, элементами ввода информации и управляющими элементами форм. В конфигурациях «1С:Предприятия» доля алгоритмов, управляющих интерфейсом, ничтожно мала. Большинство интерфейсных задач система решает автоматически на основании описанной структуры объектов конфигурации. Кроме того, существенная часть интерфейса настраивается визуально.
Разумеется, управление интерфейсом средствами встроенного языка допускается и реально используется, если его вид должен изменяться в зависимости от самих данных. Например, при определенном типе контрагента (физическое или юридическое лицо) становятся доступными для редактирования соответствующие поля ввода (паспортные данные или реквизиты расчетного счета).
К третьей группе относятся достаточно сложные алгоритмы, отвечающие за работоспособность программы. Это средства создания архивных копий, средства поддержки многопользовательской работы, системы блокировок, транзакций, разграничения прав и, наконец, средства распределенной обработки информации. Заметим, что эти задачи являются наиболее сложными при разработке многопользовательских и распределенных систем. В «1С:Предприятии» практически все эти задачи решаются системой самостоятельно. Разработчику прикладного решения предоставляются средства управления транзакциями, блокировками, миграцией данных, но они применяются только в особых случаях. В большинстве прикладных решений используется стандартное поведение системы.
Таким образом, конфигурация «1С:Предприятия» как прикладное решение содержит практически чистое описание алгоритмов бизнес-процессов предметной области и освобождена от массы подробностей доступа к данным, организации интерфейса и поддержания технологических аспектов.
Окончание в следующем номере.
ОБ АВТОРЕ
Сергей Нуралиев — руководитель отдела разработки экономических программ фирмы «1С».
Инструментальные и прикладные решения: соотношение ценностей
На первый взгляд, ценность прикладного решения кажется очевидной — это собственно то, что интересует прежде всего большинство покупателей. Однако, приобретя прикладное решение, клиент получает (бесплатно или за отдельную плату) средства для настройки и доработки этих прикладных решений. Зачастую эти средства позволяют создать всю систему с «нуля» (т. е. вся прикладная часть системы спроектирована с помощью инструментария), и к этому обычно стремятся в итоге все разработчики экономического ПО. И если некоторые системы пока еще не полностью написаны на предлагаемых фирмой инструментальных средствах, то это лишь вопрос времени. Причем заметим, что к такой архитектуре программных продуктов производителей и поставщиков толкает не только необходимость настройки прикладного решения «на месте» (у заказчика), но и технологические аспекты создания и поддержки прикладных решений собственными разработчиками.
Какова же в таком случае ценность собственно инструментальных средств, на которых написано прикладное ПО? По нашему мнению, большинство инструментальных средств, входящих в состав отечественных и зарубежных экономических систем, важны именно как средства поддержки и модификации прикладных решений этой фирмы-разработчика.
Такие инструментальные средства не используют отдельно потому, что они не могут реально конкурировать с популярными независимыми средствами разработки из-за своей узкой направленности. А кроме того, фирма-разработчик экономического ПО обычно не прикладывает больших усилий для продвижения собственно инструментальных средств в отрыве от прикладных решений. С другой стороны, практически не существует примеров распространенного экономического ПО, созданного непосредственно с помощью известных универсальных средств разработки, которые к тому же предлагалось бы использовать и для модификации его прикладных решений.
Дело в том, что обычно не хватает возможностей, предоставляемых универсальными средствами разработчикам экономического ПО, чтобы полностью доверить им модификацию прикладной части. Разумеется, универсальные средства позволяют делать все, но при реальной разработке и поддержке с их помощью объемных прикладных решений приходится создавать промежуточный слой для того, чтобы абстрагировать прикладную часть от большого количества технологических подробностей. Вот такой парадокс, во многом объясняющийся специфическими особенностями экономических задач.
Серия программных продуктов «1С:Предприятие» обладает реальной ценностью и как прикладное решение, и как инструментальное средство разработки решений для автоматизации экономической деятельности, что также немаловажно для работы с уже созданными конфигурациями, поставляемыми другими фирмами. Последнее весьма интересно, и именно его анализ объясняет выбор основных архитектурных решений, принятых при создании «1С:Предприятия».
Конфигуратор
Инструментальное средство «Конфигуратор», входящее в состав системы «1С:Предприятие», создавалось как самостоятельное средство для разработки и модификации прикладных решений. Оно никогда не считалось инструментарием внутреннего пользования фирмы «1С», и изначально предполагалось, что любая фирма, создающая прикладное решение на базе «1С:Предприятия», должна получить в руки точно такие же средства, как и специалисты фирмы «1С». «Конфигуратор» включается практически во все продукты «1С:Предприятия», а не распространяется отдельно. Разумеется, оформление, отладка и дизайн «Конфигуратора» ничем не уступают той части системы, которая собственно и «исполняет» конфигурацию. Кроме того, это облегчает освоение средств создания и модификации конфигураций, поскольку они ориентированы не только на профессиональных программистов, но и на широкий круг пользователей — для внесения изменений в наиболее массовые прикладные решения «1С:Предприятия» достаточно быть просто опытным бухгалтером.
Дело не в названии
Одни создатели экономических систем в нашей стране считают, что использование собственного языка для реализации прикладной части задачи сродни изобретению велосипеда, так как есть всем известные языки высокого уровня. Другие разработчики, наоборот, рассматривают созданный ими язык как самостоятельную ценность и используют это при маркетинговом продвижении.
Позиция фирмы «1С» отличается от обоих этих подходов. Поэтому у встроенного языка «1С:Предприятия» нет красивого и эффектного названия. Мы действительно полагаем, что для решения наших задач было целесообразно создать собственный язык. Однако считаем утопией попытки в настоящий момент создать новый универсальный язык, который будет использоваться для решения любых (именно любых) задач и сможет конкурировать с MS Visual Basic или Delphi, как говорится, «на их поле». Мы рассматриваем созданный нами язык как неотъемлемую часть единой платформы, которая имеет официальное имя «1С:Предприятие».
Действительно, создание конфигурации «1С:Предприятия» не является в чистом виде написанием программы на встроенном языке, т. е. разработка конфигурации не сводится к написанию алгоритмов. Написание модулей — часть процесса разработки конфигурации, а сам встроенный язык — один из инструментов конфигурирования, который «включается» только в тех местах, в которых необходимо алгоритмическое описание. Вместе с тем мы считаем, что многие принципы организации встроенного языка «1С:Предприятия» весьма прогрессивны и используют наиболее перспективные тенденции развития языков программирования. Кстати, развитие наиболее современных универсальных языков высокого уровня, прошедшее за время жизни встроенного языка «1С:Предприятия», это подтвердило.