gifts2017

Необычно-экономное использование 1С:Предприятие 8 на Asp.Net-хостинге для реализации Интернет-магазина

Опубликовал Сергей Карташев (Elisy) в раздел Программирование - Практика программирования

Статья описывает, как можно сэкономить на реализации Интернет-магазина предприятия, в который данные поступают из 1С:Предприятие 8. Данные размещаются в базе данных MSSql удаленно у хостинг-провайдера. Предлагается практический опыт гармоничной интеграции 1С:Предприятие и Asp.Net через LINQ и прямой доступ к информационной базе 1С. Строится простейшее решение, с одной стороны имеющее веб-интерфейс, а с другой стороны построенное как desktop-приложение. Тем самым достигается эффективность в наполнении веб-сайта контентом. Максимальный эффект достигается, когда Интернет-магазин проектируется «с нуля» с уникальной для предприятия структурой.

Статья описывает, как можно сэкономить на реализации Интернет-магазина предприятия, в который данные поступают из 1С:Предприятие 8. Данные размещаются в базе данных MSSql удаленно у хостинг-провайдера. Предлагается практический опыт гармоничной интеграции 1С:Предприятие и Asp.Net через LINQ и прямой доступ к информационной базе 1С. Строится простейшее решение, с одной стороны имеющее веб-интерфейс, а с другой стороны построенное как desktop-приложение. Тем самым достигается эффективность в наполнении веб-сайта контентом. Максимальный эффект достигается, когда Интернет-магазин проектируется «с нуля» с уникальной для предприятия структурой.

Под словом «необычное» в данной статье имеется в виду использование в 1С:Предприятие СУБД MSSQL удаленно на стороне хостинг-провайдера. При этом нет необходимости покупать и устанавливать Sql Server на предприятии, а можно ограничиться покупкой 1С-сервера, который на многих предприятиях уже имеется. За размещение и работу веб-сайта отвечает хостинг-провайдер.

К статье прилагаются: образец конфигурации 1С, а также пример Asp.Net MVC веб-сайта. Проект временно для отладки выложен в сети Интернет, и с ним можно ознакомиться по адресу http://www.companyvm.ru. В проекте использовано решение Elisy.LinqTo1C.

Отдельная благодарность 1С-разработчику Stive, который создал конфигурацию и правила конвертации для проекта.

Недавно примеры Elisy LinqTo1C полполнились еще одним прототипом:
Карта оптового вещевого рынка Дордой
Silverlight-приложение (карта) связано с базой 1С через Asp.Net MVC + LINQ. Прорисовка объектов карты происходит динамически. Вся информация об объектах на карте берется из базы 1С. Удаленная база 1С обменивается с базой 1С из офиса через план обмена.

Суть необычного подхода

В решениях, кода в организации используется 1С:Предприятие, традиционно применяется следующая связка: клиент 1С – сервер 1С – СУБД. Обычно система развертывается в одном офисе. Трехзвенная архитектура более надежна по сравнению с файловым вариантом работы 1С. СУБД при этом может быть выбрана бесплатная, благо фирма 1С предоставляет выбор между СУБД.

Опять же традиционно, когда необходимо сделать реализацию Интернет-магазина есть 2 подхода: размещение веб-сервера в офисе, где находится сервер 1С и СУБД и обращение к 1С через COM или специальный компонент Web-расширения для 1С. Второй подход – размещение на хостинг-провайдере популярного интернет-магазина и настройка экспорта-импорта в/из 1С. Все варианты имеют право на существование, но недостаток первого – необходимость самостоятельного администрирования веб-сервера, самоответственность за безопасность, необходимость в хорошем канале Интернет. Недостаток второго подхода - в недостаточной гибкости. Например, добавление нового атрибута выливается в следующее: нужно добавить его в 1С, переделать экспорт, переделать импорт, переделать структуру, обычно, MySql базы данных, переделать серверную php-часть для отображения.

Структура решения с удаленным доступом к базе 1С:Предприятие

