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




