Здравствуйте!
Создаю справочник на основе mlabel.
Проблема собственно вот в чем. В режиме редактирования своих данных, не получается сделать так чтобы при вызове справочника сразу выбиралась позиция которая уже была введена. Выбирается самая последняя запись в справочнике.
Подскажите пожалуйста, что не так. Заодно может кто нибудь знает как в моем случае сделать поиск в справочнике по первым буквам Наименования ?
Это строка поиска в справочнике.
Я правильно понял - Вы пытаетесь искать в закрытых номенклатурных номерах ?
Тогда Ваше желание противоречит накладываемому скобу
{||_mlabel->(setscope("MLAB_ST",""+aIn[4]))}
Очень надеюсь что в скобе между кавычками стоит пробел.
Если нет, то поиск должен уходить на LASTREC()+1.
Ой. Конечно же "UPPER(''+aIn[4]+aIn[6])" у меня на самом деле. Просто перед тем как написать на форум перепробовал все варианты и комбинации.
Пробывал {||_mlabel->(setscope("MLAB_ST"," "+aIn[4]))} при таком варианте (с пробелом) у меня всегда пишет, что справочник пуст.
На счет 47 и 48 параметра. У меня они присутствовали и поиск работал. Но когда я начал использовать scope, искать по первым буквам он отказался напрочь.
Если честно это мой первый плагин. До этого для БЭСТа писать не приходилось. В общих чертах в языке разобрался. Задача была написать программу для регистрации заказов во время выписки накладных. т.е. Оператор на телефоне выписывает товар, если чего то нет в наличии вызывает мою программу. Плагин цепляю в Картотеке с текущими остатками, Позиционирование Shift-F7. Как бы и плагин готов, только осталось доработать работу со справочником.
function Main()
Local aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,bPreGet,udate
/*
Local adbf
adbf:={}
aDbf:={ {"NNUM","C",6,0},;
{"TEK_DATE","D",8,0},;
{"KOD_TPS","C",6,0},;
{"NAME_TPS","C",25,0},;
{"GRUPPA","C",5,0},;
{"NNOMER","C",13,0},;
{"KOL","N",12,4},;
{"PRIM","C",255,0}}
В Вашем примере я не вижу применение 48 параметра, только 47.
общий подход такой.
Если у Вас просто индексный ключ, то по первым буквам поиск работает.
вы применили индексный ключ со скопом.
Значит поиск начнет работать после того как Вы правильно наберете сначала старшую часть скопа - а именно пробел и код группы.
Чтобы этого не делать, существует параметр который за Вас как бы заранее подставляет эти символы и нажимая первые буквы вы на самом деле продолжаете после уже введенной компьютером части строки. И тогда поиск начиначет работать.
Значит нам надо в 48 параметр передать старшую часть скопа (поскольку ее так или иначе надо набирать по условиям указанного в 47 параметре индексного ключа, только
это будет делать программа за Вас.
Так еще раз проверил все параметры.. Убедился, что все на своих местах и все равно ничего не работает. НЕ поиск по первым введенным буквам (параметр 47 48). Не работает как оказалось даже по Alt-F7 . Жму Alt-F7. Набираю текст. Жму ENTER – вылетает красная ошибка «Ошибка выполнения uzakaz.hrb Переменная не существует» Далее жму ESC ESC ESC появляется еще 1 ошибка(во вложении скрин)
Вот последний вариант:
_MLAB->( MAKEREFER("MLAB","Номенклатурный справочник",3,;
{"Группа","Номенклатурный №"," Наименование "},{4,6,12},"n/w,w+/n",;
{"NNUM","NAME"},{"aIn[5]","aIn[6]"},"UPPER(' '+aIn[4]+aIn[6])",;
{{||FIELD->GRUP},{||FIELD->NNUM},{||LEFT(FIELD->NAME,40)}};
,,,,,,,;
{||_mlab->(setscope("MLAB_ST",""+aIn[4]))},{||_mlab->(setscope())};
,,,,,,,,,'cFind$UPPER(NAME)';
,'MLAB_ST',,,,,,,,,,,,,,,,,,,'MLAB_ST','" "+aIn[4]') )
Значит так.. На последок попробовал убрал этот {||_mlab->(setscope("MLAB_ST",""+aIn[4]))},{||_mlab->(setscope())} .
кусок из кода
О чудо. Все виды поиска заработали и по Альт-Ф7 ошибка пропала, и подстановка при вызове справочника заработала . Только вот 48ой параметр не могу подобрать. Ставлю ‘ +an[4]‘ – не работает, ‘ 01 01’ т.е. явное указания статуса и группы – работает.
Так вот … помогите пожалуйста разобраться почему с {||_mlab- >(setscope("MLAB_ST",""+aIn[4]))},{||_mlab->(setscope())} ЛЮБОЙ вид поиска не работает…. Мозги закипели уже..
Давайте разбираться со скопом.
Он SetScope([текстовое значение ключа],[начальное значение для скопа],[конечное значение для скопа],[массив индексов])
Вы не указываете четвертый параметр, поэтому скоп накладывается на все индексы таблицы !!! А Вам надо только на определенные.
48 параметр действительно надо явно указывать.
47 параметр индекс должен быть не тот же самый, а другой на который скоп не будет наложен, а если будет наложен то значение скопа надо не переменными определять а
явно.
ALT-F7 к индексам отношения не имеет и должен работать в принципе, скоп не должен влиять
В поисках надо не забывать указывать старшую часть скопа - но там тоже массив aIn - он переопределяется.
ЗНАЧИТ !!! при открытиии справочника в блоке кода перед наложением скопа полезно некую переменную сGrup:=aIn[4] и разумеется она должна быть объявлена чуть выше и видна makerefer ом.
Тогда в 48 параметре " "+cGrup будет явным значением и тоже должно заработать.
Вероятно имеет место передопределение массива aIn и его значений при построении справочника, а уж при настройке массива aSortSeek - это 100%