Мне сложно понять функцию, которую вы пытаетесь реализовать из описания. Обычно для этого нужно автоматизировать действия CreateShipment и ConfirmShipment.
Возможно, вам придется обработать особый случай, если все, что блокирует вас, - это выбор данных из сетки внутри интеллектуальной панели «Добавить заказ»:
Используя функцию проверки элемента, определите имя целевого объекта DataView, нажав на сетку:
Используйте View Business Logic Source для поиска исходного кода DataView:
Из исходного кода этого DataView мы видим, что он возвращает 3 DAC (SOShipmentPlan, SOLineSplit и SOLine):
PXSelectJoinOrderBy<SOShipmentPlan,
InnerJoin<SOLineSplit, On<SOLineSplit.planID, Equal<SOShipmentPlan.planID>>,
InnerJoin<SOLine, On<SOLine.orderType, Equal<SOLineSplit.orderType>, And<SOLine.orderNbr, Equal<SOLineSplit.orderNbr>, And<SOLine.lineNbr, Equal<SOLineSplit.lineNbr>>>>>>,
OrderBy<Asc<SOLine.sortOrder, Asc<SOLine.lineNbr, Asc<SOLineSplit.lineNbr>>>>> soshipmentplan;
Имея эту информацию, мы теперь можем перебирать DataView, используя метод Select:
foreach (PXResult<SOShipmentPlan, SOLineSplit, SOLine> plan in Base.soshipmentplan.Select())
{
SOShipmentPlan shipmentPlan = (SOShipmentPlan)plan;
SOLineSplit lineSplit = (SOLineSplit)plan;
SOLine line = (SOLine)plan;
}
Я использовал элемент Base для ссылки на граф SOShipmentEntry, чтобы получить DataView. Это следует использовать, когда вы находитесь в контексте расширения графа SOShipmentEntry:
Base.soshipmentplan.Select()
Если у вас есть прямая ссылка на график SOShipmentEntry, вы можете использовать ее напрямую:
SOShipmentEntry shipmentEntry = PXGraph.CreateInstance<SOShipmentEntry>();
shipmentEntry.soshipmentplan.Select()
EDIT
Код для автоматизации диалога добавления заказа:
shipmentEntry.addsofilter.Current.OrderType = SOOrderTypeConstants.SalesOrder;
shipmentEntry.addsofilter.Current.OrderNbr = "000001";
shipmentEntry.addsofilter.Update(shipmentEntry.addsofilter.Current);
foreach (SOShipmentPlan line in shipmentEntry.soshipmentplan.Select())
{
line.Selected = true;
shipmentEntry.soshipmentplan.Update(line);
}
shipmentEntry.addSO.Press();