Умл в 1с что это

Обновлено: 05.07.2024

В этой статье я расскажу о многих особенностях взаимодействия между базами 1С по COM технологии, накопленных за годы развития и использования интеграционного коммерческого продукта 2iS:Интеграция компании 2iS.

Термины

ОС – операционная система

COM-клиент – процесс(поток) ОС, запросивший создание COM-объекта

COM-сервер – COM-объект, созданный по запросу клиента

Издание платформы – подстрока до 2-й точки версии платформы (например 8.2, 8.3)

Automation-сервер – он же OLE-сервер, COM-объект V8X.Application для создания приложений 1С

Сборка платформы – полная строка версии платформы (например 8.2.19.130, 8.2.16.352)

COM классы платформы

Виды COM классов

Для каждого издания платформы в системном реестре регистрируются собственные классы для взаимодействия с базами. Символ “X” обозначает место подстановки номера издания платформы (например 0,1,2,3,4).

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

Отмена регистрации: Regsvr32 “<ПутьНужнойРазрядности>\bin\comcntr.dll” /u

V8X.Application - Automation-сервер толстого клиента

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

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

Отмена регистрации - 1cv8.exe /unregserver

V8Xc.Application - Automation-сервер тонкого клиента

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

Отмена регистрации - 1cv8c.exe /unregserver

Привязка COM классов к dll-файлам

Привязка имени COM класса к конкретному dll-файлу осуществляется через ветку HKEY_CLASSES_ROOT системного реестра, которая собирается следующим образом :

Берется содержимое ветки HKEY_CURRENT_USER\Software\Classes

Добавляется содержимое ветки HKEY_LOCAL_MACHINE\Software\Classes, но только те ключи, которые отсутствуют в п.1.

Поэтому регистрация класса от имени пользователя имеет приоритет над общей регистрацией.

64-b - c:\Program Files\1cv8*\<Версия>\bin\comcntr.dll

32-b - c:\Program Files (x86)\1cv8*\<Версия>\bin\comcntr.dll

Подключение внешнего соединения

Рассмотрим алгоритм подключения внешнего соединения в деталях

Если издание платформы COM-клиента совпадает с изданием платформы COM-сервера, то также требуется равенство сборки платформы COM-клиента и COM-сервера.

Он регистрируется при установке платформы с опцией «Внешнее соединение». В любой момент его можно зарегистрировать командой «Regsvr32 comcntr.dll» в каталоге исполняемых файлов платформы.

COM-объект создается в памяти COM-клиента

Затраты на создание примерно – 0.01(первое)/0.001(второе) cек

Пример
КомСоединитель = Новый COMОбъект ( “V83 . ComConnector” );
ВнешнееСоединение = КомСоединитель . Connect ( СтрокаСоединения );

Внепроцессное локальное (local)

COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на компьютере COM-клиента

Затраты на создание примерно – 0.06(первое)/0.03(второе) сек

Пример
КомСоединитель = Новый COMОбъект ( “V83 . ComConnector” );
ВнешнееСоединение = КомСоединитель . Connect ( СтрокаСоединения );

Внепроцессное нелокальное (DCOM)

Необходимо настроить на нелокальном компьютере роль «Сервер приложений»/«Application server» и включить нелокальный доступ к COM+, выбрав опцию «Сетевой доступ к COM+»/”COM+ network access”. Подробнее рассмотрено далее.

COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на другом компьютере

Затраты на создание примерно

Задержка канала, мс

Длительность создания COM-объекта, мс


На графике видно, что длительность создания этого COM-объекта прямо пропорциональна задержке канала и коэффициент пропорциональности составляет примерно 24. Можно предположить, что при создании этого COM-объекта происходит 24 вызова через канал.

  1. Пример
    КомСоединитель = Новый COMОбъект ( “V83 . ComConnector” , ИмяКомпьютера );
    ВнешнееСоединение = КомСоединитель . Connect ( СтрокаСоединения );

2. Выполнение метода Connect (создание внешнего соединения)

Создание сеанса – 1 сек

Инициализация сеанса – [0;?] сек

Подгрузка нужных метаданных (кэш метаданных не используется)

Инициализация параметров сеанса

Подключение Automation-сервера (OLE)

Создание COM-объекта Automation-сервера (Имя класса - V8X.Application).

Затраты на создание примерно – 0.5 cек

Выполнение метода Connect

Создание сеанса – 1 сек

Инициализация сеанса – [0;?] сек

Подгрузка нужных метаданных (кэш метаданных используется, если база есть в списке пользователя)

Пример
AutomationСервер = Новый COMОбъект ( "V83.Application" );
AutomationСервер . Connect ( СтрокаСоединения );

Затраты на COM-вызовы

Каждый раз, когда мы обращаемся во встроенном языке к свойству или методу COM-объекта (выполняем COM-вызов), происходит ряд дополнительных действий по сравнению с обращением к родному объекту встроенного языка. Если COM-сервер находится в другом локальном процессе, то при этом еще сначала выполняется перенос всех параметров из COM-клиента в COM-сервер и в конце выполняется обратный перенос параметров в COM-клиент. Для такого переноса информация естественно должна быть сериализована на стороне отправителя и затем десериализована на стороне получателя, что в совокупности с некоторыми другими действиями получило название маршалинга и демаршалинга. В нелокальном режиме (DCOM) такой перенос будет еще тратить время на сетевые коммуникации и при первом обращении к новому COM-объекту на передачу его «скелета», и поэтому задержка канала будет играть решающую роль ( Подробнее о COM вызовах , DCOM в википедии , Технический обзор DCOM ,)

