IZONE - http://www.izcity.com/ - бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Что лежит в красно-жёлтой коробке?

V7 со стороны разработчика.

Никита Зайцев aka WildHare

Когда программисту нужно сделать что-то не очень фундаментальное, причём сделать нужно срочно, а оптимальность кода особой роли не играет, он берёт в руки Delphi или VB и делает. Это называется Rapid Application Development, то есть быстрая разработка приложений. Соответственно, используемый в этом процессе инструмент называется средой быстрой разработки приложений или RAD-средой. В этой статье я собираюсь рассказать о программном продукте, который, может быть, формально и не является RAD-средой, но идеально подходит для быстрой разработки приложений, решающих задачи хранения и обработки структурированных данных. Речь пойдёт о платформе V7, более известной под своим «рыночным» именем «1С:Предприятие».

«Упс… а при чём тут 1С? — спросит кое-кто из читателей, — Это ведь бухгалтерская программа… или как правильно назвать — экономическая? В любом случае, это из другой сказки» . Так? Не совсем. Если заглянуть в красно-жёлтую коробку со стороны конечного пользователя, там можно найти ряд готовых приложений для решения неких типовых задач — бухгалтерского, кадрового, или ещё какого-нибудь учёта. И эти готовые приложения снабжены какими-то средствами настройки — для пущего удобства. Как говорят агенты по продажам, «система снабжена гибкими средствами конфигурирования, и вы можете буквально все переделать под свои нужды» — и это действительно так, другое дело, что ни один нормальный пользователь не будет ничего переделывать просто в силу своей природы, но это уже тема для отдельного разговора.

Если же посмотреть на ту же самую коробку, но уже со стороны разработчика, мы получим совсем другую картину — в коробке лежит мощная предметно-ориентированная среда быстрой разработки приложений, снабжённая несколькими примерами (наподобие того, как в поставку MS Access и MS SQL Server входит база данных мифической компании Northwind). Нельзя же назвать V7 бухгалтерской (экономической, etc.) системой только потому, что кто-то сделал на ней бухгалтерское приложение — как нельзя посмотреть на «Борей» и назвать MS Access системой учёта для торговли продуктами питания.

Возникает неопределённость. Одни называют «1С:Предприятием» набор готовых приложений, учётную систему для конечного пользователя. А другие (и их этих других не так уж и мало) называют этим же именем среду разработки. Производитель платформы, фирма «1С», вносит свою лепту, употребляя одно и то же название во всех случаях, вне зависимости от контекста. Во избежание путаницы я вообще не буду употреблять термин «1С:Предприятие», и заменю его (применительно к платформе) более точным технологическим названием V7. Вопрос о том, что первично — дух или материя, платформа или созданные на ней приложения, я здесь рассматривать не буду (ответ, ImHO, очевиден ;-).

Как у всякого порядочного инструмента, у V7 есть чёткая область применения. С этой платформой имеет смысл работать в ситуациях, когда:

  • Необходимо хранить и обрабатывать некий массив более-менее структурированных данных.
  • Данные, с которыми работает приложение, не являются бинарными (т.е. не изображения, звуки, видео, etc.).
  • К интерфейсу не предъявляется никаких экзотических требований (анимации, 3D-эффектов, озвучивания, «бантиков» и т.п.).
  • Объём данных, с которыми будет работать приложение, конечен (10 Gb, пожалуй, является предельным значением).
  • Количество пользователей, одновременно работающих с приложением, сравнительно невелико (не более 20-25).

Как показывает практика, область применения V7 весьма широка — при соблюдении указанных условий на ней можно сделать практически что угодно, от системы финансового анализа до генератора отчётов к биллинговой системе или сетевой игры в монополию. Причём создаваемые приложения вовсе не обязательно должны быть связаны с учётом, например, вот вполне жизненная задача: выкачивать из Сети содержимое некоего форума и сохранять его в локальной базе данных с возможностью последующего обновления, индексации, поиска, подсчёта статистики и т.п. вещей. Реализация этой задачи на V7 заняла у меня едва ли не меньше времени, чем его потребовалось на изучение имеющихся на рынке оффлайн-браузеров (которые всё равно не умеют скачать топик форума, разобрать его на отдельные части, выделить в них авторов/темы/дату-время а потом еще и выполнять запросы вида «все треды автора "Вася Пупкин" за последние две недели, в которых слово "пиво" встречается более двух раз»).

