Не так давно был очередной пост с критикой 1С. Пост хороший, но… как то мимо. Стоит поддержать коллегу, и дополнительно указать на некоторые важные моменты.
Разработчики 1С проделали огромную работу и прошли долгий путь. На сегодня мы имеем широкий набор средств, для достаточно быстрой реализации разнообразных решений под разные операционные системы. Масса готовых разработок зачастую является лучшим выбором для малого и среднего бизнеса. Данный продукт тестируется, сопровождается и широко документирован. Читаешь руководство разработчика и диву даёшься – насколько добротно всё продумано.
Как и в любом огромном проекте, никуда не денешься от здоровенной инерции, да и бывают неудачные решения или обделённые вниманием вещи.
Я стою перед доской (аджайл), и мой взгляд цепляет пять задач с разными формулировками, но одинаковой причиной. Вот одна из этих задачек, наиболее примечательная:
Так получилось, что я редко сталкивался с «чистыми» конфигурациями. В основном это переработанные или сильно переработанные конфигурации. С одной стороны, можно конечно ставить крест на организациях-владельцах таких конфигураций, и просто с ними не работать. С другой стороны в таких компаниях, как правило, больше «движухи» и работать бывает интереснее.
В общем, вы увидели уже эти два слова, да? Интересно, у кого какие ощущения были, когда вы столкнулись с этим в свой первый раз? Что вы тогда ответили, когда у вас спросили необходимое количество времени на эту задачу?
Печаль не в том, что есть такое явление, а в том, что когда я, например, первый раз с этим столкнулся, я вообще не знал с чего начать – в 1С-ке нет штатного средства для борьбы с этим недугом. Хотя явление довольно частое. Я думаю, многие со мной согласятся, что в меню конфигуратора должен быть пункт, посвящённый этой проблеме.
На сегодня мы имеем средство, но оно где-то в недрах «Центра управления производительностью», который входит в состав «Корпоративного инструментального пакета», который стоит, в общем-то недёшево. Кроме того, документация на него доступна только по подписке ИТС (Техно достаточно). Есть, конечно, сторонние средства, например вот это.
Мне известно, что в крупных растущих компаниях разработчики 1С прикладывают массу усилий, чтобы могли комфортно работать сотни пользователей. Даже там, где в отделе 1С каждый второй сертифицированный специалист, показатели суммарного времени на обычных блокировках достигают устрашающих значений. Я сам работал в подобной организации, общался с коллегами, которые приходили из других крупных компаний. Не претендую, что везде так, но мне представляется следующая картина: масса пользователей переваливает за некий порог, после которого уже ничего не помогает, даже корпоративный инструментальный пакет. Дальше два варианта.
Вариант 1. Часть разработчиков 1С заменяют на разработчиков SQL. Из конфигурации выдирается всё, что связано с БД. Пишется новая БД, где содержится вся логика. А формы общаются с новой БД только посредством вызова хранимых процедур. Обмен с другими БД налаживается через тот же Service Broker. В результате это всё работает очень быстро. Остаётся одна неприятная мелочь — из 1С-ки нельзя передать в хранимую процедуру таблицу значений. Вместо этого передают XML или JSON.
Здесь есть продолжение. Когда приходит время покупать очередной пакет лицензий на 300 рабочих мест, возникает понимание, что и разработчики 1С стоят недёшево. В результате возникает идея заменить «морду» 1С на PHP или C#.
Вариант 2. Компания пытается внедрить SAP.
А всё почему? Потому что я стою перед доской, пью чаёчек, и думаю, было бы неплохо решить между делом пару задачек по блокировкам. Но неизвестно сколько это времени займёт, а у меня других задач полно.
Модульность лучше, чем монолит. Так? Хорошо, когда получается при разработке разбить целое на части. Когда в 1С работает 20+ пользователей, уже было бы неплохо развести всех по разным углам. Сделать так, чтобы у каждого направления была своя конфигурация. Например, у склада своя, у контента своя, у курьеров своя и у бухгалтерии, понятно, тоже. Так и блокировок меньше. Много маленьких конфигураций лучше, чем одна здоровенная. Развивать проще и т. п.
Я уверен, в будущем так и будет, заходишь в магазин, видишь разработки разных компаний, набираешь себе маленькие конфигурации, какие требуются под бизнес, соединяешь в систему и пользуешься.
У меня реально уходит дофига времени, чтобы состыковать конфигурации, даже которые крутятся на одной версии платформы. Я не говорю про состыковку типовых конфигураций, в которых уже написан обмен. Хотя и здесь есть порой чему удивиться. Например, если бухгалтер загружает документы к себе в базу раз в квартал (вот так бывает удобней человеку), то время выгрузки и загрузки измеряется часами. Из одной типовой в другую типовую. Я как-то раз посматривал за обменом, который длился более десяти часов. А представляете, если бы возникла какая-то ошибка? Это ты устранил, поставил снова загрузку… бац! Опять.
Такое бывает. Например, ставлю чисто ради статьи выгрузку из типовой УТ11.3 через универсальный формат с настройками по умолчанию (Другая программа…). Спустя три часа:
Путь к менеджеру обмена не указан (пусто, значит используется менеджер по умолчанию). Смотрим журнал:
Что это? Почему? За что? Допустим, что ПОД – это правила обмена данными…
Ничего не хочу говорить про обмен с интернет-магазином. Просто дам пару советов, для тех, у кого дофига номенклатуры и/или свойств, вдруг кто не знает: чтобы он не «молотил» часами, первым делом нужно отключить передачу картинок. Картинки нужно закачивать отдельно на ресурс сайта (например, FTP-сервер картинок). Для этого делается регламент, в нём отслеживаем изменения в картинках (например, по версии данных) и передаём. В разных компаниях я видел разные реализации, но суть такая.
Итак, состыковка прикладных решений. Существует специальная конфигурация «Конвертация данных 3.0». Однако, чтобы всё получилось, необходимо указать такую мелочь, как файл с текстом модуля «МенеджерОбменаЧерезУниверсальныйФормат» (для УТ11.3 модуль содержит 46+ тыс. строк кода). Где запрятан генератор этого модуля? А если у тебя новая пустая конфигурация?
Вы скажете — используй XML-сериализацию, кто мешает? А я думаю, вот было бы здорово: сделал в обеих конфигурациях одинаковые объекты, ткнул правой мышкой на каждом прямо в дереве конфигурации и выбрал в какую конфигурацию нужно передавать данные. А в модуле объекта пару событий на эту тему (Перед передачей данных, перед получением данных). И чтобы быстро передавалось. Правда, это всё где-то на грани фантастики. Это как полёт человека на Марс.
Тогда так. Вот было бы здорово, если бы функция «ПланыОбмена.ВыбратьИзменения» принимала максимальный размер выбираемой пачки. Не сразу всё, что там накопилось, а например пачку в 100 штук. На следующей итерации – ещё 100 штук. И так далее. Она и отрабатывать будет быстрее, если изменений много образовалось. И блокировать будет недолго.
Изобретать велосипед плохо. Особенно если не собирался этого делать. Вместо того, чтобы вкладываться в разработку собственного продукта, выгоднее купить готовое тиражное решение. Это может быть анализ продаж, подсистема логистики, там маршруты, адреса, курьерское приложение, да что угодно. Вот здесь описаны правила на возможность получить значок «Совместимо с 1С». Часто готовые решения предлагаются на базе отличных от 1С платформ. В правилах о таких решениях сказано немного:
И всё. Разработчик решения получает значок. Ваш заказчик читает материалы стороннего продукта, видит что есть интеграция с 1С, покупает, а потом начинается «внедрение». Не редко за это нужно доплатить. Некоторые продукты содержат действительно простой способ интеграции, например внешнюю обработку или расширение конфигурации.
Есть же EnterpriseData? Это как раз тот инструмент, который и нужно применять для сопряжения с не 1С-ными решениями. Там уже учтено всё, что нужно. Если не учтено — как раз добавится в новую версию формата. Не надо никаких обработок для сопряжения с API, и тем более доработок конфигурации.
Если в стороннем решении и в конфигурации используется одна сущность, всегда возникают проблемы, связанные с объектной блокировкой. Встречал систему, в рамках даже её одной предлагалось пользователю со специальными правами решать, какие изменения сохранять, а какие нет. Я уж молчу про взаимодействие с 1С-иной.
А в другом решении чуваки решили не заморачиваться и просто выдают ошибку при попытке передать отредактированные данные.
Объектную блокировку требуется прям отдельно и подробно упомянуть в правилах. Иногда складывается впечатление, что не все разработчики мега-решений в курсе, что это вообще такое.
Но самое неприятное, когда лейбла «Совместимо с 1С» нет. А написано что-то вроде:
Я однажды получил такой ответ от техподдержки подобной компании, когда их обработка стала регулярно выдавать ошибку:
Вот и весь разговор. Построже нужно с такими ребятами. Гайки бы подзакрутить. Интересно узнать у юристов — могут ли у себя на сайте кто попало писать, что у него есть «интеграция с 1С»?
Насколько классный конструктор по созданию управляемых форм! Есть недочёты (например штатную строку поиска нельзя использовать для всех табличек, или при отображении бывает всякое), но в целом создавать формочки очень удобно. Разгул творчества максимально ограничен. Разработчик защищён от ошибок проектирования интерфейса (можно только сделать слишком перегруженную форму). Они у разных разработчиков получаются одинаковые. Формочки получаются красивые. За это хочется сказать спасибо всем, кто это придумал. Ребята – это классно, так и должно быть.
Возможность это всё опубликовать и открывать в браузере – открывает широкие возможности и вообще, просто здорово. Есть некоторые недочёты, но со временем они уйдут.
То, что касается кода – так уж получилось, что архитектура управляемых форм замедлила разработку. У меня есть кое-какая статистика, в зависимости от разработчика и от назначения формы, если не учитывать простые, где нужно просто реквизиты на форму накидать – то замедление составляет где-то в 2-4 раза. Это касается только самих форм + асинхронность. Но с этим видимо ничего не поделаешь.
Иногда заказчика не устраивает, как это выглядит, допустим на мобильном устройстве. Тогда приходится отдавать изготовленные отдельно странички через HTTP-сервисы.
Я уверен, что ребята из 1С сами обо всём этом знают. Но, как я уже говорил в начале, большая инерционность продукта и сложность проблем не позволяет «это сделать прям щас».
До встречи в комментах!
Перед тем как начать
Разработчики 1С проделали огромную работу и прошли долгий путь. На сегодня мы имеем широкий набор средств, для достаточно быстрой реализации разнообразных решений под разные операционные системы. Масса готовых разработок зачастую является лучшим выбором для малого и среднего бизнеса. Данный продукт тестируется, сопровождается и широко документирован. Читаешь руководство разработчика и диву даёшься – насколько добротно всё продумано.
Как и в любом огромном проекте, никуда не денешься от здоровенной инерции, да и бывают неудачные решения или обделённые вниманием вещи.
Мои пять копеек про «тормоза 1С-ки»
Я стою перед доской (аджайл), и мой взгляд цепляет пять задач с разными формулировками, но одинаковой причиной. Вот одна из этих задачек, наиболее примечательная:
В обработке загрузок прайсов, остатков и новинок — выдается ошибка — Конфликт блокировок… и не могу загрузить новинки…
Так получилось, что я редко сталкивался с «чистыми» конфигурациями. В основном это переработанные или сильно переработанные конфигурации. С одной стороны, можно конечно ставить крест на организациях-владельцах таких конфигураций, и просто с ними не работать. С другой стороны в таких компаниях, как правило, больше «движухи» и работать бывает интереснее.
В общем, вы увидели уже эти два слова, да? Интересно, у кого какие ощущения были, когда вы столкнулись с этим в свой первый раз? Что вы тогда ответили, когда у вас спросили необходимое количество времени на эту задачу?
Печаль не в том, что есть такое явление, а в том, что когда я, например, первый раз с этим столкнулся, я вообще не знал с чего начать – в 1С-ке нет штатного средства для борьбы с этим недугом. Хотя явление довольно частое. Я думаю, многие со мной согласятся, что в меню конфигуратора должен быть пункт, посвящённый этой проблеме.
На сегодня мы имеем средство, но оно где-то в недрах «Центра управления производительностью», который входит в состав «Корпоративного инструментального пакета», который стоит, в общем-то недёшево. Кроме того, документация на него доступна только по подписке ИТС (Техно достаточно). Есть, конечно, сторонние средства, например вот это.
Мне известно, что в крупных растущих компаниях разработчики 1С прикладывают массу усилий, чтобы могли комфортно работать сотни пользователей. Даже там, где в отделе 1С каждый второй сертифицированный специалист, показатели суммарного времени на обычных блокировках достигают устрашающих значений. Я сам работал в подобной организации, общался с коллегами, которые приходили из других крупных компаний. Не претендую, что везде так, но мне представляется следующая картина: масса пользователей переваливает за некий порог, после которого уже ничего не помогает, даже корпоративный инструментальный пакет. Дальше два варианта.
Вариант 1. Часть разработчиков 1С заменяют на разработчиков SQL. Из конфигурации выдирается всё, что связано с БД. Пишется новая БД, где содержится вся логика. А формы общаются с новой БД только посредством вызова хранимых процедур. Обмен с другими БД налаживается через тот же Service Broker. В результате это всё работает очень быстро. Остаётся одна неприятная мелочь — из 1С-ки нельзя передать в хранимую процедуру таблицу значений. Вместо этого передают XML или JSON.
Здесь есть продолжение. Когда приходит время покупать очередной пакет лицензий на 300 рабочих мест, возникает понимание, что и разработчики 1С стоят недёшево. В результате возникает идея заменить «морду» 1С на PHP или C#.
Вариант 2. Компания пытается внедрить SAP.
А всё почему? Потому что я стою перед доской, пью чаёчек, и думаю, было бы неплохо решить между делом пару задачек по блокировкам. Но неизвестно сколько это времени займёт, а у меня других задач полно.
Обмен данными и конфигурации
Модульность лучше, чем монолит. Так? Хорошо, когда получается при разработке разбить целое на части. Когда в 1С работает 20+ пользователей, уже было бы неплохо развести всех по разным углам. Сделать так, чтобы у каждого направления была своя конфигурация. Например, у склада своя, у контента своя, у курьеров своя и у бухгалтерии, понятно, тоже. Так и блокировок меньше. Много маленьких конфигураций лучше, чем одна здоровенная. Развивать проще и т. п.
Я уверен, в будущем так и будет, заходишь в магазин, видишь разработки разных компаний, набираешь себе маленькие конфигурации, какие требуются под бизнес, соединяешь в систему и пользуешься.
Так, что мне понадобится? Заказ клиента, кассы онлайн, банк-клиент Тинькофф, банк-клиент Сбер, возвратная тара… нет, возвратная тара не нужна…
У меня реально уходит дофига времени, чтобы состыковать конфигурации, даже которые крутятся на одной версии платформы. Я не говорю про состыковку типовых конфигураций, в которых уже написан обмен. Хотя и здесь есть порой чему удивиться. Например, если бухгалтер загружает документы к себе в базу раз в квартал (вот так бывает удобней человеку), то время выгрузки и загрузки измеряется часами. Из одной типовой в другую типовую. Я как-то раз посматривал за обменом, который длился более десяти часов. А представляете, если бы возникла какая-то ошибка? Это ты устранил, поставил снова загрузку… бац! Опять.
Такое бывает. Например, ставлю чисто ради статьи выгрузку из типовой УТ11.3 через универсальный формат с настройками по умолчанию (Другая программа…). Спустя три часа:
Во время отправки данных возникли ошибки(см. журнал регистрации).
Путь к менеджеру обмена не указан (пусто, значит используется менеджер по умолчанию). Смотрим журнал:
Событие: Отправка.
Объект: Статья движения денежных средств, Убыток от курсовых разниц (e1cib/data/Справочник.СтатьиДвиженияДенежныхСредств?ref=ae8500259075533411e7205499471b7a).
{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(4605)}:
Не найдено ПОД для объекта метаданных.
Объект метаданных:.
ВызватьИсключение ТекстОшибки;
Что это? Почему? За что? Допустим, что ПОД – это правила обмена данными…
Ничего не хочу говорить про обмен с интернет-магазином. Просто дам пару советов, для тех, у кого дофига номенклатуры и/или свойств, вдруг кто не знает: чтобы он не «молотил» часами, первым делом нужно отключить передачу картинок. Картинки нужно закачивать отдельно на ресурс сайта (например, FTP-сервер картинок). Для этого делается регламент, в нём отслеживаем изменения в картинках (например, по версии данных) и передаём. В разных компаниях я видел разные реализации, но суть такая.
Итак, состыковка прикладных решений. Существует специальная конфигурация «Конвертация данных 3.0». Однако, чтобы всё получилось, необходимо указать такую мелочь, как файл с текстом модуля «МенеджерОбменаЧерезУниверсальныйФормат» (для УТ11.3 модуль содержит 46+ тыс. строк кода). Где запрятан генератор этого модуля? А если у тебя новая пустая конфигурация?
Вы скажете — используй XML-сериализацию, кто мешает? А я думаю, вот было бы здорово: сделал в обеих конфигурациях одинаковые объекты, ткнул правой мышкой на каждом прямо в дереве конфигурации и выбрал в какую конфигурацию нужно передавать данные. А в модуле объекта пару событий на эту тему (Перед передачей данных, перед получением данных). И чтобы быстро передавалось. Правда, это всё где-то на грани фантастики. Это как полёт человека на Марс.
Тогда так. Вот было бы здорово, если бы функция «ПланыОбмена.ВыбратьИзменения» принимала максимальный размер выбираемой пачки. Не сразу всё, что там накопилось, а например пачку в 100 штук. На следующей итерации – ещё 100 штук. И так далее. Она и отрабатывать будет быстрее, если изменений много образовалось. И блокировать будет недолго.
Совместимо с 1С
Изобретать велосипед плохо. Особенно если не собирался этого делать. Вместо того, чтобы вкладываться в разработку собственного продукта, выгоднее купить готовое тиражное решение. Это может быть анализ продаж, подсистема логистики, там маршруты, адреса, курьерское приложение, да что угодно. Вот здесь описаны правила на возможность получить значок «Совместимо с 1С». Часто готовые решения предлагаются на базе отличных от 1С платформ. В правилах о таких решениях сказано немного:
К сертификации принимаются следующие группы программных продуктов:
...
8. программы, поддерживающие обмен данных с 1С: Предприятием на уровне файлов;
9. программы, имеющие другие способы взаимодействия с 1С: Предприятием (рассматривается индивидуально).
Общие требования
1. Программный продукт должен быть предназначен для тиражного распространения, и не иметь ориентации на конкретное внедрение.
2. Продукт должен иметь руководство в печатном виде.
3. В руководстве должно быть в явном виде описано взаимодействие продукта с 1С: Предприятием.
...
5. Все продукты, ориентированные на конечного пользователя, должны иметь средства установки.
6. При внесении исправлений или изменений в сертифицированный продукт разработчик обеспечивает соответствие измененного продукта требованиям, предъявляемым при сертификации. В случае внесения изменений, нарушающих требования сертификации, фирма «1С» имеет право приостановить действие сертификата.
Требования к продуктам, интегрированным на основе обмена файлами.
Программные продукты, интегрированные с системой “1С: Предприятие” на базе обмена файлами (загрузки / выгрузки) должны со стороны 1С: Предприятия использовать штатные средства 1С: Предприятия, предназначенные для работы с файлами формата TXT и DBF.
И всё. Разработчик решения получает значок. Ваш заказчик читает материалы стороннего продукта, видит что есть интеграция с 1С, покупает, а потом начинается «внедрение». Не редко за это нужно доплатить. Некоторые продукты содержат действительно простой способ интеграции, например внешнюю обработку или расширение конфигурации.
Есть же EnterpriseData? Это как раз тот инструмент, который и нужно применять для сопряжения с не 1С-ными решениями. Там уже учтено всё, что нужно. Если не учтено — как раз добавится в новую версию формата. Не надо никаких обработок для сопряжения с API, и тем более доработок конфигурации.
Если в стороннем решении и в конфигурации используется одна сущность, всегда возникают проблемы, связанные с объектной блокировкой. Встречал систему, в рамках даже её одной предлагалось пользователю со специальными правами решать, какие изменения сохранять, а какие нет. Я уж молчу про взаимодействие с 1С-иной.
А в другом решении чуваки решили не заморачиваться и просто выдают ошибку при попытке передать отредактированные данные.
Объектную блокировку требуется прям отдельно и подробно упомянуть в правилах. Иногда складывается впечатление, что не все разработчики мега-решений в курсе, что это вообще такое.
Но самое неприятное, когда лейбла «Совместимо с 1С» нет. А написано что-то вроде:
Есть типовая интеграция для 1С:
— Управление торговлей 10.3 и 11.3
— Комплексная автоматизация 2.0
— Управление производственным предприятием
— ERP
Я однажды получил такой ответ от техподдержки подобной компании, когда их обработка стала регулярно выдавать ошибку:
Компания X предоставляет типовую обработку для обмена данными между 1С: УТ и X на бесплатной основе…
Вот и весь разговор. Построже нужно с такими ребятами. Гайки бы подзакрутить. Интересно узнать у юристов — могут ли у себя на сайте кто попало писать, что у него есть «интеграция с 1С»?
Управляемые формы
Насколько классный конструктор по созданию управляемых форм! Есть недочёты (например штатную строку поиска нельзя использовать для всех табличек, или при отображении бывает всякое), но в целом создавать формочки очень удобно. Разгул творчества максимально ограничен. Разработчик защищён от ошибок проектирования интерфейса (можно только сделать слишком перегруженную форму). Они у разных разработчиков получаются одинаковые. Формочки получаются красивые. За это хочется сказать спасибо всем, кто это придумал. Ребята – это классно, так и должно быть.
Возможность это всё опубликовать и открывать в браузере – открывает широкие возможности и вообще, просто здорово. Есть некоторые недочёты, но со временем они уйдут.
То, что касается кода – так уж получилось, что архитектура управляемых форм замедлила разработку. У меня есть кое-какая статистика, в зависимости от разработчика и от назначения формы, если не учитывать простые, где нужно просто реквизиты на форму накидать – то замедление составляет где-то в 2-4 раза. Это касается только самих форм + асинхронность. Но с этим видимо ничего не поделаешь.
Иногда заказчика не устраивает, как это выглядит, допустим на мобильном устройстве. Тогда приходится отдавать изготовленные отдельно странички через HTTP-сервисы.
Из основного вроде бы всё
Я уверен, что ребята из 1С сами обо всём этом знают. Но, как я уже говорил в начале, большая инерционность продукта и сложность проблем не позволяет «это сделать прям щас».
До встречи в комментах!