Переход с платформы 1С:Управление торговлей 10.3 на версию 11.4 часто сопровождается вопросами со стороны пользователей и аналитиков. Одним из наиболее острых моментов является отсутствие в типовом функционале УТ 11.4 возможности сформировать отчет «Остатки и доступность товаров» на произвольную дату в прошлом. В этой статье мы подробно разберем, почему архитектура системы накладывает такие ограничения, как работает механизм распределения запасов и какие существуют пути решения данной задачи.
Для того чтобы понять корень проблемы, проанализируем, как строился учет в старой и новой редакциях. В версии 10.3 существовали жесткие регистры накопления (например, ТоварыВРезервеНаСкладах), в которых каждое движение документа фиксировало изменение остатка или резерва. Это позволяло системе просто сделать срез данных на любую секунду времени, используя стандартные механизмы запросов к виртуальным таблицам остатков.
В 1С:УТ 11.4 концепция радикально изменилась. Вместо простого вычитания из остатка, система использует сложный механизм динамического распределения запасов. Понятие «Доступно» здесь не является статичным числом в базе данных. Оно рассчитывается «на лету» на основании совокупности факторов:
Товары на складах).Выясним причину, почему ретроспективный отчет в 11.4 технически сложен: для восстановления картины доступности на неделю назад системе пришлось бы заново смоделировать очередь всех заказов и их приоритетов, актуальных именно на тот момент, что потребовало бы колоссальных вычислительных ресурсов.
Рассмотрим наиболее рациональный путь, предлагаемый разработчиками «1С». В версии 11.5 подсистема управления запасами была серьезно переработана. Разберем основные изменения:
Во-первых, был внедрен новый регистр накопления РаспределениеЗапасов. В отличие от механизмов 11.4, этот регистр более эффективно хранит данные о состояниях обеспечения. Во-вторых, разработчики оптимизировали алгоритмы распределения, переведя их на фоновое выполнение. Это позволило добавить функционал анализа остатков в разрезе дат и периодов.
Если ваша компания активно использует механизмы резервирования и планирования, переход на 11.5 — это самый правильный способ получить корректную аналитику без «костылей» и дорогостоящих доработок.
Если переход на новую версию временно невозможен, проанализируем, что мы можем получить из типовых инструментов УТ 11.4. Хотя прямого аналога отчета «на дату» нет, мы можем комбинировать данные:
Заказы на отгрузку. Настроив группировки по номенклатуре и периоду, можно попытаться сопоставить эти данные с физическими остатками.Для программистов 1С наиболее эффективным способом решения задачи в рамках 11.4 является создание расширения, которое будет фиксировать состояние доступности. Рассмотрим алгоритм реализации такой доработки:
Создадим новый регистр сведений, например, СнимкиДоступностиТоваров. Этот регистр будет хранить данные в разрезе номенклатуры, склада и даты. Запись в него можно производить двумя способами:
Рассмотрим пример кода для регламентного задания, который собирает данные из типового регистра распределения и записывает их для истории:
Процедура ЗафиксироватьДоступностьНаДату() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РаспределениеЗапасов.Номенклатура КАК Номенклатура,
| РаспределениеЗапасов.Склад КАК Склад,
| СУММА(РаспределениеЗапасов.ВНаличии) КАК ФизическийОстаток,
| СУММА(РаспределениеЗапасов.Доступно) КАК СвободныйРезерв
|ИЗ
| РегистрНакопления.РаспределениеЗапасов КАК РаспределениеЗапасов
|СГРУППИРОВАТЬ ПО
| РаспределениеЗапасов.Номенклатура,
| РаспределениеЗапасов.Склад";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
МенеджерЗаписи = РегистрыСведений.СнимкиДоступностиТоваров.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.Номенклатура = Выборка.Номенклатура;
МенеджерЗаписи.Склад = Выборка.Склад;
МенеджерЗаписи.Остаток = Выборка.ФизическийОстаток;
МенеджерЗаписи.Доступно = Выборка.СвободныйРезерв;
МенеджерЗаписи.Записать();
КонецЦикла;
КонецПроцедуры
После накопления данных в таком регистре, построение отчета на любую дату станет тривиальной задачей: достаточно будет сделать запрос к этому регистру сведений на ближайшую к выбранной дате точку замера.
Разберем подробнее, что именно мы теряем, когда пытаемся просто вычесть резервы из остатков. В 1С:УТ 11 реализовано несколько вариантов обеспечения:
Именно из-за этих статусов «свободный остаток» в 11.4 является расчетной величиной. Если вам требуется видеть, сколько товара было доступно неделю назад, вы должны четко определить, какой именно вид доступности вас интересует. Обычно бизнес-пользователям нужен показатель «Доступно для новых заказов», который равен В наличии - Резерв (всех видов).
Подводя итог, отметим: если вы столкнулись с необходимостью анализа доступности на прошлую дату в УТ 11.4, у вас есть три пути. Первый и самый правильный — обновление конфигурации до 11.5, где механизмы работы с запасами были пересмотрены в пользу большей прозрачности и производительности. Второй — использование «Ведомости по товарам» для анализа физических остатков, жертвуя данными о резервах. Третий — разработка собственного регистра-архива через расширение, что позволит хранить «снимки» доступности без необходимости пересчета всей очереди заказов.
Выясним, какой из путей подходит именно вам, исходя из объемов базы данных и критичности этих отчетов для бизнеса. В большинстве случаев, переход на 11.5 окупается за счет снижения затрат на поддержку кастомных отчетов и исправление ошибок ручного распределения резервов.