Соотношение затрат на вызов по типам расположения COM-сервера

Минимальные для внутрипроцессного Com-сервера

Средние для локального внепроцессного Com-сервера

От средних до больших для нелокального внепроцессного Cоm-сервера в зависимости от качества канала связи

Минимизация количества COM-вызовов

Создаем базовую внешнюю обработку с набором общих методов для приема вызовов от COM-клиента на стороне COM-сервера

Теперь нам не нужно изменять конфигурацию базы COM-сервера, чтобы использовать там сложный функционал.

В нашем продукте мы назвали ее «Сервисный процессор». На ее передачу и инициализацию уходит около 1 сек

Проектируем взаимодействие с COM-сервером по принципу "минимум COM-вызовов”, т.е. готовим все нужное на стороне COM-клиента и передаем в качестве параметров "большого" вызова

Создаем встроенную обработку для выполнения такого вызова в COM-клиенте

Передача агрегатных объектов

Сериализуем все входные параметры на стороне COM-клиента

Десериализуем все входные параметры на стороне COM-сервера

Сериализуем все выходные параметры на стороне COM-сервера

Десериализуем все выходные параметры на стороне COM-клиента

В нашем продукте мы назвали ее «Выполнение сервиса инфобазы»

Для многократных COM-вызовов предусматриваем регулируемую частоту

Например, информационные вызовы могут выполняться с изменяемой частотой

Обратная связь

При использовании принципа «минимум COM-вызовов» значительную часть времени код будет выполняться в чужом контексте, что серьезно усиливает некоторые неудобства COM-вызовов:

Нельзя прервать поток COM-Клиента и его соединение с сервером приложений 1С, пока не завершится вызов COM-сервера

У COM-Клиента нет информации о прогрессе выполнения вызова в COM-сервере

информацию о прогрессе выполнения

Схема принципа “минимум COM-вызовов”

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

Отладка

При использовании принципа «минимум COM-вызовов» облегчить отладку выполнения кода на COM-сервере можно, сделав опциональное модальное окно подключения к базе в COM-клиенте. В этом окне должны быть возможности задания одноразовых параметров подключения, выполнения вспомогательных функций и просмотра информации о подключенном сеансе. Ниже в качестве примера показано такое окно из нашего продукта

Чтобы включить возможность отладки внешних соединений, в подкаталоге conf нужно создать файл comcntrcfg.xml с соответствующим содержимым. В окне подключения можно сделать кнопку/флажок для программного создания такого файла. Однако много версий платформы содержат ошибку, из-за которой предметы отладки внешних соединений не видны в отладчике даже с этим корректно настроенным файлом. На платформе 8.3 эти проблемы вроде бы решены.

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

В какой-то мере обойти проблему невидимости предмета отладки внешнего соединения и ряд других неудобств можно путем однократного выполнения кода на толстом клиенте с заменой режима «Внешнее соединение» на «Automation-сервер» (приложение), т.е. используя COM класс V8X.Application и включенную видимость. Поэтому в окне подключения нужны параметры для выбора режима подключения.

После создания подключения на стороне COM-клиента обычно требуется подключение отладчика базы COM-сервера и установка там точки останова в нужном месте. Поэтому в окне подключения нужно расположить кнопку подключения отладчика/конфигуратора COM-сервера. Если COM-сервер запущен в режиме видимого приложения, то для подключения отладчика можно воспользоваться асинхронным вызовом исключения в нем. Из диалога с ошибкой в приложении COM-сервера через кнопку «Конфигуратор» можно будет открыть конфигуратор и в большинстве случаев сразу подключить отладчик. Если подключение отладчика таким способом недоступно, то оператору поможет отображение информации о сеансе (его номера) в базе COM-сервера. Также нужна кнопка открытия в открытом отладчике файла внешней обработки, которая будет выполняться в нем.

Управление COM+ приложениями 1С

Далее можно изменить тип активации (внутрипроцессный/внепроцессный) на закладке Активация/Activation.

В нашем продукте имеется инструмент «Управление COM классами 1С» для просмотра/регистрации/изменения всех COM классов и COM+ приложений 1С на указанном компьютере:

Также управлять COM классами 1С можно через инструмент “Управление COM классами 1С” из подсистемы Инструменты разработчика

Настройка DCOM-сервера

Для Windows 2008 Server нужно добавить роль «Сервер приложений» (Application server). Для этого необходимо открыть панель управления компьютером, щелкнуть правой кнопкой мыши в ветки "Роли" и выбрать пункт меню "Добавить роль".

Появится око в котором необходимо выбрать роль "Сервер приложений"/"Application server". На этапе выбора ролей сервера приложений необходимо указать пункт "Сетевой доступ к COM+"/"COM+ network access". Если это не сделать, то при попытке создания COM-объекта вы будете получать ошибку "Ошибка при вызове конструктора (COMОбъект): The component or application containing the component has been disabled".

Настройка сетевого экрана

DCOM процессам для связи между собой динамически выдаются порты из диапазона (по умолчанию) от 1024 до 65535. Поэтому в сетевых экранах обоих компьютеров (com-клиента и com-сервера) должны быть открыты порты RPC (135, 139, 445, 593) и диапазон 1024-65535 (TCP/UDP).

