Русаков Григорий | Директор | Аналитика. Проекты и решения

«Как создавать, продвигать приложение и конкурировать с фирмой 1С на протяжении 11 лет»

Рассказ о том, как с 2007 года мне (как директору и основному разработчику) удается продвигать на рынок отраслевое решение на базе «1С:Предприятие 8», как конкурировать с самой фирмой «1С», принимать не стандартные решения и продолжать продавать продукт. Речь пойдет о системе электронного документооборота СЭД «Корпоративный документооборот», имеющей тысячи пользователей. Основные тезисы выступления: 1. Риск выхода на пустой рынок в 2007 году – раз нет решений, то возможно они не востребованы рынком? Оказалось, что востребованы. Что приносит больше денег - слабое решение на пустом рынке или отличное решение, но на рынке с большой конкуренцией? 2. Как конкурировать с фирмой «1С» на её поле? Стараемся всегда идти на шаг впереди: переход на 8.2 раньше, переход на «Такси» раньше, графический редактор значительно раньше, push-уведомления для iOS раньше и т.д. Всё это были информационные поводы для новостей. Слабое место – отсутствие методических материалов и различных книг для клиентов, но у нас меньше объем кода (в отличие от типовых продуктов фирмы 1С), проще модифицировать под себя it-специалистам клиента; 3. Продажи падают – как удержать? Стоит ли переименовать продукт для отстройки от конкурента или оставить старое наименование? Добавить ли новые подсистемы – KPI и технической поддержки? Минимизация затрат на техническую поддержку клиентов с сохранением качества. Бесплатные пожизненные обновления. Апгрейды на другие продукты. Лучшие условия для партнеров; 4. Клиенты заявляют - «А мы хотим тут новую кнопку (иначе не купим)!» Как соблюсти баланс между усложнением решения и удовлетворением конкретного клиента? Плюсы развития продукта под реальные нужды предприятий, а не под гипотетические задачи; 5. Повышать или понижать цену? Что увеличит продажи продукта? 6. Куда развиваться после 11 лет? Создание на основе продукта отдельных подсистем для программ фирмы «1С». Сертификация встраиваемых модулей в программы «1С:УТ», «1С:УНФ», «1С:Документооборот» и другие; 7. А может сделать OpenSource? Плюсы и минусы продукта в OpenSource. Дополнительная информация: Сколько вышло больших обновлений (на 8.1 для 8.2 и 8.3 такси). Расскажем были ли возражения против платного перехода на новые редакции. Одно из интересных решений – графический редактор бизнес-процессов, позволяющий создавать произвольные процессы в пользовательском режиме (не в «Конфигураторе») создан в 2010 году, фирма «1С» создала аналогичный в 2017. Изначально продукт поставляется с полностью открытым кодом, без дополнительных ключей защиты. Есть ли плюсы в такой поставке или больше минусов – приходите и всё узнаете!

Некоторая работа с данными через COM

Программирование - Практика программирования

В статье приведены примеры работы с Платформой 8.X через COM (точнее, через объект COMConnector).
Примеры кода были использованы при реализации прикладных задач в процессе трудовой деятельности.

Работать с использованием COM можно между базами работающими на платформе 8.Х одного релиза (подключаться можно только к той платформе, которая имеет тот же  релиз, что и текущая, и никак иначе, т.к. при данном виде подключения используются интерфейсы текущей базы). Правда, стоит отметить, можно обойти момент с релизами: например, подключаемся из  8.2.13 к 8.2.14, заменив библиотеку "comcntr.dll" из папки "bin" платформы 8.2.14 на аналогичную из 8.2.13 - но получается не вся функциональность, а "некоторая", с кучей ошибок).

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

При подключении с использованием COM, в подключенной базе есть некоторые ограничения: не работают события связанные с интерфейсом(модуль управляемого приложения, модуль сеанса), но работают события модуля внешнего соединения.

Почитать про COM можно здесь

 

Начнем.


Создание com подключения к базе:
  

  

Процедура ПодключениеКБазе1С(ПутьКБазе, Пользователь, Пароль = "", Сервер, БазаДанных)    
        СтрокаПодключения = "";
        Если Не ПустаяСтрока(Сервер)  Тогда
                 СтрокаПодключения = "Srvr=""" + Сервер + """;Ref=""" + БазаДанных + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """";
        Иначе    
                  СтрокаПодключения = "File=""" + ПутьКБазе + """;Usr=""" + Пользователь + """;Pwd=""" + Пароль + """";
        КонецЕсли;
       cntr = Новый COMObject("v82.COMConnector");
       COMCоединение            = cntr.Connect(СтрокаПодключения);
КонецПроцедуры

 


Получение типа "ДокументСсылка.ПриходнаяНакладная" из подключенной базы

Тип = COMCоединение.NewObject("ОписаниеТипов","ДокументСсылка.ПриходнаяНакладная").Типы().Получить(0);


Получение типа "СправочникСсылка.Номенклатура" из подключенной базы

Тип = COMCоединение.NewObject("ОписаниеТипов","СправочникСсылка.Номенклатура").Типы().Получить(0);


Создание объекта "Запрос"

Запрос = COMCоединение.NewObject("Запрос");


Создание объекта "Структура"

Вариант 1.

ПараметрыПоиска  = COMCоединение.NewObject("Структура","КлючСвязиСерийныхНомеров",123);


Вариант 2.

ПараметрыПоиска  = COMCоединение.NewObject("Структура"); ПараметрыПоиска.Вставить("КлючСвязиСерийныхНомеров",123);


Создание объекта "СписокЗначений"

СЗ = COMCоединение.NewObject("СписокЗначений");



Создание таблицы значений

ИтоговаяТаблица = COMCоединение.NewObject("ТаблицаЗначений");


Добавление колонок таблицы значений

ИтоговаяТаблица.Колонки.Добавить("Номенклатура", COMCоединение.NewObject("ОписаниеТипов","СправочникСсылка.Номенклатура"));




Получение ссылки на документ если известен уникальный идентификатор

Документ1С = COMCоединение.Документы.ПриходнаяНакладная.ПолучитьСсылку(COMCоединение.NewObject("УникальныйИдентификатор", УникальныйИдентификаторДокументаВВидеСтроки));


Проверка что ссылка не пустая и не "битая":

Если Найти(COMCоединение.String(Документ1С),"не найден") = 0 Тогда   //документ найден




Проверка реквизита справочника с типом "Перечисление"на соответствие определенному значению

COMCоединение.XMLстрока(Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий) =  "ЭкземплярТовара";



Сравнение ссылок объектов (при сравнении ссылочных Com-объектов, как показывает практика, нужно сравнивать их по коду или по ссылке, а не напрямую)

COMCоединение.xmlстрока(НоменклатураСсылка.НаборУпаковок) = COMCоединение.xmlстрока(COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры) вместо 
НоменклатураСсылка.НаборУпаковок = COMCоединение.Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры



Статья навеяна курсами с сайта spec8.ru.

Спасибо.

См. также

Автор запретил комментарии