Помогите с позиционированием записи...

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Помогите с позиционированием записи...

Сообщение DarkAngel27 »

Галактика 7.12 пишу следующий код на VIP:

Код: Выделить всё

if getfirst hdr_ps=tsOK then 
 if getfirst ps_lines=tsOK then
   If getfirst katmc1=tsOK then
   {
   } while ((pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK) and (getnext katmc1=tsOK))
В 7.11 позиционирование происходило нормально. В 7.12 позиционируется только если нужная запись стоит последней.
Если добавить в фильтр запроса эту строчку, то вообще ничего не выгружается:
(pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK)
Что я делаю не так? :???:
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

А почему бы это условие не наложить в логической таблице и делать по ней простой _Loop ?
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

В таблице должна проиходить модификация. В _loop этого не рекомендуют делать. Приходится по старинке делать.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

External _Loop

и все дела.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

на крайний случай подцепи по нреку синоним.
луп делай по одному, а апдейт по другой.
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Сообщение Goblin »

В _loop не рекомендуется делать модификацию полей , входящих в сегменты индекса, по которому делается проход. Все остальные поля модифицировать - ради бога ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

А без _loop обойтись никак нельзя?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

а в сапорте то выбора проходит?
и зачем писать
(pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK)
булиновское значение сравниваете с word
pos=1 уже тогда нужно взять в скобки навсяк случай
эт наверное правильнее
pos(upcase('В'),upcase(katmc1.name))<>1
а быстрее будет
upcase(substr(katmc1.name,1,1))<>'B'
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

Код: Выделить всё

(pos(upcase('В'),upcase(katmc1.name))=1 <>tsOK)
Это действительно была моя глупость.
Меня другое интересует: В этом куске кода

Код: Выделить всё

while ((pos(upcase('В'),upcase(katmc1.name))<>1) and (getnext katmc1=tsOK))
я перескакиваю на идущую далее запись, как сделать так, чтобы он не перепрыгивал далее, а оставался на записи, в которой нашёл 'В'?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

вопрос в порядке обработки
я бы сделал
do {
if pos(upcase('В'),upcase(katmc1.name))=1 then break ;

} while getnext katmc1=0 ;
так надежней и проще для понимания.
а можно и так(тут уж контекста зависит)
if getfirst katmc where (( 'B' <<= katmc.name and
'BЯ'>>=katmc.name ))=0
{


}
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »

а в сапорте то выбора проходит?
В Support выгрузка работает...
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

edward_K писал(а): if getfirst katmc where (( 'B' <<= katmc.name and
'BЯ'>>=katmc.name ))=0
однозначно работать не будет. конструкци <<= >>= используется только для последнего сегмента индекса. Если сегмент всего 1, конструкция неприменима
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

не знаю как у вас, у меня вроде прокатывает - поскольку слова последнего касаются не сегмента индекса, а условия по индексу.
в сапорте выполните
select katmc.name where (( 'B' <<= katmc.name and 'BЯ'>>=katmc.name )) ;
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Попробуйте то же самое выполнить в ВИП
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
DarkAngel27
Местный житель
Сообщения: 228
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение DarkAngel27 »


Попробуйте то же самое выполнить в ВИП
Так на Vip все и делается.
Ответить