Что предлагается? Создать мини-конфигурацию 1С, содержащую только все необходимые объекты из рабочей конфигурации организации (Управления Торговлей или Бухгалтерии). Разместить ее удаленно в созданной на Windows-хостинге базе данных MsSQL. Это должна быть как можно более облегченная конфигурация без всего лишнего, так как доступ к ней из офиса осуществляется через Интернет. Написать Asp.Net веб-сайт, который будет обращаться к данным 1С напрямую через LINQ. Файлы-описания LINQ поможет создать 1С-обработка Elisy.LinqTo1CSql.81.epf, которая входит в состав Elisy .Net Bridge SDK (сайт проекта: http://www.1centerprise.com/dotnet/). Написать правила конвертации данных для экспрота-импорта данных между мини-конфигурацией и конфигурацией организации. Это и есть суть «необычного» решения.

Создание удаленной информационной базы 1С

Первым этапом нужно создать удаленно на Windows-хостинге MSSQL-базу данных. Прописать в 1С-сервере эту базу данных и подключиться к ней через 1С-клиент. На этом этапе создана пустая конфигурация на удаленной СУБД, доступ к которой осуществляется каналами Интернет.

Решите, какая информация необходима для Интернет-магазина. Основной критерий – минимизировать количество объектов (справочников, документов, регистров и др.), их реквизитов и табличных частей. От этого зависит, какие объекты необходимо перенести из рабочей конфигурации предприятия во вновь созданную. Для примера это могут быть следующие объекты:

  • Справочники: Номеналатура, Контрагенты, ХранилищеДополнительнойИнформации, ЗначенияСвойствОбъектов, ТиыЦенНоменклатуры, ГруппыТоваров,
  • План видов характеристик СвойстваОбъектов,
  • Регистры сведений: ЗначенияСвойствОбъектов и ЦеныНоменклатуры;

Стоит избегать переноса регистров накопления, так как они предполагают наличия документов. Например, для остатков товаров можно сделать регистр сведений или хранить остатки на реквизите «Остаток» в справочнике Номенклатура.

Специально для проекта 1C-разработчик Stive написал мини-конфигурацию и правила конвертации. Для справки: на всю работу ему понадобилось меньше 3х дней, из которых половина времени ушла на согласования. К статье прилагается мини-конфигурация как образец.

Создание экспорта и импорта

Чтобы у хостинг-провайдера появились данные в удаленной базе необходимо их туда перенести. Так как в нашем случае есть две базы 1С: удаленная и рабочая база организации, то идеальным решением станет создание правил конвертации данных, написанных с помощью конфигурации 1С «Конвертация данных». С этой задачей справится большинство 1С-разработчиков, работающих с 8й версией.

Тема написания правил данных объемная и ее невозможно осветить здесь. Можно только отметить, что правила будут зависеть от того, какие данные должны передаваться в 1С. Возможно, нужно передавать только номенклатуру, входящую в определенную номенклатурную группу или только ту, которая есть на остатках. Контрагенты, вероятно, тоже все не нужны в удаленной базе 1С.

Главное требование к правилам конвертации данных: чем меньше данных будет передаваться в 1С, тем лучше. Правила конвертации данных 1С упрощают жизнь разработчикам, автоматизируя многие процессы, связанные с синхронизацией записей, преобразованием данных и др.

Создание веб-сайта

Хотя веб-сайт можно создать и на PHP, но максимальный эффект в предложенном способе дает создание веб-сайта на Asp.Net с доступом через LINQ. Связано это с тем, что необходим прямой доступ к базе данных 1С, а структура 1С данных очень запутана. Asp.Net предоставляет такие средства, как LINQ, а с данной технологией жизнь становится намного проще.

Рекомендуется выбрать Asp.Net MVC 2, так как гибкость решений позволяет без особого труда выполнить SEO-опримизацию. Простотой WebForms-технологии тоже не стоит пренебрегать в закрытых разделах, например, в личном кабинете.

Сгенерировать LINQ-описание можно с помощью инструментов, входящих в Elisy .Net Bridge SDK. С их помощью становятся доступными все конструкции LINQ при прямом обращении к данным 1С

var свойстваНоменклатурыЗапрос = from номенклатура in DataContext.GetTable<СправочникНоменклатура>()
join свойство in DataContext.GetTable<РегистрСведенийЗначенияСвойствОбъектов>()
on номенклатура.Ссылка equals свойство.Объект join типСвойства in DataContext.GetTable<ПланВидовХарактеристикСвойстваОбъектов>()
on свойство.Свойство equals типСвойства.Ссылка join значениеСвойства in DataContext.GetTable<СправочникЗначенияСвойствОбъектов>()
on свойство.Значение equals значениеСвойства.Ссылка into temp1 where номенклатура.Код.ToLower()
== code.ToLower() from row in temp1.DefaultIfEmpty() orderby типСвойства.Наименование
select new { Номенклатура = номенклатура.Наименование, Свойство = типСвойства.Наименование,
Тип = свойство.ЗначениеТип.ToArray(), ЗначениеСправочник = row.Наименование, ЗначениеЧисло
= свойство.ЗначениеЧисло };

В коде становится все четко и понятно.

Asp.Net-программирование тоже объемная тема, о которой написано много книг. Освещать ее отдельно в данной статье – задача невыполнимая.

Заключение

В заключение хотелось бы перечислить некоторые преимущества предложенной в статье технологии, основанной на удаленном размещении базы 1С:

  • Экономия средств – установить MSSql внутри организации стоит немалых денег, а база данных у хостинг-провайдера уже включена в тарифный план хостинга.
  • Экономия времени – в некоторых других традиционных подходах необходимо дублировать структуру баз данных для Интернет-магазина и базы 1С. Например, это касается MySQL-решений, когда изменение структуры 1С приводит к изменению структуры MySQL-решений. В предложенном варианте необходимо следить только за 1С-структурой, которая является общей для 1С и веб.
  • Дополнительные возможности 1С – 1С предоставляет дополнительные возможности для администрирования базы данных, облегчая жизнь разработчикам. К возможностям 1С относятся: выгрузка и загрузка информационной базы, правила конвертации, планы обмена. Предложенное решение, с одной стороны являясь веб-интерфейсом, с другой стороны является desktop-приложением, в котором можно использовать на стороне офиса бесконечное множество внешних 1С-обработок/ответов для анализа и изменения данных, торговое оборудование, GSM-модемы и т.д.
  • Разграничение ответственности – в больших проектах в предлагаемом решении легко разграничить зону ответственности между сотрудниками: между 1С-отделом и .Net-разработчиками. 1С-отдел занимается поддержкой базы и экспортом-импортом данных, а .Net-разработчики разрабатывают веб-сайт.
  • Сбор информации с нескольких баз 1С – способ допускает написание правил конвертации данных для экспорта и импорта таким образом, что данные могут поступать в удаленную базу из нескольких рабочих 1С-баз организации или нескольких организаций.

LinqTo1CMSSQLHostingProvider.cf (183.60 kb) - пример конфигурации для удаленной базы 1С:Предприятие

LinqTo1CMSSQLHostingProvider.zip (177.01 kb) - пример Asp.Net MVC 2 веб-сайта для отображения данных удаленной конфигурации

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Владимир (Ihty) 17.11.10 14:18
Вопрос про экономию:
Как насчет лицензирования удаленной базы 1С?
2. Роберт В е р т и н с к и й (v3rter) 17.11.10 21:39
Ну так на интернет-сервере крутится самоделка, которую не надо лицензировать.
Сервер предприятия "дома". Экономия на дорогущем SQL-сервере :)
3. Сергей Карташев (Elisy) 18.11.10 06:08
(1) SQL-сервер куплен хостинг-провайдером, поэтому его лицензировать не нужно. Законность в таком варианте поддерживается.
4. Сергей (floodprog) 07.03.11 08:08
- нет канала, нет продаж - жестко битый такелаж...
5. Сергей Карташев (Elisy) 07.03.11 08:35
(4) И вас тоже с наступающим 8 марта )))
6. Сергей (floodprog) 07.03.11 08:47
(5) не посчитайте за грубость. С праздником вас ! (наступающем на печень :D )
сам сижу на:
1. Сайте("поччти инет-магазине :D )
2. Почте (аЦкой)
3. Удаленными пользователями
с такелажем проблемы у провайдера, а я канал передачи ...
7. Ийон Тихий (cool.vlad4) 07.03.11 09:51
(6) Если с почтой траблы, а заморачиватся с собственными серверами не хочется, советую посмотреть google apps, там как платное решение есть, так и бесплатное (с ограничением в 50 пользователей).
8. Сергей (floodprog) 07.03.11 10:12
(7) пасиб за совет. у меня с гуглом родственные связи. а с руководством, половые. все разжеванно не раз. сути нет есть факты...
9. Сергей Карташев (Elisy) 16.02.12 09:50
Эта же статья опубликована на:
http://habrahabr.ru/blogs/webdev/136415/
Интересны комментарии.
10. sat.m.n@mail.ru Сукачов (bolush) 12.03.12 15:01
Спасибо за совет у меня с гуглом родственные связи. а с руководством, половые. все разжеванно не раз. сути нет есть факты...
11. Юрий П (nano1c) 06.04.15 17:50
непонятно зачем сразу две связи: и выгрузка и напрямую с sql. достаточно одной же! как мне видится самый простой вариант: это прямой доступ к бд любого сайта: и чтение и запись. я делал чтение через объект 1с ВнешниеИсточникиДанных но это не работает через веб да и записать нельзя. Но есть же компоненты прямого DROP-INSERT, непонятно только как из заставить работать через веб. теоретически весь этот тырнет-магаз может представлять из себя тупо внешнюю обработку для УТ. И если напрямую нельзя то уж через xml точно можно, но уже нужна работа веб-прогеров
12. Сергей Карташев (Elisy) 08.04.15 12:48
(11) можно обойтись 1 связью, если веб-сервер расположен в офисе предприятия. 2 связи показаны для самых извращенных случаев, где 2я связь не обязательно правила конвертации, а, например, РБД.
Прямой доступ к базе данных любого сайта приводит к необходимости постоянной синхронизации 1С и движка сайта. Создание такого импорта-экспорта в несколько раз сложнее, чем настройка правил обмена между базами 1С.