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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2010, 14:53   #1  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
Фильтрую справочник Товары по полю "Общий Товарный Но.":

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  
Eugeny_F is offline
Eugeny_F
Участник
 
368 / 28 (1) +++
Регистрация: 18.11.2003
Адрес: Москва
Цитата:
Сообщение от 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.",FORMAT(ItemNo)); попробовать классическое
Item.SETFILTER(Item."Common Item No.",'%1',ItemNo);
не поможет?
Старый 23.04.2010, 15:20   #3  
VProk is offline
VProk
Участник
 
25 / 10 (1) +
Регистрация: 07.03.2007
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Фильтрую справочник Товары по полю "Общий Товарный Но.":

Item.RESET;
Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo));
IF Item.FIND('-') THEN BEGIN
.....

Когда ItemNo (тип Code 40 - так же как и поле "Common Item No.") содержит хотя бы один нецифровой символ - все ок.
Но когда там число - фильтр не работает.

Кто-нибудь может помочь?

Заранее благодарю.
Не может быть такого, что Item."Common Item No." = 0200000007, а ItemNo = 200000007?
Кроме того непонятно, зачем FORMAT(ItemNo), если ItemNo - это Code 40?
Старый 23.04.2010, 17:45   #4  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
Item.SETRANGE(Item."Common Item No.",ItemNo);
Старый 26.04.2010, 08:57   #5  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
К сожалению, ни один из предложенных способов не помогает. Может каким-то образом сказывается, что данные в переменную 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  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Напиши так
Код:
Item.RESET;
Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo));
Item.FIND('-');
И почитай внимательно текст сообщения.
Старый 26.04.2010, 12:45   #7  
Eugeny_F is offline
Eugeny_F
Участник
 
368 / 28 (1) +++
Регистрация: 18.11.2003
Адрес: Москва
Я бы еще попробовал дополнить строку
EVALUATE(ItemNo,ExcelBuffer."Cell Value as Text");
заменив ее на
EVALUATE(ItemNo,DELCHR(' ','<',ExcelBuffer."Cell Value as Text"));
дабы отсечь возможные ведущие пробелы в ItemNo.
Старый 26.04.2010, 15:29   #8  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
Цитата:
Сообщение от Storkich Посмотреть сообщение
Напиши так
Код:
Item.RESET;
Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo));
Item.FIND('-');
И почитай внимательно текст сообщения.
Пишет следующее:
"Нет Товар в пределах фильтра.
Фильтры: Общий Товар Но.: 5 409"
Старый 26.04.2010, 15:34   #9  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
Мне кажется, Nav интерпретирует полученное из Excel значение как число, а не как строку, хотя ItemNo - это Code 40.
В дебаггере можно видеть, что значение ItemNo = 5 409 (отображается с пробелом после цифры 5, как будто это тысячи).

Удаление пробелов с помощью DELCHR не помогло.
Старый 26.04.2010, 15:57   #10  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
--дубль--
Старый 26.04.2010, 16:01   #11  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Пишет следующее:
"Нет Товар в пределах фильтра.
Фильтры: Общий Товар Но.: 5 409"
Ну всё ясно
Пиши так:
Код:
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;
Но возможно, что ExcelBuffer."Cell Value as Text" уже содержит кривое значение, из-за FORMAT(VARIABLE);
Старый 26.04.2010, 16:07   #12  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
хотя ItemNo - это Code 40.
Так и есть, ExcelBuffer."Cell Value as Text" уже содержит кривое значеник.
Мой код из предыдущего поста не поможет(Попробуй поменять тип ItemNo на Integer).

Меняй формат ячеек в Excel на текстовый!
Старый 26.04.2010, 16:15   #13  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Удаление пробелов с помощью DELCHR не помогло.
Это не пробелы наверное, а другой символ. Возможно он уже в экселе есть, тогда автозаменой его и все будет ок.
Старый 26.04.2010, 16:25   #14  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
Цитата:
Сообщение от Storkich Посмотреть сообщение
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Пишет следующее:
"Нет Товар в пределах фильтра.
Фильтры: Общий Товар Но.: 5 409"
Ну всё ясно
Пиши так:
Код:
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;
Но возможно, что ExcelBuffer."Cell Value as Text" уже содержит кривое значение, из-за FORMAT(VARIABLE);
К сожалению, оба варианта не помогли.
Старый 26.04.2010, 16:30   #15  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
Цитата:
Сообщение от prefreitor Посмотреть сообщение
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Удаление пробелов с помощью DELCHR не помогло.
Это не пробелы наверное, а другой символ. Возможно он уже в экселе есть, тогда автозаменой его и все будет ок.
В том то и дело, что в Excel все чисто - четыре последовательных символа '5409'. Это Nav придумывает что-то своё.
Старый 26.04.2010, 16:42   #16  
WhiteSwan is offline
WhiteSwan
Участник
 
26 / 10 (1) +
Регистрация: 29.01.2009
Цитата:
Сообщение от Storkich Посмотреть сообщение
Меняй формат ячеек в Excel на текстовый!
Не помогает и это. Вот уж не думала, что проблема на пустом месте вылезет. Получается, что часть товара, где общий товарный номер - строка из цифр, не будет обработана...
Старый 26.04.2010, 16:48   #17  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Цитата:
Сообщение от Storkich Посмотреть сообщение
Меняй формат ячеек в Excel на текстовый!
Не помогает и это. Вот уж не думала, что проблема на пустом месте вылезет. Получается, что часть товара, где общий товарный номер - строка из цифр, не будет обработана...
Тут хитрость маленькая может помочь: Копировать столбец с кодами в текстовый файлик, затем в экселе ячейки делаем текстом, затем вставляем из текстового файлика.
Можно еще попробовать FORMAT(Value,0,2); в куске кода предложенном выше.
Старый 26.04.2010, 16:52   #18  
Milk is offline
Milk
Участник
 
242 / 12 (1) ++
Регистрация: 08.06.2006
Цитата:
Сообщение от WhiteSwan Посмотреть сообщение
Цитата:
Сообщение от Storkich Посмотреть сообщение
Меняй формат ячеек в Excel на текстовый!
Не помогает и это. Вот уж не думала, что проблема на пустом месте вылезет. Получается, что часть товара, где общий товарный номер - строка из цифр, не будет обработана...
Можно попробовать в таблице 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, 17:24   #19  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Цитата:
Сообщение от 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  
artkashin is offline
artkashin
Участник
MCBMSS
 
519 / 18 (2) ++
Регистрация: 06.12.2006
аГа, по-умолчанию в региональных настройках стоит 255-й символ. Его замена на пробел решит ваши проблемы. Или удалять все 255-е символы кодом.
 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:11.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.