Из основных технических особенностей V7 я бы отметил следующие:

  • V7 работает только в среде MS Windows, на любой версии этой ОС — как 95/98/Me, так и NT/2000/XP. Насчёт совместимости V7 с будущими версиями операционных систем от Microsoft также можно не волноваться ;-).
  • Минимальные системные требования сопоставимы с MS Word'97 — с V7 можно нормально работать на офисной машине образца 1998 года (P200xRAM32).
  • Нет чёткого разделения на среду разработки и собственно приложение — почти как в Access, но с меньшей степенью интеграции (нельзя переключаться между средой исполнения и средой разработки, а нужно запускать две разные копии V7).
  • В V7 нет понятия «приложение» или «проект», а есть понятие «информационная база» (или «конфигурация», как кому нравится), т.е. V7 обязательно работает с базой данных (реализованной либо как набор DBF-файлов, либо как база MS SQL Server).
  • Для программирования используется собственный язык V7, весьма похожий на VB, но с поддержкой русской нотации (при желании конструкции на обоих языках можно перемешивать). Язык V7 интерпретируемый, т.е. программные модули хранятся в виде простого текста и в нужный момент передаются интерпретатору для выполнения.
  • Тексты программных модулей и структура данных проекта V7 (как физическая, так и логическая) хранятся в открытом виде и доступны пользователю для чтения и модификации. Штатных интерфейсов для модификации структуры данных «извне» (сторонними программами) не предусмотрено.
  • V7 построена по модульному принципу и состоит из нескольких модулей (или компонент, в терминах фирмы «1С»), каждый из которых реализует свою специфику. Компоненты могут быть инсталлированы независимо друг от друга, а могут быть объединены. V7 — расширяемая система, любой желающий может дополнять её своими собственными внешними компонентами (каркасы таких компонент для VC++, VB и Delphi поставляются отдельно, за более чем умеренную плату).

V7 является предметно-ориентированной средой. Что это такое? Это объектно-ориентированная среда, урезанная до неузнаваемости с целью оптимизации под конкретную предметную область. В V7 есть классы, экземпляры классов и методы классов, применяемые к экземплярам. Но нет никакой возможности (во всяком случае, нет штатной возможности, а про нештатные мы сейчас говорить не будем) ни модифицировать существующие классы, ни переопределять их методы, никакого ООП нет и в помине. Хорошо это или плохо? Лично мне кажется, что это нормально. Да, разработчик лишён возможности перекраивать мир по своему разумению, функциональность инструментария ограничена «сверху» (используя дополнительные внешние компоненты, можно добавить какие-то новые сервисные возможности, сделать шлюз в базу данных Oracle, научить платформу распознавать рукописный текст или общаться с кассовым аппаратом — но изменить «прошитые» в платформу механизмы невозможно).

Но при этом урезание «пространства возможных решений» парадоксальным образом влияет (в лучшую, ясное дело, сторону) на скорость, а иногда и на качество разработки — а что нам нужно от RAD-среды, как не скорость? Если разобраться, то ничего парадоксального тут нет — можно дать хирургу спирт, пилу и скальпель, он бодро оттяпает пациенту руки-ноги и возьмётся за следующего. А вот если тому же самому хирургу дать в руки толстенный каталог медицинского оборудования — к тому времени, когда он прочитает хотя бы краткое описание каждого предмета, пациент уже давно перестанет нуждаться в какой-либо помощи. Разумеется, о по-настоящему сложных и уникальных проектах в данном случае речь не идёт, там-то как раз потребуется не только изучить все существующие инструменты, но и заняться изготовлением новых. Но ведь на свете существуют не только сложные и уникальные проекты, правда? Довольно часто программисту, создающему Нечто Гениальное, время от времени приходится спускаться на землю и заниматься банальной халтурой — и вот тут скорость разработки играет критическую роль.

1

Другой положительный момент — низкий «порог вхождения» . Начинать работать с V7 может любой, кто имеет представление о программировании хотя бы на уровне VBA-макросов для MS Word. V7 вполне можно рекомендовать как платформу для обучения, не в последнюю очередь благодаря русской нотации кода. «Потолка» практически нет — начав с тупого нажатия кнопки «Next» в «мастере запросов» можно со временем придти к написанию библиотек на C++ (а потом, само собой, изучить Oracle и уехать к чёртовой бабушке в Канаду или Австралию ;-). А можно и наоборот — мне известны случаи, когда люди пересаживались на V7 с более мощных инструментов (VC++ или Delphi). Причины? По их собственному выражению — «чтобы не изобретать велосипед», или «чтобы тратить меньше времени на всякую фигню» (под фигней, конечно же, понималось основное место работы, а не Проект Всей Жизни).

