|
|
|
|
#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 |
|
Участник
|
|
|
|
|
|
#8 |
|
Участник
|
--дубль--
|
|
|
|
|
#9 |
|
Участник
|
Цитата:
Пиши так: Код: 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; |
|
|
|
|
#10 |
|
Участник
|
Цитата:
Сообщение от 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;
|
|
|
|
|
#11 |
|
Участник
|
Я бы еще попробовал дополнить строку
EVALUATE(ItemNo,ExcelBuffer."Cell Value as Text"); заменив ее на EVALUATE(ItemNo,DELCHR(' ','<',ExcelBuffer."Cell Value as Text")); дабы отсечь возможные ведущие пробелы в ItemNo. |
|
|
|
|
#12 |
|
Участник
|
Мне кажется, Nav интерпретирует полученное из Excel значение как число, а не как строку, хотя ItemNo - это Code 40.
В дебаггере можно видеть, что значение ItemNo = 5 409 (отображается с пробелом после цифры 5, как будто это тысячи). Удаление пробелов с помощью DELCHR не помогло. |
|
|
|
|
#13 |
|
Участник
|
|
|
|
|
|
#14 |
|
Участник
|
|
|
|
|
|
#15 |
|
Участник
|
Цитата:
Можно еще попробовать FORMAT(Value,0,2); в куске кода предложенном выше. |
|
|
|
|
#16 |
|
Участник
|
Цитата:
"Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value),'<',' '); на "Cell Value as Text" := DELCHR(FORMAT(XlWrkSht.Range(xlColID + xlRowID).Value, 0, 1),'<',' '); |
|
|
|
|
#17 |
|
Участник
|
Цитата:
Сообщение от 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),'<',' '); И так, чтоб легче жилось, в панели управления, в регионалных настройках, в настройке форматов чисел, удали разделитель разрядов и вставь там пробел. |
|
|
|
|
#18 |
|
Участник
|
Цитата:
Сообщение от 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),'<',' '); Региональные настройки я бы не стала трогать, т.к. в моем случае функция должны быть универсальной и не зависеть от конкретного ПК. Всем спасибо за советы. |
|
|
|
|
#19 |
|
Участник
|
|
|
|
|
|
#20 |
|
Участник
|
В том то и дело, что в Excel все чисто - четыре последовательных символа '5409'. Это Nav придумывает что-то своё.
|
|
|