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