On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 1977
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 15:45. Заголовок: Сортировка по алфавиту ???


Всем привет.
Постановка задачи такая:
Есть справочник-улиц (street.dbf) типа:
Kstreet - Street
1 - Махалина ул.
2 - Федорова ул.
.....
990 - Алтуфьевское шоссе
.....

В основной базе "списка адресов" (допустим dogovor.dbf) записывается код улицы Kstreet.
При выборке из базы (использую условный индекс) выводиться нужный мне список.
Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц.

А как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов" ?
Чтобы список показывался по алфавиту ???



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 57 , стр: 1 2 3 All [только новые]





Пост N: 354
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 15:53. Заголовок: Andrey пишет: Задаю..


Andrey пишет:

 цитата:
Задаю сортировку по коду улицы (Kstreet). Получаю отсортированный список не по алфавиту улиц.

Индекс ведь по коду, а не по наименованию

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1979
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:02. Заголовок: AlexMyr пишет: Инде..


AlexMyr пишет:

 цитата:
Индекс ведь по коду, а не по наименованию



Вот именно. А коды не совпадают с (алфавитом) улиц. Пытался делать справочники улиц заранее, но по всем городам не смог.
Для печати приходиться делать отдельную базу и выводить туда наименование улиц.
Сортировка тогда правильная.

Может кто решил данную проблему ?
Поделитесь идеей....


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2220
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:02. Заголовок: В dogovor сделать re..


В dogovor сделать relation на street по kstreet
И создать временный индекс по street->Street

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1980
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:06. Заголовок: Pasha пишет: В dogo..


Pasha пишет:

 цитата:
В dogovor сделать relation на street по kstreet


Это уже есть давно....

Pasha пишет:

 цитата:
И создать временный индекс по street->Street


Это тоже есть.... Я про бд-улиц (use street ; index on UPPER(street) to.... ), этот индекс у меня постоянный.

Как базу dogovor.dbf индексировать ? Условие сортировки какое ставить ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 355
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 16:07. Заголовок: И я о том же, нужен ..


И я о том же, нужен отдельный индекс по street и при выводе на екран переключаться на этот индекс.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 356
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 16:13. Заголовок: Ага, список выводитс..


Ага, список выводится из базы dogovor, где есть только kstreet, а из базы street берутся только наименования через relation, правильно понял?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2221
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:22. Заголовок: Andrey пишет: Это т..


Andrey пишет:

 цитата:
Это тоже есть.... Я про бд-улиц (use street ; index on UPPER(street) to.... ), этот индекс у меня постоянный.

Как базу dogovor.dbf индексировать ? Условие сортировки какое ставить ?



В street должен быть управляющий индекс по kstreet, это для того, чтобы работал set relation.
А в dogovor сделать индекс по выражению street->Street
Но надо иметь в виду, что этот индекс будет работать, только когда включен set relation, иначе его использовать нельзя


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1982
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:25. Заголовок: AlexMyr пишет: И я ..


AlexMyr пишет:

 цитата:
И я о том же, нужен отдельный индекс по street и при выводе на екран переключаться на этот индекс.


Я не понимаю как переключаться ?

Использую условную индексацию:
INDEX ON &cIndexTo TAG "ONE" TO (имя врем.индекса) ;
EVAL SAY_PROCENT() ;
EVERY nKolRecords / 10 WHILE &cFilterTo ADDITIVE

cIndexTo := "STR(KCITY)+STR(KSTREET)+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"
cFilterTo := "Kcity=350.AND.!DELETED()"

И дальше переключаю на этот индекс.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1983
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:29. Заголовок: Pasha пишет: В stre..


Pasha пишет:

 цитата:
В street должен быть управляющий индекс по kstreet, это для того, чтобы работал set relation.


Да это уже есть у меня.


 цитата:

А в dogovor сделать индекс по выражению street->Street


Не совсем понял....


 цитата:

Но надо иметь в виду, что этот индекс будет работать, только когда включен set relation, иначе его использовать нельзя


Да это уже есть у меня....


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2222
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:33. Заголовок: Andrey пишет: cInde..


Andrey пишет:

 цитата:
cIndexTo := "STR(KCITY)+STR(KSTREET)+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"



