![]() |
#1 |
Участник
|
Фильтрую справочник Товары по полю "Общий Товарный Но.":
Item.RESET; Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo)); IF Item.FIND('-') THEN BEGIN ..... Когда ItemNo (тип Code 40 - так же как и поле "Common Item No.") содержит хотя бы один нецифровой символ - все ок. Но когда там число - фильтр не работает. Кто-нибудь может помочь? Заранее благодарю. |
|
![]() |
#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); не поможет? |
|
![]() |
#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? |
|
![]() |
#4 |
Administrator
|
Item.SETRANGE(Item."Common Item No.",ItemNo);
|
|
![]() |
#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. |
|
![]() |
#6 |
Участник
|
Напиши так
Код: Item.RESET; Item.SETFILTER(Item."Common Item No.",FORMAT(ItemNo)); Item.FIND('-'); |
|
![]() |
#7 |
Участник
|
Я бы еще попробовал дополнить строку
EVALUATE(ItemNo,ExcelBuffer."Cell Value as Text"); заменив ее на EVALUATE(ItemNo,DELCHR(' ','<',ExcelBuffer."Cell Value as Text")); дабы отсечь возможные ведущие пробелы в ItemNo. |
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
Мне кажется, Nav интерпретирует полученное из Excel значение как число, а не как строку, хотя ItemNo - это Code 40.
В дебаггере можно видеть, что значение ItemNo = 5 409 (отображается с пробелом после цифры 5, как будто это тысячи). Удаление пробелов с помощью DELCHR не помогло. |
|
![]() |
#10 |
Участник
|
--дубль--
|
|
![]() |
#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; |
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Участник
|
|
|
![]() |
#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; ![]() |
|
![]() |
#15 |
Участник
|
В том то и дело, что в Excel все чисто - четыре последовательных символа '5409'. Это Nav придумывает что-то своё.
|
|
![]() |
#16 |
Участник
|
|
|
![]() |
#17 |
Участник
|
Цитата:
Можно еще попробовать FORMAT(Value,0,2); в куске кода предложенном выше. |
|
![]() |
#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),'<',' '); |
|
![]() |
#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),'<',' '); И так, чтоб легче жилось, в панели управления, в регионалных настройках, в настройке форматов чисел, удали разделитель разрядов и вставь там пробел. |
|
![]() |
#20 |
Участник
|
аГа, по-умолчанию в региональных настройках стоит 255-й символ. Его замена на пробел решит ваши проблемы. Или удалять все 255-е символы кодом.
|
|