Импортозамещение со звездочкой: как мы реализовали загрузку транзакционных данных в 1С

Руководитель практики технических экспертиз ALP Group Валерий Лямо — об одном из самых сложных архитектурных решений из практики компании.

Источник: <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fwww.freepik.com%2Ffree-photo%2Fman-with-tablet-clouds-background-icons_963079.htm&postId=1957748" rel="nofollow noreferrer noopener" target="_blank">creativeart</a>, Freepik
Источник: creativeart, Freepik

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

Изначально функциональность загрузки данных разрабатывалась для взаимодействия 1С с системой управления базами данных (СУБД) Microsoft SQL Server под управлением операционной системы Windows Server. Решение было выполнено через технологию Component Object Model (COM) — стандарт Microsoft, который позволяет разработчикам использовать в коде независимые компоненты ПО, даже если они написаны на разных языках программирования, и не волноваться насчет их совместимости.

Всё работало быстро и стабильно. Но в рамках импортозамещения архитектуру требовалось полностью переделать: теперь все те же бизнес-задачи должны были решаться на Astra Linux и PostgreSQL. Классический механизм интеграции Microsoft в этом окружении попросту отсутствует. При этом требования со стороны заказчика по скорости загрузки больших объемов данных никто не отменял.

Новое окружение не должно было стать узким горлышком. И всё это — при строжайших требованиях к информационной безопасности.

Мы оценили три возможных решения проблемы:

1. Использовать механизм «Внешние источники данных» платформы 1С.

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

2. Использовать внешние компоненты при взаимодействии с СУБД.

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

3. Придумать собственное решение.

Рискованный, но единственно рабочий путь.

Как мы наладили работу 1С с PostgreSQL на Astra Linux

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

Такой подход позволил обойти проблемы с безопасностью (все оставалось внутри допустимого стека), обеспечить высокую производительность и при этом не выйти за рамки лицензий и требований заказчика.

Работа над кастомной системой коммерческого учета велась на территории клиента, и это добавило остроты. У заказчика — закрытый контур, а у нас — нет прав администратора и root-доступов для проведения экспериментов. Сразу возник вопрос: как же нам тогда настраивать окружение для корректного взаимодействия 1С и PostgreSQL в операционке Astra Linux?

Развернуть у себя полностью аналогичную среду мы не могли — стояли жесткие временные сроки. В итоге мы строили стенд у себя «по мотивам», при поддержке наших администраторов воспроизводили баги в собственном контуре внутри компании, писали подробные инструкции по их разрешению и передавали их ИТ-отделу заказчика.

Настраиваем окружение руками администраторов заказчика. Источник: Splash Games, YouTube

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

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

5