|  23.04.2010, 14:53 | #1 | 
| Участник | 
			
			Фильтрую справочник Товары по полю "Общий Товарный Но.": Item.RESET; Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo)); IF Item.FIND('-') THEN BEGIN ..... Когда ItemNo (тип Code 40 - так же как и поле "Common Item No.") содержит хотя бы один нецифровой символ - все ок. Но когда там число - фильтр не работает. Кто-нибудь может помочь? Заранее благодарю. | 
|  | 
|  23.04.2010, 15:14 | #2 | 
| Участник | Цитата: 
		
			Сообщение от WhiteSwan
			   Фильтрую справочник Товары по полю "Общий Товарный Но.": Item.RESET; Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo)); IF Item.FIND('-') THEN BEGIN ..... Когда ItemNo (тип Code 40 - так же как и поле "Common Item No.") содержит хотя бы один нецифровой символ - все ок. Но когда там число - фильтр не работает. Кто-нибудь может помочь? Заранее благодарю. Item.SETFILTER(Item."Common Item No.",'%1',ItemNo); не поможет? | 
|  | 
|  23.04.2010, 15:20 | #3 | 
| Участник | Цитата: 
		
			Сообщение от WhiteSwan
			   Фильтрую справочник Товары по полю "Общий Товарный Но.": Item.RESET; Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo)); IF Item.FIND('-') THEN BEGIN ..... Когда ItemNo (тип Code 40 - так же как и поле "Common Item No.") содержит хотя бы один нецифровой символ - все ок. Но когда там число - фильтр не работает. Кто-нибудь может помочь? Заранее благодарю. Кроме того непонятно, зачем FORMAT(ItemNo), если ItemNo - это Code 40? | 
|  | 
|  23.04.2010, 17:45 | #4 | 
| Administrator | 
			
			Item.SETRANGE(Item."Common Item No.",ItemNo);
		 | 
|  | 
|  26.04.2010, 08:57 | #5 | 
| Участник | 
			
			К сожалению, ни один из предложенных способов не помогает. Может каким-то образом сказывается, что данные в переменную ItemNo считываются из Excel? Уточню код: ExcelBuffer.ReadSheet; ... IF ExcelBuffer.GET(r, 2) THEN EVALUATE(ItemNo,ExcelBuffer."Cell Value as Text"); Item.RESET; Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo)); IF Item.FIND('-') THEN BEGIN ... ItemNo - это глобальная переменная в рамках объекта Report. | 
|  | 
|  26.04.2010, 09:41 | #6 | 
| Участник | 
			
			Напиши так Код: Item.RESET;
Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo));
Item.FIND('-'); | 
|  | 
|  26.04.2010, 12:45 | #7 | 
| Участник | 
			
			Я бы еще попробовал дополнить строку EVALUATE(ItemNo,ExcelBuffer."Cell Value as Text"); заменив ее на EVALUATE(ItemNo,DELCHR(' ','<',ExcelBuffer."Cell Value as Text")); дабы отсечь возможные ведущие пробелы в ItemNo. | 
|  | 
|  26.04.2010, 15:29 | #8 | 
| Участник | |
|  | 
|  26.04.2010, 15:34 | #9 | 
| Участник | 
			
			Мне кажется, Nav интерпретирует полученное из Excel значение как число, а не как строку, хотя ItemNo - это Code 40. В дебаггере можно видеть, что значение ItemNo = 5 409 (отображается с пробелом после цифры 5, как будто это тысячи). Удаление пробелов с помощью DELCHR не помогло. | 
|  | 
|  26.04.2010, 15:57 | #10 | 
| Участник | 
			
			--дубль--
		 | 
|  | 
|  26.04.2010, 16:01 | #11 | 
| Участник | Цитата: Пиши так: Код: Item.RESET;
Item.SETrange(Item."Common Item No.",FORMAT(ItemNo,0,1));
Item.FIND('-');Код: Item.RESET;
IF ExcelBuffer.GET(r, 2) THEN BEGIN
  Item.SETrange(Item."Common Item No.",ExcelBuffer."Cell Value as Text");
  Item.FIND('-');
  ...
end; | 
|  | 
|  26.04.2010, 16:07 | #12 | 
| Участник | |
|  | 
|  26.04.2010, 16:15 | #13 | 
| Участник | |
|  | 
|  26.04.2010, 16:25 | #14 | 
| Участник | Цитата: 
		
			Сообщение от Storkich
			   Цитата: Пиши так: Код: Item.RESET;
Item.SETrange(Item."Common Item No.",FORMAT(ItemNo,0,1));
Item.FIND('-');Код: Item.RESET;
IF ExcelBuffer.GET(r, 2) THEN BEGIN
  Item.SETrange(Item."Common Item No.",ExcelBuffer."Cell Value as Text");
  Item.FIND('-');
  ...
end;  | 
|  | 
|  26.04.2010, 16:30 | #15 | 
| Участник | 
			
			В том то и дело, что в Excel все чисто - четыре последовательных символа '5409'. Это Nav придумывает что-то своё.
		 | 
|  | 
|  26.04.2010, 16:42 | #16 | 
| Участник | |
|  | 
|  26.04.2010, 16:48 | #17 | 
| Участник | Цитата: Можно еще попробовать FORMAT(Value,0,2); в куске кода предложенном выше. | 
|  | 
|  26.04.2010, 16:52 | #18 | 
| Участник | Цитата: "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' '); на "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value, 0, 1),'<',' '); | 
|  | 
|  26.04.2010, 17:24 | #19 | 
| Участник | Цитата: 
		
			Сообщение от Milk
			   Можно попробовать в таблице Excel Buffer (если Вы пользуетесь ей) в функции ReadSheet заменить строчку "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' '); на "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value, 0, 1),'<',' '); И так, чтоб легче жилось, в панели управления, в регионалных настройках, в настройке форматов чисел, удали разделитель разрядов и вставь там пробел. | 
|  | 
|  26.04.2010, 22:13 | #20 | 
| Участник | 
			
			аГа, по-умолчанию в региональных настройках стоит 255-й символ. Его замена на пробел решит ваши проблемы. Или удалять все 255-е символы кодом.
		 | 
|  |