AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.07.2008, 14:39   #1  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Есть такая форма 7139(Бюджет Продаж Обзор), когда мы выбираем Показывать в Строках, допустим Товар, То у нас вываливаеться список всех товаров!!!! Как мне наложить фильтр, чтобы вываливася писок товаров, которые указаны в Таблице 7134(поле ТОВАР НОМЕР)?????

Я так понимаю, что пре выборе Товар, идет обновления Формы, и происходит поиск всех товаров по событию OnFindRecord и OnNExtRecord, которые в свою очередь оброшаются в кодеюнит: 7130..
в функции FindRec и соответственно NextRec...
теперь как быть дальше???? что нужно ????
Старый 08.07.2008, 14:57   #2  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Ну это вам надо править функции кодьюнита Item Budget Management чтобы они фильтровали только то что есть в вашем бюджете.
__________________
Want to believe...
Старый 08.07.2008, 15:20   #3  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
Не могу понять каким здесь можно образом сделать фильтр на таблицу Item:
FINDREC:
Код:
  DimOption::Item:
	BEGIN
	  Item."No." := DimCodeBuf.Code;
	  IF ItemFilter <> '' THEN
		Item.SETFILTER("No.",ItemFilter);
	  Found := Item.FIND(Which);
	  IF Found THEN
		CopyItemToBuf(Item,DimCodeBuf);
	END;
NEXTREC:
Код:
  DimOption::Item:
	BEGIN
	  Item."No." := DimCodeBuf.Code;
	  IF ItemFilter <> '' THEN
		Item.SETFILTER("No.",ItemFilter);
		ResultSteps := Item.NEXT(Steps);
	  IF ResultSteps <> 0 THEN
		CopyItemToBuf(Item,DimCodeBuf);
	END;
Старый 08.07.2008, 17:44   #4  
rmv is offline
rmv
Участник
 
481 / 11 (1) +
Регистрация: 15.02.2005
Придется формировать временную таблицу Item на основе записей в 7134 и на Find и Next тащить записи из нее.
Старый 08.07.2008, 22:33   #5  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
можно сделать аналог функции copyItemtoBuf назвать например CopyItemBudgetToBuf в которой уже пробегать по строчкам бюджета и вставлять соответвующие записи в буфер.
__________________
Want to believe...
Старый 09.07.2008, 12:03   #6  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
DA_NEAL, не могу реализовать...
Что не правильно?

Код:
WITH DimCodeBuf DO BEGIN
  INIT;
IF ItemBudgetEntry.FIND('-') THEN REPEAT
	 IF ItemBudgetEntry."Item No." = Item."No." THEN BEGIN
  Code := Item."No.";
  Name := Item.Description;
	 END;
UNTIL ItemBudgetEntry.NEXT =0;
END;
Старый 09.07.2008, 14:28   #7  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Тут похитрее надо как то похоже . И не в этом месте.
__________________
Want to believe...
Старый 09.07.2008, 15:03   #8  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
как и сказал rmv думаю надо сделать следующее:

1. Завести глобальную переменную tmpItem в кодюните Item Budget Management
2. В одной из функций вызываемых из формы (думаю ItemBudgetManagement.ValidateLineDimCode и возможно на BudgetNameSelection) встроить код который по вашей логике пробегается по ItemBudgetEntry и вставляет записи в таблицу tmpItem.
3. в функция FindRec и NextRec заменить переменную Item в коде на tmpItem

FindRec

DimOption::Item:
BEGIN
tmpItem."No." := DimCodeBuf.Code;
IF ItemFilter <> '' THEN
tmpItem.SETFILTER("No.",ItemFilter);
Found := tmpItem.FIND(Which);
IF Found THEN
CopyItemToBuf(tmpItem,DimCodeBuf);
END;


NextRec

DimOption::Item:
BEGIN
tmpItem."No." := DimCodeBuf.Code;
IF ItemFilter <> '' THEN
tmpItem.SETFILTER("No.",ItemFilter);
ResultSteps := tmpItem.NEXT(Steps);

IF ResultSteps <> 0 THEN
CopyItemToBuf(tmpItem,DimCodeBuf)
END;
__________________
Want to believe...
Старый 16.07.2008, 14:11   #9  
by_HT is offline
by_HT
Участник
 
195 / 10 (1) +
Регистрация: 12.10.2007
пишу в ItemBudgetManagement.ValidateLineDimCode:
tmpItem.DELETEALL;
IF LineDimOption=LineDimOption::Item THEN BEGIN
ItemBudgetEntry.SETFILTER("Budget Name",ItemBudgetName.Name);
IF ItemBudgetEntry.FIND('-') THEN REPEAT
Item.SETFILTER("No.",ItemBudgetEntry."Item No.");
IF Item.FIND('-') THEN BEGIN
tmpItem:=Item;
tmpItem.INSERT;
END;
UNTIL ItemBudgetEntry.NEXT=0;
END;

говорит, что Товар Номер такой уже существует!
Старый 16.07.2008, 14:28   #10  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
а причем тут табличка Item если мы вставляем в tmpItem Не надо так делать TmpItem = Item.
Вот код попроще:

IF LineDimOption = LineDimOption::Item THEN
BEGIN
ItemBudgetEntry.RESET;
IF ItemBudgetEntry.FINDFIRST THEN
REPEAT
Item.GET(ItemBudgetEntry."Item No.");
tmpItem."No." := ItemBudgetEntry."Item No.";
tmpItem.Description := Item.Description;
IF tmpItem.INSERT THEN;
UNTIL ItemBudgetEntry.NEXT = 0;
END;
__________________
Want to believe...
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:24.