Здравствуйте!
Существуют ли стандартные функции для генерация кода аналитики в процессе работы плагина как для БЭСТ4 ,так и для Бэст5?
Заранее спасибо.
Надо дать возможность в диалоговом окне пользователю выбрать конкретную папку.
Функция Select_Files( nT, nL, Path,cMaska) ,позволяет выбирать только файл.
Конечно, можно с помощью этой функции "выйти" на корневой каталог, но это в некоторых случаях может получиться как-то криво.
Здравствуйте!
В плагине надо получить полный путь ко всем файлам ,находящихся как в корневой папке, так и во вложенных
в нее подкаталогах.
Попробовал "покрутить" функцию Directory(_Path_Schabl+'*.*','HSD'), где _Path_Schabl-путь к корневой папке.
Но она возвращает в виде массива только каталоги 1-го уровня вложенности. Дальше ничего не видит.
С помощью чего можно решить проблему?
Здравствуйте!
Стал переделывать свои плагины под БЭСТ5 и наткнулся ,что нет описания функции
DBxEval ( раньше я просто брал куски типовых кодов ,написанных разработчиком, и особо не вникал в эти функции )
Какого либо описания функции DBxEval я вообще не нашел!
В help есть описание функции FormulParsBlockk(cFormul, aPars)–
преобразование строки символов в блок кода,
· cFormul – преобразуемая строка;
· aPars – массив параметров для блока кода.
Но из материалов форума следует ,что применение ее в БЭСТ 5 нецелесообразно ,т.к она устарела.
А как и чем ее заменять?
Здравствуйте!
Экспортирую данные в EXCEL.
Возникла проблема при экспорте номенклатурного номера "убиваются" лидирующие нули.
Проблему решил через апостроф : oAS:Cells(nLine,2):Value:="'"+OEMTOANSI(File_col->NNUM)
oAS:Cells(nLine,2):NumberFormat:="#############"
Есть еще метод TEXT ,но не понял как его "прикрутить ". Или есть еще способы сохранять лидирующие нули ?
Здравствуйте!
Надо чтобы Initlist отображал на экране не все записи из файла , а лишь те которые удовлетворяют некоторому условию. По описанию больше всего подходит aBlockCols ( других подходящих параметровя не нашел) :
Файл содержит три поля.Вот я задаю
aBlockCols:={{{||FIELD->code},0},{{||FIELD->period},7},{{||FIELD->date},16}}
Надо чтобы отображались на экране записи ,например, FIELD->code=="000002".
Здравствуйте!
Споткнулся на элементарном.
НЕ могу запустить с отладкой простейший плагин в Бэст 5 в3.4 .
Private a
altd()
a:='1'
sayandwait(a)
Последовательность действий :
1.Захожу в редактор XBA.
2.Открываю этот плагин.
3.Ставлю точки останова
4.Выбираю "Разрешить отладку"
5.Выполняю "сохранить"
6.Компилирую
7.Нажимаю "Переключиться на главное окно"
8.Запускаю плагин на выполнение ALT+1
Выходит сообщение "1".
Окно отладчика так и не появляется.
Что еще нужно сделать ,чтобы запустить плагин с возможностью отладки?
Здравствуйте!
Нужно, чтобы при открытии справочника партнеров в нем отображались только партнеры у которых ИНН
имеет определенное начальное значение.
Вот рабочий код.
Но при открытии отображаются все партнеры.
Может следующую строку надо как-то иначе задавать?
Здравствуйте!
Возникла потребность загрузки данных из ТСД в БЭСТ4.
Где можно посмотреть,изучить и т.д. примеры плагинов загрузки данных из ТСД в Бэст4 , т.е. прямо в накладную.
Хотя прямо напрямую в накладную врядли получится. Вначале все равно придется выгружать из ТСД в txt или в dbf файл,а затем импортировать через механизм импорта строк накладной.
С уважением.
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({|| ?
Нужно из справочника выбрать несколько значений через отметку клавишей Insert.
Возможно ли это сделать при помощи функций MakeRefer() и QINPUT() или для этого нужно использовать Initlist() ?
Здравствуйте!
Сеть из 2-х компьютеров.
Win 7 (макс) - невыдел. сервер и Win Xp. Мониторы ( разрешение и размеры) разные.
C Win Xp. пользователь через удаленный рабочий стол работает с Бэст4.
Несмотря на то ,что пользователи запускают Бэст с разных рабочих столов и разных ярлыков , размер экранного шрифта у них одинаков.Хотя для каждого ярлыка (окна) в левом верхнем углу окна в свойствах был задан свой размер шрифта. Т.е . изменение размера экранного шрифта для одного пользователя приводит к изменению размера экранного шрифта для другого пользователя .Не удобно работать - для одного пользователя окно Бэста большое, для другого - маленькое.Как бороться?
Заранее спасибо.
Здравствуйте!
Немного переделанный блок кода из предыдущей темы :
FUNCTION Main()
Private aMas:={}
Private aParam
dbpush()
aParam:={{"01/01/2014","аааааааа",50,400},{"02/01/2014","бббббббббббб",80,400},{"03/01/2014","ввввввв",300,400}}
//altd()
_DialogSay(aParam)
dbpop()
return
FUNCTION _DialogSay(x)
Local _top,_bot,_left,_right,_heads,_pic:={},_ref:={},_app,_spec,_getbl:={}
Local j:=0,aHeads:={},_value:=0
Private _head:='',cVar
For nPos:=1 to len(x)
cVar:='head_'+alltrim(str(nPos))
private &cVar
&cVar:=0
next
altd()
_top:=3
_bot:=len(x)+2
_left:=3
_right:=76
j:=1
//altd()
Do While j<=len(x)
_head:="head_"+alltrim(str(j))
aadd(aHeads,{{_top+j-1,_left+63},&('_head')})
&_head:=x[j,3]
j:=j+1
enddo
aeval(x,{|| aadd(_pic,'999999')})
_ref:={}
_app:=1
_spec:='RESTOFF'
aeval(x,{|| aadd(_getbl,NIL)})
DISPBOX(_top-1,_left-1,_bot+1,_right+1,'╔═╗║══╚║ ',"N/BG")
SAYSCREEN(" ЗАПОЛНЕНИЕ ОБЪЕМОМ ПРОИЗВЕДЕННОЙ ПРОДУКЦИИ ",_top-1,_left+2)
j:=0
aeval(x,{|x| SAYSCREEN(x[1]+' '+x[2],_top+j,_left+2),j++})
QINPUT(_top,_left,_bot,_right,aheads,_app,_ref,_pic,,,,,,,_spec,_getbl,,,,,,,,,"Сформировать отчет ?")
IF LASTKEY()!=27
j:=1
Do While j<=len(x)
_value:=&_head
aadd(aMas,_value)
j++
enddo
else
aMas:={}
endif
return aMas
Какой параметр в функции QINPUT отвечает за проверку вводимых значений? И как это сделать?
Надо чтобы общая сумма всех значений (&_head:=x[j,3]) , которое введет пользователь должна быть равна некоторому контрольному значению .В данном случае это четверый элемент массива aParam x[j,4].
При этом нужно не давать пользователю выйти из диалогового окна до тех пор ,пока не введет значения ,
которые в сумме будут равны общей контрольной сумме .Желательно чтобы в "подвале" диалогового окна отражалась запись с содержанием " неверная контрольная сумма".
В Help по этому у ни чего не нашел.
Заранее спасибо
Здравствуйте!
Пытаюсь с помощью функции QINPUT создать диалоговое окно,которое заполняется
данными из массива,полученного в ходе выполнения плагина. в нижеследующем примере
это переменная aParam :
FUNCTION Main()
Private _data_n,_data_k,_data_r
Private aMas
Private aParam
dbpush()
aParam:={{"01/01/2014","аааааааа",1,'head_1'},{"02/01/2014","бббббббббббб",2,'head_2'},{"03/01/2014","ввввввв",3,'head_3'}}
altd()
_DialogSay(aParam)
dbpop()
return
FUNCTION _DialogSay(x)
Local _top,_bot,_left,_right,_heads,_pic:={},_ref:={},_app,_spec,_getbl:={}
Local j:=0,aHeads:={}
Local _head //head_n .......
Local _field:='',_zag:=' '
Local head_1:=1,head_2:=2,head_3:=3
//дата конца формирования отчета
_data_n:=111111
_data_k:=222
_data_r:=9999
//выходные параметры -_data_n ,_data_k,_data_r,входящие в массив aMas
_top:=3
_bot:=len(x)+2
_left:=3
_right:=76
j:=1
// ЗДЕСЬ ПЫТАЮСЬ задать имя переменной
// Do While j<=len(x)
// _head:="head_"+alltrim(str(j)) // так
// _head:=x[j,4] // или так
// _head:=x[j,3] // присвоение значение переменной
// aadd(aHeads,{{_top+j-1,_left+63},_head})
// j:=j+1
// enddo
aheads:={{{_top,_left+67},"_data_n"},{{_top+1,_left+67},"_data_k"},{{_top+2,_left+67},"_data_r"}} // вот с ним //проблема
aeval(x,{|| aadd(_pic,'999999')})
_ref:={}
_app:=1
_spec:='RESTOFF'
aeval(x,{|| aadd(_getbl,NIL)})
_getbl:={}
DISPBOX(_top-1,_left-1,_bot+1,_right+1,'г=┐│-=L│ ',"N/BG")
SAYSCREEN(" ЗАПОЛНЕНИЕ ОБЪЕМОМ ПРОИЗВЕДЕННОЙ ПРОДУКЦИИ ",_top-1,_left+2)
j:=0
aeval(x,{|x| SAYSCREEN(x[1]+' '+x[2],_top+j,_left+2),j++})
QINPUT(_top,_left,_bot,_right,aheads,_app,_ref,_pic,,,,,,,_spec,_getbl,,,,,,,,,"Сформировать отчет ?")
IF LASTKEY()!=27
aMas:={_data_n ,_data_k,_data_r}
else
aMas:={}
endif
return aMas
Не получается в массиве aheads избавится от явно задаваемых переменных _data_n ,_data_k,_data_r
Строка _head:="head_"+alltrim(str(j)) или строка _head:=x[j,4] позволяет задать имя переменной для ввода и вывода,.
А вот значение ей не удается задать.
Как это сделать?
Заранее спасибо.
Здравствуйте!
Нужно прямо из формулы типовой операции (Товары,ГП) обратиться к определенному полю файла Partner.
Без написания плагина это как-то можно сделать? Кажется я раньше встречал как это сделать,но найти не смог. Это нужно для Бэст 4 и Бэст 5
Заранее спасибо
Цитата nordk пишет:
а еще можно было partner->( dbseek(upper(MDOC->AGENTCODE),,"fullcodeВ этом случае вы еще и индексный ключ не меняете функцией ordsetfocus а просто делаете поиск по нужному ключу
Здравствуйте!
Можно ли в кодовом блоке сразу вызвать на выполнение несколько команд
Например:
function main()
Local aCol:={1,2,3}
aeval(aCol,{|x| if(x=4,sayandwait("Нет такого значения") return, )})
return
Бэст на строку aeval(aCol,{|x| if(x=4,sayandwait("Нет такого значения") return, )}) выдает ошибку.
Как иначе можно это выражение записать?
Заранее спасибо.
Здравствуйте!
Случайно "споткнулся " на такую ситуацию.
В данном случае значение выражения ascan(aTm,nTermin) получается "Истинным",что не верно.
пример :
function main()
Private aTm:={"Один"}
Private nTermin:=''
IF ascan(aTm,nTermin)>0
sayandwait('1')
else
sayandwait('2')
endif
return
В данном случае значение выражения ascan(aTm,nTermin) получается "Ложным",что правильно
Пример :
function main()
Private aTm:={"Один"}
Private nTermin:=''
IF ascan(aTm,{|x| upper(x)==upper(nTermin)})>0
sayandwait('1')
else
sayandwait('2')
endif
return
Т.е для поиска в массивах необходимо ОБЯЗАТЕЛЬНО ( во избежание ошибок) использовать кодовый блок?
Здравствуйте!
На HL в разделе Бэст4 практически уже не отвечают ,поэтому сюда.
Импорт выписок банка в формате 1с.
В папке source\bank\ находится файл imp1c01.prg.
Дата создания 26/02/08.
В папке extensns \bank\ находится файл imp1c01.hrb
Дата создания 08/09/09
Содержание исходника imp1c01.prg соответствует содержанию imp1c01.hrb или нет?
Здравствуйте!
Постановление о применении новых печатных форм кассовых документов и платежных ведомостях пока не принято.
Кто-то уже " делал" шаблоны этих печатных форм для Бэст4?
Возникла необходимость импорта накладных в Бэст 4 .
Решил использовать механизм удаленного склада,т.е . программе в режиме
импорта складских документов с удаленного склада "подсовывать" файл.
Но встал с порядковой нумерацией накладных после импорта.
Номер последней накладной ( по каждому складу в отдельности центр.комплекса) для последующей
нумерации накладных в импортируемом файле можно взять из файла MDOC .
А кроме MDOC и MDOCM где еще хранятся (или записываются после сохранения накладных)
номера последних документов?
Заранее спасибо.
Здравствуйте!
Фрагмент кода :
TRY
oApp := CreateObject( "Excel.Application" )
CATCH
Alert("Excel не доступен!")
RETURN .F.
END
ALTD()
try
oWorkBook:=oApp:WorkBooks:open(OemToAnsi(cFileName),0)
catch
alert('Ошибка открытия входного файла. Не удалось открыть файл.')
RETURN .F.
end
try
oWorkSheet:=oWorkBook:worksheets(OemToAnsi('Лист1'))
catch
alert('Ошибка открытия входного файла. Не удалось открыть лист с данными')
RETURN .F.
end
Если в книге cFileName нет листа 'Лист1', то плагин прекращает работу.
Но при этом в диспетчере задач можно увидеть ,что excel.exe так и остался "висеть " в перечне процессов.
Какой командой его можно выгрузить в БЭСт 4 и в Бэст5?
Заранее спасибо.