Показать сообщение отдельно
Старый 14.04.2004, 10:32   #11  
dmit1606 is offline
dmit1606
Участник
 
23 / 10 (1) +
Регистрация: 04.07.2003
Адрес: Moscow
Pegiy прав, если это есть в Axapta это не значить, что так везде нужно внедрять. Желательно, с наименьшими изменениями, чтобы не нарушить бизнес-процесс заложенный в Axapta.
Но требование заказчика, чтобы в строках заказа номенклатура не дублировалась (связано ли это с неполным средним образованием или с недостаточным интелектом не знаю, люди нормальные со своим жизненным опытом). Тем более операционистам принимающим заказ от клиента до балды на каком складе, партии, ячейке и т.п. лежит товар, главное что он есть или вот-вот будет (отрицательный склад). Выбрать товар используя аналитику это дело материального лица в зоне комплектации (я так понял glibs об этом сказал).
В чем состоит автоматизация на предприятии: я думаю в первую очередь автоматизировать рутинные операции, чтобы увеличить производительность рабочего места.
Клиент всегда прав (он платит денежки), пока жив. А наш клиент еще жив и в добавок развивается. Так что делайте выводы...
Извиняюсь за спам.

И все таки вернемся к проблеме.
Через переопределение метода SalesLine.ItemId.Validate() находим что выбранная номенклатура уже используется в заказе. Используем метод findValue(), курсор перескакивает на нужную запись, но возникает проблема отображения поля ItemId, связанная с тем что findValue - это фильтр и введенное значение ItemId не отменено.

public boolean validate()
{
boolean ret;
SalesLine lines;
ItemId _itemId;
;

select firstonly lines
where lines.SalesId == SalesTable.SalesId &&
lines.ItemId == SalesLine.ItemId;

if (lines)
{
info("Номенклатура " + lines.ItemId + " - " + lines.Name + " уже есть в заказе.");

//**********************
SalesLine_ds.findValue(fieldNum(SalesLine,ItemId), lines.ItemId);
//**********************

ret = false;
}
else
ret = super();

return ret;
}

Вот посмотрите что происходит после findValue. Как этого избежать?
Заранее спасибо.