Блог → Стыковка базы V7 с витриной интернет магазина. Часть 1

В последние годы тема электронной коммерции продолжает набирать обороты и привлекает всё новых и новых предпринимателей. Одни восторженно расписывают вагон и маленькую тележку прелестей "новой экономики" и трясут перед носами потенциальных инвесторов невероятными объёмами электронных рынков. Другие обклеивают стены акциями доткомов и прогоревших стартапов, расплющенных при лобовом столкновении с реальной жизнью, а третьи, довольно потирая руки, выставляют на электронных же аукционах скупленные за грош доменные имена, движки интернет-магазинов и подержанную офисную мебель.

На самом деле "электронный бизнес" (название "e-бизнес" как-то не прижилось) - не такая уж бесполезная вещь, как многие решили после показательного сдувания Большого Мыльного Пузыря. Если подойти к делу с умом, конечно. Заранее ясно, что розничная торговля через Сеть, скажем, мороженым - откровенно дохлый номер. А вот электронная площадка для приёма заказов на оптовые партии чего-нибудь железного вполне может стать прибыльным проектом. Собственно, на эту тему можно говорить долго и со вкусом, но программистов, как людей прагматичных, волнуют более конкретные вопросы. Например, как решить поставленную задачу в разумный срок, с хорошим качеством и за приемлемые деньги. Вот об этом-то речь у нас сегодня и пойдёт.

Итак, начнём с описания задачи. Задача заключается в следующем - есть учётная система, которая построена на платформе V7 (она же известная как "1С:Предприятие"). В учётной системе реализованы соответствующие функции - складской учёт, продажи товара, расчёты, бухгалтерия и пр. Учётная система, равно как и её пользователи, располагается в офисе компании. С другой стороны, есть некое web-приложение, которое располагается где-то в интернете и приложение это реализует функции классической web-витрины - каталог товаров, прайс-лист, корзина, приём и подтверждение заказа, отслеживание состояния заказа покупателем и т.д. Возможно, что там же производится приём оплаты за товар - кредитной карточкой или электронными деньгами типа WebMoney или Яндекс Денег.

Проблема заключается в том, чтобы состыковать две системы между собой и привязать web-витрину к учётной системе предприятия. Ведь отделу маркетинга совершенно не улыбается перспектива вводить одни и те же данные в два места сразу, тем более, что цифры в этих двух местах сразу же начинают загадочным образом расходится.

Как обычно, прежде, чем что-то изобретать, всегда полезно посмотреть на рынок программного обеспечения и поискать там готовое решение проблемы. В данном случае готовым решением является "Web-расширение", поставляемое производителем платформы V7, фирмой "1С". Давайте вкратце рассмотрим принцип работы "Web-расширения".

Из чего состоит "Web-расширение"? Во-первых, это одноименная дополнительная компонента для платформы V7. Во-вторых, это V7 Scripting Engine (далее просто V7Script), который позволяет выполнять код V7, размещенный в теле ASP-страниц. В-третьих, это пример web-приложения для типовой конфигурации "Торговля и Склад" и документация. Принцип работы "Web-расширения" изображен на рисунке ниже. На схеме V7 и MS IIS взаимодействуют друг с другом через скриптовый язык V7Script.



Как видно из рисунка, "Web-pacширение" реализует подобие трёхзвенной архитектуры. Но именно что подобие: в качестве сервера приложений используется клиентская часть V7, тяжелое приложение с визуальным интерфейсом - что вряд ли можно назвать эффективным решением. Дело в том, что "Web-расширение" появилось гораздо позже всех остальных компонент, и программисты "1С" решили не усложнять себе жизнь.

Главным достоинством "Web-pacширения" является его "вседозволенность". Грубо говоря, это мост между ASP и V7, позволяющий выполнить практически любой код V7 "изнутри" ASP-страницы. О проблемах передачи данных и тому подобных вещах можно не беспокоиться. Соответственно, скорость разработки web-приложений будет такой же высокой, как и скорость разработки конфигураций V7.

Но вот недостатков у "Web-расширения", на мой взгляд, намного больше, нежели достоинств. Самый главный из них: обмен данными между ASP-страницей и базой данных V7 производится через DCOM - а это значит, что web-cepвер и база данных V7 должны располагаться в пределах "прямой видимости", и лучше всего - в пределах одной локальной сети. Расположить web-сервер в офисе компании - вообще говоря, не очень удачное решение. Кроме того, "Web-расширение" не работает ни с какими web-серверами кроме Microsoft IIS. А хуже всего обстоит дело с безопасностью: как уже упоминалось, расширение позволяет выполнить практически любой код V7, а ведь это - палка о двух концах. Закроем дыры, вернём испорченные страницы на место и будем жить дальше. А вот если у нас установлено "Web-расширение" и атакующий подменит код V7Script внутри страниц - он сможет украсть и/или испортить не только сайт, но и всю базу данных учётной системы.

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

Что касается производительности, то здесь действует довольно забавное ограничение - одна запущенная копия V7 может в один момент времени обрабатывать не более пяти сессий. Если на сайте находится десять покупателей - нужно запустить две копии V7. Если пятнадцать - то три копии. Ну и так далее! С чем связано такое ограничение? Как мне кажется в первую очередь это обусловлено тем, что изначально никто не планировал для клиентской части V7 работу в качестве сервера приложений, и в процессе привинчивания к платформе "Web-расширения" программистам фирмы "1С" пришлось пойти на ряд компромиссов. Расширение обменивается данными с V7 в синхронном режиме, и с одной стороны - это несомненное достоинство, ведь все действия пользователя web-приложения тут же, моментально отражаются в базе данных учётной системы. Но если принять во внимание специфику V7, то достоинство оборачивается недостатком - архивация базы данных, индексация, тестирование, обновление конфигурации, другие административные работы - все это требует монопольного доступа к базе данных. Соответственно, пока база данных не работает, ваша web-витрина тоже не работает (см. скриншот ниже).



Обычному магазину, конечно же, нужны перерывы на обед и сон. Но владелец электронной площадки должен помнить, что витрина конкурента находится на расстоянии "двух кликов" от его витрины. Посчитайте, как часто ваша база данных работает в монопольном режиме или вообще недоступна - всё это время для "электронного" бизнеса потеряно. Конечно, если у компании нет конкурентов - то и терять нечего... Но в жизни так не бывает!

И, наконец, самый интересный параметр - стоимость решения. Прямо скажем, "Web-расширение" - это дорого. Почему? Давайте посчитаем. Во-первых, нам понадобится достаточно мощный выделенный сервер (запускать серверные продукты MS на слабых машинах, конечно, можно, но именно только запускать - работать они будут не быстро, что в итоге опять же, ударит по карману, в виде недополученной прибыли). Во-вторых, нам понадобится "толстый" канал в интернет, и соответственно - придётся оплачивать прокачанный трафик, а расценки у провайдеров доступа повыше, чем у провайдеров хостинга. В-третьих, нам понадобится софт (помимо сервера IIS и "Web-расширения"): система отслеживания атак, анализатор лог-файлов и прочие вещи из арсенала web-хостинга.

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