Как реализовать резервирование и обеспечение товаров в 1С:УТ 11.5 при отсутствии смешанных статусов в одной строке?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При переходе с версии 1С:Управление торговлей 11.4 на 11.5 многие пользователи и разработчики сталкиваются с серьезным изменением в логике работы заказов. Если в версии 11.4 одна строка документа (например, «Заказ клиента») могла одновременно содержать информацию о том, что часть товара нужно отгрузить, часть зарезервировать, а часть только обеспечить, то в версии 11.5 эта возможность была исключена. Теперь система придерживается жесткого правила: одна строка — одно действие.

В этой статье мы подробно разберем, почему произошли эти изменения, как теперь работать с обеспечением в пользовательском режиме и как автоматизировать процесс разбиения строк программно, если стандартные средства кажутся неудобными.

Анализируем причины изменений: концепция «Распределения запасов»

Рассмотрим, почему разработчики 1С пошли на такой шаг. В старых версиях (11.4 и ранее) «сложное» состояние строки хранилось во внутренних скрытых таблицах, что часто приводило к ошибкам в расчете остатков, сложностям при работе с сериями и замедлению проведения документов. В версии 11.5 был внедрен механизм Распределение запасов. Этот регистр работает максимально эффективно, когда каждая строка четко определяет намерение пользователя. Проанализируем основные преимущества новой схемы:

  1. Прозрачность складского учета: кладовщик видит конкретные строки на отгрузку, а не высчитывает доли внутри одной позиции.
  2. Автоматизация фонового обеспечения: система может самостоятельно распределять пришедший на склад товар по заказам в фоновом режиме, опираясь на приоритеты.
  3. Упрощение работы с сериями: привязка серий к конкретному действию (например, «Отгрузить») становится однозначной.

Использование стандартного механизма разбиения строк

Выясним, как пользователю добиться привычного результата без программирования. Вместо ручного изменения статуса в колонке Действие, рекомендуется использовать специализированный помощник. Разберем шаги:

  1. Выделите нужные строки в табличной части Товары.
  2. Нажмите кнопку Заполнить над таблицей и выберите пункт Обеспечение.
  3. В открывшейся форме выберите стратегию (например, «Резервировать на складе» или «Отгрузить»).

Если выбранное количество превышает доступный остаток, система предложит автоматически разбить строку на две: одна получит статус «Отгрузить» (на доступное количество), а вторая — «К обеспечению» или «Резервировать по мере поступления» (на остаток). Это и есть замена старому «мастеру», который был в 11.4.

Почему автоматическое разбиение может не срабатывать?

Проанализируем ситуацию, когда при выборе действия «Отгрузить» система не предлагает разделить строку, а просто выдает ошибку или устанавливает статус на все количество. Рассмотрим основные причины:

Программное решение: восстанавливаем удобство выбора

Если типовой интерфейс кажется пользователям слишком перегруженным («слишком много кликов»), мы можем реализовать собственную команду, которая будет вызывать штатную форму запроса количества и серий, имитируя поведение старых версий. Посмотрим на пример реализации команды для текущей строки заказа:


&НаКлиенте
Процедура дор_Обеспечение(Команда) Экспорт
    // Получаем данные текущей строки из таблицы товаров
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    ВариантОбеспеченияПоДокументу = ТекущиеДанные.ВариантОбеспечения;
    
    // Вызываем функцию подготовки параметров для формы обеспечения
    // Используем типовой программный интерфейс УТ 11.5
    ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия);
    
    Если ПараметрыФормы <> Неопределено Тогда
        ПараметрыФормы.ПодборСерий = Истина;
        ПараметрыФормы.ВариантОбеспеченияПоДокументу = ВариантОбеспеченияПоДокументу;
        
        // Открываем штатную обработку запроса количества
        ОткрытьФорму(
            "Обработка.ЗапросКоличестваИСерий.Форма",
            ПараметрыФормы,
            ЭтотОбъект,
            ,
            ,
            ,
            Новый ОписаниеОповещения("ОбработатьВыборСкладаИСерии", ЭтотОбъект, ПараметрыФормы)
        );
    КонецЕсли;
КонецПроцедуры

Важно понимать, что после закрытия этой формы (в процедуре оповещения ОбработатьВыборСкладаИСерии) нам необходимо программно обработать результат. Если пользователь указал количество меньше, чем было в строке, или выбрал несколько вариантов обеспечения, мы должны вызвать метод ОбеспечениеВДокументах.РазбитьСтрокуПоРезультатамОбеспечения(). Это критически важно для корректного заполнения регистров ЗапасыИПотребности и РаспределениеЗапасов.

Рекомендации по адаптации

Рассмотрим общие рекомендации для плавного перехода на новую архитектуру 11.5:

  1. Обучение персонала: Объясните пользователям, что теперь «красивая» табличная часть с множеством строк — это норма, а не ошибка. Это необходимо для корректной работы автоматики.
  2. Настройка прав: Убедитесь, что у пользователей есть права на использование обработки ЗапросКоличестваИСерий, так как она часто используется в подсистеме обеспечения.
  3. Использование расширений: Если вы решили внедрять программное разбиение, делайте это через расширение, чтобы не снимать документ с поддержки. Используйте перехват события ОбработкаВыбора для поля Действие.

Подводя итог, можно сказать, что механизм обеспечения в УТ 11.5 стал более строгим, но при этом более надежным. Вместо борьбы с системой и попыток вернуть логику «все в одной строке», правильнее будет освоить инструменты автоматического разбиения и адаптировать под них свои бизнес-процессы.

← На главную