Перейти к основному содержанию

Как я ускорил «1С:Предприятие» в 5000 раз, переписав всё на Common Lisp

·3 мин.

Как-то раз я записывал очередное видео для студентов об истории Unix. Должен отметить, студенты у меня непростые: прожженные 1С-ники с серьезным «синдромом утенка», заработанным при работе с Windows.

А ведь когда-то давно, в 2006 году, я и сам был таким. Но случайно установленный дистрибутив Linux открыл для меня совершенно иной мир - мир с богатой историей, пронизывающей компьютерные науки.

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

И вот, рассказывая о Unix way, подумал: «Стоп! Ведь это можно применить для связи 1С:Предприятия с любым кодом очень простым и надежным способом».

Почему в этом есть потребность #

  1. Замкнутость экосистемы. Намеренная отгороженность среды для увеличения прибыли вендора.
  2. Низкое быстродействие. Будет очень сложно найти интерпретатор медленнее чем в 1С. Попробуйте и поделитесь в комментариях результатами поисков.

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

По первому пункту: Интеграция #

Не далее как вчера мне потребовалось создать бота на XMPP. Это не какой-то масштабный проект, а так, небольшая прикладная задача.

У меня и моих близких несколько магазинов на Ozon. Маркетплейс ввел новые штрафы за отгрузку товаров: теперь нет паузы между заказом и отгрузкой. То есть, если заказ пришел в 11:59, а вы до 12:00 его не отгрузили - получите штраф.

Бот снимает остатки в 9:00 и возвращает их в 12:00. Управляется и отчитывается он по XMPP, который мы уже давно используем между собой взамен Telegram.

За три часа был создан бот на JavaScript, настроен и развернут на копеечном VPS. А что в 1С? В 1С вам потребуется с нуля реализовать поддержку протокола XMPP. Это возможно, но займет намного больше времени. А как говаривал господин Бенджамин Франклин: «Время - деньги».

По второму пункту: Алгоритмы и скорость #

Это вполне рядовая ситуация. Алгоритм реально используется в обмене данными между УНФ и БП, так что перед нами не абстрактная академическая задача, а сугубо практический кейс.

Условия задачи: Есть последовательность чисел X1, X2, X3, Xn и некая сумма Y. Как вычислить, какие числа из последовательности образуют сумму Y?

Эта задача известна как «Задача о сумме подмножества». Это NP-полная задача. Давайте попробуем решить ее методом полного перебора вариантов.

Мы напишем решение на нескольких языках, сравним код и быстродействие, а потом улучшим алгоритм с помощью кода Грея.

Результаты #

Можно долго говорить, просто возьмите чашку кофе, включите это видео и всё увидите сами.

Это видео на RUTUBE

Вы убедитесь, что мы улучшили быстродействие системы в «1С:Предприятии» в 5000 раз (а если внимательно посмотрите видео - увидите, что более чем в 7000 раз).

Можно сказать, что это какой-то «костыль». Но не спешите, хорошо подумайте - возможно, вы найдете этой методике достойное применение.

Если у вас остались вопросы или необходима помощь в решении задач связанных с 1С, - пишите на Email. Исходные коды к видео доступны в репозитории.