Многие считают, что 1С может обслуживать только бухгалтерию. На самом деле это не так. Значение платформы 1С: Предприятие недооценено. Цель статьи показать, что 1С: Предприятие 8.3 может с успехом применяться при построении нестандартных решений в Интернете. 1C может быть удобным инструментом для многих областей: от небольшого IT-проекта до развитой многосерверной системы. Предлагаю обсудить гибкость и применимость платформы 1С к построению веб-проектов и стартапов. Для усиления эффекта 1С рассматривается в связке с .Net framework: Asp.Net MVC.
Статья писалась на основе нескольких нестандартных веб-проектов: личных и корпоративных, успешных и не очень. Здесь вы не найдете руководства по созданию обычных интернет-магазинов, потому что это стандартная, хорошо описанная в других источниках задача. К примерам нестандартных проектов я отношу: сервис проверки начислений по дисконтной карте из нескольких 1С, сайт объявлений для газеты, внутренний сайт голосования за товары между продавцами. Сюда также можно отнести сильно нестандартные интернет-магазины: магазины с несколькими регионами, валютами и ценами; магазины с товарами из разных баз 1С; магазины уникальных товаров, завязанных на производства.
Стартапы создаются в условиях высокой неопределенности, а успешные стартапы сопровождаются быстрым ростом. Многие IT-инновации внутри компании ведут себя также: после внедрения они будут востребованными или их спишут по ненадобности. Из-за высокой неопределенности никто не может сказать, будет проект успешным или нет. По этой же причине на начальном этапе никто не хочет вкладывать много средств. Вложения проводятся постепенно с учетом достигнутого или запланированного результата.
Предлагаю вашему вниманию руководство. Развитие проекта поделено на шаги. Каждый шаг расширяет ограничения, возникаюшие после выполнения предыдущих.
Шаг 1. Создать конфигурацию на 1С
Этот шаг нужен, чтобы создать структуру данных и основы интерфейса по быстрому вводу и редактированию данных. В типовых конфигурациях 1С структура данных создана, и требуется только доработка. В новых конфигурациях нужно все делать с нуля.
Для начала работы нужно найти 1С, причем легально. Существует несколько вариантов:
- На вашем предприятии уже есть приобретенная 1С для бухгалтерии. Важно, чтобы это была не базовая редакция, где нельзя редактировать конфигурации.
- Бесплатная версия для обучения — имеет ряд ограничений. Главные ограничения — однопользовательская, нет возможности COM-подключения и публикации через веб. Это означает, что на шаге 2 она будет бесполезной.
- Комплект специалиста по разработке и внедрению. Продается только слушателям учебных курсов. Стоимость в районе 3000 рублей. Имеет лицензию на 1 подключение.
- Купить 1С Технологическая поставка за 10000 рублей или любую Проф-редакцию за эту же сумму. Поставка на одного пользователя.
Конфигурации 1С создаются и дорабатываются быстро. За недельный курс, например, можно создать систему по учету товаров. С основными типами объектов, правда, все равно придется разобраться. При создании любого объекта в 1С вы получаете сразу таблицу в базе данных и инструменты для ввода и изменения данных: формы списка и элемента. На первом этапе это значительно упрощает работу, так как снимает необходимость параллельной разработки интерфейса администратора. Самые часто используемые объекты: справочники, перечисления, регистры сведений, обработки, роли пользователей.
Во многих случаях новую конфигурацию лучше начать с бесплатной библиотеки БСП от 1С, в которую входят основные механизмы работы. Часто используемые механизмы БСП: работа с пользователями, дополнительные реквизиты, присоединенные файлы, печать. Выкусить отдельные подсистемы — задача повышенной сложности: 1С создает конфигурации монолитно с большим числом взаимосвязей.
Важно писать сразу управляемое приложение на управляемых формах. Такой подход позволит в будущем опубликовать интерфейс через Интернет. 1С с версии 8.2 позволяет работать с проектом из Интернета.
Не стесняйтесь использовать русские названия в конфигурации 1С. Во-первых так принято в 1С, во-вторых можно сэкономить на документации. При этом время вовлечения новых разработчиков в проект сократится.
На этом этапе платформа позволяет создать структуру данных, заполнить объекты тестовыми данными. Закладываются роли и права предустановленных пользователей. Конфигурация автоматически начинает работать как административный интерфейс, где все введенные извне данные можно модерировать. Такой административный интерфейс поддерживать и дорабатывать проще, чем реализовывать самостоятельно средствами PHP или Asp.Net. К услугам разработчика на этом этапе доступно множество универсальных обработок от компании 1С и из профессиональных сообществ. Например часто спасать будет обработка группового изменения справочников и документов.
Шаг 2. Опубликовать 1С конфигурацию через веб-сервер
К этому шагу определилась структура данных, данные удобно вводить вручную или автоматически средствами 1С. Введенные данные также удобно редактировать и помечать на удаление. Добавлены роли пользователей и определены их права, например, полные права и обычный пользователь.
Не хватает доступа к проекту через Интернет. 1С, начиная с версии 8.2, позволяет опубликовать себя в Интернете. Публикация проводится настройкой через веб-сервер Apache или IIS. Подробные руководства есть в документации и Интернете. Воспользуйтесь ими. Для доступа к проекту из внешней сети понадобятся выделенный IP-адрес или настроенный динамический ДНС.
С этого момента начинает открываться веб-сайт. 1С создает свой интерфейс автоматически на основе управляемых форм, которые были использованы при разработке конфигурации. Новые пользователи добавляются вручную в конфигураторе, там же устанавливаются их права доступа. Доступный пользователям функционал строится на основе подсистем 1С и их ролей.
Не смотря на то, что интерфейс строится автоматически и не так гибок, как HTML, его можно использовать для демонстраций. В некоторых случаях, если разработка ведется для интранета, на этом шаге заканчивается проект. Обратите внимание, если оставить все как есть, каждое подключение через веб-интерфейс потребует дополнительно 1 лицензию 1С, поэтому целесообразно перейти к следующим шагам и снять это ограничение.
Шаг 3. Создать проект Asp.Net MVC
Предыдущий шаг позволил открыть проект через Интернет. Тем не менее сохраняются следующие ограничения. Веб-проект практически не управляем: он строится 1С автоматически и имеет мало возможностей для настройки. Как следствие можно забыть о SEO-оптимизации или богатых возможностях дизайна HTML и CSS. Кроме того, веб-подключение 1С требует много платных лицензий. Настало время связать 1С с Asp.Net MVC здесь и в следующем шаге.
Почему используется веб-фреймворк, а не CMS? Веб-фреймворк очень гибок и в дальнейшем можно сменить в проекте все, вплоть до архитектуры. Стартапы в условиях неопределенности очень изменчивы, поэтому гибкость здесь важна. При использовании CMS необходимо будет разбираться со структурой CMS и с платформой, на которой написана CMS, а в дальнейшем поддерживать синхронно конфигурацию 1С, CMS и, главное, обмен между ними. Кроме того данные хранятся в нескольких базах данных, а значит есть вероятность несогласованности.
Почему Asp.Net, а не PHP или Java? Потому что я больше разбираюсь в C#, чем в других языках, и знаю на 2 способа интеграции Asp.Net с 1С больше, чем с другими платформами. И эти 2 способа окажут неоценимую услугу на следующих шагах. Кроме того Asp.Net и C# успешно работают с именами объектов на русском языке.
Почему Asp.Net, а не http-сервисы 1С? Потому что 1С очень медленная и потому что в http-сервисах большинство операций придется писать самостоятельно: обработка кэша с заданным временем, проверка безопасности и т.д. И все это помноженное на ограниченный функционал: нет многопоточности, нет LINQ, нет штатных средств обработки изображений. Написанием URL (ЧПУ) в http-сервисах управлять тяжело, что негативно скажется на SEO.
Создавайте новый проект Asp.Net MVC 5.2.3. Сразу заложите в его основу jQuery и Bootstrap. В дальнейшем вы получите приложение, совместимое с мобильными устройствами и планшетами. Вы также получите ответы на большинство ваших вопросов в профессиональных сообществах, которые обширнее сообщества 1С раз в 10. Вам не нужно будет вкладываться в дизайн на первом этапе: стандартные элементы Bootstrap выглядят просто и стильно. Можете настроить цвета стилей Bootstrap — он это позволяет делать через свой веб-сайт.
Не поленитесь сразу добавить код Google Analytics и Yandex Метрики. Чем раньше начнется сбор статистики, тем лучше.
Шаг 4. Связать проект Asp.Net MVC с 1С
На предыдущем шаге был создан проект Asp.Net, но он никак не связан с данными в 1С. Сейчас самое время связать 2 платформы. Важно прийти к соглашению о разделении обязанностей: 1С управляет данными и реализует административный интерфейс, Asp.Net быстро обслуживает веб-запросы и реализует интерфейс пользователей.
Привлеченные в проект C#-фрилансеры сперва удивляются и не могут найти в проекте интерфейс администратора. Этот интерфейс реализован в 1С, и чаще реализован автоматически средствами 1С. Например, вы только добавили объект справочника, а 1С уже может открыть форму добавления/редактирования и форму списка. Форма списка сразу поддерживает 20 функций по фильтрации, сортировке, поиску и выводу в другие форматы. Форма редактирования знает все используемые типы реквизитов.
Есть множество способов связи 1С и Asp.Net, но для интерактивной работы подходят несколько. Эти способы: http-сервисы (ранее неповоротливый SOAP-протокол), COM-соединение и Elisy Business Connector (EBC). Я предпочитаю работать с Elisy Business Connector (EBC) не только потому, что являюсь его автором, и он мне доступен бесплатно (компонент платный). Скорее являюсь автором, потому что знаю недостатки других способов интеграции.
HTTP-сервисы работают на стороне 1С и могут возвратить только 2 типа: строка или двоичные данные. Средств для работы с двоичными данными у 1С нет, она может вернуть только картинку целиком. Остальные данные должны быть сериализованы в строку. Это может быть XML или JSON. Любой код 1С очень медленный, особенно при работе со строками, поэтому сериализация в JSON кодом 1С может идти минутами. Далее строку нужно распарсить на стороне Asp.Net. Business Connector лишен этих недостатков: он подключается к любой серверной функции и может без сериализации получить больший набор типов: примитивные типы, структуру, массив, ссылки на объекты. На стороне Asp.Net программист будет работать с привычными ему типами C#.
COM-подключение требует установленного клиента 1С на компьютер, где расположен веб-сервер. Это может оказаться проблематичным, если используется хостинг: никто из провайдеров не позволит установить стороннюю dll на общий сервер со множеством пользователей. Второй недостаток — версия клиента должна всегда совпадать с версией сервера. Если версия сервера поменялась, нужно обновлять версию клиента. Business Connector оформлен в виде сборки .Net framework, копируется с проектом и не требует регистрации в реестре. Компонент нужно обновлять редко, только если обновился параметр Режим Совместимости конфигурации 1С.
Существует общая проблема интеграции двух платформ. Если код бизнес-логики расположен на 1С, т.е. на стороне 1С выполняется запрос, результат обрабатывается и возвращается в Asp.Net, то это может усложнить разработку сайта. Потому что для добавления даже небольших изменений, необходимо сначала обновлять конфигурацию 1С, а может быть и не одну, если работа в распределенной системе. Поэтому на этапе активной разработки целесообразно на стороне 1С создать общие функции выполнения произвольного запроса, пакета запросов и произвольного кода, а текст 1С-кода и 1С-запросов хранить и выполнять на стороне Asp.Net. Выполняемый код все равно будет проверять права пользователя на стороне 1С согласно его роли.
Не стесняйтесь давать имена файлам, классам и методам C# на русском языке. Лучше, если они будут совпадать с русскими названиями объектов 1С. В будущем такая синхронность избавит вас от необходимости вести словарь переводов. Вы не будете тратить время на поиск соответствий, например, что класс Categories соответствуют справочнику Разделы в 1С. Вы не будете тратить время на поиск английского перевода ЗаказПокупателя или Номенклатура. Еще это патриотично вместе с добавлением флага своей страны в ресурсы проекта Asp.Net.
Особо нужно отметить производительность Asp.Net-приложения. Кэшируйте все, что можно на стороне Asp.Net. Выбирайте адекватное время кэша. Например, для рубрик или товаров время хранения в кэше может быть сутки, а для остатков товаров 1 час. Объединяйте несколько запросов 1С в пакет, чтобы запросы выполнялись одновременно в одно обращение к серверу.
Шаг 5. Добавить поддержку мобильных устройств
Сайт на Asp.Net заработал и отражает данных 1С. Это открывает возможность еще для одного направления: поддержка мобильных устройств. По моей статистике примерно половина пользователей работают с сайтом через мобильные устройства, а 7% через планшеты.
Не стоит писать сразу мобильное приложение. Сначала лучше изучить потребности пользователей, создать мобильную версию сайта. Затем отшлифовать мобильную версию сайта. Только потом, когда мобильный сайт станет стабильным, использовать его как техническое задание для разработки мобильного приложения.
На самом деле половину работы по написанию мобильной версии сайта мы сделали, изначально заложив в проект Bootstrap. Если прямо сейчас открыть ваш проект через мобильное приложение или планшет, с большой долей вероятности содержимое будет сносно отображено. Останется добавить некоторые стили Bootstrap, специфичные для меньших размеров экрана.
Шаг 6. Монетизировать проект
Предположим, что теперь проект стал популярным и пользователи готовы оплачивать ваши услуги. Хорошо бы на этом этапе добавить прием оплаты и выставление счетов: настроить учет.
Приведу пример важности учета. Один зарубежный хостинг, который не знал про 1С и не читал это руководство, несколько лет бесплатно обслуживает мой сайт. Оказалось, что ранее при перевозке сайтов к их конкуренту я забыл об одном проекте. Он стабильно работал все это время. В голову не приходило, что сайт отстал от других в переезде, пока не захотел внести небольшие изменения. Тут и выяснилось, что сайт расположен в компании, которой я несколько лет не оплачивал, а они и не просили. Думаю, что кроме меня у них есть еще неплательщики.
На этом шаге мы особенно не пожалеем, что за основу проекта взяли 1С. Потому что учет любых остатков: товаров, денег, МБП, бонусов — привычное дело для платформы. Реализуется это добавлением в конфигурацию 1С регистра накопления и необходимых документов. Баланс и выставленные счета можно также вывести в кабинет пользователя через Asp.Net.
С большой долей вероятности полноценную бухгалтерию своими силами организовать не получится. Но этого и не требуется, так как существует широко распространенная 1C: Бухгалтерия. Это еще один повод порадоваться движку от 1С, так как существует штатный метод обмена между платформами: планы обменов Конвертации Данных. Через правила конвертации настроены все обмены типовых конфигураций 1С. Правда, разобраться, найти соответствия между объектами и сделать соответствующие настройки все-таки придется.
Обычно оплата поступает из платежных систем. Не торопитесь полностью автоматизировать весь процесс через Asp.Net. На первом этапе достаточно в 1С вручную переносить оплаты, о которых сообщают системы в электронных письмах. Вкладывайте ресурсы в автоматизацию, когда таких операций станет много. При автоматизации вам может понадобиться SSL-сертификат и перевод сайта на https. Не связывайтесь с разрозненными системами оплат, а выбирайте на первом этапе платежного интегратора. Разница в 1-2%, которые заберет интегратор в качестве вознаграждения, для небольших оборотов не существенна.
Шаг 7. Развивать проект
Технически проект готов и выполняет все возложенные на него функции. Не стоит останавливаться на достигнутом. Проект должен постоянно развиваться, чтобы конкурировать с аналогичными разработками. Для развития понадобится принимать правильные решения. Чтобы решения были правильными достаточно принимать их на основании фактов. Фактами в нашем случае могут являться данные, полученные из отчетов.
В момент создания проекта Asp.Net мы подключили метрики по сбору статистики Google Analytics и Yandex Метрика. Они честно отработали, и теперь можно получить первые вменяемые отчеты на их основе. Какие страницы самые популярные, что ищут пользователи, как переходят между страницами, из каких они городов и стран.
Хотя метрики Google и Yandex выдают статистику, это еще не все. Существуют внутренние отчеты 1С на СКД. Они позволяют быстро получать выборки по внутренним 1С-объектам часто без написания кода: задолженность по пользователям, иерархию рубрик, распределение объектов по рубрикам, самые популярные товары в корзинах и избранном, пользователи зарегистрированные, но не добавившие в корзину ничего и т.д.
Шаг 8. Перевести 1С на СУБД
До этого шага, скорее всего, база данных 1С была файловой. Для увеличения скорости работы настало время перевести ее на СУБД. 1С позволяет работать с СУБД через сервер 1С, который нужно докупать. Посмотреть по лицензированию можно на пакет “1С: Предприятие 8.3. Сервер МИНИ на 5 подключений”.
СУБД лучше выбрать MSSQL. Дело в том, что 1С традиционно все годы работала с этой СУБД, и у нее накоплено больше всего опыта по сравнению с другими базами данных. Еще одна причина — MSSQL пригодится в следующих шагах для многократного увеличения производительности.
Направления, как сэкономить на MSSQL:
- Выбрать бесплатную MSSQL 2014 Express. Нужно смотреть, подходят ли ограничения бесплатной редакции под проект.
- Заказать Asp.Net хостинг с возможностью размещать базы MSSQL. В США можно за 14 долларов в месяц найти 200 Гбайт базы данных MSSQL.
Шаг 9. Многократно увеличить скорость обмена с 1С
На этом этапе проект стабилизировался. В структуру данных вносится все меньше изменений. Можно посмотреть в сторону прямого обращения к СУБД без посредничества 1С. Во многих случаях работа убыстрится в 50-100 раз. До стабилизации структуры данных этот шаг лучше не выполнять. Поддерживать прямой доступ сложнее, чем использовать встроенные возможности 1С при работе с запросами и правами пользователей. Плюс к этому появится проблема в распределенных базах 1С: данные, записанные в СУБД напрямую, не распознаются 1С как измененные и не пойдут через планы обмена.
1С много сделало для предотвращения прямого доступа: в базе данных закодировала имена таблиц и полей. Причем названия могут отличаться для разных информационных баз на основе одной и той же конфигурации. Удобный обходной путь все-таки существует. Основан он на Linq, настройки для которого можно получить утилитой Elisy LinqTo1C.
Смысл и техника LinqTo1C раскрыта в других статьях:
Прямая запись в справочник 1C: Предприятие через Linq на примере работы с пользователями Asp.Net
Необычно-экономное использование 1С: Предприятие 8 на Asp.Net-хостинге
Шаг 10. Создать распределенную систему
Спустя несколько лет ваш проект многократно вырастет, и сервер перестает справляться с нагрузкой. CDN тоже не будет помогать. Чтобы дальше развиваться, сначала запустите параллельно несколько Asp.Net веб-серверов с доступом к одной 1С. А затем переведите 1С в несколько связанных серверов, объединенных планом обмена.
В конфигурации 1С проще всего создать план обмена Полный, в который подключить все объекты. Нужно позаботиться также, чтобы создаваемые пользователями объекты имели уникальный код. В среде 1С уникальность достигается префиксами к номеру. Объекты получатся уникальными в пределах нескольких узлов.
Необходимо будет решить проблему взаимосвязи прямого доступа к СУБД и планов обмена 1С. Данные, записанные в СУБД напрямую, не видны платформой 1С как измененные. Я не пробовал решать проблему, потому что до последнего шага не дошел в силу невысокой популярности проектов, в которых участвовал. Думаю, к тому времени, как у вас будет миллион активных пользователей, вы будете знать решение.
Заключение
В итоге мы получили работающий проект, справляющийся с большой нагрузкой. Asp.Net сэкономил лицензии 1С. Архитектура проекта гибкая, позволяющая относительно быстро расширяться и менять функциональность. Ограничений, сдерживающих рост, в виде CMS нет — меняйте архитектуру по мере переосмысливания проекта.
Проблема биллинга, оплаты и учета решена в этой же системе. Пользователи радуются красивому легкому современному интерфейсу HTML5+CSS3, не подозревая о том, что существует веб-интерфейс от компании 1С. Все содержимое индексируется поисковыми системами. Мероприятия по SEO проведены и сайт выдается в топе поисковых зарпосов. Мобильные устройства поддерживаются через мобильную версию сайта, и Гугл подтверждает это.
Настало время для создания нового проекта. Каждый последующий проект потребует меньше вложений, чем первый, так как вся инфраструктура уже была куплена и настроена, а общие классы и техники Asp.Net перейдут в новый проект.