Теперь нужно разбавить дифирамбы чем-то конкретным. Ядром проекта (конфигурации) V7 является так называемое «дерево метаданных» (фрагмент приведён на скриншоте, в реальном приложении полностью развёрнутое дерево метаданных может занимать пару десятков экранов).

Проектируя структуру данных конфигурации V7, разработчик абстрагируется от физического воплощения этой структуры (таблиц, полей, индексов и прочего, всё это система берёт на себя) и работает с объектами, максимально приближенными к предметной области — такими, как «документ» или «календарь». Не стоит обращать внимание на обилие объектов явно бухгалтерского происхождения — всё-таки предком V7 (идеологическим предком, но ни в коем случае не технологическим) была «1С:Бухгалтерия 6.0» . На самом деле использовать эти объекты вовсе не обязательно и они имеют смысл только в том случае, если конечное приложение должно предоставлять функции классической двойной записи. Хранится всё это хозяйство в одном-единственном файле формата Compaund и при желании до структуры метаданных можно достучаться из внешних приложений:

2

Не каждый объект дерева метаданных является экземпляром класса, к методам которого можно обращаться из программных модулей, точно так же и в дерево метаданных помещаются объекты далеко не всех классов, существующих в V7. Подробное же описание того, какие классы и в каком контексте доступны программисту, какие объекты дерева метаданных для чего служат и как всё это между собой связано, потянет на небольшую (страниц так в полсотни) книжку, и в статью при всём желании не влезет.

Помимо средств управления структурой данных и автоматической генерации физических хранилищ для этих данных, в платформу встроено еще несколько весьма полезных механизмов:

  • Механизм транзакций и откатов. V7 поддерживает транзакции, т.е. объединение произвольного числа элементарных операций с данными в пакет и контроль за выполнением всего пакета по принципу «всё или ничего», с последующим «откатом на исходную» в случае неудачного завершения хотя бы одной операции. Причём за корректностью наиболее критичных операций (например, изменение хранимых итогов) V7 следит сама.
  • Мощный редактор печатных («табличных» по терминологии фирмы «1С") форм. Печатные формы V7 могут быть интерактивными, в них можно встраивать элементы управления. В определённых случаях диалоговые и печатные формы можно объединять в одно целое. Имеются конверторы для экспорта печатных форм V7 в форматы XLS и HTML (правда, качество html-кода ужасающе низкое и толку от HTML-конвертора почти никакого нет).
  • Перекрёстные ссылки и контроль за логической целостностью данных. Удаление любого объекта происходит в две стадии — проставление пометки «объект удалён», и собственно удаление. Система не позволит физически удалить объект, ссылки на который фигурируют в других объектах. Конечно, этот режим можно отключить, но делать это категорически не рекомендуется.
  • Протоколирование действий пользователя. Система ведёт подробнейший лог-файл, куда записывается информация практически обо всех действиях, произведённых пользователями. Есть возможность программной записи туда произвольной информации. Для просмотра лога существует визуальный интерфейс, включающий в себя функции поиска и фильтрации.
  • Пакетный режим. V7 можно запустить из командной строки, передав в качестве параметра файл с инструкциями на проведение тех или иных административных работ (тестирования, архивации и т.п.) — классическое «админ спит, бэкап идёт» .

Ключевой функцией V7 я бы назвал практически абсолютную «программную управляемость», т.е. практически любая операция доступна как интерактивно, так и из программного кода. Например, можно запросто создавать «виртуальных» пользователей, которые будут в заданное время производить рутинные работы, да еще и отчитываться по электронной почте. У этой медали есть и обратная сторона — виртуальный пользователь может производить не только полезные действия. Вездесущая «Лаборатория Касперского» уже зарегистрировала первую потугу создать вирус для V7 (средствами самой V7) и хотя этот «вирус» был не более чем чьей-то неудачной шуткой, создание настоящего деструктивного вируса для V7 не является такой уж нереальной задачей. Развивать эту скользкую тему мне не хочется — общеизвестно, что к такого рода информации вирусмейкеры проявляют значительно больший интерес, нежели пользователи и системные администраторы.

Что можно сказать о «бытовых» качествах собственно среды разработки? V7 снабжена стандартным набором инструментальных средств: редактор текстов программных модулей, редактор печатных форм, визуальный редактор экранных форм, отладчик, десяток «визардов», помогающих создать объект метаданных или сгенерировать отчёт. Конечно, возможности у этих инструментов заметно беднее, чем, скажем, в Delphi — нет автоподсказки, нет генерации кода при работе с конструктором экранных форм, однопроходный интерпретатор языка V7 не может обеспечить ничего, кроме минимальной проверки синтаксиса и отлова стоящих не месте скобок и точек. Но это и понятно, всё-таки опыта и возможностей у компании Borland несколько больше, нежели у 1С ;-).

