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-е символы кодом.
|
|