Можно ограничить этот диапазон портов. Для этого открываем Администрирование – Службы компонентов (или в командной строке набираем dcomcnfg.exe). В открывшейся программе находим ветку «Мой компьютер» и открываем её свойства (см. скриншот).

В свойствах открываем вкладку «Набор протоколов», там, в свою очередь, открываем свойства «TCP/IP с ориентацией на подключения»

В свойствах TCP/IP по умолчанию – пустой список. В него можно добавить конкретный диапазон портов, которые будут использоваться DCOM. Какие именно порты выбрать – решать вам. Главное, чтобы не было других стандартных служб, уже занявших выбранные порты. Мне встречались рекомендации открывать не менее 1000 портов, так как очень многие системные программы используют DCOM. Так на скриншоте ниже я указываю, что DCOM должен работать по диапазону портов 20000-21000.

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

Проблемы

Высокие затраты на подключение/инициализацию

Удержание com-серверов – эффективное средство борьбы. Варианты:

Повторное использование возвращаемых значений. Очищаются каждые 20 мин

Разные сборки платформы клиента и сервера при одинаковом издании платформы

Для обхода для каждой отличной от COM-клиента сборки платформы назначаем и настраиваем DCOM сервер

Отсутствие информации о типах вложенных в COM-объекты объектов 1С (вместо типа объекта 1С везде получаем тип «COMОбъект») и отсутствие контекстной подсказки по ним

Для обхода применяем принцип «минимум COM-вызовов»

При передаче исключения из COM-сервера оно принимает краткую форму из-за ошибки платформы

Для обхода оборачиваем каждый вызов на стороне COM-сервера в попытку и в исключении перевызываем исключение с полным описанием ошибки

При создании COM-объекта ошибка “Версия компоненты 'comcntr' (8.X.XX.XXX) отличается от версии корневого модуля 'core82' (8.X.YY.YYY)”

Для обхода создаем COM+ приложение с внепроцессной активацией. Тогда COM-сервер будет создаваться в отдельном процессе и совпадения версий этих модулей не потребуется.

Медленные каналы (большие задержки)

Каждой подсети за отдельным медленным каналом назначаем и настраиваем свой DCOM сервер и при обращении к базам за этим каналом COM-серверы создаем на этом компьютере, минимизируя количество и объемы вызовов Com-клиент<->Com-сервер

Кешируем (повторно используем) COM-серверы

Невозможно разорвать соединение рабочего процесса, в котором ожидается завершение вызова COM-сервера

Для обхода можно использовать создание COM-объектов в выделенных хост-процессах, настроив соответствующим образом COM+ приложение, и регистрировать идентификаторы этих процессов в привязке к сеансам COM-клиентов. Тогда при необходимости завершить серверное соединение такого сеанса можно сначала убить процесс COM-сервера, а потом и сам сеанс.

При обращении к COM-объекту может возникать ошибка «Неизвестная ошибка». Возможные причины:

Com-сервер перестал существовать. Возможные причины:

Потеря связи с нелокальным COM-сервером

Совпадение имен свойств и методов без параметров объекта создает неоднозначность обращения к ним через COM

Например, если у справочника есть реквизит ПолноеНаименование, то из-за наличия метода ПолноеНаименование() обращение к реквизиту ПолноеНаименование через COM может привести к вызову метода ПолноеНаименование()

Для обхода используем принцип “минимум COM-вызовов”

При создании COM-объекта через DCOM может возникать ошибка "Сервер RPC недоступен"

Проверьте работу службы “Remote Procedure Call (RPC)” на обоих компьютерах

Com-технология VS веб-сервисы в локальной сети

Недостатки

Рассмотренные выше сложности с взаимодействием разных сборок платформы 1C, требующие для своего решения сервисный механизм

Высокие затраты на подключение/инициализацию, поэтому при отсутствии кеширования неэффективно для частых мелких вызовов

Привязка к семейству операционных систем (платформе) Windows

Преимущества

Отсутствие необходимости изменять конфигурацию баз, к которым подключаемся

Не требуется разворачивать и поддерживать веб-сервер

Захват клиентских лицензий

В большинстве случаев всем клиентским приложениям, частным случаем которого являются Automation-сервер и внешнее соединение, в одном сеансе ОС требуется всего лишь одна на всех лицензия. Однако если клиентскому приложению не удалось получить аппаратную лицензию (от локального HASP или сетевого HASP) и программную лицензию (платформы или базовой конфигурации), то предпринимается попытка получить отдельную лицензию с сервера 1С:Предприятия. Сервер 1С:Предприятия может выдать лицензию только, если в свойствах базы разрешена выдача лицензий сервером 1С:Предприятия. В таком случае каждое клиентское приложение и внешнее соединение может захватывать свою собственную лицензию.

Заключение

Если вы хотите подробнее узнать об описанных особенностях, приобретайте продукт 2iS:Администратор . Несмотря на наличие в конфигурации защищенного модуля, 99% программного кода конфигурации открыто, то есть Вы можете изучить реализацию описанных приемов.

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


Типы интеграции

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


Каждый разработчик, с тех пор как начинает программировать и до получения Senior Developer, проходит определенные стадии. Все мы, наверное, начинали с xls и csv.

Это классика жанра. Приходит бухгалтер, просит загрузить ей что-нибудь в табличный документ. Хорошо, пожалуйста, вот Excel, я загрузил, все хорошо. Следующий Excel уже другой, все сломалось, и ничего не работает. Это может быть не xls, а csv.

