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

Компании нужно было переносить позиции с кодами маркировки из отгрузок одного аккаунта «МойСклад» в приёмки другого, но поиск каждой позиции через API занимал больше 15 минут на документ. Номенклатуру обоих аккаунтов - около 15 000 товаров - стали раз в час выгружать в глобальные переменные Nodul и искать позиции локально, без запросов к API. Документ на 670 позиций теперь вставляется за 5 секунд.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Функции «Копировать» и «Вставить». «Копировать» сохраняет все позиции отгрузки в память, «Вставить» добавляет их в приёмку второго аккаунта.
  2. Оптимизация поиска позиций. Первая версия искала каждую позицию через API, что занимало до 15 минут, поэтому мы внедрили предварительную загрузку номенклатуры.
  3. Выгрузка номенклатуры в глобальные переменные. Каждый час, в 00 и 05 минут, запускается сценарий, который выгружает все 15 000 товаров из обоих аккаунтов и сохраняет их в глобальные переменные Nodul. Для стабильности сначала наполняется временная переменная, которая затем мгновенно заменяет основной массив, - поэтому «Вставка» работает даже во время обновления.
  4. Новый сценарий «Вставить». Теперь он сопоставляет позиции по имени из локальной номенклатуры, формирует массив товаров и добавляет их в документ за несколько секунд.
  5. Финальный тест. Документ на 670 позиций вставился за 5 секунд вместо 15 минут.

Вывод

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

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

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

Глобальные переменные Nodul позволили хранить номенклатуру из 15 000 позиций прямо на платформе и обойти ограничения API «МойСклад» без отдельной базы данных.

Автор кейса - Игорь Омелянчук, партнёр Nodul.ru