Компания работает в сфере торговых операций и использует сразу два аккаунта «МойСклад»: в одном создаются отгрузки, во втором - приёмки. Такие процессы характерны для бизнеса, где разделены юридические лица, складские контуры или точки распределения товаров.
Этот сегмент особенно нуждается в автоматизации, потому что:
- точность позиций и кодов маркировки критична для учёта
- ручной перенос занимает много времени и приводит к ошибкам
- обмен данными между аккаунтами невозможен стандартными средствами
У клиента два аккаунта «МойСклад» с полностью совпадающей номенклатурой - около 15 000 товаров. В первом аккаунте создаются отгрузки, и те же позиции должны автоматически появляться в приёмках второго. Копироваться должны не только товары, но и коды маркировки, а перенос должен работать в обе стороны.
Проблема заказчика
Клиенту понадобился быстрый механизм: нажать «Копировать» в отгрузке первого аккаунта, нажать «Вставить» в приёмке второго и получить полностью сформированный документ с правильными позициями. Стандартный функционал «МойСклад» не позволяет переносить позиции между аккаунтами.
Первые тесты показали проблему:
- при документе в 670 позиций сценарий работал более 15 минут
- каждая позиция искалась по имени отдельным API-запросом
- получалось 670 запросов только для одной вставки
- API «МойСклад» не даёт возможности оптимизировать массовый поиск
Производительность была неприемлемой, а перенос - слишком долгим.
Предложенная автоматизация
Мы предложили перепроектировать логику вставки так, чтобы исключить тысячи API-запросов к «МойСклад».
Ключевая идея решения:
- заранее выгрузить всю номенклатуру из каждого аккаунта
- хранить её в глобальных переменных Nodul
- выполнять поиск позиций локально, без обращения к API
Вместо 670 запросов сценарий делает ноль: он сопоставляет позиции по имени из локальной базы, хранящейся в памяти. В результате вставка стала работать за секунды.
Решение проблемы
Решение было разработано в несколько этапов.
- Функции «Копировать» и «Вставить». «Копировать» сохраняет все позиции отгрузки в память, «Вставить» добавляет их в приёмку второго аккаунта.
- Оптимизация поиска позиций. Первая версия искала каждую позицию через API, что занимало до 15 минут, поэтому мы внедрили предварительную загрузку номенклатуры.
- Выгрузка номенклатуры в глобальные переменные. Каждый час, в 00 и 05 минут, запускается сценарий, который выгружает все 15 000 товаров из обоих аккаунтов и сохраняет их в глобальные переменные Nodul. Для стабильности сначала наполняется временная переменная, которая затем мгновенно заменяет основной массив, - поэтому «Вставка» работает даже во время обновления.
- Новый сценарий «Вставить». Теперь он сопоставляет позиции по имени из локальной номенклатуры, формирует массив товаров и добавляет их в документ за несколько секунд.
- Финальный тест. Документ на 670 позиций вставился за 5 секунд вместо 15 минут.
Вывод
Решение позволило полностью автоматизировать перенос позиций между двумя аккаунтами «МойСклад» и устранить проблему скорости.
Основные результаты:
- вставка документов сократилась с 15 минут до 5 секунд
- перенос работает в обе стороны
- коды маркировки и позиции копируются корректно
- сценарий не перегружает API
- номенклатура всегда актуальна за счёт регулярной выгрузки
- сотрудники экономят десятки часов ручной работы ежемесячно
Глобальные переменные Nodul позволили хранить номенклатуру из 15 000 позиций прямо на платформе и обойти ограничения API «МойСклад» без отдельной базы данных.
Автор кейса - Игорь Омелянчук, партнёр Nodul.ru