<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:yandex="http://news.yandex.ru" xmlns:turbo="http://turbo.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Экспертный блог</title>
    <link>http://exploredata.ru</link>
    <description>Экспертный блог о проектах автоматизации</description>
    <language>ru</language>
    <lastBuildDate>Sun, 22 Mar 2026 21:29:29 +0300</lastBuildDate>
    <item turbo="true">
      <title>Практика и рекомендации по восстановлению больших (3-5гб) бэкапов в Optimacros</title>
      <link>http://exploredata.ru/blog/tpost/2htb981r11-praktika-i-rekomendatsii-po-vosstanovlen</link>
      <amplink>http://exploredata.ru/blog/tpost/2htb981r11-praktika-i-rekomendatsii-po-vosstanovlen?amp=true</amplink>
      <pubDate>Sat, 19 Jul 2025 13:29:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Бэклог вместо новостей</category>
      <description>При переносе модели Optimacros внутри защищённого интранета важно избежать выгрузки бэкапа на локальный ПК. Рассказываем, как безопасно и быстро восстановить крупную модель прямо внутри инфраструктуры заказчика.</description>
      <turbo:content><![CDATA[<header><h1>Практика и рекомендации по восстановлению больших (3-5гб) бэкапов в Optimacros</h1></header><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Проблематика</span></h3><div class="t-redactor__text">В ряде практических сценариев возникает необходимость переноса резервной копии модели Optimacros (бэкапа) с одной виртуальной машины на другую в пределах защищённого интранета заказчика. Типичным примером служит начальное разделение модели на контуры разработки (DEV) и промышленной эксплуатации (PROD), когда исходная модель должна быть восстановлена в новой среде.</div><div class="t-redactor__text">Если размер модели значителен (например, 3–5 ГБ и более), то использование стандартного подхода – загрузка бэкапа на локальный персональный компьютер, а затем повторная отправка на удалённый сервер для восстановления – становится проблемным. Это требует времени и хорошей пропускной способности сети, особенно если подключение осуществляется через VPN или скорость обмена ограничена политиками безопасности. Кроме того, подобный процесс зачастую противоречит требованиям информационной безопасности: резервные копии могут содержать персональные, конфиденциальные или чувствительные бизнес-данные, которые запрещено копировать на локальные устройства сотрудников.</div><div class="t-redactor__text">В подобных случаях наилучшей практикой является работа с бэкапами исключительно в рамках инфраструктуры заказчика, без выгрузки за пределы защищённой сети. Это позволяет минимизировать риски, соблюдать требования внутреннего контроля и существенно сократить общее время переноса и восстановления модели.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Подключение к удалённой машине через SSH-клиент (на примере MobaXterm)</span></h3><div class="t-redactor__text">Одним из удобных и функциональных клиентов для подключения к Linux-серверам из среды Windows является MobaXterm. Он сочетает в себе функциональность терминала, графического интерфейса и встроенного X-сервера, что делает его удобным для работ, описанных в настоящей статье.</div><div class="t-redactor__text">Cкачать MobaXterm можно с официального сайта: <a href="https://mobaxterm.mobatek.net" target="_blank" rel="noreferrer noopener" style="color: rgb(130, 170, 69); border-bottom: 1px solid rgb(130, 170, 69); box-shadow: none; text-decoration: none;">https://mobaxterm.mobatek.net</a></div><div class="t-redactor__text">После установки и запуска MobaXterm выполните следующие шаги для подключения:<br /><br />① Нажмите кнопку <span style="background-color: rgba(130, 170, 69, 0.39);">Sessions (Сеансы) → New Session (Новая сессия) → выберите SSH</span>.<br />② Введите следующие данные (их необходимо запросить у администратора заказчика):<br /><ul><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">Remote host</span> (адрес удалённого сервера)</li><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">Port</span> (по умолчанию используется 22, но в инфраструктуре заказчика может быть другой)</li><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">Username </span>(логин для подключения)</li><li data-list="bullet">Метод аутентификации:</li></ul>∘ По логину и паролю: выбрать опцию “<span style="background-color: rgba(130, 170, 69, 0.39);">Specify username</span>” и ввести логин; пароль будет запрошен при подключении.<br />∘ По приватному ключу (Private Key): выбрать “<span style="background-color: rgba(130, 170, 69, 0.39);">Use private key</span>”, указать путь к .pem или .ppk файлу. Важно удостовериться, что ключ не защищён паролем или пароль известен.<br />③ Дополнительные настройки, которые понадобятся на следующих шагах работы с подключением:<br /><ul><li data-list="bullet">Убедитесь, что опция X11-Forwarding включена (если потребуется запуск графических окон).</li><li data-list="bullet">Проверьте, что X-сервер активен: в правом верхнем углу MobaXterm иконка с буквой X должна быть подсвечена. Это необходимо для работы с утилитами, использующими графический интерфейс.</li></ul></div><img src="https://static.tildacdn.com/tild3237-6630-4361-b734-336565636637/image.png"><div class="t-redactor__text">Подключившись к серверу, вы получите доступ к терминалу удалённой Linux-машины, откуда можно будет управлять файлами, проверять наличие резервных копий и выполнять команды восстановления.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Копирование бэкапа модели</span></h3><div class="t-redactor__text">Перед восстановлением модели в новой среде необходимо определить местоположение исходного бэкапа, а затем перенести файл резервной копии на целевой сервер. В Optimacros файлы бэкапов хранятся внутри установочного каталога платформы, структура которого имеет типовые особенности.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Где находится бэкап модели</span></h4><div class="t-redactor__text">Как правило, программные компоненты Optimacros устанавливаются в <a href="null" style="color: rgb(2, 2, 2);">директори</a>ю <span style="background-color: rgba(130, 170, 69, 0.39);">/om</span>. Иногда используется путь <span style="background-color: rgba(130, 170, 69, 0.39);">/opt/om</span>, в более редких случаях — другие пользовательские каталоги. Внутри <span style="background-color: rgba(130, 170, 69, 0.39);">/om</span> можно найти следующие ключевые подкаталоги:<br /><br /><ul><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">./docker</span><span style="background-color: rgba(255, 255, 255, 0.39);"> — платформа контейнеризации, внутри которой развёрнут Login Center;</span></li><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">./login-center</span><span style="background-color: rgba(255, 255, 255, 0.39);"> — установочные файлы Login Center;</span></li><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">./lxc</span><span style="background-color: rgba(255, 255, 255, 0.39);"> — контейнерная система виртуализации Linux, в рамках которой запускаются рабочие окружения workspaces;</span></li><li data-list="bullet"><span style="background-color: rgba(130, 170, 69, 0.39);">./workspace-installer</span><span style="background-color: rgba(255, 255, 255, 0.39);"> — установщик воркспейсов.</span></li></ul><br />Также в каталоге <span style="background-color: rgba(130, 170, 69, 0.39);">/om</span> располагаются директории с развернутыми воркспейсами. Они могут называться, например: <span style="background-color: rgba(130, 170, 69, 0.39);">./workspace1, ./workspace2, ./prod, ./test </span>и др. Названия директорий совпадают с именами воркспейсов, отображаемыми в интерфейсе Login Center.<br /><br />Внутри каждого воркспейса резервные копии моделей хранятся по следующему пути:<br /><br /><span style="background-color: rgba(130, 170, 69, 0.39);">/om/&lt;имя_воркспейса&gt;/data/modelBackups/&lt;model_ID&gt;</span></div><div class="t-redactor__text">Имя каталога с бэкапами совпадает с ID Модели. Последний можно получить:<br /><br /><span style="color: rgb(130, 170, 69);">➔</span> <em>В URL-адресе открытой модели,</em><br /><span style="color: rgb(130, 170, 69);">➔</span> <em>В мульткубе </em><strong><em>Variables </em></strong><em>внутри модели</em><strong><em>:</em></strong></div><img src="https://static.tildacdn.com/tild3931-3161-4331-b633-373331643438/image.png"><div class="t-redactor__text"><span style="color: rgb(130, 170, 69);">➔</span> <em>В административной панели Login Center</em></div><img src="https://static.tildacdn.com/tild6130-3661-4964-b034-663035656539/image.png"><div class="t-redactor__text"><em>Находим имя целевого каталога в modelBackups:</em></div><img src="https://static.tildacdn.com/tild3138-3166-4564-a632-383831646365/image.png"><div class="t-redactor__text">Таким образом полный путь к файлам бэкапов будет выглядеть примерно следующим образом:<br /><br /><span style="background-color: rgba(130, 170, 69, 0.39);">/om/workspace1/data/modelBackups/d7f6ab2c016e8fff9d862eb24ab6697c</span><br /><br />Для просмотра списка бэкапов необходимо открыть SSH-консоль, перейти в нужный каталог, выполнив команды:<br /><br /><span style="background-color: rgba(130, 170, 69, 0.39);">cd /om/workspace1/data/modelBackups/d7f6ab2c016e8fff9d862eb24ab6697c</span><br /><span style="background-color: rgba(130, 170, 69, 0.39);">Is-It</span></div><img src="https://static.tildacdn.com/tild6565-3164-4530-b934-326662366239/image.png"><div class="t-redactor__text">Файлы бэкапов имеют формат:<br /><br /><span style="background-color: rgba(130, 170, 69, 0.39);">YYYY-MM-DD_HH-MM-SS_&lt;номер&gt;.zip</span></div><div class="t-redactor__text">Ориентироваться удобно по дате создания и номеру бэкапа, который соответствует ID резервной копии в административной панели.</div><img src="https://static.tildacdn.com/tild6464-6130-4366-a263-376530646563/image.png"><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Перенос бэкапа на целевой сервер</span></h4><div class="t-redactor__text">Следующим шагом необходимо перенести архив .zip с резервной копией на целевую машину (например, сервер PROD). Для этого можно использовать стандартные средства Linux — утилиты scp или sftp.<br /><br />Директорией для копирования на сервере-приёмнике может являться <span style="background-color: rgba(130, 170, 69, 0.39);">/tmp</span> или другая доступная пользователю SSH (не под root!) папка.<br /><br />Примеры команд для копирования на удаленный сервер <span style="background-color: rgba(130, 170, 69, 0.39);">10.0.144.105</span>, в директорию-приемник <span style="background-color: rgba(130, 170, 69, 0.39);">/tmp:</span><br /><br /><em>Утилита scp:</em><br /><br /><span style="color: rgb(3, 3, 3); background-color: rgba(130, 170, 69, 0.39);">scp "/om/workspace1/data/modelBackups/d7f6ab2c016e8fff9d862eb24ab6697c/2025-05-02_12-04-22_1339.zip" </span><a href="mailto:root@10.0.144.105:/tmp" style="color: rgb(3, 3, 3); background-color: rgba(130, 170, 69, 0.39);">root@10.0.144.105:/tmp</a><br /><br /><em>Утилита sftp:</em><br /><br /><span style="background-color: rgba(130, 170, 69, 0.39);">sftp</span><span style="background-color: rgba(130, 170, 69, 0.39); color: rgb(3, 3, 3);"> </span><a href="mailto:root@10.0.144.105" style="color: rgb(3, 3, 3); background-color: rgba(130, 170, 69, 0.39);">root@10.0.144.105</a><br /><span style="background-color: rgba(130, 170, 69, 0.39);">sftp&gt; cd /tmp</span><br /><span style="background-color: rgba(130, 170, 69, 0.39);">sftp&gt; lcd /om/workspace1/data/modelBackups/d7f6ab2c016e8fff9d862eb24ab6697c</span><br /><span style="background-color: rgba(130, 170, 69, 0.39);">sftp&gt; put 2025-05-02_12-04-22_1339.zip</span><br /><span style="background-color: rgba(130, 170, 69, 0.39);">sftp&gt; bye</span><br /><br />После завершения копирования необходимо изменить владельца файла на пользователя, под которым работает воркспейс. Например:<br /><br /><span style="background-color: rgba(130, 170, 69, 0.39);">chown optimacros_workspace:optimacros_workspace "/tmp/2025-05-02_12-04-22_1339.zip"</span></div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Запуск Google Chrome на удаленном сервере</span></h3><div class="t-redactor__text">Восстановление бэкапа в модели удаленного сервера подразумевает загрузку информации о нем во внутреннюю базу данных Optimacros (подробнее см. раздел <strong>Восстановление бэкапа</strong>). Поскольку работа с административной панелью происходит через пользовательский браузер, при нажатии кнопки <span style="background-color: rgba(130, 170, 69, 0.39);">Browse</span><span style="background-color: rgba(255, 255, 255, 0.39);"> </span>отображается локальная файловая система пользователя, а не целевого сервера. Чтобы выбрать файл, расположенный на сервере, необходимо открыть браузер непосредственно в среде удалённой машины.<br /><br />Для этих целей используется технология X11-forwarding — механизм, позволяющий запускать графические приложения на удалённой машине, но отображать их окна на локальном компьютере. Этот механизм работает через X Server — компонент, обрабатывающий графический вывод в системах на базе UNIX и Linux.<br /><br />Если вы используете MobaXterm в Windows, X Server встроен в приложение и запускается автоматически. Главное условие – X-сервер должен быть активен (иконка с буквой X в правом верхнем углу интерфейса должна быть подсвечена), а при подключении по SSH включена опция X11-forwarding.<br /><br />Ниже приведена пошаговая инструкция по запуску браузера Google Chrome с удалённого сервера в окружении Debian/Ubuntu.</div><div class="t-redactor__text">① Проверяем установку Google Chrome:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">dpkg -l | grep google-chrome</span><br /><br />② Если команда возвращает пустую строку, значит браузер не установлен. В этом случае скачиваем дистрибутив:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">cd /tmp</span><br />	<span style="background-color: rgba(130, 170, 69, 0.39);">wget </span><a href="https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" target="_blank" rel="noreferrer noopener" style="color: rgb(5, 5, 5); border-bottom: 1px solid rgb(3, 3, 3); box-shadow: none; text-decoration: none; background-color: rgba(130, 170, 69, 0.39);">https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb</a><br /><br />③ Проактивно исправляем<strong> </strong>нарушенные зависимости пакетов (если таковые имеются) и устанавливаем скаченный пакет:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">sudo apt-get install -f</span><br />	<span style="background-color: rgba(130, 170, 69, 0.39);">sudo dpkg -i google-chrome-stable_current_amd64.deb</span><br /><br />④ Проверяем, что SSH-соединение поддерживает X11-forwarding.<br />	На удалённом сервере открываем файл:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">cat /etc/ssh/sshd_config</span><br /><br />	И убеждаемся, что в файле содержит следующие строки (и они не закомментированы):<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">X11Forwarding yes</span><br />	<span style="background-color: rgba(130, 170, 69, 0.39);">X11DisplayOffset 10</span><br />	<span style="background-color: rgba(130, 170, 69, 0.39);">X11UseLocalhost yes</span><br /><br />	Если это не так, запускаем<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">nano /etc/ssh/sshd_config</span><br />	и раскомментируем нужные строки.<br /><br />	После изменения конфигурации необходимо перезапустить SSH-сервис:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">sudo systemctl restart sshd</span><br /><br />⑤ <a href="null" style="color: rgb(5, 5, 5);">Если все операции выше делались под</a><a href="https://feeds.tilda.ru/posts/null"> </a>root <span style="background-color: rgba(130, 170, 69, 0.39);">(sudo -i, sudo -s)</span>, рекомендуется вернуться к первоначальной учётной записи, под которой было установлено SSH-соединение:<br /><span style="background-color: rgba(130, 170, 69, 0.39);">exit</span><br /><br />⑥ Далее запускаем браузер:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">google-chrome-stable --no-sandbox</span></div><div class="t-redactor__text">Если всё настроено корректно, окно браузера откроется на вашем локальном компьютере, но будет работать в контексте удалённого сервера. Благодаря этому возможно просматривать его файловую систему и выбрать нужный .zip-файл для восстановления модели.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Восстановление бэкапа</span></h3><div class="t-redactor__text">Процедура восстановления модели из резервной копии выполняется через административную панель Optimacros на целевом сервере. На этом этапе важно, чтобы файл бэкапа уже находился на сервере-приёмнике (см. раздел «<strong>Копирование бэкапа модели</strong>»), а интерфейс админ панели открыт либо локально через X11-forwarding.<br /><br />Пошаговая инструкция восстановления:<br /><br />① Создайте модель, в которой вы хотите восстановить бэкап.<br />② В административной панели выберите: <span style="background-color: rgba(130, 170, 69, 0.39);">Models → General → Open “</span><em style="background-color: rgba(130, 170, 69, 0.39);">Имя_модели</em><span style="background-color: rgba(130, 170, 69, 0.39);">” → Backups → «Загрузить файл из резервной копии»</span><br />③ В открывшемся файловом диалоге выберите .zip-файл бэкапа из локальной файловой системы сервера:</div><img src="https://static.tildacdn.com/tild6231-6365-4862-b431-653131313061/image.png"><div class="t-redactor__text">После выбора нажмите кнопку «Загрузить»<br /><br />④ После завершения загрузки перейдите во вкладку:<br /><span style="background-color: rgba(130, 170, 69, 0.39);">Restore → «Восстановить из последней резервной копии»</span><br />Нажмите кнопку «Восстановить» и дождитесь завершения процедуры.<br /><br /><em>Примечание: </em>В новых версиях появилась возможность объединить загрузку бэкапа и восстановление его в модель через: <span style="background-color: rgba(130, 170, 69, 0.39);">Models → General → Open “</span><em style="background-color: rgba(130, 170, 69, 0.39);">Имя_модели</em><span style="background-color: rgba(130, 170, 69, 0.39);">” → Restore→ «Восстановить из файла резервной копии»</span>, однако не во всех версиях эта функция работает корректно.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Решение проблем (Troubleshooting)</span></h3><div class="t-redactor__text">В зависимости от технического окружения – используемого дистрибутива Linux, установленного программного обеспечения, конфигураций, размера бэкапа и т.д. – при выполнении шагов, описанных в настоящей статье, могут возникнуть дополнительные сложности. В этом разделе описаны наиболее возможные проблемы и способы их устранения.<br /><br />➜ <strong>Проблема с переключением раскладки клавиатуры в режиме X11.</strong><br /><br />Если при запуске Google Chrome на удалённом сервере через X11-forwarding не удаётся переключить раскладку клавиатуры (например, на русский или английский языки), выполните следующие действия:<br /><br />В консоли удалённой машины выполните команду для установки вспомогательных утилит:<br /><span style="background-color: rgba(130, 170, 69, 0.39);">sudo apt install x11-xkb-utils</span><br /><br />Затем настройте переключение раскладки клавиатуры сочетанием клавиш Alt+Shift:<br /><span style="background-color: rgba(130, 170, 69, 0.39);">setxkbmap -layout ru,us -option grp:alt_shift_toggle</span><br /><br />При необходимости, эту команду можно сохранить в настройках SSH-сессии в MobaXterm, указав её в поле Execute command при создании подключения. Это позволит автоматически применять раскладку при каждом входе на сервер:</div><img src="https://static.tildacdn.com/tild3337-6363-4732-b838-626636313932/image.png"><div class="t-redactor__text">➜ <strong>Ошибка при восстановлении большого бэкапа</strong><br /><br />При восстановлении архивов модели размером более 1 ГБ в административной панели Optimacros может возникнуть ошибка, связанная с превышением лимита на размер загружаемого файла:</div><img src="https://static.tildacdn.com/tild6563-6363-4461-a162-666632613532/image.png"><div class="t-redactor__text">Ошибка характерна для некоторых версий ПО и возникает из-за ограничений, установленных в конфигурации PHP внутри контейнера воркспейса.<br /><br />Для устранения проблемы выполните следующие шаги:<br /><br />①<strong style="color: rgb(130, 170, 69);"> </strong>Получаем список активных контейнеров с вокрспейсами:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">lxc-ls</span></div><img src="https://static.tildacdn.com/tild3932-6430-4336-b137-643261336566/image.png"><div class="t-redactor__text">② Подключаемся к нужному контейнеру:<br />	<span style="background-color: rgba(130, 170, 69, 0.39);">lxc-attach </span><em style="background-color: rgba(130, 170, 69, 0.39);">имя_контейнера</em></div><div class="t-redactor__text"><strong> </strong>③ Внутри контейнера редактируем конфигурационный файл:<br /><span style="background-color: rgba(130, 170, 69, 0.39);">root@workspace-box&gt; nano /etc/php/8.1/fpm/pool.d/optimacros.conf</span></div><div class="t-redactor__text">④ С помощью сочетания Ctrl+W находим строку с параметром <span style="background-color: rgba(130, 170, 69, 0.39);">upload_max_filesize:</span></div><img src="https://static.tildacdn.com/tild3638-6230-4662-b237-633261383635/image.png"><div class="t-redactor__text">Для следующих параметров устанавливаем значение 0 (без ограничения по размеру):<br /><span style="background-color: rgba(130, 170, 69, 0.39);">php_admin_value[upload_max_filesize] = 0</span><br /><span style="background-color: rgba(130, 170, 69, 0.39);">php_admin_value[post_max_size] = 0</span><br />Сохраняем изменения и закрываем редактор (Ctrl+O, Enter, затем Ctrl+X).</div><div class="t-redactor__text">⑤<strong style="color: rgb(130, 170, 69);"> </strong>Перезапускам службы и выходим из контейнера:<br /><span style="background-color: rgba(130, 170, 69, 0.39);">systemctl restart php8.1-fpm nginx</span><br /><span style="background-color: rgba(130, 170, 69, 0.39);">exit</span></div><div class="t-redactor__text">⑥ Возвращаемся к шагу 2 раздела <strong>Восстановление бэкапа</strong> и повторяем попытку загрузки.</div>]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Интеграции внешних систем с Optimacros через корпоративную шину данных</title>
      <link>http://exploredata.ru/blog/tpost/o4bgfdu3u1-integratsii-vneshnih-sistem-s-optimacros</link>
      <amplink>http://exploredata.ru/blog/tpost/o4bgfdu3u1-integratsii-vneshnih-sistem-s-optimacros?amp=true</amplink>
      <pubDate>Mon, 21 Jul 2025 15:50:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Бэклог вместо новостей</category>
      <description>С развитием IT-инфраструктуры и внедрением новых систем перед компаниями всё острее встаёт задача интеграции их для эффективного обмена данными. Чем масштабнее "парк" решений в IT-ландшафте компании, тем сложнее поддерживать устойчивую интеграцию.
</description>
      <turbo:content><![CDATA[<header><h1>Интеграции внешних систем с Optimacros через корпоративную шину данных</h1></header><h3  class="t-redactor__h3"><a href="null" style="color: rgb(130, 170, 69);">Шина данных (Enterprise Service Bus) vs Прямая интеграция (Point-to-Point)</a></h3><div class="t-redactor__text">С развитием IT-инфраструктуры и внедрением новых информационных систем перед компаниями всё острее встаёт задача интеграции этих систем для эффективного обмена данными. Чем масштабнее становится "парк" информационных решений в IT-ландшафте организации, тем сложнее поддерживать устойчивую и управляемую интеграцию между ними.<br /><br />В случае применения концепции прямой интеграции (Point-to-Point) каждая система строит отдельные каналы обмена данными со всеми другими системами. При таком подходе количество связей растёт экспоненциально: для N систем требуется организовать N*(N-1)/2 индивидуальных соединений, чтобы обеспечить их полное взаимодействие. Это приводит к высокой сложности архитектуры, затрудняет её развитие и сопровождение.<br /><br />На практике внедрение новых систем и построение интеграций часто происходит постепенно, без единого архитектурного плана. Используются различные стандарты передачи данных, разные протоколы интеграции, решения разрабатываются разными подрядчиками в разные периоды времени. Такое "стихийное" развитие инфраструктуры приводит к росту затрат на поддержку, усложняет мониторинг состояния интеграций и повышает требования к квалификации сопровождающих команд.<br /><br />Одним из вариантов решения проблемы является имплементация концепции шины данных (Enterprise Service Bus, или ESB). При такой схеме все системы подключаются к единому центру (шине), через который и происходит взаимодействие. Таким образом, количество необходимых соединений сокращается с N*(N-1)/2 до N, что значительно упрощает архитектуру интеграции, снижает стоимость её поддержки и позволяет быстрее подключать новые системы к существующему IT-ландшафту.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Протоколы и форматы данных</span></h4><div class="t-redactor__text">Одной из основ интеграции через шину данных являются универсальные транспортные протоколы, такие как HTTP и HTTPS, обеспечивающие надёжный обмен данными по вебу. Для построения асинхронного взаимодействия между системами применяются также специализированные протоколы обмена сообщениями, например, AMQP и MQTT, которые позволяют реализовать очереди сообщений и событийную архитектуру.<br /><br />Не менее важным элементом являются стандарты взаимодействия с ресурсами и сервисами. Наиболее широко распространены REST — легковесный архитектурный стиль работы через HTTP, и SOAP — формализованный протокол обмена сообщениями в формате XML, обеспечивающий строгую структуру и стандартизацию взаимодействий.<br /><br />Для передачи содержимого сообщений в интеграциях применяются универсальные форматы данных. JSON, благодаря своей компактности, удобочитаемости и простоте обработки, стал фактическим стандартом в большинстве современных систем. В тех случаях, когда требуется строгое описание структуры данных, валидация по схемам и совместимость с формальными протоколами, используется XML.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Сравнение подходов</span></h4><div class="t-table__viewport"><div class="t-table__wrapper"><table class="t-table__table" style="border-color:rgb(130, 170, 69);"><tbody><tr class="t-table__row" style="color:rgb(1, 1, 1);background-color:rgba(130, 170, 69, 0.39);"><td class="t-table__cell" data-row="0" data-column="0" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">          Критерий	</div></td><td class="t-table__cell" data-row="0" data-column="1" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">                       Шина данных (ESB)	</div></td><td class="t-table__cell" data-row="0" data-column="2" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">             Прямая интеграция (Point-to-Point)</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="1" data-column="0" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Сложность настройки</div></td><td class="t-table__cell" data-row="1" data-column="1" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Выше на начальном этапе из-за необходимости проектирования архитектуры шины</div></td><td class="t-table__cell" data-row="1" data-column="2" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Минимальная на старте, быстрое подключение новых систем на малых объёмах</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="2" data-column="0" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Масштабируемость</div></td><td class="t-table__cell" data-row="2" data-column="1" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Лёгкое подключение новых систем без изменения существующих связей</div></td><td class="t-table__cell" data-row="2" data-column="2" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">С каждым новым подключением сложность растёт экспоненциально</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="3" data-column="0" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Управляемость</div></td><td class="t-table__cell" data-row="3" data-column="1" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Централизованная маршрутизация, мониторинг и обработка ошибок</div></td><td class="t-table__cell" data-row="3" data-column="2" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Распределённая архитектура, где каждая связь требует отдельного контроля</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="4" data-column="0" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Асинхронность</div></td><td class="t-table__cell" data-row="4" data-column="1" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Поддержка асинхронных сообщений через брокеры или внутренние механизмы шины</div></td><td class="t-table__cell" data-row="4" data-column="2" style="border-color:rgb(130, 170, 69);"><div class="t-table__cell-content">Преимущественно синхронное взаимодействие</div></td></tr></tbody><colgroup><col style="max-width:150.516px;min-width:150.516px;width:150.516px;"><col style="max-width:282.719px;min-width:282.719px;width:282.719px;"><col style="max-width:284.75px;min-width:284.75px;width:284.75px;"></colgroup></table></div></div><div class="t-redactor__text">Таким образом, прямая интеграция может быть эффективной на ранних этапах или при небольшом числе систем, но по мере роста инфраструктуры почти неизбежно приводит к хаосу и усложнению сопровождения. Шина данных, напротив, требует продуманной начальной архитектуры, но обеспечивает устойчивость, управляемость и лёгкость развития интеграционных связей в долгосрочной перспективе.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Принцип событийной интеграции через ESB</span></h3><div class="t-redactor__text">Событийная интеграция — это архитектурный подход, при котором системы обмениваются сообщениями не в ответ на прямой запрос, а при наступлении определённых событий. Такие события соответствуют хозяйственным операциям, зарегистрированным в ИТ-системах. Они служат триггером для запуска интеграционных процессов.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Генерация события источником</span></h4><div class="t-redactor__text">Процесс событийной интеграции начинается с того, что система-источник (например, ERP, MDM или HR-система) генерирует событие. Это может быть любое бизнес-событие: регистрация нового контрагента, создание заказа, приём на работу сотрудника.<br /><br />С точки зрения шины данных, каждое событие представляет собой структурированные данные в формате JSON или XML, включающие обязательные параметры: тип события, временную метку (timestamp), уникальные идентификаторы и бизнес-данные.<br /><br />События могут передаваться в шину данных с использованием REST API-запросов, брокеров сообщений или иных поддерживаемых протоколов. На этапе приёма в шине может происходить первичная валидация и преобразование события для дальнейшей маршрутизации.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Трансформация тела события</span></h4><div class="t-redactor__text">Внутри шины данных может потребоваться привести событие к единому стандарту: изменение имен полей, пересчет единиц измерения, удаление лишних атрибутов или обогащение данных дополнительной информацией. Эти процессы позволяют стандартизировать сообщения перед передачей в системы-получатели.<br /><br />Однако на практике трансформацию данных может также осуществлять и система-источник и система-приемник.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Маршрутизация события</span></h4><div class="t-redactor__text">На следующем этапе ESB анализирует содержимое события и определяет, каким целевым системам оно должно быть доставлено. Решение о маршрутизации может базироваться на типе события, значениях заголовков сообщений, специальных фильтрах или перенастроенных правилах бизнес-логики.<br /><br />Важно отметить, что одно событие может одновременно отправляться нескольким получателям, каждый из которых получит только те данные и в том формате, который ему необходим.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Отправка в целевые системы</span></h4><div class="t-redactor__text">После определения маршрута шина данных преобразует событие в формат, ожидаемый системой-получателем, и отправляет его через REST API или другие предусмотренные интерфейсы. Для каждой системы может быть настроен собственный REST-endpoint, специфическая схема данных и механизм аутентификации.</div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Подтверждение доставки и мониторинг</span></h4><div class="t-redactor__text">После отправки события шина данных переходит к этапу контроля доставки. Для подтверждения успешной обработки сообщения системой-получателем, как правило, используется HTTP-ответ со статусом 200 OK, но может использоваться иной согласованный механизм подтверждения.<br /><br />Если в процессе доставки возникает ошибка — например, целевая система оказывается временно недоступна, либо возвращает ошибку формата или авторизации — событие автоматически фиксируется и помещается в очередь повторной отправки. Одновременно информация о сбое регистрируется в логах системы, что позволяет оперативно проанализировать проблему и устранить её причину без потери данных.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Настройка API Service в Оптимакрос</span></h3><div class="t-redactor__text">API Service в Optimacros — это механизм для организации внешнего доступа к функциональности моделей воркспейса через WEB API.<br /><br />Работа API Service устроена следующим образом. Для каждого API сервиса задаются параметры: имя, алиас, ссылка на модель и ссылка на управляющий скрипт. Управляющий скрипт обрабатывает входящие запросы: принимает данные, выполняет нужные операции с моделью (см. раздел Реализация скрипта-контроллера) и возвращает ответ клиенту.<br /><br />Детальная инструкция по принципам работы и настройке API Service приведена в <strong>Разделе 3.10 Руководства администратора Workspace</strong>. В этом же разделе можно найти примеры управляющего скрипта. Последний удобно использовать для отладки соединения с клиентом и анализа содержимого запросов клиента, однако он не подойдет для промышленной реализации управляющего скрипта или так называемого скрипта-контроллера.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Реализация скрипта-контроллера</span></h3><div class="t-redactor__text">Скрипт-контроллер или управляющий скрипт связывается с API Service Оптимакрос и первый принимает на себя управление поступившим на http-запросом. Запросы могут иметь разные методы (GET, POST и др.), содержать URL-параметры запроса, тело запроса или приложенные к запросу файлы (для POST). Назначение запроса, его содержание, структура его тела в общем случае будут различаться и требовать специализированной обработкой.<br /><br />Обобщенно, скрипт контроллер должен выполнять следующие функции:<br /><br />➀ Получать первичное управление поступившим на Endpoint http-запросом;<br /><br />➁ Проверять метод запроса (например GET/ POST), чтобы далее правильно извлечь из него информацию;<br /><br />➂ Для POST запросов извлекать и валидировать тело запроса. В зависимости от задач, валидация может несколько различаться. Например, скрипт может содержать следующие проверки:<br /><br /><ul><li data-list="bullet">тело запроса не пустое;</li><li data-list="bullet">json/XML имеют валидную структуру;</li><li data-list="bullet">поступивший поток зарегистрирован в системе и может быть обработан в модели;</li><li data-list="bullet">вместе с запросом переданы обязательные параметры, и они имеют не пустое значение.</li></ul><br />➃ Выполнять процессинг запроса через вызов целевого интеграционного скрипта исходя из идентифицированного потока (маршрутизация запросов) и передавать в целевой скрипт требуемую информацию ( тело запроса, параметры и т.д.);<br /><br />➄ Считывать результаты выполнения интеграционных скриптов (из логгера или через дополнительный запрос), формировать ответ в шину;<br /><br />➅ Логгировать общие результаты исполнения всей цепочки скриптов (интеграционных скриптов, вспомогательных скриптов, самого скрипта-контроллера).<br /><br />В некоторых ситуациях может быть полезной реализация дополнительных функций скрипта-контроллера, таких как имплементация «очереди» потоков на Endpoint – см. раздел <strong>Очередь запросов на RESTAPI Service Optimacros;</strong></div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Интеграционные скрипты для работы с http-запросами</span></h3><div class="t-redactor__text">Интеграционные скрипты, извлекающие и преобразующие данные поступивших с шины запросы, являются разновидностью core_export_import скриптов стандартной библиотеки Оптимакрос. Для описываемого в настоящей статье вида интеграции подойдут типы источников OM_WEB_SERVICE_GENERAL_PASSIVE или OM_WEB_SERVICE_FILES_PASSIVE (см. <a href="https://support.optimacros.com/topic/5644/yadro-core_export_import" style="color: rgb(130, 170, 69); border-bottom: 1px solid rgb(130, 170, 69); box-shadow: none; text-decoration: none;">https://support.optimacros.com/topic/5644/yadro-core_export_import</a>).<br /><br />Эти типы источников обеспечивают обработку запросов на API Service и имеют настройку разбора json/ XML для преобразования форматов в тубулярный вид.<br /><br />Полезные материалы и описание настройку парсинга json можно найти по ссылке выше для ядер версий 1.15.4, 1.10.17 и 1.10.8.<br /><br />Вызов интеграционного скрипта из скрипта контроллера необходимо осуществлять способом, используемом в стандартных цепочках вызовов скриптов. Такой подход обеспечивает необходимую синхронизацию логики исполнения интеграции в целом:</div><div class="t-redactor__text"><em>Запуск и выполнение интеграционного скрипта &gt; Формирование лога исполнения интеграционного скрипта &gt; Передача лога исполнения в шину.</em></div><div class="t-redactor__text">Пример вызова:</div><img src="https://static.tildacdn.com/tild3965-3463-4264-a435-623530363563/image.png"><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Аккумуляция потоковых данных в приемнике</span></h3><div class="t-redactor__text">Основной задачей интеграционного скрипта является получение данных из источника, их преобразование (если требуется) и сохранение результатов в приемнике. Приемник в Оптимакрос может иметь разный тип, но, если требуется загрузить данные в собственное хранилище, обычно используется тип OM_MULTICUB.<br /><br />Распространённым архитектурным паттерном является импорт данных в «плоский» мультикуб, состоящий из нумерованного справочника и кубов данных. В этом случае мультикуб концептуально напоминает двумерную таблицу, где элементы нумерованного справочника являются строками, а кубы — столбцами или полями таблицы. Например:</div><img src="https://static.tildacdn.com/tild6561-3432-4930-b330-316362653337/image.png"><div class="t-redactor__text">При использовании событийной интеграции запросы поступают на API Service системы, где обрабатываются интеграционными скриптами и сохраняются в мультикубе-приёмнике, организованном, например, по описанному выше принципу. Поскольку данные должны накапливаться без перезаписи друг друга, возникает задача корректного определения «последней заполненной строки» для каждого нового запроса.<br /><br />Технически определить очередную «строку» для записи не составит труда через одну из вариаций формул. В приведённом примере достаточно получить значение в элементе «Итого» куба Ordinal и прибавить единицу, что даст номер первой свободной строки - 13386.<br /><br />Однако на практике такой способ оказывается ненадёжным. Дело в том, что работа интеграционных скриптов и пересчет формул выполняется в разных, несинхронизированных потоках. При массовой обработке запросов, поступающих почти одновременно на эндпоинт API Service, скрипты могут завершить выполнение быстрее, чем пересчитается итоговое значение счётчика. Чем больше записанных строк в мультикубе, тем медленнее пересчитывается Ordinal, увеличивая риск того, что несколько потоков попытаются записать данные в одну и ту же строку.<br /><br />Более правильным решением является использование счётчиков, управляемых самими интеграционными скриптами. В этом случае скрипт дополнительно определяет количество строк в поступившем запросе и инкрементирует значение специализированного счётчика занятых строк. Значение счётчика хранится в специальной ячейке: оно считывается до выполнения скрипта и обновляется только после успешной записи данных.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Очередь запросов на API Service Optimacros</span></h3><div class="t-redactor__text">Одним из важных аспектов эффективной работы интеграционных решений через API Service Optimacros является обработка поступающих запросов в условиях высокой нагрузки. На эндпоинт API Service может поступить несколько тысяч запросов одновременно, например когда система-источник передает исторические данные за предыдущий период. Из каждого запроса извлекаются данные для импорта в мультикуб-приемник. При большом потоке событийных запросов каждая операция сохранения становится триггером для пересчёта цепочек кубов в модели, таких как: проверка уникальности значений, проверка связей через FINDITEM, обработка ошибок в загрузочных мультикубах и другие вычисления, необходимые для реализации бизнес-логики модели. Таким образом, система одновременно инициирует множество "холостых" пересчётов, что приводит к лавинообразному росту потребления ресурсов, замедлению работы всей модели и в критических случаях — к её падению. Между тем часто пересчет модели требуется только после обработки и сохранения всего пакета исторических данных.<br /><br />В Optimacros очередь запросов реализуется через компонент Redis Queue. Однако в текущих версиях ПО доступ к данным этой очереди (например, получение информации о размере очереди) не реализован.<br /><br />Таким образом, в скрипте-контроллере может потребоваться реализация кастомной очереди запросов. Имплементация очереди должна решить следующие основные задачи:<br /><br />       ·При достижении определённого порога необработанных запросов на эндпоинт, авто-пересчёт модели временно отключается.<br /><br />       ·После обработки всей очереди и окончания поступления запросов, пересчёт автоматически включается обратно.<br /><br />Такая организация обработки позволяет существенно разгрузить модель в моменты пиковых нагрузок, ускорить загрузку данных через API Service и повысить общую отказоустойчивость системы.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Postman</span></h3><div class="t-redactor__text">Настройка интеграции с корпоративной шиной данных подразумевает получение тестовых запросов API сервисов Optimacros и дальнейшее профилирование их обработки. Согласно принципам событийной интеграции через ESB, чтобы событие было передано в шину данных, оно должно быть инициировано системой-источником (см. раздел Принцип событийной интеграции через ESB).<br /><br />Однако организация полноценного тестирования через реальные системы-источники на практике оказывается не всегда удобной. Для этого требуется развёртывание тестовых контуров, копирование экземпляров систем и выдача доступа проектной команде к каждой из них. Либо необходимо привлекать команду Заказчика уже на ранних этапах тестирования, что может быть обременительным и нецелесообразным.<br /><br />Для упрощения процесса применяются специализированные инструменты тестирования REST API. Одним из наиболее популярных решений является Postman — платформа для разработки, тестирования и мониторинга веб-API. Postman предоставляет удобный графический интерфейс для отправки HTTP-запросов и анализа ответов, поддерживая работу с REST, SOAP, GraphQL и другими протоколами.<br /><br />На этапе разработки Postman может успешно выполнять роль альтернативного источника событий, эмулируя работу внешней шины данных. Инструмент обеспечивает следующую функциональность при взаимодействии с API Service Optimacros:<br /><br /><ul><li data-list="bullet">Проверку авторизации через пользовательский токен;</li><li data-list="bullet">Отправку HTTP-запросов различных типов (GET, POST и других);</li><li data-list="bullet">Подготовку заголовков запросов (Headers) в требуемом формате;</li><li data-list="bullet">Формирование тела запроса в различных форматах, включая возможность прикрепления файлов;</li><li data-list="bullet">Настройку автоматизированного тестирования ответов от API Service Optimacros (например, проверку статуса и содержимого ответа);</li><li data-list="bullet">Создание коллекций запросов и реализацию пакетной отправки для целей нагрузочного тестирования.</li></ul><br />Использование Postman позволяет значительно упростить процесс начального тестирования интеграции, снизить зависимость от внешних команд и ускорить этапы отладки интеграционных скриптов.<br /><br />Более подробную информацию о возможностях и настройках Postman можно найти в официальной документации сервиса.</div><h3  class="t-redactor__h3"><span style="color: rgb(130, 170, 69);">Архивирование и переиспользование поступивших на API Service Optimacros запросов</span></h3><div class="t-redactor__text">Реализация событийной интеграции через шину данных в Optimacros имеет ещё одну важную особенность, связанную с архитектурой самой платформы. Поскольку Optimacros, как и другие аналогичные in-memory решения, хранит все рабочие данные в оперативной памяти сервера, любые изменения сохраняются на диск только в момент выполнения фонового или ручного бэкапирования.<br /><br />В результате все инкрементные данные, поступившие после последнего сохранения, находятся только в оперативной памяти. Если воркспейс аварийно завершит работу до следующего бэкапа, часть импортированных в модель данных может быть утрачена. Такая потеря будет безвозвратной, если предварительно не настроено логирование ячеек мультикуба через административную панель.<br /><br />Другой ситуацией «потери запросов» может являться временная недоступность вокспейса из-за технических работ или «обрывом связи» между сервером с системой-источником и сервером Optimacros. Как уже говорилось выше, в этом случае шина попробует повторно отправить запрос, но количество и продолжительность таких повторов обычно ограниченно настройками самих сервисов шины.<br /><br />И наконец, часть данных может быть стерта из-за неаккуратного обращения пользователя с данными в загрузочного мультикубе. Так как каждое событие – это хозяйственная операция, зарегистрированная в ИТ-системе, переотправить такое событие в продуктовом контуре может быть проблематичной задачей, поскольку это требует искусственного воспроизведения бизнес-операций, что может нарушить правильность отражения бизнес-процессов компании.<br /><br />Одним из архитектурных подходов решения подобных проблем может являться архивирование http-запросов на диске. Для этого в интеграционных скриптах предусмотрен блок настроек ARCHIVATE_REQUEST. В нем указывается тип подключаемого устройства для хранения логов (FTP, 'SHARED_FOLDER', 'SHAREPOINT') и путь к целевой директории относительно точки монтирования.<br /><br />Стандартных средств восстановления архивных запросов через переотправку их на API Service Optimacros в текущих релизах Optimacros нет. Однако с использованием доступных API-интерфейсов платформы можно разработать скрипты, обеспечивающие следующую функциональность:<br /><br /><ul><li data-list="bullet">Чтение архивных файлов с запросами по заданным критериям (например, в интервале дат DATE_FROM — DATE_TO);</li><li data-list="bullet">Формирование очереди для повторной отправки запросов;</li><li data-list="bullet">Отправка архивированных запросов обратно на API Service Optimacros;</li><li data-list="bullet">Обработка ответов от сервера по результатам выполнения;</li><li data-list="bullet">Исключение повторного архивирования переотправленных событий для предотвращения их дублирования.</li></ul></div><h4  class="t-redactor__h4"><span style="color: rgb(130, 170, 69);">Приложение</span></h4><div class="t-redactor__text">На момент написания настоящей статьи у автора имеется следующий набор скриптов реализующий полный цикл задач интеграции корпоративной шины данных с API Service Optimacros:<br /><br /><strong>REST API Gateway 2.1.js</strong> – Скрипт-контроллер: Валидация и диспетчеризация входящих потоков по интеграционным скриптам-процессорам.<br /><br /><strong>REST API Queue Manager 2.1.js</strong> – Управление очередью запросов. Скрипт считает количество http-запросов, ожидающих исполнение на REST API Gateway. Если очередь больше порогового значения, отключается автоматический пересчет модели, что сильно снижает нагрузку на модель при одновременном поступлении большого количества запросов.<br /><br /><strong>REST API Response Info 1.2.js – </strong>Логгирование и передача ответа в шину данных. Формирование ответа клиенту по результатам обработки запроса, поступившего на REST APIEndpoint<br /><br /><strong>REST API Requests Recovery 1.1.js – </strong>Восстановление архивных запросов через переотправку их на API Service OM</div>]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Как избежать ошибок при внедрении финансовых систем. Ошибка №1 - внедряемая система нужна только Спонсору.</title>
      <link>http://exploredata.ru/automationmistakessponsor</link>
      <pubDate>Mon, 21 Jul 2025 18:23:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Как не угробить проект</category>
      <description>Когда инициативу поддерживает только топ-менеджер, а сотрудники продолжают работать в Excel, проект начинает затягиваться. Рассказываем, почему без мотивации и вовлечения команды даже хорошая система останется мёртвым грузом.</description>
      <turbo:content><![CDATA[<header><h1>Как избежать ошибок при внедрении финансовых систем. Ошибка №1 - внедряемая система нужна только Спонсору.</h1></header>Когда инициативу поддерживает только топ-менеджер, а сотрудники продолжают работать в Excel, проект начинает затягиваться. Рассказываем, почему без мотивации и вовлечения команды даже хорошая система останется мёртвым грузом.]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Как избежать ошибок при внедрении финансовых систем. Ошибка №2 - Методология не проработана, а Заказчик уверен в обратном</title>
      <link>http://exploredata.ru/methodologymistake</link>
      <pubDate>Mon, 21 Jul 2025 18:29:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Как не угробить проект</category>
      <description>При автоматизации в файлах от Заказчика всплывают пробелы в логике расчётов и нестыковки в данных. Рассказываем, почему Excel — это ещё не методология</description>
      <turbo:content><![CDATA[<header><h1>Как избежать ошибок при внедрении финансовых систем. Ошибка №2 - Методология не проработана, а Заказчик уверен в обратном</h1></header>При автоматизации в файлах от Заказчика всплывают пробелы в логике расчётов и нестыковки в данных. Рассказываем, почему Excel — это ещё не методология]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Как избежать ошибок при внедрении финансовых систем. Ошибка №3 - Обещания для топ-менеджмента, а работать операционному персоналу</title>
      <link>http://exploredata.ru/promisefortop</link>
      <pubDate>Mon, 21 Jul 2025 18:31:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Как не угробить проект</category>
      <description>Обещания на этапе продаж часто не совпадают с реальностью внедрения. Руководство ожидает быстрый эффект, но персонал перегружен  и не понимает, зачем всё это нужно. Рассказываем, как избежать разрыва между ожиданиями и результатом внедрения системы.</description>
      <turbo:content><![CDATA[<header><h1>Как избежать ошибок при внедрении финансовых систем. Ошибка №3 - Обещания для топ-менеджмента, а работать операционному персоналу</h1></header>Обещания на этапе продаж часто не совпадают с реальностью внедрения. Руководство ожидает быстрый эффект, но персонал перегружен  и не понимает, зачем всё это нужно. Рассказываем, как избежать разрыва между ожиданиями и результатом внедрения системы.]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Как избежать ошибок при внедрении финансовых систем. Ошибка №4 - Неправильный выбор системы под задачу</title>
      <link>http://exploredata.ru/wrongchoice</link>
      <pubDate>Mon, 21 Jul 2025 18:40:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Как не угробить проект</category>
      <description>Многие компании ошибаются, выбирая систему только по стоимости и базовым функциям, не учитывая масштабируемость и производительность. Это приводит к тех. ограничениям, росту затрат и иногда к полному пересмотру неудачного внедрения.</description>
      <turbo:content><![CDATA[<header><h1>Как избежать ошибок при внедрении финансовых систем. Ошибка №4 - Неправильный выбор системы под задачу</h1></header>Многие компании ошибаются, выбирая систему только по стоимости и базовым функциям, не учитывая масштабируемость и производительность. Это приводит к тех. ограничениям, росту затрат и иногда к полному пересмотру неудачного внедрения.]]></turbo:content>
    </item>
    <item turbo="true">
      <title>CPM vs. BI:  о чем не расскажут продавцы</title>
      <link>http://exploredata.ru/page74286159.html</link>
      <pubDate>Sat, 23 Aug 2025 16:04:00 +0300</pubDate>
      <author>Алексей Зайцев</author>
      <category>Бэклог вместо новостей</category>
      <enclosure url="https://static.tildacdn.com/tild6265-6666-4438-b964-643437656631/header.jpg" type="image/jpeg"/>
      <description>Компании регулярно путают CPM и BI решения, выбирая неподходящие инструменты для планирования и аналитики. В статье раскрываем реальные кейсы ошибок и четкие различия между системами управления эффективностью и бизнес-аналитики.</description>
      <turbo:content><![CDATA[<header><h1>CPM vs. BI:  о чем не расскажут продавцы</h1></header><figure><img alt="" src="https://static.tildacdn.com/tild6265-6666-4438-b964-643437656631/header.jpg"/></figure>Компании регулярно путают CPM и BI решения, выбирая неподходящие инструменты для планирования и аналитики. В статье раскрываем реальные кейсы ошибок и четкие различия между системами управления эффективностью и бизнес-аналитики.]]></turbo:content>
    </item>
  </channel>
</rss>
