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