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




Пост N: 64
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 13.02.09 09:36. Заголовок: как? EDIT INPLACE по полям из дочерней базы


Есть две базы: SP_LS (справочник лекарств), PF_LS (план-факт-остаток по лекарствам). Нужно в броузе (по SP_LS) менять "на месте" (прямо в нем) цифры плана (конечно, можно бы и в InputWindow каком-нибудь - но "заказчику" так хочется, "по-экселски").

Пишу "по-простому" такой, к примеру, код ("RU866" - т.к. базы в DOS-кодировке):

 
use PF_LS codepage "RU866" new
index on NOMKOD to PF_LS.NTX // NOMKOD - (N, 7) код лек-ва из SP_LS
set index to PF_LS.NTX

use SP_LS codepage "RU866" new
index on NOMKOD to SP_LSN.NTX
set index to SP_LSN.NTX
set relation to NOMKOD into PF_LS
go top

....
// в main-окне Win_1 на соотв. странице таба - броуз

@ 30, GetBorderWidth() browse Br_Lek2 of Win_1 ;
/* width Win_1.Tab_0.Width */ ; // ?? как получить ширину таба?
width Win_1.Width - GetBorderWidth() * 4 ;
height 160 ;
workarea SP_LS ;
fields { "SP_LS->NOMKOD", "SP_LS->NAIM", ;
"SP_LS->TORG_R", "SP_LS->TORG_L", ;
"SP_LS->MNN_R", "SP_LS->MNN_L", ;
"PF_LS->PLAN1", "PF_LS->FAKT1", "PF_LS->OST1", ;
"PF_LS->PLAN6", "PF_LS->FAKT6", "PF_LS->OST6" ;
} ;
widths { 70, 60, 60, 60, 80, 50, 60, 60, 60, 60, 60, 60 } ;
headers { "Ном.код", "Наименование", ;
"Торг.наим.(рус.)", "Торг.наим.(лат.)", ;
"МНН (рус.)", "МНН (лат.)", ;
"План 1м.", "Факт 1м.", "Остаток 1м.", ;
"План 6м.", "Факт 6м.", "Остаток 6м." ;
} ;
justify { BROWSE_JTFY_RIGHT,,,,,, ;
BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, ;
BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT } ;
on change { || Ris_Gr_Le2() } ; // функция разрисовки грида с детальной инфой по ЛС
readonly { .T., .T., .T., .T., .T., .T., .F., .T., .T., .F., .T., .T. } ;
edit inplace
т.е. "редактируемые на месте" поля - из "дочерней" базы.
Кликаем в броузе на какой-то из "планов" (например, на PF_LS->PLAN1, открывается GETBOX ввода (как и хотим, "на месте"), вводим цифирь, ENTER... и вылетаем по ошибке
Error BASE/1003  Переменная не существует: PLAN1 
Called from _INPLACEEDITSAVE(2189)
Called from _INPLACEEDITOK(2166)
Called from (b)_BROWSEINPLACEEDIT(1977)
Called from _DOCONTROLEVENTPROCEDURE(1559)
Called from EVENTS(473)
Called from _DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1280)
Called from _BROWSEINPLACEEDIT(2081)
Called from _BROWSEEDIT(1238)
Called from EVENTS(2164)
Called from _DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1280)
Called from DOMETHOD(4608)
Called from MAIN(74)

...и что - "не суждено сбыться мечте идиота"? :)

Кстати, почему-то еще "в нагрузку" после этого (именно после подобного вылета) перестают в FARе работать клавиши ENTER и ESC (пользую KEYRUS в Win98) ("лечится" перезагрузкой - иногда только "холодной").

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]


модератор




Пост N: 948
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.02.09 11:59. Заголовок: gustow пишет: "..


gustow пишет:

 цитата:
"редактируемые на месте" поля - из "дочерней" базы


Стандартный Browse для этой цели не подойдет, т.к. он рассчитан на использование при редактировании только той базы, которая указана в ключевом слове WORKAREA. Может помочь использование GRID, в который сначала выгружаются данные из базы, а по окончании редактирования производится обновление данных в дочерних базах. Это не очень удобно, поэтому рекомендуется для решения такой задачи использовать TBROWSE (см. пример 4 в папке samples\Advanced\TsBrowse).



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




Пост N: 65
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 13.02.09 13:26. Заголовок: Спасибо, Григорий, а..


Спасибо, Григорий, а то голову сломал (кто-то из нас двоих - или я, или оно - тупит; скорее, конечно, я...). GRID не очень подойдет (база лекарств здоровенная), буду TBROWSE'ить.

Заодно рапортую, что "завербовал" еще несколько поклонников Harbour+MiniGUI (программеры из больниц нашей области); люди говорят: "Вот об чем я мечтал бессонными ночами!" :)

Заодно еще спрошу про TBROWSE (поскольку, знаю, что у тебя тоже Win98 - или это не зависит от ОС?). Там "по умолчанию" headers выглядят "плоскими"; а как их сделать (если можно) выглядящими такими же "кнопками", как в BROWSE (по умолчанию)? (а то как-то "доморощенно" выглядит)

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




Пост N: 950
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.02.09 14:38. Заголовок: gustow пишет: heade..


gustow пишет:

 цитата:
headers выглядят "плоскими";


Каждый заголовок колонки имеет свойство l3DLookHead в массиве ::aColumns.
Переопределить можно так:

oBrw:aColumns[ nColumn ]:l3DLookHead := .T.,

где nColumn - номер колонки

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


Пост N: 614
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 13.02.09 14:57. Заголовок: gustow пишет: GRID ..


gustow пишет:

 цитата:
GRID не очень подойдет (база лекарств здоровенная)


И Grid и Browse построены на SysListView32, ограничения у них одни и те же.

 цитата:
буду TBROWSE'ить


Ну если вас до сих пор устраивал Browse - просто модифицируйте его. Меньше переделывать программу придется и другим пригодится :)
Примерно так
_BrowseInPlaceEdit()
..
FieldName := _GridFields [ CellColIndex ]
r := at ( '>', FieldName )

if r != 0
sFieldName := Right ( FieldName, Len(Fieldname) - r )
_GridWorkArea := Left( FieldName, r - 2 )
Else
sFieldName := FieldName
EndIf

Конечно, нужно добавить все необходимые проверки и все утрясти хорошенько. Ничего сложного.

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




Пост N: 68
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 13.02.09 15:39. Заголовок: Григорий, Петр - спа..


Григорий, Петр - спасибо! Пошел "копать" :)

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

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