Вместо KSTREET поставить STREET->STREET
и сделать set relation, как я написал

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 357
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 05.01.12 16:34. Заголовок: Andrey Подумал и сде..


Andrey Подумал и сделал бы так, основная база street, дочерняя dogovor, дальше основной индекс street и вывод списка street->street, dogovor->field1,dogovor->filedn

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2223
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:37. Заголовок: или не заморачиватьс..


или не заморачиваться с релэйшн, а написать функцию

func StreetName
if dogovor->KStreet != street->KStreet
street->(dbSeek(dogovor->KStreet))
endif
Return street->Street

и использовать выражение

"STR(KCITY)+StreetName()+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1984
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.12 16:38. Заголовок: AlexMyr, Pasha - СПА..


AlexMyr, Pasha - СПАСИБО БОЛЬШОЕ !!!
Буду пробовать...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2224
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.01.12 16:41. Заголовок: AlexMyr пишет: Andr..


AlexMyr пишет:

 цитата:
Andrey Подумал и сделал бы так, основная база street, дочерняя dogovor, дальше основной индекс street и вывод списка street->street, dogovor->field1,dogovor->filedn



Я часто использую такой прием, в комбинации с переопределением навигационных блоков кода.
Но, боюсь, это будет слишком нетривиально, навигационные блоки у меня немаленькие.


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 05.01.12 17:31. Заголовок: Нужная сортировка также может быть получена применением собственных кодов улиц


Цитата:
Задаю сортировку по коду улицы (Kstreet).
Получаю отсортированный список не по алфавиту улиц.

Иногда в этом случае можно получить и сортировку по алфавиту

Если есть возможность применения собственных кодов улиц для связки со справочником,
то можно содержать ключи, задающие алфавитную сортировку наименований улиц,
число которых конечно (явно ограничено).
То есть значение ключа - это некий хэш от названия.
Ключа длиной 10 символов достаточно для обеспечения нужной сортировки
и уникальности ключа.


Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 283
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.01.12 19:19. Заголовок: Андрей, ты же любите..


Андрей, ты же любитель условной индексации. А с ней просто получается.
Создаем временный индекс
В базе перед созданием индекса должно быть установлена связь бызы договоров с улицами по коду улиц.

Dbsetorder(0)
go top

IndexTo := "street->STREET+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"
cFilterTo := "Kcity=350.AND.!DELETED()"

ORDSETFOCUS( "ONE" )
Паша, выше все написал.
Попробовал, все строится как надо.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1986
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.01.12 22:04. Заголовок: Vlad04 пишет: Паша,..


Vlad04 пишет:

 цитата:
Паша, выше все написал.
Попробовал, все строится как надо.



Спасибо. Я тоже уже попробовал.
Все классно получается. Чуть-чуть медленей показывается список.
А так все здорово.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1987
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.01.12 16:29. Заголовок: А как получить "..


А как получить "УСЛОВИЕ ОТБОРА" - FOR из индекса ?

Использую условную индексацию:
SELECT MYDBF
INDEX ON &cIndexTo TAG "ONE" TO (имя врем.индекса) ;
EVAL SAY_PROCENT() ;
EVERY nKolRecords / 10 FOR &cFilterTo ADDITIVE

cIndexTo := "STR(KCITY)+STR(KSTREET)+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"
cFilterTo := "Kcity=350.AND.!DELETED()"
.......
код программы
.......

SELECT MYDBF
cIndexTo := DBORDERINFO(DBOI_EXPRESSION)
? cIndexTo

cFilterTo := ????

Мне нужно получить значение cFilterTo

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1988
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.01.12 16:56. Заголовок: Нашел.... DBORDERI..


Нашел.... DBORDERINFO(DBOI_CONDITION) !

А как для случая - WHILE ?

INDEX ON &cIndexTo TAG "ONE" TO (имя врем.индекса) ;
EVAL SAY_PROCENT() ;
EVERY nKolRecords / 10 WHILE &cFilterTo ADDITIVE

Мне нужно получить значение cFilterTo

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1058
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 07.01.12 17:39. Заголовок: Предложение WHILE н..