Структуры нет. Конечно, объединение ячеек в Excel все знают, все прикольно, все замечательно. Но табличка может быть только одна либо только одна вкладка. Номер заказа, номенклатура не структурированы.

Что касается связей. Все понимают, что обычно мы грузим реляционную структуру. А реляционная структура подразумевает, что есть не одна таблица, а несколько, и между ними есть связи. В Excel и csv это никак не отразить.

У Excel и csv могут быть разные форматы. У вас может быть xls, xlsx; csv вы можете разделить запятыми, точкой с запятой, а можете поставить табуляцию. Это замечательно, но работает каждый раз по-разному.


В общем, этот этап все проходят достаточно быстро, понимают, что много минусов.

Что дальше делает разработчик? Он открывает желтую книжечку. В желтой книжке написано «ком-коннектор». Здравствуй, ком-коннектор!

Это замечательный инструмент интеграции. Но замечательный он, скорее, для разработчика. Неудобен он только одним – он под Windows. Если еще 5 лет назад мы смеялись над 1С на Linux, то сейчас видим, что серверный мир упорно и плотно движется в Linux. И я думаю, что вскоре серверов на windows будет мало. А если они и останутся, то только терминальные. MacOS завоевывает десктопы. Все любят ноутбуки, все приучились к айфонам, и маковский интерфейс подкупает. Поэтому мы стали думать и о MacOS, и о Linux, и виндовые интеграции уже применимы далеко не на всех проектах.

С ком-коннектор полная свобода творчества. Что хотите, то и делайте. Хотите в одной базе что-нибудь сделайте, хотите в другой базе. Можете во второй базе что-то удалить, можете добавить. Залезть в другой регистр, посмотреть. Замечательно для разработчика. Разработчики это безумно любят. Не любят это обычно менеджеры, а еще больше это не любят «безопасники». Они просто ненавидят ком-коннектор. Те, кто не знает, что это такое, говорят, просто код какой-то написан, ладно. А те, кто знает, понимает, что это пароль, пароль в открытом виде, конечно же, он написан в коде, в коде его посмотреть никто не может. Поэтому у кого-то он сохранен в отдельном справочнике, и даже прикрыт звездочками. Вот если пароль прикрыт звездочками, это уже next level! На самом деле, конечно, все понимают, что 1С не поддерживает передачу хэша при передаче пароля, и мы его все равно передаем в открытом виде.


Почти человеческая интеграция – это когда разработчик прочитал уже не желтую книжечку, а что-нибудь в интернете. А там написано, что xml и json – это хорошо. И зачем через ком коннектиться, если можно выгрузить в xml и загрузить из xml? Уже есть структура, вроде, можно передать массивы, можно что-то структурировать, есть штатные функции, все круто.

Но xml и json – это всего лишь файлики. Когда вы выгрузили файлик и у вас постоянная интеграция, вы понимаете, что файлик нужно версионировать, нужно убедиться, что он загружен, его нужно как-то передать, убедиться, что он передан, убедиться, что вторая система его загрузила, что загрузила его успешно. И это не очень хорошо.


Следующий этап – конвертация.

Говорю о конвертации 2.0, 2.1, потому что 3.0 – это тот еще специфичный зверь, и не совсем конвертация. Не знаю, почему эти два решения назвали одинаковым словом. Вторая конвертация – это уже человеческая интеграция, это уже как бы Homo Sapiens, это то, чем можно пользоваться на проектах. У нас есть замечательный BSP, проверенный временем и делом, есть обмены по расписанию, есть настройки, есть правила регистрации – все, что нужно. И интеграцию на конвертации организовать уже можно.

Но мы ограничены обменом по расписанию. Первый вопрос, который возникает, а сколько – один раз в минуту или в час, или может быть один раз в 10 минут, или может быть один раз в секунду. Если один раз в секунду, то система уже перегружена. Если один раз в 10 минут, нам мало. А когда у нас данные, у нас возникают коллизии: мы здесь поменяли, в другом месте, и опять что-то не так.

Опять же слишком много свободы творчества. Да, конвертацию открываем, все круто. Там правило конвертации, правило выгрузки, реквизиты поставлены, все круто. Но до того, как мы откроем последнюю вкладку «алгоритмы», где огромные куски кода, очень здоровые. Как-то оно все выгружается, может выгружаться вообще не так, как вы думали.

И еще – каждый, кто хоть раз конвертацию отлаживал, знает, как сложно найти ошибку в этом гигабайтном xml файлике, в котором очень много всего, и где-то в серединке скрылась ошибка, что-то случилось. А регистрация уже потерта, потому что бизнесу надо работать. В общем, то ещё развлечение!


Вот так он себя чувствует!


Но недолго. Первое падение возникает достаточно быстро – когда вы теряете данные. 1С-ка упала, вы пожимаете плечами, мол, это бывает.

Потом возникают варианты, когда интегрируемся с интернетовскими сервисами, длительное подключение, особенно если УТ 10.1, в которой при подключении даже по web-коннектору целая жизнь происходит,


Что нужно сделать, чтобы стать нормальным разработчиком, который решил все эти проблемы? Дальше рассмотрим.

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

Типичная, наверно, картинка.


Это круто. Когда у вас есть интеграция, о которой вы даже не знаете. То есть вы просто сделали разово, а все остальное работает. Для этого и делаются интеграционные шины.

И еще я скажу, что интеграционные шины, как проект, очень часто идут параллельно с проектами по MDM. Когда у вас организация выросла до такой степени, что вам нужен Master Data Managemen, у вас есть единая система, которая управляет десятком систем, с которыми что-то происходит, без интеграционной шины обойтись достаточно сложно. Тогда она сама собой внедряется.

Архитектура и инструментарий

Теперь я перехожу к самым интересным слайдам. Про архитектуру я расскажу на практическом примере, я не IT-евангелист, который вам что-то продает, что очень модное и крутое. Я расскажу, как я делал интеграцию, какие были проблемы, как я их решал, как я, к своему стыду, их решал 2-3-4 раза до того, как понял, что их можно решать по-нормальному.

Реальный случай. Пришли менеджеры и говорят, что им надо интегрироваться с каким-то внешним сервисом. Он дисконтные карточки выпускает, контрагентов заводит, еще что-то делает. То есть какой-то сервис в интернете что-то пишет к нам в базу 1С. Таких сервисов в интернете становится все больше и больше, поэтому с этими задачами мы будем сталкиваться чаще и чаще.


Все сделали, все хорошо. Денечек живем, может быть, два. Через три дня к нам приходит менеджер примерно с таким лицом. Что-то мы не загрузили.



Мы живем недельку, две, три. И живем спокойно. Через пару недель приходит опять менеджер. Говорит, что мы не то что-то загрузили. Им прислали 300 рублей, в мы загрузили 200, клиент недоволен, скандалит.


Менеджера, конечно, мы успокаиваем, даем ей сто рублей. И как бы все хорошо. Менеджер уходит.

Так мы живем примерно месяц, два, три – в зависимости от интенсивности. Через три месяца к нам приходит уже не менеджер, к нам приходит наш несчастный сотрудник техподдержки. Вот с таким лицом.


Он будет говорить: «Парни, я все понимаю, но сделайте что-нибудь, я заколебался уже: нажал кнопочку и жду час». В принципе сотрудники поддержки не сразу приходят, они терпеливые ребята, но когда ждать надо час, они уже приходят. Его мы тоже отпаиваем, он уходит.


Я, может быть, смеюсь, что это такое решение прикольное, глупое. На самом деле эта штука работает, она работает не на одном проекте, не на двух, не на десятке. Оно работает даже на крупных проектах. И в принципе это работать может, и работать будет нормально. С этим можно жить, особо проблем не испытывать. Но зачем?

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


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

Примерно так выглядит типичная интеграция в Mule ESB.


Что здесь делает Mule ESB?

Mule ESB мы используем, скорее, как Middleware, как некую прослойку, не используя мощный функционал шины, потому что у нас не столько систем внутри – не десятки, не сотни. Функционал шины нам не нужен настолько. А нужен функционал Middleware, именно прослойки между интернетом, богатыми сервисами и 1С.


Почему Mule ESB? Был некий market research. Когда мы проанализировали, поняли, что, наверное, он наиболее развитый среди open source. Есть Enterprise версия, которая при необходимости кластеризуется, имеет красивый веб интерфейс. Есть open source версия, которая также замечательно работает без особых проблем. В marketplace для Mule ESB найдется интеграция с кучей разных систем, которые не российские, но, тем не менее, это может упростить в десятки раз работу.


В принципе можно взять какой-то regis, туда закидывать информацию. Для этого любое хранилище подойдет. Но тут вопрос «а зачем»? Если есть испытанная штука, есть богатый веб интерфейс, можно динамически добавлять очереди, есть какой-то мониторинг, кластеризуется, стабильная, быстрая и все круто?


AMQP, конечно, да…Наверное, «кролик» внедряется во имя AMQP. Когда у вас крупный проект, если где-то возникло событие, оно тут же, мгновенно пошло и возникло в другой системе. Это очень быстро, очень «скоростно». И во имя этого AMQP протокола в принципе «кролик» и делался. Нам он не сильно нужен. А городить что-то на сервере 1С своими AMQP тоже не хочется. Поэтому мы используем его вот так. «Кролик» из-за этого, конечно, расстроен, он огорчен, ему грустно. Но ему некуда деваться, работает он стабильно и хорошо.




Это моё лицо, когда я узнаю, что кто-то публикует 1С-сервисы вовне.

У 1С есть такая замечательная штука, как сеансовые данные, которые хранятся в файлах, на диске создаются. Подключение одного сеанса к 1С – это целая жизнь, это создание, не знаю, вселенной практически. Веб-сервис – это просто поток: пришел - ушел в другое место. Все происходит за сотые доли секунды. В 1С это может занимать 10 - 15 - 20 секунд. Соединения устанавливаются долго, лицензии расходуются, лицензии могут получаться тоже долго. И конечно, безопасность. Естественно у каждого в базе 1С есть какой-нибудь пользователь, который с полными правами и без пароля. Либо у него пароль «123». Еще более продвинутый пароль – «123456». Нельзя это публиковать вовне. Все-таки incorporate.


Отладка




Postman. Он круче Fiddler в плане отладки по api. Хорошо работает с заголовками, удобно, отлажено, ничего удобнее, наверное, нет для отладки всего этого дела.


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


Incorporate – все это можно использовать. В Incorporate можно использовать интеграционную шину, и ее можно использовать не только для внешней интеграции, как мы Mule ESB. Если у вас типовые прикладные решения, в которых Enterprise Data уже встроена, если вы их регулярно обновляете, у вас одна и та же версия Enterprise Data, то, пожалуйста, эта схема упрощает вашу жизнь при интеграции в несколько десятков раз. Потому что этот подход более правильный. Конечно, там есть много проблем, есть конвертация 3.0, которую пилят-пилят странным образом, есть Enterprise Data, у которого формат меняется каждый месяц. Но рано или поздно мы победим, наверное. И в мире 1С тоже наступит счастье.

Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2018 EDUCATION. Больше статей можно прочитать здесь.

В 2020 году приглашаем всех принять участие в 7 региональных митапах, а также юбилейной INFOSTART EVENT 2020 в Москве.

Большая часть автоматизированных систем управления имеет в своем составе отдельные базы данных и, нередко, структуру с территориальным распределением. Для качественного использования этих автоматизированных систем необходимо грамотно наладить обмен данными.

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

Узнаем о том, как синхронизировать или, проще говоря, настроить обмен данными в утилите 1С 8.3.

Цели обмена баз данных в 1С

Наладив обмен данными в программе 1С, можно добиться следующих целей:

  • Разграничить различные варианты учета;
  • Быстро актуализировать информацию, требующуюся сотрудникам различных подразделений компании;
  • Наладить связь между распределенными офисами фирмы;
  • Провести автоматизацию смежных бизнес-процедур;
  • Не допустить ошибочного повторного ввода документации.

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

Особенности обмена данных в 1С

Типичная процедура первичного обмена данными в 1С (при условии, что 1С является хотя бы одним из объектов), состоит из таких этапов:

  1. Выделение состава обмена.
  2. Поиск протоколов обмена.
  3. Непосредственный обмен-синхронизация.
  4. Определение правил.
  5. Формирование графика.

Рассмотрим каждый этап подробнее.

Как выявить состав обмена?

Объекты обмена – это приемник и источник. Вместе с тем источник может быть одновременно приемником, и наоборот – в таком случае речь будет идти о двухстороннем обмене. Определить приемника и источника можно, учитывая функционал системы или необходимость. Предположи, при синхронизации созданной на платформе 1С: Предприятие системы управления казначейством и ведения финансового учета «WA: Финансист» специалисты советуют применять ее же как мастер-систему. Это связано с тем, что в программе есть функционал для контроля над соблюдением правил заявочной политики. А значит, работа программы окажется наиболее эффективной.

Определившись и зафиксировав требования пользователей, можно приступать к формированию перечня данных для обмена:

  • Прописать процессы обработки коллизий (исключительных ситуаций) и работы с ошибками;
  • Определиться с требованиями к частоте обмена данными;
  • Выделить объем данных для синхронизации.

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

Новый проект компании-разработчика 1С, позволяющий проводить синхронизацию данных в формате xml между решениями, выполненными на базе 1С: Предприятие, со всеми вариантами систем автоматизации. Выбрав данный формат, можно облегчить доработки, необходимые для проведения обмена данными. Прежде для интегрирования в систему новой конфигурации нужно было экспортировать и импортировать сведения – как в нее, так и в имеющиеся системы. Сейчас же системы, работающие с EnterpriseData, имеют лишь одну область «входа/выхода», и не требуют доработок.

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

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

Определение протоколов обмена (транспорт)

Для решения на базе 1С: Предприятие имеется множество инструментов для синхронизации с любыми информационными сервисами с помощью единых универсальных стандартов - ADO-соединений, Excel, текстовых файлов, xml и других. Решая вопрос с выбором протокола обмена, нужно ориентироваться на возможности базы данных второго участника обмена – сторонней системы.

Синхронизируем справочники

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

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

Определение правил

От того, насколько грамотно определены правила обмена зависит качество отображения информации от источников в системах-приемниках. Правила, оформленные в xml формате, контролируют соответствие главных реквизитов объектов приемника.

Программа 1С: Конвертация данных позволяет автоматизировать разработку правил для постоянного и разового обмена данными. Кроме того, при обмене «План Обмена» она гарантирует отсутствие утраты сведений. Это составляющая всех конфигураций, выполненных на основе 1С: Предприятие, целиком определяющая схему обмена 1С:

  • Информационные базы приемники-передатчики – узлы;
  • Документация с «опознавательными» реквизитами – состав данных;
  • РИБ для определенных направлений обмена.

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

График обмена в 1С

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

Есть несколько факторов, которые на различных этапах реализации процесса обмена данными потребуют доработок:

  • Существенно разный состав и комплекс реквизитов в справочниках;
  • Необходимость в нетиповых правилах синхронизации;
  • Наличие объектов обмена, которые прежде были доработаны;
  • Использование неактуальных, не обновлявшихся длительный срок версий конфигураций;
  • Различные версии 1С: Предприятие;
  • Использование значительно измененных, нестандартных баз данных.

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

Узнаем, как интегрировать базы данных, взяв для примера утилиты 1С: Розница и Управление Производственным Предприятием (аналогичным образом можно будет выполнить настройку обмена с 1С: Управление Торговлей). Кроме того, к стандартному обмену данными относится синхронизация между УПП и УПП, которая выполняется на крупных промышленных предприятиях в случае с масштабными систем автоматизации.

Особенности настройки со стороны 1С: Управление Производственным Предприятием

Обмен данными в 1С

