Анатолий Зеров написал совет о том, как программно зарезервировать строки заказа. Этот совет также будет полезен, если вы хотите снять резерв.

На простом примере рассмотрим реализацию поставленной перед нами задачи.

static void ReservationSalesLine(Args _args)
{
  SalesLine salesLine;
  InventMovement inventMoveme;
  InventUpd_Reservation inventUpdReservation;

/*1.*/ while select salesLine where salesLine.SalesId == 'Зк-000212' {
/*2.*/   inventMovement = InventMovement::construct (salesLine);
/*3.*/   inventUpdReservation = InventUpd_Reservation::newMovement(inventMovement, inventMovement.transQty(), false );
/*4.*/   inventUpdReservation.updateNow();
       }
}

И так, нам необходимо зарезервировать строку заказа. Для этого создадим небольшой Job.

SalesLine - табличная переменная – строка заказа.
InventMovement - конструкция, определяемая на основании табличной переменной, и, предоставляющая нам определенный диапазон значений.
InventUpd_Reservation - конструкция определяемая на основании inventMovement и ряда некоторых других параметров. Позволяет производить как резервирование указанного количества так и снятие резерва.

Далее:

  1. Организуем цикл по строкам заказа.
  2. В теле цикла на основании текущей строки заказа инициализируем переменную класса inventMovement.
  3. На основании проинициализированного inventMovement инициализируем переменную класса inventUpd_Reservation.
    В качестве первого параметра передаем саму переменную inventMovement, второй параметр – это резервируемое количество (в данном премере мы резервируем все количество, указанное в строке заказа).
  4. Для переменной inventUpd_Reservation вызываем метод updateNow().

Вот в общем-то и все.

Несколько комментариев:

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

Чтобы зарезервировать, надо передать отрицательное количество. Если в методе InventUpd_Reservation::newMovement указать количество с положительным знаком, то эффект будет обратным, система попытается снять с резерва указанное нами количество.

Метод transQty() возвращает отрицательное количество поскольку мы работаем с движением расхода. А в расходе количество всегда отрицательное.

Третий параметр определяет, можно ли уменьшать резервируемое количество до количества имеющегося в наличии или нет, если в наличии меньше, чем мы пытаемся зарезервировать. Если значение третьего параметра будет false, то в случае нехватки количества номенклатуры для резервирования не будет зарезервировано ничего.)

Зеров Анатолий (ZAN), zerov@mazzy.ru