Разумеется, у V7 помимо достоинств есть и слабые стороны, и было бы довольно странно не рассказать про них. К откровенным недостаткам платформы я бы отнёс вот что:

  • Неумение в полной мере использовать возможности MS SQL Server — V7 использует его как хранилище таблиц и ничего больше. В результате в клиент-серверной версии V7 архитектура «клиент-сервер» по-настоящему реализована только в названии.
  • Слабый механизм авторизации пользователя — если его не усилить (благо это можно сделать средствами языка V7), уровень защиты будет весьма низким.
  • Слабый механизм контроля прав доступа на уровне отдельных объектов. Этот механизм контролирует только интерактивные действия пользователя (грубо говоря, отслеживает нажимаемые кнопки). Если же пользователь из формы одного объекта инициирует программную модификацию другого (при том, что прав на работу с этим другим объектом у него нет), то штатная система контроля прав не станет вмешиваться и позволит объект модифицировать. Этот механизм также приходится усиливать средствами языка, но всё равно до «реального» контроля прав дотянуть не получается.
  • Отсутствие чёткого лицензионного соглашения. Я понимаю, что в России и сопредельных странах этот аспект мало кого интересует, но тем не менее. Мне не кажется здравым заплатить за продукт деньги и узнать, что отношения между тобой и производителем продукта регламентируются единственно надписью на коробке «копирование и распространение без письменного разрешения запрещается, потому что этого делать нельзя» .
  • Аппаратный ключ защиты. По задумке, он должен быт прозрачен для окружающего V7 софта и харда, но в реальной жизни эта затычка может принести немало весёлых минут — она может не дружить с принтерами, сканерами и прочими железками, она может «теряться» в сложных и плохо сконфигурированных локальных сетях. Не говоря о том, что выход из строя LPT-порта или самой затычки останавливает всю работу. Вы когда-нибудь видели сервер, в порт которого засунута матрёшка из четырёх «электронных ключей защиты» (которые еще и конфликтуют друг с другом, как бабки на коммунальной кухне)? Проблема, разумеется, решается (в «стране вечно дымящихся паяльников» иначе и быть не может), но факт остаётся фактом — одно дело защитить аппаратным ключом уникальный заказной софт, существующий в единственном экземпляре (оговорив условия эксплуатации и тщательно протестировав на совместимость с окружением), и совсем другое — прицепить затычку на тиражный продукт, который инсталлирован в доброй половине российских офисов (цифра взята не с потолка, см. Byte/Russia #9(37)-09/2001).

Подведём итоги. По моему мнению (которое разделяет довольно-таки много народа), достоинства V7 как среды быстрой разработки многократно перевешивают недостатки и что в своём классе V7 является лучшей системой по соотношению «цена/качество» . Вот так вот скромно. Это если не принимать во внимание «побочных» факторов — таких, как сотни тысяч инсталляций продукта по всей стране и за её пределами, или многочисленная и очень активная community, сосредоточенная вокруг нескольких ключевых сайтов.

Остаётся последний вопрос — сколько стоит и где взять посмотреть. Это, на самом деле, вовсе не тривиальные вопросы. В прайс-листе 1С раздел «1С:Предприятие» занимает не одну страницу и с ходу разобраться в обилии версий и вариантов поставок не так и просто. Если отбросить терминологию 1С и выражаться простым человеческим языком, то Personal (без сетевых возможностей) обойдётся конечному пользователю $250-$500 (в зависимости от набора компонент и функционала), Professional (с сетевыми возможностями) $500-1500, а Enterprise (с возможностью хранить данные под MS SQL Server) $1000-$3000. Некоторые компоненты V7 подходят к любой версии, но их нужно покупать отдельно, причём цены самые разные (от $16 за каркасы библиотек дополнительных функций, до $480 за шлюз к MS IIS).

Где взять посмотреть? Как вариант — можно зайти в бухгалтерию вашей фирмы и поискать там под столами красно-жёлтую коробку ;-). А если серьёзно, то с этим сложно. 1С не выпускает ни demo-версий с ограниченной функциональностью, ни trial-версий с ограничением по времени использования. Собственно, в этой политике (несомненно, выгодной с точки зрения объёма продаж — ведь отправить демоверсию в Recycle Bin куда как проще, нежели вернуть деньги за купленный товар), ImHO, и кроется одна из причин столь активного распространения контрафактных копий, с которым «1С» не перестаёт бороться уже который год. Но это уже совсем другая история…

Источник - SoftТерра, http://www.softerra.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com