Многие считают, что 1С может обслуживать только бухгалтерию. На самом деле это не так. Значение платформы 1С: Предприятие недооценено. Цель статьи показать, что 1С: Предприятие 8.3 может с успехом применяться при построении нестандартных решений в Интернете. 1C может быть удобным инструментом для многих областей: от небольшого IT-проекта до развитой многосерверной системы. Предлагаю обсудить гибкость и применимость платформы 1С к построению веб-проектов и стартапов. Для усиления эффекта 1С рассматривается в связке с .Net framework: Asp.Net MVC.

Статья писалась на основе нескольких нестандартных веб-проектов: личных и корпоративных, успешных и не очень. Здесь вы не найдете руководства по созданию обычных интернет-магазинов, потому что это стандартная, хорошо описанная в других источниках задача. К примерам нестандартных проектов я отношу: сервис проверки начислений по дисконтной карте из нескольких 1С, сайт объявлений для газеты, внутренний сайт голосования за товары между продавцами. Сюда также можно отнести сильно нестандартные интернет-магазины: магазины с несколькими регионами, валютами и ценами; магазины с товарами из разных баз 1С; магазины уникальных товаров, завязанных на производства.

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

Предлагаю вашему вниманию руководство. Развитие проекта поделено на шаги. Каждый шаг расширяет ограничения, возникаюшие после выполнения предыдущих.

Шаг 1. Создать конфигурацию на 1С


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

Для начала работы нужно найти 1С. Желательно легально. Существует несколько вариантов:
  1. На вашем предприятии уже есть приобретенная 1С для бухгалтерии. Важно, чтобы это была не базовая редакция, где нельзя редактировать конфигурации.
  2. Бесплатная версия для обучения — имеет ряд ограничений. Главные ограничения — однопользовательская, нет возможности COM-подключения и публикации через веб. Это означает, что на шаге 2 она будет бесполезной.
  3. Комплект специалиста по разработке и внедрению. Продается только слушателям учебных курсов. Стоимость в районе 3000 рублей. Имеет лицензию на 1 подключение.
  4. Купить 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:
  1. Выбрать бесплатную MSSQL 2014 Express. Нужно смотреть, подходят ли ограничения бесплатной редакции под проект.
  2. Заказать 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 перейдут в новый проект.