Предложение WHILE не сохраняется в индексном файле

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1989
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.01.12 18:44. Заголовок: Петр пишет: Предлож..


Петр пишет:

 цитата:
Предложение WHILE не сохраняется в индексном файле


Спасибо....

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2785
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.13 13:45. Заголовок: Привет всем ! Столк..


Привет всем !

Столкнулся с такой проблемой - в базе есть поле НОМЕР_ДОМА ( С 5,0 )
Допустим список домов "1", "2", "3", "17в", "15", "11" и т.д.

При сортировке получаю ерунду
1
11
15
17в
2
3

Как бы правильно отсортировать это поле, чтобы дома правильно стояли ?
Можно конечно и через 2 поля (сделать разборку поля НОМЕР_ДОМА) - но не желательно...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2960
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.04.13 14:00. Заголовок: попробуй PADL(твой к..


попробуй PADL(твой ключ,длина,"0")

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2786
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.13 14:11. Заголовок: Dima пишет: попробу..


Dima пишет:

 цитата:
попробуй PADL(твой ключ,длина,"0")


А как быть с 17в ?
У меня таких домов очень много 58а, 58б, 19а и т.д. .....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2961
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.04.13 14:25. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как быть с 17в ?


А куда он встал при такой сортировке с padl ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 92
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 08.04.13 16:01. Заголовок: Я думаю, где-то в 3-..


Я думаю, где-то в 3-х значные номера домов. Очевидно здесь в лоб PADL нельзя использовать.
Необходим анализ, если последний символ номера буква - PADL, иначе к номеру в конце добавить пробел, тогда сортировка будет правильная

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 32
Зарегистрирован: 24.02.11
ссылка на сообщение  Отправлено: 08.04.13 16:34. Заголовок: index on str(val(dom..


index on str(val(dom))+dom

красиво отрабатывает, в том числе и штучки типа 10/1, 10-1.

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 08.04.13 21:13. Заголовок: PADL(val(charonly('0123456789',dom)),5,'0')+charrem('0123456789',dom)


.....
index on fdom() to test
....
Function fdom()
Static cifr:='0123456789'
return PADL(val(charonly(cifr,dom)),5,'0')+charrem(cifr,dom)


Спасибо: 0 
Цитата Ответить
постоянный участник




Пост N: 2788
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.13 23:04. Заголовок: vvv пишет: index on..


vvv пишет:

 цитата:
index on str(val(dom))+dom

красиво отрабатывает, в том числе и штучки типа 10/1, 10-1.



Спасибо БОЛЬШОЕ !
Это самое изящное решение проблемы !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2790
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.04.13 19:49. Заголовок: vvv пишет: index on..


vvv пишет:

 цитата:
index on str(val(dom))+dom

красиво отрабатывает, в том числе и штучки типа 10/1, 10-1.



Что-то не правильно сортирует !
9
11
12
....
16Б
...
89А
....
97
97К
100
100
100
102Б
102Б
102Б
16
13
13
19/2
19/2
73
11

11

Как нужно делать тогда ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 2791
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.04.13 19:57. Заголовок: Пардон, извиняюсь.....


Пардон, извиняюсь...
Все правильно сортирует, там еще улица в сортировке присутствует !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5466
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.17 20:38. Заголовок: Pasha пишет: Вместо..


Pasha пишет:

 цитата:
Вместо KSTREET поставить STREET->STREET
и сделать set relation, как я написал


От set relation в МиниГуи пришлось отказаться.
Поставил спец.функцию показа - Say_Dbf( (cAlias)->KSTREET, "STREET", "STREET" )
Как теперь сделать сортировку столбца/колонки по улице в алфавитном порядке ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6524
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.08.17 21:31. Заголовок: Andrey пишет: Как т..


Andrey пишет:

 цитата:
Как теперь сделать сортировку столбца/колонки по улице в алфавитном порядке ?


По индексу однако или юзать что то свое в плане set relation , и да МиниГуи тут не при чем
Andrey пишет:

 цитата:
Поставил спец.функцию показа - Say_Dbf


Телепаты уже в пути

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5468
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.08.17 16:24. Заголовок: Dima пишет: юзать ч..


Dima пишет:

 цитата:
юзать что то свое в плане set relation , и да МиниГуи тут не при чем


МиниГуи здесь ещё как причем !
Я уже писал об этом: при использовании set relation в Tsbrowse неправильно отображаются записи,
при использовании(показе) ДВУХ Tsbrowse.
Если убрать set relation то всё отлично.

Dima пишет:

 цитата:
Телепаты уже в пути



Постановка задачи такая:
Есть справочник-улиц (street.dbf) типа:
Kstreet - Street
1 - Махалина ул.
2 - Федорова ул.
.....
990 - Алтуфьевское шоссе
.....

В основной базе "списка адресов" (допустим TEST.dbf) записывается код улицы Kstreet.
Создаю индекс по коду улицы (Kstreet) в основной базе. Получаю отсортированный список не по алфавиту улиц, а по коду.

Как решить вопрос с сортировкой по алфавиту базы (таблицы) "списка адресов", чтобы
список показывался по алфавиту ???





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1121
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.08.17 17:24. Заголовок: Andrey пишет: Мини..


Andrey пишет:

 цитата:

МиниГуи здесь ещё как причем


Андрей, минигуи, а именно TSbrows отражает в ячейке то что вернет блок выборки.
Тот что по умолчанию у меня терял алиас ( мож сейчас все нормально, давно использую свой)
Но то что минигуи не может влиять на работу драйвера баз данных и на его установки по set relation это точно.
Так что проблема не в минигуи, а в том что от него просят.
Уверен если скормить минигуи свой правильный блок то с реляцией проблем не возникнет

По второму вопросу- делай локальный индекс в выражение которого по коду возвращает название улицы, или загоняй массив что нужно и сортируй как хочется или используй SQL и получая склейку через JOIN и ORDER BY показывай уже отсортированно.

Самый простой - это по массиву или mem: базе, заполнил проиндексировал и показывай.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 726
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 07.08.17 11:44. Заголовок: Andrey Я делаю так..


Andrey
Я делаю так
База1 и БАЗА2 СОЕДИнены set relation .
Далее создаю индекс, который не должен автоматически открываться ( в другое место его помещаю)
В индексное выражение включаю поля Базы2.

 цитата:
INDEX ON UPPER(Fam+IM+Ot+dTOS(kLIENT->bIRTH_DATE) ) Tag "ONE" TO (Par1+"TempIndex.cdx")



Поля Базы2 показываю в Бровсе1 совместно с полями Базы1. Двух Tsbrowse здесь не должно быть
всё Ок


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5471
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.08.17 13:02. Заголовок: Vlad04 пишет: Я дел..


Vlad04 пишет:

 цитата:
Я делаю так
База1 и БАЗА2 СОЕДИнены set relation .



НЕ МОГУ делать через set relation !!! Уже писал об этом - глючет показ Tsbrowse в МиниГуи (как исправить не знаю).
Нужно найти решение без set relation.

Можно сделать вариант с пере открытием базы улиц, но мне это не подходит.
Я все базы открываю при запуске задачи.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 727
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 07.08.17 17:07. Заголовок: а пример небольшой ..


а пример небольшой ?



































































































Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5472
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.08.17 18:10. Заголовок: Vlad04 пишет: а при..


Vlad04 пишет:

 цитата:
а пример небольшой ?


Вот пример - https://cloud.mail.ru/public/LrPi/piq8pzAWS
Создание индекса делать в util_Use.prg строка 32

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1122
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.08.17 20:22. Заголовок: Andrey пишет: Вот п..


Andrey пишет:

 цитата:
Вот пример


Ответил в почту

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 728
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 07.08.17 21:59. Заголовок: Что-то у тебя со ст..


Что-то у тебя со структурой в базе test_main.dbf ?. Поля #1#, #2# странные, не все просмотрщики видят, Far вываливается

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6525
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.08.17 22:13. Заголовок: Vlad04 пишет: Что-т..


Vlad04 пишет:

 цитата:
Что-то у тебя со структурой в базе test_main.dbf ?. Поля #1#, #2# странные, не все просмотрщики видят, Far вываливается


У меня Far не упал , а поле обычное "C" длина только 500 байт

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5473
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.08.17 13:09. Заголовок: Vlad04 пишет: Что-т..


Vlad04 пишет:

 цитата:
Что-то у тебя со структурой в базе test_main.dbf ?. Поля #1#, #2# странные, не все просмотрщики видят, Far вываливается


Пользуйся для Харбора viewer'ом - dbedit !
В базу ПЕРВЫМ полем добавить:
AADD( aDbf , {"ID2"      ,"+",  8,0 } )

То любой просмоторщик "сдохнет".


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3579
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.08.17 13:39. Заголовок: Вот пример - https:/..



 цитата:
Вот пример - https://cloud.mail.ru/public/LrPi/piq8pzAWS
Создание индекса делать в util_Use.prg строка 32




Данный пример несамодостаточен, а разбирать десятки килобайт чужого кода, чтобы найти там крупицу необходимого, желания нет.
Делаем самодостаточный пример с использованием файлов dbf, созданных программой:

proc main
use test_street new
index on kstreet to test_street
use test_main new
set relation to kstreet into test_street
index on test_street->street to test_main
browse()
retu

Запускаем. Видно, что сортировка получается, как заказывали. Замена tbrowse на tsbrowse из hmg испортить результат не может, поскольку и для первого, и во второго источник данных будет один и тот же, и колонки формируются по одному принципу: вызов нужного блока кода.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5474
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.08.17 14:57. Заголовок: Pasha пишет: Замена..


Pasha пишет:

 цитата:
Замена tbrowse на tsbrowse из hmg испортить результат не может, поскольку и для первого, и во второго источник данных будет один и тот же, и колонки формируются по одному принципу: вызов нужного блока кода.



Позволь не согласиться, результат будет разный. Там особенности показа ДВУХ Tsbrowse в МиниГуи.
Можешь сам попробовать и убедиться в этом.
Нужно в примере рас комментировать строки:
    //SET RELATION TO KSTREET INTO STREET 
//cKey := "UPPER(STREET->STREET)"

и заменить строку:
     DATA {|| Say_Dbf((cAlias)->KSTREET, "STREET", "STREET", 1 ) }  ;   // Form_SelDbf.prg 
на
//DATA {|| STREET->STREET } ; // если подключено SET RELATION TO KSTREET INTO STREET в util_Use.prg

и пере собрать проект.

Если не использовать SET RELATION то показ ДВУХ Tsbrowse - отличный !!!
Я пробовал при вызове второго Tsbrowse отключать SET RELATION, но это не помогло.

На маленьких примерах в МиниГуи всё проходить отлично, но когда делаешь большие программы, то иногда получаешь совсем не тот результат.
Но это скорее всего дело НЕ в МиниГуи, а в незнании/не понимании - как нужно правильно программировать в МиниГуи.
Из-за этого и начал я делать большие примеры на МиниГуи, чтобы показать новичкам (да и себе тоже) как НУЖНО делать.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5475
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.08.17 15:03. Заголовок: Вот что Haz предлож..


Вот что Haz предложил:

cKey := "KEY2NAME(KSTREET)"
INDEX ON &cKey TO ( PATH_SYS + "test_main6.cdx" ) ADDITIVE
DbSetOrder(6) // индекс основной базы по алфавиту справочника
.......

Func KEY2NAME(c)
STREET->(DBSEEK(c, .F.) )
RETURN STREET->STREET

Спасибо !

Кому интересно, вот последний проект - https://cloud.mail.ru/public/BKCu/XGvekDSfe

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6526
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.08.17 15:03. Заголовок: Pasha пишет: Запуск..


Pasha пишет:

 цитата:
Запускаем. Видно, что сортировка получается, как заказывали.


Паш в терминале так и есть а вот в Минигуи нет , если еще и два бровса , как с этим обстоят
дела в FW не знаю.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3580
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.08.17 15:11. Заголовок: Чтобы не копаться в ..


Чтобы не копаться в этих сырцах, можно рассказать в двух словах ?
Как я понял, в одном окне живут два бровса. Для первого источник данных - это test_main, и он должен быть отсортирован по test_street->street.
А что во втором бровсе, какой у него источник данных ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5476
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.08.17 15:29. Заголовок: Pasha пишет: Как я ..


Pasha пишет:

 цитата:
Как я понял, в одном окне живут два бровса. Для первого источник данных - это test_main, и он должен быть отсортирован по test_street->street.
А что во втором бровсе, какой у него источник данных ?



Не так !
Открывается основная таблица в Tsbrowse. Источник test_main.dbf
В этой таблице есть колонка "List of streets" (поле KSTREET) при редактировании вызывается
второй Tsbrowse (источник test_street.dbf - уже открытая область базы STREET).

Если делать с SET RELATION TO KSTREET INTO STREET, то 1-я запись во втором Tsbrowse "перескакивает" в первый Tsbrowse.
Почему - непонятно. Я долго с этим бился.
Помогает:
1) пере открытие справочника STREET
2) отказ от SET RELATION



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3581
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.08.17 15:45. Заголовок: Еще раз уточним проб..


Еще раз уточним проблему. При клике на колонку выскакивает модальное окно со 2-м бровсом по test_street, и... ?
Неправильно перерисовывается 1-е окно, если 2-е ездит по нему ? Или неправильно перерисовывается 1-е окно после закрытия 2-го ?

И еще (дополню). Во 2-м бровсе по test_street часом не изменяется текущий индекс ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5477
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.08.17 15:53. Заголовок: Pasha пишет: Еще ра..


Pasha пишет:

 цитата:
Еще раз уточним проблему. При клике на колонку выскакивает модальное окно со 2-м бровсом по test_street


Да !
Pasha пишет:

 цитата:
Неправильно перерисовывается 1-е окно, если 2-е ездит по нему ?


Да !

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3582
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.08.17 16:01. Заголовок: Когда 2-й бровс ката..


Когда 2-й бровс катается по 1-му, в 1-м меняется порядок строк, или неправильно отображается колонка "List of streets" ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3583
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 08.08.17 16:18. Заголовок: Вот что Haz предложи..



 цитата:
Вот что Haz предложил:



Так этот вариант работает ? Может я зря копаюсь, и вопрос исчерпан ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1629
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.08.17 16:45. Заголовок: Andrey Ты не внимат..


Andrey
Ты не внимательно читаешь тему (или НЕ). Pasha ишет

 цитата:
Отправлено: 05.01.12 16:37.
...
или не заморачиваться с релэйшн, а написать функцию

func StreetName
if dogovor->KStreet != street->KStreet
street->(dbSeek(dogovor->KStreet))
endif
Return street->Street

и использовать выражение

"STR(KCITY)+StreetName()+UPPER(PADL(ALLTRIM(НОМЕР_ДОМА),5))+STR(НОМЕР_ПОДЪЕЗДА)"




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 729
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 08.08.17 17:36. Заголовок: Типичная ситуация. ..


Типичная ситуация.

При открытии второго окна с улицами отменяется SET RELATION, индекс улиц переводится - по ИМЕНИ, после выбора улицы или отказа
индекс переводится по коду, восстанавливается SET RELATION.



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6527
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.08.17 17:43. Заголовок: Vlad04 пишет: При о..


Vlad04 пишет:

 цитата:
При открытии второго окна с улицами отменяется SET RELATION, индекс улиц переводится - по ИМЕНИ, после выбора улицы или отказа
индекс переводится по коду, восстанавливается SET RELATION.


Обрати внимание что при этом происходит в первом окне , заскринь его до и после вызова окна два и найди отличия.
Мне пришлось для показа окна два , повторно открывать базу улиц с другим Alias (это я условно , задача у меня совсем другая)


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5478
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.08.17 18:06. Заголовок: Pasha пишет: Так эт..


Pasha пишет:

 цитата:
Так этот вариант работает ? Может я зря копаюсь, и вопрос исчерпан ?


Да ! Вопрос исчерпан.
Просто Haz предложил чуть раньше. Я и сделал его вариант.

SergKis пишет:

 цитата:
Ты не внимательно читаешь тему (или НЕ). Pasha ишет


Да не понял я. Посчитал что Pasha уточняет что происходит с Tsbrowse.

Andrey пишет:

 цитата:
Кому интересно, вот последний РАБОЧИЙ проект - https://cloud.mail.ru/public/BKCu/XGvekDSfe



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 57 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 236
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет