Как компания автоматизировала перенос позиций между двумя аккаунтами «МойСклад» за 5 секунд

Автор: Игорь Омелянчук

Компания работает в сфере торговых операций и использует сразу два аккаунта «МойСклад». В одном создаются отгрузки, во втором - приёмки. Такие процессы характерны для бизнеса, где разделены юридические лица, складские контуры или точки распределения товаров.

Этот сегмент особенно нуждается в автоматизации, потому что:

  • точность позиций и кодов маркировки критична для учёта
  • ручной перенос занимает много времени и приводит к ошибкам
  • обмен данными между аккаунтами невозможен стандартными средствами

У клиента два аккаунта «МойСклад» с полностью совпадающей номенклатурой - около 15 000 товаров.

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

Требование: копироваться должны не только товары, но и коды маркировки, а перенос должен быть двусторонним.

Проблема заказчика

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

Однако стандартный функционал «МойСклад» не позволяет переносить позиции между аккаунтами.

Первые тесты показали проблему:

  • при документе в 670 позиций сценарий работал более 15 минут
  • каждая позиция искалась по имени отдельным API-запросом
  • получалось 670 запросов только для одной вставки
  • API «МойСклад» не даёт возможности оптимизировать массовый поиск

Производительность становилась неприемлемой, а перенос - слишком долгим.

Предложенная автоматизация

Мы предложили перепроектировать логику вставки так, чтобы исключить тысячи API-запросов к «МойСклад».

Ключевая идея решения:

  • заранее один раз выкачать всю номенклатуру из каждого аккаунта
  • хранить её в глобальных переменных NODUL
  • выполнять поиск позиций локально, без обращения к API

Таким образом сценарий вместо 670 запросов делает 0 - он сопоставляет позиции по имени из локальной базы, хранящейся в памяти.

В результате вставка стала работать за секунды.

Решение проблемы

Решение было разработано в несколько этапов.

  1. Реализация функций «Копировать» и «Вставить»
    Функция «Копировать» сохраняет все позиции отгрузки в память.
    Функция «Вставить» вставляет их в приёмку второго аккаунта.
  2. Оптимизация скорости поиска позиций
    Первоначальная версия искала каждую позицию по API, что занимало до 15 минут.
    Мы внедрили механизм предварительной загрузки номенклатуры.
  3. Выгрузка номенклатуры в глобальные переменные
    Каждые 60 минут, в 00 и 05 минут каждого часа, запускается сценарий, который:
    • выкачивает все 15 000 товаров из аккаунта №1
    • выкачивает все 15 000 товаров из аккаунта №2
    • сохраняет их в глобальные переменные NODUL
    Для стабильности используется временная переменная:
    сначала она наполняется данными, затем мгновенно заменяет основной массив.
    Это гарантирует, что «Вставка» работает даже во время обновления.
  4. Переработка сценария «Вставить»
    Теперь сценарий работает так:
    • сопоставляет позиции по имени из локальной номенклатуры
    • формирует массив товаров
    • добавляет их в документ за несколько секунд
  5. Финальный тест
    Документ на 670 позиций вставился:
    6.всего за 5 секунд* вместо 15 минут.

6. Вывод

Решение позволило полностью автоматизировать перенос позиций между двумя аккаунтами «МойСклад» и устранить проблему скорости.

Основные результаты:

  • вставка документов сократилась с 15 минут до 5 секунд
  • перенос работает в обе стороны
  • коды маркировки и позиции копируются корректно
  • сценарий не перегружает API
  • номенклатура всегда актуальна за счёт регулярной выгрузки
  • сотрудники экономят десятки часов ручной работы ежемесячно