Комментарии (22)


  1. DrPass
    15.04.2016 09:56
    +2

    Можно я покритикую?
    Хабр вроде технический сайт, а здесь советы вида:
    1. Создайте проект
    2. Напишите там код
    3. Купите наш продукт
    4. Не забудьте про мобильных пользователей
    5. Продавайте
    6. Поддерживайте
    Может, лучше на Мегамозг?


    1. Elisy
      15.04.2016 10:00

      Планировал эту статью как вводную для более программистских статей на эту же тему. Хотелось бы, чтобы они были в связке на одном ресурсе. Тема оказалась достаточно обширная.


    1. aspire
      15.04.2016 17:05

      Как по мне то весь этот огород поддерживать будет невозможно. Так что 7 пунктом будет закрытие проекта.


      1. Elisy
        16.04.2016 07:01

        Огород-то небольшой: 1С + Asp.Net.
        Очень много интернет-магазинов со связкой 1С + Битрикс, поддерживают как-то. Но в случае с Битриксом еще обмен присутствует, который тоже нужно поддерживать.


        1. aspire
          16.04.2016 11:30

          Как по мне то большой. К тому что вы написали нужно добавлять 1С + Asp.Net + IIS(Apache) + Ваша компонента + frontend(и не просто html+css+js, вы используете bootstrap+jquery). Это ж сколько разных технологий нужно значь что обновить это все к актуальным версиям. Думаю в веб-мире уже придумана куча модулей для администрирования и как по мне это будет более правильным решением.
          По поводу 1С + Битрикс то в моей компании тоже хотели задействовать эту связку, но отказались ввиду сложности настройки обмена с Битриксом(нам нужно было получать данные в реальном времени, а не через выгрузки в xml) в конце концов подняли обмен с сайтом через веб-сервисы и горя не знаем.


          1. Elisy
            16.04.2016 18:28

            Если сравнивать с Битриксом, то огороду у Битрикса (и у других CMS) не меньше: 1С + PHP + Apache + обмен + стили Битрикса. Мало кто переживает по этому поводу, потому что отдельно заказывают фрилансеров 1С и отдельно Битрикс. 1С-ников найти достаточно легко за сносную оплату. А вот знающих Битрикс встречается значительно меньше. Битрикс со временем стала очень сложной системой со множеством взаимосвязанных частей и ограничений. Некоторые изменения там просто не реализуемы.

            В веб-мире не может быть кучи модулей для администрирования. Потому что модуль подразумевает встраивание в систему управления модулями (CMS), а администрирование подразумевает жесткую привязку к структуре данных, которая может быть вообще любой.


  1. dsdred
    15.04.2016 10:38

    Важно писать сразу управляемое приложение на управляемых формах. Такой подход позволит в будущем опубликовать интерфейс через Интернет. 1С с версии 8.2 позволяет работать с проектом из Интернета.


    Важно писать под Вэб интерфейс тогда уж… можно на УФ нарисовать то, что не будет работать через «интернет». Избавляться от модальности и т.д.


    1. Elisy
      15.04.2016 14:35

      Если остановиться на шаге 2, то нужно шлифовать веб-интерфейс 1С.
      На следующих шагах 1С используется в качестве административного интерфейса для настройки и модерации веб-проекта. Администраторам проще установить тонких клиентов с доступом через веб-адрес. Тонкие клиенты превосходят веб-интерфейс 1С по скорости и функциональности. Именно поэтому не заостряется внимание на развитии веб-интерфейса 1С.

      Управляемые формы скорее упрощают дальнейшую связку 1С с Asp.Net через Business Connector или COM, так как УФ заставляют разработчика 1С мыслить в клиент-серверном направлении. Они вынуждают писать серверные процедуры и функции 1С и продумывать вызовы через простые типы.


  1. nikizan
    16.04.2016 06:59
    +2

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

    Однажды, будучи работником в организации специализирующейся на обслуживании 1С, вынужден был реализовать букмекерский учет. Реализовал с нуля, достаточно удачно, за относительно небольшие для клиента деньги. Но по сравнению с аналогичными системами реализованными на C/Delphi решение на 1С было убогим, несмотря на то, что выжал практически все — вплоть до написания внешних компонент, одна из которых для, примера, позволяла осуществлять «мега» оперативные обмены данными (изменения в центральной базе моментально, речь о нескольких секундах, применяются на всех региональных периферийных). Вы вероятно занимаетесь 1С относительно недавно, и, как писали имеете опыт C#, поэтому испытываете амбиции, применяя знания основ программирования полученных при разработке на С# к 1С, узнавая все больше нового об этой платформе, и приятно расслабляетесь используя встроенные объекты 1С, вместо того, чтобы кропотливо создавать аналог, например, регистра накопления в качестве объекта проекта на C#. Проще скажу — можно шахматы на 1С написать, но какой в этом смысл? Минус — отсутствие производительности как таковой (*1), ограниченные возможности UI, отсутствие техподдержки (*2), ужасающий факт при некоторых обновления платформы получить «кирпич» вместо работающего до этого рабочего решения (и как следствие срочного отката обновления платформы обратно *3), и еще много минусов можно привести. А плюса всего два — быстрая разработка, и хороший «откат» от 1С за продажу их ПО (если память не подводит 50% возвращаются франчу).

    Резюмируя, Вашу статью можно сократить до «хороший стартап — стань очередной фирмой обслуживающей ПО от 1С».

    — *1) поясню — 80 гигабайт данных о продажах в разрезе 9 параметров выбираются из таблиц 1С в базе SQL прямым запросом и загружаются в QlikView порядка 20 минут, после чего данные в последнем фильтруются по любому из этих 9 параметров моментально (будучи единожды импортированным) — вопрос почему 1С сама не может реализовать подобное хранение данных с целью быстрого доступа к ним? это риторически…

    *2) попробуй для начала сообщить 1С о том, что в нашел баг в очередном релизе платформы… сам знаешь сколько надо заплатить абонплаты, чтобы это сделать. ну а информация об исправленных багах вообще закрытая для всех без исключения.

    *3) для примера — была создана база для розничных магазинов. обменивалась с базами данных на кассах (Штрих-М Кассир) пакетами (архивы с данным). Вышло очередное обновление платформы 1С и имена файлов в архивах стали «битыми» — русская кодировка перестала поддерживаться. 70 магазинов остановились. В синтакс-помощнике есть упоминание про недопустимость использования национальных алфавитов при некоторых условиях. Наши программисты проверили, условия не распространяются. Реализовали. А через 1.5 года условия вдруг стали распространяться. Что это было — ранее была ошибка в коде платформы или сейчас возникла ошибка?!


    1. Elisy
      16.04.2016 07:31

      Быстрое создание проекта вы тоже отметили. Для стартапа это плюс — получить как можно быстрее прототип, показать владельцу и клиентам идею.

      Достоинство 1С еще и в том, что она очень распространена, и в 90% случаев о ней слышали везде. Это означает, что для проекта указание «Совместимо с 1С» является ценностью. Именно так поступает Битрикс.

      Чтобы не заботиться о багах платформы, мы стараемся не обновлять платформу и работаем на старой версии до последнего. Последний раз обновились на 8.3.5 из-за добавленных хешей 1С, а потом до 8.3.5.1570 из-за ошибок отображения списка планов обмена.

      Компанию 1С не ругает только ленивый. Я тоже этим занимаюсь, чтобы 1С не расслаблялась. Но, нужно также отдать должное 1С. В последнее время она стала более отзывчивой. Скорее всего, воздействие оказал ее выход на Запад в англоязычную среду. В Европе и США публика привередливая, и с существующим подходом 1С не смогла бы конкурировать.


      1. Neikist
        16.04.2016 18:05

        Как тут не ругать 1С с ее политикой лицензирования и требования платы за каждый чих. У меня была коробка полученная от 1С когда на их олимпиаду съездил, но с софтовым мать его ключом, который на каждый чих слетает + забыл введенные данные при его регистрации и платформа превратилась в тыкву. А зарплата начинающего специалиста никак не позволит приобрести аппаратный ключ для экспериментов дома (учебная версия какая то древняя + только под win). Чтобы скачать ту же последнюю версию БСП или другой какой то библиотеки — нужна ИТС судя по всему, которая тоже не 3 копейки стоит. Был шум про IDE на Eclipse основанную, вот только нужна та же ИТС. Хочешь почитать документацию — ИТС. А уж процедуру сообщения в 1С о багах платформы вообще не представляю.


        1. Elisy
          16.04.2016 18:08

          1C сделали версию для обучения бесплатной. В нее входят материалы методической поддержки 1С: ИТС для разработчиков. Вроде, идут на встречу.


          1. Elisy
            17.04.2016 19:30

            «Хм, еще недавно учебная версия это в лучшем случае 8.3.3 была, сейчас версия догнала актуальную, это радует, еще бы не только под win…

            А смысл от ИТС для разработчиков, если ту же EDT по нему не скачаешь? Каким бы eclipse не был, конфигуратор он превосходит. У меня так то нет опыта с чем то кроме 1С, так, игрался с eclipse немного, и, по моим воспоминаниям, он хоть и подтормаживал, но возможностей больше имел. Я уж не говорю про нормальные системы контроля версий. Правда есть опасение что с ним вообще сервер 1с для разработки потребуется, в таком случае он превращается в тыкву для разработчиков у которых нет средств на серверную лицензию.» Neikist


        1. Elisy
          16.04.2016 18:16

          Про Eclipse я, честно говоря, не понял 1С. Они там пытаются повторить конфигуратор. Я работал с Eclipse для Java, не скажу, что это очень комфортная среда. И, главное, язык программирования там остался 1С.
          У меня есть альтернативное предложение: Visual Studio + С#, транслируемые в 1С. В такой связке и IDE комфортная и язык позволит конфигурации на модули разбить через классы и наследование.Но эта альтернатива требует очень много ресурсов.


    1. VVizard
      17.04.2016 19:16

      Я занимаюсь разработкой на 1С последние 12 лет. Участвую в разработке конфигурации для биллинга, наша конфигурация работает по всей РФ в общей сложности обслуживает порядка 80 000 000 абонентов.

      Отвечу кратко на вопросы.

      1. «Почему 1С сама не может реализовать подобное хранение данных с целью быстрого доступа к ним.»
      Вы точно так же в 1С можете создать отдельную таблицу (регистр) в которую выгружать уже готовые данные, это так же займет 20-30 минут. Затем указать регистр в качестве источника для динамического списка. При этом отборы, сортировка будут выполнятся мгновенно, плюс как бонус вам будет доступна группировка и условное оформление списка.

      У нас в базах есть таблицы с историей за 8 лет там миллиарды записей при этом динамический список с ними корректно работает, конечно не мгновенный отклик но в пределах 5-6 секунд накладывается отбор.

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

      Я не совсем понял в чем конкретно проблема. В том что нужно платить абонентскую плату?
      При наличии подписки на ИТС и официально купленной лицензии для того что бы зарегистрировать ошибку платформы достаточно просто отправить электронное письмо на адрес поддержки 1С.
      В течении часа приходит сообщение что ошибка зарегистрирована.
      Так же есть трекер на котором видно все зарегистрированные ошибки, их статус, планируемые даты исправления. (https://bugboard.v8.1c.ru/)
      Так же мне например на почту приходят зарегистрированные ошибки:
      Пример:
      «Формат редактирования числа
      Код ошибки: 10140287 Исправлена в тестовой версии (8.3.8.43) Код(ы) обращения: TP#3461
      На устройствах под управлением ОС Android не работает вторичная группировка в формате редактирования числа.»

      Более того на партнерском форуме можно задавать вопросы и обобщатся непосредственно с Сергеем Нуралиевым (Главный архитектор платформы).
      Так что с поддержкой у 1С все хорошо.

      3. «А через 1.5 года условия вдруг стали распространяться. Что это было — ранее была ошибка в коде платформы или сейчас возникла ошибка?!»
      Ну конечно такое ведь только в 1С может быть, другие платформы и компоненты всегда абсолютно стабильны и проблем с обновлением в ИТ мире не существует?

      Что бы таких проблем не было перед обновлением тестируют функционал на новой платформе, точно так же вы не станете использовать новую версию компонента DELPHI сразу в продакшен? Так почему вы решили что платформу не нужно тестировать перед тем как накатить на 70 магазинов.

      У нас например больше 6000 установок нашей конфигурации, она так же работает со сканерами ШК, ФР, экваринговыми терминалами, картридерами для спец. смарт карт, поставляет данные для как минимум 40 разных систем (в основном через SOAP/XML/DBF) и еще много чего еще. Есть конечно проблемы но вот так что бы базы по всей РФ остановилась такого никогда не было, в редких случаях были проблемы с редкими операциями да и то только на тестовых стендах в пилотных регионах.

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


      1. Elisy
        19.04.2016 10:09

        Что бы таких проблем не было перед обновлением тестируют функционал на новой платформе, точно так же вы не станете использовать новую версию компонента DELPHI сразу в продакшен? Так почему вы решили что платформу не нужно тестировать перед тем как накатить на 70 магазинов.

        По качеству работы релиз от компании 1С фактически равноценен бета-версиям или релиз-кандидатам от крупных зарубежных компаний.

        Производительность языка 1С особой роли не играет т.к. основная нагрузка это запросы к БД при этом запросы в основном транслируются на субд 1:1.

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


        1. VVizard
          19.04.2016 16:28

          «Прямая запись в обход 1С дает увеличение производительности в 50-100 раз.»

          Вы вероятно смешиваете понятия 1С и ORM когда вы напрямую используете update вы обходите не 1С вы обходите уровень ORM.

          Приведу пример.
          Есть справочник в нем 1 000 000 записей, нужно написать обработку обновления до нового релиза. Алгоритм такой:
          Если Field1=15 тогда Field2=null
          Если Field1=10 тогда Field2=12
          Иначе Field2=Field1.

          На 1c мы вынуждены обойти все 1 000 000 записей
          — считать из базы объект
          — изменить объект
          — записать объект

          Это займет допустим 9 часов.

          На SQL то же самое можно сделать за 4 минуты вызвав update.

          Казалось бы преимущество за SQL?

          Но если копнуть глубже то окажется что во первых:
          У части заказчиков есть свои подписки на запись объекта которые делают изменения в других объектах.
          Нужно регистрировать изменение объекта что бы потом отправить их в подчиненные узлы РБД
          При записи объекта происходит анализ его содержимого и в транзакции записи меняются другие объекты.
          Дополнительно нужно проверять права а имеет ли пользователь инициировавший этот алгоритм права на доступ к полям Field2, Field1.
          Так же нужно вспомнить что часть клиентов работают на Postgree другая на DB2 и есть 2 клиента которым пока хватает DBF.

          В итоге получается что UPDATE он конечно быстрее но по факту он и проще значительно.
          И зачастую лучше подождать 9 часов на ORM системе чем распутывать клубок для написания прямого запроса.
          Любая ORM система (не только 1С) всегда уступает прямому доступу к данным но при этом значительно можно упростить реализацию бизнес логики.

          По поводу чтения, с составными типами тяжело работать как через ORM так и через прямые запросы.

          Но если при разработке БД с 0 архитектор должен изначально продумать как хранить составные типы, как потом к ним запросы писать, проблемы с ограничением доступа и.т.п. В итоге он четко понимает что он делает и главное он прекрасно видит запрос который в итоге получается.

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


          1. Elisy
            20.04.2016 06:21

            Вы вероятно смешиваете понятия 1С и ORM когда вы напрямую используете update вы обходите не 1С вы обходите уровень ORM.

            Я не призываю бездумно пользоваться прямым чтением/записью. Понятно, что прежде чем что-то предпринимать, нужно хорошо подумать.
            Для групповой пометки на удаления документов с отменой проведения, например, прямой доступ чаще всего вполне сгодится.


  1. VaalKIA
    17.04.2016 22:32

    В последних версиях платформы 1С, сделали встроенный сервер, хотя, может я не правильно понимаю:

    Встроенный веб-сервер

    Новый вариант кластера серверов версии 8.4.1 более не требует стороннего веб-сервера. Веб-сервер теперь встроен в специальный компонент — шлюз кластера, тесно интегрированный с новым балансировщиком нагрузки и реестром кластера.
    Балансировщик нагрузки

    В новом варианте кластера серверов балансировщик нагрузки реализован в виде отдельного сервиса (компонента). Данный сервис тесно интегрируется с реестром кластера, шлюзом кластера и рабочими процессами для наиболее эффективного управления нагрузкой. Сервис поддерживает существующую в кластере модель требований назначения.


    Асинхронная обработка в 1с возможна: http://kb.mista.ru/article.php?id=696

    По JSON тоже что-то добавили:
    В версии 8.4.1 реализован специальный сервис управления кластером, предоставляющий программный веб-интерфейс (REST API) для настройки кластера и управления кластером. Все данные передаются в формате JSON, что делает возможным интеграцию кластера «1С: Предприятия» с любой инфраструктурой и не ограничивает выбор технологий для интеграции.


    Вопрос: можно ли на http сервисах 1С сделать полнофункциональный сайт (без публикации интерфейса)?


    1. dsdred
      18.04.2016 13:38

      Технологическая платформа 8.4, версия 8.4.1.445
      Релиз, опубликованный на данной странице, предназначен только для тестирования!

      Вопрос: можно ли на http сервисах 1С сделать полнофункциональный сайт (без публикации интерфейса)?

      А почему нет? По сути это те же Вэб сервисы только возвращающие html код


      1. Elisy
        19.04.2016 11:02

        На текущий момент очень трудоемко. Штатно не решены проблемы: кэша, уязвимостей, нет гибкой настройки. Самостоятельное решение упрется в медленную скорость 1С.


    1. Elisy
      19.04.2016 10:21

      По идее и в 8.3.5 есть http-серисы, но 1С может использоваться в веб только для очень ограниченного круга задач. В основноа для интеграции с другими системами.
      1. Мероприятия по оптимизации под поисковики будут ограничены: у URL есть префикс
      2. Медленный язык 1С увеличивает время отклика веб-сервера
      3. Нет штатной реализации гибких кэшей, проверок на безопасность

      1С всегда будет уступать популярным веб-серверам Apache и IIS даже по числу людей в сообществах. Как следствие, если сейчас искать решение возникшей проблемы для IIS, то с вероятностью 99% уже в интернете есть решение. А в 1С такой информации не будет. А в быстро меняющемся мире веб такие проблемы возникают постоянно: от новых MIMI-типов до интернациональных доменных адресов.

      По JSON тоже что-то добавили

      Поддержку JSON они добавили ранее, так как сериализация скриптами 1С работала минутами.