BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Использование QINPUT() при выборе нескольких значений из справочника

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: Пред. 1 2 3
RSS
Использование QINPUT() при выборе нескольких значений из справочника
 
Цитата
gabov пишет:
о поиск работает как по коду ,так и по наименованию.Ошибок нет!!

Ну конечно !!!!! Мой косяк
aIn внутри массива непоредственно самого пункта поиска !!!!
 
Цитата
gabov пишет:
Теперь при редактировании записи при открытии справочника партнеров курсор встает на первую запись в которой не заполнено краткое наименование партнера.

А чему собственно равно значение переменной ain[7] при открытии справочника ?
Вероятно она имеет пустое значение вот и находит первую пустую запись :)
 
Цитата
nordk пишет:

Ну конечно !!!!! Мой косяк
aIn внутри массива непоредственно самого пункта поиска !!!!
Т.е там может быть:
1. в случае поиска только по одному полю только один элемент массива aIn[1]
2 в случае одновременном поиске по двум и более элементам aIn[1],aIn[2] и т.д.( например по группе и номенкл. номеру)
Я правильно Вас понял?

Цитата
nordk пишет:
Цитата
gabov пишет:
Теперь при редактировании записи при открытии справочника партнеров курсор встает на первую запись в которой не заполнено краткое наименование партнера.
А чему собственно равно значение переменной ain[7] при открытии справочника ?
Вероятно она имеет пустое значение вот и находит первую пустую запись :)
2.Если это так ,то как правильно задать этот параметр?

3.В отладчике Бэста 4 возможно ли посмотреть значения массива aIn?
 
Цитата
gabov пишет:
Т.е там может быть:
1. в случае поиска только по одному полю только один элемент массива aIn[1]
2 в случае одновременномпоиске подвум иболее элементам aIn[1],aIn[2] и т.д.( например по группе и номенкл. номеру)
Я правильно Вас понял?
именно
Цитата
gabov пишет:
2.Если это так ,то как правильнозадать этот параметр?
Вообще то при вводе записи вы вводите в поле ввода значение, потом открываете справочник
При корректировке для заполнения aIn отвечает bPreGet
Цитата
gabov пишет:
3.В отладчике Бэста 4 возможно ли посмотреть значения массива aIn?
Да, вам надо всунуть вашу функцию с точкой останова в то место, где этот массив еще жив
Например в массив пред ввода или постввода или в блок кода перед прорисовкой справочника
 
Цитата
nordk пишет:
Вообще то при вводе записи вы вводите в поле ввода значение, потом открываете справочник
При корректировке для заполнения aIn отвечает bPreGet
Параметр bPreGet в описании функции MAKEREFER() не нашел!
 
Читайте в Initlist - потому как это относится к Quinput,Initlist,Qbrowse
aIn[7] - это передаваемая в справочник переменная значит она формируется до вызова справочника
 
Цитата
nordk пишет:
Читайте в Initlist - потому как это относится к Quinput,Initlist,Qbrowse
aIn[7] - это передаваемая в справочник переменная значит она формируется до вызова справочника
Пока ждал Вашего ответа нашел в описании Initlist эту переменную
Переписал плагин ,добавив в Initlist bPreGet 26 параметром {||test()}
А в MAKEREFER переписал 17 параметр bPreDisp:={||test1()}
Где :
function test()
altd()
bb:=ain[7]
altd()
return bb

function test1()
local dd
altd()
dd:={|x| m->MyRecs:={},nil}
altd()
return dd

Полный текст
Цитата
#include "inkey.ch"
Function Main()

LOCAL aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,bDel,_aHeads,aWhen,aPic,nUniMode,nApp,aRef,cFindMacro
LOCAL aType,bYesArray,bYesReplArray,bCoProc ,bYesNoRepl,bPreDisp,aSortSeek
LOCAL bPreGet
Private myRecs,bb,cKeyVal
aSet:=SAVESET()
aSetKey:=SAVESETKEY()
SayAndWait("OK")
NETUSE("work_1",LOADPATH()+"\real\work_1.dbf",,.F.)
work_1->(dbcreateindex(GlobalTmpPath+"DATE","dtos(TEK_DATA)"))
work_1->(ordsetfocus("DATE"))
NETUSE("_Partner",LoadPath()+"partner.dbf",,.F.)
DISPBOX(2,0,23,79,( CHR( 201 ) + CHR( 205 ) + CHR( 187 ) + CHR( 186 ) + CHR( 188 ) + CHR( 205 ) + CHR( 200 ) + CHR( 186 )+' ' ),"W+/B")
nTop:=3
nBot:=22
cColHead:={" Дата Номер НАИМЕНОВАНИЕ Кол-во Цена Сумма "}
cCurProc:={||"2"}
aBlockCols:={{{||FIELD->tek_data},0},{{||FIELD->tek_nomer},9},{{||FIELD->name},16},{{||STR(FIELD->kol,5)},33},{{||STR(FIELD->cena,12,2)},39},{{||STR(FIELD->summa,12,2)},52}}
bDel:={||.F.}

aType:={{'1','Услуги системного инженера'}, ;
{'2','Услуги по программированию'},;
{'3','Услуги консультанта '}, ;
{'4','Услуги по терминальной св.'}}

_aHeads:={{"Введите дату работ.................:","TEK_DATA"},;
{"Введите номер документа............:","TEK_NOMER"},;
{"Наименование работ.................:","NAME"},;
{"Количество.........................:","KOL","1","1","0"},;
{"Цена...............................:","CENA","1","1","0"},;
{"Сумма (руб.).......................:","SUMMA"},;
{"Наименование контрагента...........:","Name_p"}}


