gabov пишет:
Теперь при редактировании записи при открытии справочника партнеров курсор встает на первую запись в которой не заполнено краткое наименование партнера.
А чему собственно равно значение переменной ain[7] при открытии справочника ?
Вероятно она имеет пустое значение вот и находит первую пустую запись :)
Ну конечно !!!!! Мой косяк
aIn внутри массива непоредственно самого пункта поиска !!!!
Т.е там может быть:
1. в случае поиска только по одному полю только один элемент массива aIn[1]
2 в случае одновременном поиске по двум и более элементам aIn[1],aIn[2] и т.д.( например по группе и номенкл. номеру)
Я правильно Вас понял?
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
// Для автоматического расчета суммы при вводе добавим
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') )
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)'
Может ее надо как-то иначе задавать?
не понимаю где вы запутались
будет свободное время напишу простой рабочий пример
Сейчас у нас идут переговоры ну на очень высоком уровне - пока нет времени совсем
Вы кстати там есть блока кода перед открытием справочника просто написать самостоятельно поиск нужной строки
Я вот только не помню последовательность - сначала этот блока кода а потом стандартный поиск или наоборот
В первом случае вы сами поиском на строку встали и все - немного криво, во втором случае не прокатит
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 гоняться не стану
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)'
Ситуация не изменилась!