53просмотров
27 января 2026 г.
Score: 58
Добавление товаров в сделку из определенного склада Периодически всплывает такой вопрос. Поискали существующее приложение, глянули штатный функционал. Не нашли. Напомню суть проблемы. При включенном складском учете, необходимо в сделку добавлять товары с выбором\указанием из какого склада резервировать данный товар. В штатном функционале из публички это решается, есть возможность добавить и товар и выбрать склад, откуда брать этот товар. Решили исследовать данный вопрос и если все окажется удачно, сделать такое активити. Включили складской учет, завели пару складов, оприходовали товар. Получилось, у нас есть два склада, на которых есть некоторое количество одинакового товара. Завели сделку руками, добавили товар, выбрали склад, сохранили. Указанное количество товара на выбранном складе попало в резерв. Все хорошо, схема понятна. Приступили к тестам. Глянули доку, нашли методы, два. Запросили товарную позицию в сделке. Поймали ИД склада. Обрадовались, т.е. данные присутствуют. Сделали скрипт, повторяющий данный массив и сохраняющий в сделке. Выполнили. Товар зарезервировался из дефолтного склада. Взяли весь полученный массив товарной позиции, поменяли только ИД склада, сохранили. Товар из дефолтного склада. Хм. Сходили за чаем, ромашковым. Взяли другой метод, повторили опыты. Результат не изменился, товар резервируется с дефолтного склада. Ладно. Открыли исходники обоих методов записи товарных позиций. Весь входящий массив пишется напрямую в таблицу товарных позиций. Пошли в таблицу, глянули колонки. Нет там колонки склада. Попробовали не добавлять сразу все товарные позиции, а сделать ее обновление. Т.е. берем запись, читаем, меняем ИД склада, обновляем. Результат не изменился, получился опять дефолтный склад. Взяли методы чтения товарных позиций, запустили, поле со складами есть. Что такое то, откуда. Идем в исходники. В методе чтения читается напрямую таблица товарных позиций и принудительно добавляются данные из таблицы резервирования товара, поэтому и появляется ИД склада. Посмотрели прямые методы работы реста по работе с товарными позициями, нет ли там инфы по обходному пути записи ИД склада для товарной позиции. Не нашли. Еще раз подняли доку. Нашли, что поле склада - только для чтения. Приняли, что текущая гипотеза не сработала. Переходим к следующей. Следующая гипотеза была: а давайте выставим нужный склад дефолтным, добавим товарную позицию, а потом вернем нужный дефолтный склад. В общем, минусы данного подхода были понятны сразу, если у вас две товарные позиции из разных складов, то вся рабочая схема сразу рассыпается. Но решили проверить. Пошли в методы работы со складами. Есть методы CRUD для работы складов, но вот установки дефолтного склада там нет. Идем в добавление и обновление, смотрим исходники, вроде как поля напрямую передаются в штатный метод API работы со складами, в методе есть проверка, но поле склада по умолчанию там присутствует. Обнадеживает. Идем в консоль, проверяем установку дефолтного склада. Работает. Ох ж. Получается схема с обновлением товарной позиции со сменой дефолтного склада будет рабочей. Проверяем дальше. Передаем в рест метод обновления установку склада по умолчанию. Не работает. Странно. Логируем входящие параметры в самом методе. И опа! А нету наших параметров. На входящем префильтре режутся. И эта гипотеза не сработала. Печаль, беда. На текущий момент все сформированные гипотезы не сработали и новых пока нет. Примем, что пока не нашли возможность добавлять товарную позицию в сделку с определенным складом. Исследования не только положительными бывают. #ниокр
53
просмотров
3587
символов
Нет
эмодзи
Нет
медиа

Другие посты @axit_rnd

Все посты канала →
Добавление товаров в сделку из определенного склада Периодич — @axit_rnd | PostSniper