Анатолий Зеров написал совет о том, как программно зарезервировать строки заказа. Этот совет также будет полезен, если вы хотите снять резерв.
На простом примере рассмотрим реализацию поставленной перед нами задачи.
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 и ряда некоторых других параметров. Позволяет производить как резервирование указанного количества так и снятие резерва.
Далее:
- Организуем цикл по строкам заказа.
- В теле цикла на основании текущей строки заказа инициализируем переменную класса
inventMovement. - На основании проинициализированного inventMovement инициализируем переменную класса
inventUpd_Reservation.
В качестве первого параметра передаем саму переменную inventMovement, второй параметр – это резервируемое количество (в данном премере мы резервируем все количество, указанное в строке заказа). - Для переменной inventUpd_Reservation вызываем метод updateNow().
Вот в общем-то и все.
Несколько комментариев:
В приведенном выше примере мы производим резервирование всего кличества в строке заказа, но на самом деле мы можем указывать то количество которое нам необходимо.
Чтобы зарезервировать, надо передать отрицательное количество. Если в методе
InventUpd_Reservation::newMovementуказать количество с положительным знаком, то эффект будет обратным, система попытается снять с резерва указанное нами количество.Метод transQty() возвращает отрицательное количество поскольку мы работаем с движением расхода. А в расходе количество всегда отрицательное.
Третий параметр определяет, можно ли уменьшать резервируемое количество до количества имеющегося в наличии или нет, если в наличии меньше, чем мы пытаемся зарезервировать. Если значение третьего параметра будет false, то в случае нехватки количества номенклатуры для резервирования не будет зарезервировано ничего.)
Зеров Анатолий (ZAN), zerov@mazzy.ru