Здравствуйте!
Надо чтобы Initlist отображал на экране не все записи из файла , а лишь те которые удовлетворяют некоторому условию. По описанию больше всего подходит aBlockCols ( других подходящих параметровя не нашел) :
Файл содержит три поля.Вот я задаю
aBlockCols:={{{||FIELD->code},0},{{||FIELD->period},7},{{||FIELD->date},16}}
Надо чтобы отображались на экране записи ,например, FIELD->code=="000002".
Алексей Новиков пишет:
Смысл в том, что Вы пишете u_3.prg из одной строки
hfileeval('u_3.hrb')
и вызываете его через ПРОГР
Спасибо получилось.
Но только не понятно - почему в "отсталом и древнем " Бэст4 достаточно в групповой операции было написать : П1=ПРОГР("U_3.hrb",{})
И все работало.
А в прогрессивном и новом Бэст5 надо городить такие странные "ГОРОДКИ"
nordk пишет:
Если записать П1=ПРОГР("U_3.prg",{}) ,
А в самом pgr HFILEEVAL()
Извините,но не дошло!
Текст групповой операции:
П1=HFILEEVAL("U_3.hrb",{})
СООБ("Проверка")
Где U_3.hrb скомпилированный U_3.prg с содержанием из начала темы.
Выводит на экран только "Проверка".
"1" на экран так и не выводится . Окно отладчика не появляется.
Здравствуйте!
Еще остался .
Как запустить скомпилированный плагин в групповой операции.
Если записать П1=ПРОГР("U_3.hrb",{}) ,то при запуске групповой операции выдается синтетическая ошибка.
Если записать П1=ПРОГР("U_3.prg",{}) , т.е. без компиляции, То все работает как надо.
Здравствуйте!
Споткнулся на элементарном.
НЕ могу запустить с отладкой простейший плагин в Бэст 5 в3.4 .
Private a
altd()
a:='1'
sayandwait(a)
Последовательность действий :
1.Захожу в редактор XBA.
2.Открываю этот плагин.
3.Ставлю точки останова
4.Выбираю "Разрешить отладку"
5.Выполняю "сохранить"
6.Компилирую
7.Нажимаю "Переключиться на главное окно"
8.Запускаю плагин на выполнение ALT+1
Выходит сообщение "1".
Окно отладчика так и не появляется.
Что еще нужно сделать ,чтобы запустить плагин с возможностью отладки?
Алексей Новиков пишет:
Вот так у меня работает:
_bPreDisp:= {|| DBSETFILTER({|| field->CODE_PR=cINN }, 'field->CODE_PR=cINN') }
Правда я ещё неоднозначности в объявлении переменных устранил.
Еще остался .
А аргументы в функции DBSETFILTER
field->CODE_PR=cINN и 'field->CODE_PR=cINN'
всегда должны соответствовать друг другу?
Здравствуйте!
Нужно, чтобы при открытии справочника партнеров в нем отображались только партнеры у которых ИНН
имеет определенное начальное значение.
Вот рабочий код.
Но при открытии отображаются все партнеры.
Может следующую строку надо как-то иначе задавать?
Здравствуйте!
Меня интересуют функции (пример их применения) ,позволяющие из плагина прямо обратиться к данным в ТСД .
Чтобы прямо в плагине их затем обработать и выгрузить в dbf/txt формат А уж затем стандартными средствами Бэст импортировать строки накладной.
По этим принципам можно работать если операция разовая.
Ну а если из ТСД нужно данные импортировать не одну сотню раз за день , то тогда нужно все в плагине прописать!
Здравствуйте!
Возникла потребность загрузки данных из ТСД в БЭСТ4.
Где можно посмотреть,изучить и т.д. примеры плагинов загрузки данных из ТСД в Бэст4 , т.е. прямо в накладную.
Хотя прямо напрямую в накладную врядли получится. Вначале все равно придется выгружать из ТСД в txt или в dbf файл,а затем импортировать через механизм импорта строк накладной.
С уважением.
Прошу прощения.
Разобрался ошибка была в другом месте программы.
Тему,наверное, можно совсем удалить.
Но остался один .
В каком случае программа будет быстрей работать :
1. Если оставить выражение Eval({||File_vr->(ADDREC()),File_vr->Vid:=aCol[1],File_vr->Vid_Name:=aCol[2],File_vr->(F_DBUNLOCK())})
как есть.
2 Или вместо него просто вызвать функцию
FUNCTION fFile_vr(a,b)
File_vr->(ADDREC())
File_vr->Vid:=a
File_vr->Vid_Name:=b
File_vr->(F_DBUNLOCK())
RETURN Nil
aStroki,aColonki,aAll - это массивы, комбинации значений которых записываются в файл File_vr
Бэст ругается на строку
Eval({||File_vr->(ADDREC()),File_vr->Vid:=aCol[1],File_vr->Vid_Name:=aCol[2],File_vr->(F_DBUNLOCK())})
- "Неверный аргумент"
Если эту строку записать так :
Eval({||sayandwait('1'),File_vr->(ADDREC()),File_vr->Vid:=aCol[1],File_vr->Vid_Name:=aCol[2],File_vr->(F_DBUNLOCK())})
то РУГАНИ НЕТ,т.е надо перед File_vr->(ADDREC()) применить какую либо функцию.
Конечно ,можно вместо этой строки записать так:
fFile_vr(aCol[1],aCol[2]);
где fFile_vr
FUNCTION fFile_vr(a,b)
File_vr->(ADDREC())
File_vr->Vid:=a
File_vr->Vid_Name:=b
File_vr->(F_DBUNLOCK())
sayandwait('2')
RETURN Nil
Тогда все работает как надо.
Но как тогда правильно ( если это возможно ) написать выражение с использованием Eval({|| ?
1. Попробовал вообще из MAKEREFER убрать 9-й параметр cKeyVal .
Ситуация не изменилась!
2. Попробовал явно задать значение cKeyVal :
bb:='АОЗТ "Марат" '
cKeyVal:='upper(&bb)'
Ситуация не изменилась!
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)))) курсор в справочнике партнеров встает именно на ту запись
которая редактируется,т.е все правильно, но при окончательном отображении справочника курсор продолжает вставать на запись где поле "наименование" не заполнено.
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)'
Может ее надо как-то иначе задавать?
nordk пишет:
Вообще то при вводе записи вы вводите в поле ввода значение, потом открываете справочник
При корректировке для заполнения aIn отвечает bPreGet
Параметр bPreGet в описании функции MAKEREFER() не нашел!