// Для автоматического расчета суммы при вводе добавим
aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5]},,.T.}
// формат ввода данных
aPic:={,,,,,"999999999.99",}
// Для решения Вопрос а уникальности по индексу служит переменная
nUniMode=2
//
aRef:={,,,,,,"partners"}
aSortSeek:={;
{"- по коду ",{"Шифр "}, {'CODE'},'UPPER(aIn[1])',,,,'FULLCODE'},;
{"- по наименованию",{"Наименование "}, {'SHORTNAME'},'UPPER(aIn[1])',,,,'FULLNAME'};
}


cFindMacro:='cFind$UPPER(Name)'

//Переменные для возможности отметки нескольких записей
//MyRecs -массив в котором будут хранится отмеченные записи
bYesArray:={|x| IF(ValType(x)=='A',m->MyRecs:=x,m->myRecs)}
bYesReplArray:={|| FIELD->CODE }
bCoProc:={|| IIF(LastKey()==K_TAB, Keyb(K_ENTER), Nil) }
bYesNoRepl:={|x| .t.}
//bPreDisp:={|x| m->MyRecs:={},nil}
bPreDisp:={||test1()}

_partner->(ordsetfocus("name"))
cKeyVal:='upper(bb)'
altd()
_PARTNER->( MAKEREFER("PARTNERS","Справочник поставщиков",2 ,{" Код ","Наименование поставщика"," И Н Н "},{3,5,16}, ;
"n/w,w+/n",{"SHORTNAME"},{"aIn[7]"},cKeyVal,{{||FIELD->CODE},{||FIELD->SHORTNAME},{||FIELD->CODE_PR}},;
aSortSeek,,,,, ;
,bPreDisp,,,, ;
,,bCoProc,,, ;
,'cFind$UPPER(ShortName)',2,,,;
,bYesArray,,,, ;
,,,bYesReplArray,bYesNoRepl, ;
,,,,, ;
,'NAME') )

work_1->(INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,;
,,,,,;
,,cFindMacro,,, ;
{||test()},,,,))
altd()

work_1->( DBCLOSEAREA() )
_PARTNER->( DBCLOSEAREA() )
RESTSETKEY(aSetKey)
RESTSET(aSet)
RETURN NIL
SayAndWait("OK")
return NIL

function test()
altd()
bb:=ain[7]
altd()
return bb

function test1()
local dd
altd()
dd:={|x| m->MyRecs:={},nil}
altd()
return dd
В отладчике смотрю переменная bb имеет не пустое значение (также не пустое значение имеет aIn[7])
и оно равно наименованию партнера в редактируемом поле.
А вот переменная cKeyVal все время не меняет свое значение и равно 'upper(bb)'
Может ее надо как-то иначе задавать?
 
не понимаю где вы запутались
будет свободное время напишу простой рабочий пример
Сейчас у нас идут переговоры ну на очень высоком уровне - пока нет времени совсем
 
Вы кстати там есть блока кода перед открытием справочника просто написать самостоятельно поиск нужной строки
Я вот только не помню последовательность - сначала этот блока кода а потом стандартный поиск или наоборот
В первом случае вы сами поиском на строку встали и все - немного криво, во втором случае не прокатит
 
Цитата
nordk пишет:
Вы кстати там есть блока кода перед открытием справочника просто написать самостоятельно поиск нужной строки
Здравствуйте!
17 параметр изобразил вот так:
bPreDisp:={||test1()}

где test1() :
function test1()
local dd
//altd()
dd:={|x| m->MyRecs:={},_PARTNER->(dbseek(upper(ain[7]))),nil}
//altd()
return dd

Проблема не ушла!
 
Вот это что за бред ?


Код
function test1() 
local dd 
//altd() 
dd:={|x| m->MyRecs:={},_PARTNER->(dbseek(upper(ain[7]))),nil} 
//altd() 
return dd 


Что делает Ваша программа - присваивает блок кода в dd - думаю что с этой задачей функция прекрасно справляется :)))
А что Вам в ней требовалось ?

Код
function test1() 
altd() 
 m->MyRecs:={}

Код
_PARTNER->(dbseek(upper(ain[7]),,"shortname")) 
altd() // И вот тут смотрим - стоит ли запись в алиасе на нужной строке, если нет - то почему
return .T.

Предупреждаю сразу за проблемами Б4 гоняться не стану
 
Цитата
nordk пишет:
Вот это что за бред ?
Код
 function test1() 
local dd 
//altd() 
dd:={|x| m->MyRecs:={},_PARTNER->(dbseek(upper(ain[7]))),nil} 
//altd() 

Здравствуйте! Здесь я Плохо подумал.

Вот переписал :
Цитата
function test1()
local dd
altd()
m->MyRecs:={}
_PARTNER->(dbseek(upper(left(ain[7],15))))
altd()
return nil
После _PARTNER->(dbseek(upper(left(ain[7],15)))) курсор в справочнике партнеров встает именно на ту запись
которая редактируется,т.е все правильно, но при окончательном отображении справочника курсор продолжает вставать на запись где поле "наименование" не заполнено.
 
1. Попробовал вообще из MAKEREFER убрать 9-й параметр cKeyVal .
Ситуация не изменилась!
2. Попробовал явно задать значение cKeyVal :
bb:='АОЗТ "Марат" '
cKeyVal:='upper(&bb)'
Ситуация не изменилась!

Получается не работает параметр cKeyVal ?
Изменено: gabov - 05.07.2015 16:51:55
 
у меня все работает
Сейчас пока не смогу поддерживать переписку. Примерно до августа. Если будет окно - напишу
 
Цитата
gabov пишет:
но при окончательном отображении справочника курсор продолжает вставать на запись где поле "наименование" не заполнено.
Попробуйте убрать aSortSeek
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)