Кликаем на строку «Обмен данными c продуктами…», расположенную в разделе «СЕРВИС» (выбор прямого обмена с РОЗНИЦЕЙ может обернуться ошибками COM-объектов). Появится шаблонное уведомление о том, что «Данная возможность недоступна».

Обмен данными в 1С

Обмен данными в 1С

Поставьте флажок. Теперь на уведомление можно не обращать внимания.

Обмен данными в 1С

Кликаем на «Создать обмен с «Розница» в настройках синхронизации информации

Обмен данными в 1С

Откроется вкладка с предложением синхронизации.

Обмен данными в 1С

Прежде, чем определять параметры подключения через сетевой или локальный каталог, нужно удостовериться, что под каталог достаточно пространства на диске. К слову, чаще всего каталог весит до 50 Мб. Крайне редко ему необходимо до 600 Мб. Оформить нужный каталог можно непосредственно из конфигуратора.

Обмен данными в 1С

Обмен данными в 1С

Если подключение осуществляется через сетевой каталог, на предложения программы выполнить настройку подключения по э-мейл и с помощью адреса FTP можно не обращать внимание. Кликаем на кнопку «ДАЛЕЕ».


Вручную в настройках указываем условные обозначения баз – префиксы (чаще всего РО, УПП, БП), определяем изначальную дату выгрузки сведений и правила. Префикс станет значиться в наименовании документации – для обозначения баз данных, в которых созданы правила. Если вы откажитесь от редактирования правил выгрузки данных, то данные автоматически начнут выгружаться по текущим параметрам программы.


Сводные данные по результатам выполненных мероприятий.


Формируем файл для настройки синхронизации для «РОЗНИЦА» (в дальнейшем это позволит отказаться от повтора действий). Если выполнить отправку данных необходимо сразу после настройки обмена, в соответствующей строке ставим флажок.


Чтобы автоматизировать процедуру синхронизации, нужно провести настройку графика.

Особенности настройки со стороны «РОЗНИЦЫ»



Ставим флажок и кликаем на «Синхронизация».


Выбираем «Управление производственным предприятием» для выполнения «обратной» настройки.



Выгружаем оформленный в УПП файл с настройками.


Ставим флажок. Система автоматически подхватит адрес.


Обмен данными в 1С

Выполняем те же действия, что ранее осуществили в УПП.


Определяем правила для выгрузки данных.


Появляется сводная информация по результатам осуществленных мероприятий.


Обмен данными в 1С


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


Обмен данными в 1С

Если при синхронизации данных возникнет ошибка, фраза «Никогда…» заменит строку «Подробно…»


Строка «Подробно..» открывает журнал регистрации с детализированными данными по синхронизации.


Процедура синхронизации данных в 1С успешно подошла к концу.

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


Встречайте — 1C: Enterprise Development Tools.

Начну с предыстории.

На днях, произошел очень интересный этап в истории развития 1С – была выпущена новая среда разработки под 1С — 1C:Enterprise Development Tools.

1C:EDT – это новая среда для разработки под «1С: Предприятие 8», которая основана на базе открытой платформы Eclipse.
Да, да, да – встречайте, во всех странах СНГ и не только – Eclipse с разработкой на русском языке!
(под катом много больших картинок)

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

«Данная версия не предназначена для полноценной разработки, она может быть использована только для ознакомления с концепциями и технологиями разрабатываемого инструмента, а также для разработки небольших, простых конфигураций».

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

Так как 1С взяли за основу Eclipse, то автоматом получились вот такие требования:


Естественно, что работает все на Windows 8/8.1, однако в этом случае надо Java 8, а не 7.

Однако, теперь разрабатывать можно и в среде Mac OS.

Но, для начала, перед тем как обрадуются поклонники Mac OS, следует немного объяснить принципы работы в Eclipse, в случае 1С – Eclipse, это текстовый редактор, который просто позволяет редактировать xml, в которых описаны объекты 1С, а это значит, что вы работаете не с базой 1С, как это обычно привыкли делать программисты 1С, а только с конфигурацией, которую вы потом обновляете в конкретной базе данных.
А отсюда следует, что разработка под Mac OS, в отличие от Windows и Linux, может заключаться только в редактировании данных, без возможности привычной нам отладки.

Ну и как можно догадаться, без полноценного 1С предприятия и доступа к конфигуратору отладка не получится.
Одно из ключевых преимуществ (как по мне) — к каждой базе теперь можно подключить n-проектов, т.е. ранее мы не могли, работая с одной базой данных, разрабатывать несколько конфигураций. Точнее могли, но тогда надо было бы возиться с двумя (тремя … n) конфигураторами, выгружать и загружать конфигурации, и вообще – каждый конфигуратор, это отдельное окно. Теперь каждый конфигуратор — это, по сути, отдельный проект.

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

На странице скачивания вы выбираете нужную версию 1С, как это делается обычно, и нужную версию 1C:EDT. Обратите внимание, что разрядность EDT и Java должны совпадать, т.е. или оба x86 или оба x64.
Далее необходимо установить саму 1С, если не установите – работать ничего не будет, т.е. нужно установить именно ту версию, которая дается на этой странице.

После этого надо разархивировать архив com._1c.g5.v8.dt.rcp-win32.win32.x86_64, и можно приступать к работе в Eclipse. Для этого достаточно запустить файл dt.exe. Но, перед запуском – удостоверьтесь, что у вас более 4Гб оперативки, так как со стандартными настройками – виртуальная машина отъедает 3Гб, если у вас меньше оперативки, то можно изменить настройки в файле dt.ini, там есть такая строка -Xmx3072m, вот число – это объем памяти, меньше 2Гб лучше не ставить, а то чревато ошибкой Out of memory.

Сам по себе архив – это компиляция Eclipse с предустановленными плагинами. Т.е. в данном случае не получится подключить свои плагины и настройки из стандартной версии Eclipse, как это можно сделать в случае разработки под Android, когда просто мы указываем путь, выбираем нужные объекты и Eclipse автоматом все настраивает и обновляет. Но, я думаю, что 1С и это вскоре сделает.Первый запуск будет долгий, и так будет всегда, увы, так как создается виртуальная среда, которая после выхода – уничтожается. Но, с другой стороны, это не большая проблема, так как вам для работы с разными базами не надо будет открывать 100500 вариантов Eclipse.

При запуске вы увидите вот такое красивое окошко:


Итак, после запуска – для тех, кто раньше работал в Eclipse, — не будет ничего особо нового. Интерфейс по умолчанию выглядит вот так:


Тут сразу видно, что появились новые перспективы:


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

Там же и происходит управление веб-сервером:


Тут ничего особенного, тут обычные настройки, которые необходимы для публикации базы. Причем все на английском. Вообще тут надо привыкнуть, ибо интерфейс русско-английский, ну и конечно – это в будущем исправят.

Теперь можно добавить конфигурацию в проект:


Для этого ее необходимо импортировать. После импорта, те базы, конфигурации которых у вас импортированы, будут иметь дополнение в наименовании в фигурных скобках, как в данном случае.

Далее нам станут доступны объекты этой конфигурации, и мы ее увидим уже в привычном нам виде:


Увы, но на текущий момент недоступно слишком много свойств и объектов. Однако это совершенно не мешает разрабатывать простенькие конфигурации, например, для мобильной платформы 1С.

Вот так выглядит форма документа:


Стоить отметить, что в целом – 1С сумели сохранить привычный всем вид рисования форм. Но и добавили несколько плюшек (или это баги?). Например, ранее – добавляя поле на форму – мы не видели его тип, и это не страшно, когда вопрос касался примитивных типов. Но когда начинаешь указывать ссылки, то можно и запутаться, особенно когда форма достаточно большая, и в ней существует несколько вариантов отображения данных, в зависимости от начальных условий. Особенно это касается новых конфигураций (например, УНФ).
А тут нам сразу указывается и тип, ну не чудесно ли? Осталось надеяться, что это не баг :)

Ну пока формы кривоваты, но тем не менее, для альфа релиза – я ожидал худшего.

Теперь я подключу другую конфигурацию, и посмотрим какой-то код:


Как видно – теперь вполне одновременно можно работать с разными объектами разных конфигураций в одной среде, слева доступен список функций и процедур, список поделен по областям (которые в стандартном конфигураторе чуть более чем бесполезные).

Выделяются экспортные функции, параметры, и подсвечивается текущая функция, в которой вы находитесь, для примера, вот так это выглядело ранее:


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

А это в свою очередь значит, что получен удобный механизм, когда разработчикам 1С больше не надо тягать базы к себе на компы, потому что обычно среда тестового сервера не располагает всеми возможностями, которые есть на своих компьютерах. Да и каждый раз прыгать от сервера к серверу – было не круто.

Теперь можно управлять кучей серверов, удаленно отлаживать данные, работать в своей среде на своем компьютере. К тому же 1С сделали возможность зашифровать канал передачи данных (на что, увы, 99% 1Сников и админов не обратят внимания).

Кроме этого всего – 1С подключили плагины для работы с git. Так что вскоре, для всех тех, кто страдает от работы с хранилищем конфигураций, можно будет смело перейти на git. Описывать работу с гитхабом я смысла не вижу, там «все как обычно».

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

Но, на фоне того, что 1С начала работать вплотную над проектом EDT, они были вынуждены сделать несколько решений, которые они все-таки внедрили в старый добрый конфигуратор:


Я думаю рассказывать тут особо нечего, все понятно из скрина.

Таким образом, случилось то, чего боялись большинство программистов «не 1С» — русский язык идет в ваши ряды :)

С другой стороны, для программистов 1С – это большой скачок в развитии. Теперь уже порог входа немного увеличился, и, я думаю, немалая часть программистов отвалится, оставшись на старых версиях конфигуратора, как это было с 7.7. Но те, кто смогут осилить новые парадигмы и принципы – будут вознаграждены тем, что научаться работать в популярной среде. А значит, переключаться между разными языками программирования будет намного проще. А, как все однэсники знают – мы одним 1С не ограничиваемся, ибо вечно надо что-то допилить на JS,VBS, SQL, Bash, HTML, а с выходом мобильной платформы – надо будет еще писать и под Андроид, а тут все это в одном флаконе устроить можно будет.

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

Так что жди, мир! Мы идем!

P.S. Специально для тех, кто очень хочет увидеть русский язык в Eclipse и рассказать о том, что программировать на русском – это убожество, то прошу под спойлер:

Берегите глаза

Тут очень хорошо видно, как удобно реализованы области.


А вот так реализована отладка. При чем localhost с портом (слева вверху) как бы намекает на то, что там может стоять ip адрес другого компа.

Читайте также: