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

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

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


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 След.
Принудительное завершение работы пользовательской функции
 
Цитата
Алексей Новиков пишет:
Добрый день.

1. RETURN - это команда, она не может использоваться как операнд. И в БЭСТ-4 она не могла использоваться. Проверил. Компилятор воспринимает return как переменную. Мне кажется, вы что-то путаете.

Здравствуйте!
Бэст5

1 .Прошу простить мою неграмотность ( программирование изучаю по Вашим ответам)
Переписал код с использованием кодового блока

Код
dbpush()
Private aDial
aDial:={}
altd()
sayandwait('1')
If (empty(aDial),(eval({||sayandwait('2')}),dbpop(),return), )
 dbpop()
return

 

Всё работает как надо! Сообщение "2" появляется.


2.
Цитата
Алексей Новиков пишет:
Добрый день.
2. Не замечал никаких проблем с присвоением значения вновь объявляемой переменной. Проверил сейчас Ваш пример. Всё отрабатывается штатно.
Переписал то же код , но переменной сразу же после Private присвоил значение
Код
dbpush()
Private aDial:={}
//aDial:={}
altd()
sayandwait('1')
If (empty(aDial),(eval({||sayandwait('2')}),dbpop(),return), )
 dbpop()
return

 
Окно сообщений "2" так и не появилось!
Принудительное завершение работы пользовательской функции
 
В Бэст 5 столкнулся с такой особенностью .Вот код:
Код
Private aDial
aDial:={}
altd()
dbpush()
sayandwait('1')
iF(empty(aDial),return, )
 dbpop()
return
 
При запуске плагина программа ругается на ошибку в строке
Код
iF(empty(aDial),return, )
Если его переписать так :
Код
  if empty(aDial)
    altd()
    sayandwait('2')
    return 
  endif
 
То "ругани " нет. В Бэст 4 первый вариант работал без проблем.
Почему в " крутом Бэст5 " , увы , выдаётся ошибка.

Кроме того, если переменную объявить так :
Код
Private aDial:={}
Т.е сразу же присвоить ей значение,то плагин
Код
altd()
dbpush()
  if empty(aDial)
    altd()
    sayandwait('2')
    return 
  endif
dbpop()
return

 
вообще перестаёт замечать условие
Код
 if empty(aDial)
Вроде бы писали, что Бэст5 в части программирования более "продвинутый" ,чем Бэст 4??
Функция __rddGetTempAlias()
 
В одной из тем Hotline увидел такое выражение:
cAliasOrdMove := __rddGetTempAlias()
DbUseArea(.T.,, "KADRY\ORDMOVE.DBF", cAliasOrdMove, .T.)

Чем оно отличается от простого открытия файла
dbOpenBases или Netuse , т.е.. в чем преимущества при использовании функции __rddGetTempAlias()?
Суммирование одинаковых строк, Суммирование одинаковых строк в печатной форме
 
Цитата
Сергей Введенский пишет:
Для того, чтобы выполнить группировку строк в УПД по полям ГРУППА+НОМЕНКЛАТУРА, необходимо дорабатывать источник. В шаблоне этого сделать НЕЛЬЗЯ, т.к. шаблон содержит в себе помимо одиночной печати еще и групповую печать документа. Доработка источника требует создание пользовательского источника на основе системного. В пользовательский источник для класса form_tax_sf необходимо добавить параметр "группировка строк", а в процедуру select_stroki дописать алгоритм по группировке.
Здравствуйте!
А эту задачу можно решить без изменения источника?
Например, если в самом шаблоне использовать массивы?
Новая форма счёт-фактуры
 
УПД 2017 в сжатом виде. Должность и ФИО надо предварительно внести в Items
Почему так "криво" в части МОЛ- так захотел пользователь
Новая форма счёт-фактуры
 
Здравствуйте!
Вот если понравиться - шаблон с портретной ориентацией.
Если надо использовать длинные наименования ТМЦ , то пишите их в комментарии к сч.фактуре с разделителем =
Таблицы ставок взносов в 2017 году, новые коды вычетов и доходов по НДФЛ.
 
Цитата
Алексей Новиков пишет:
Видимо, никто не пользуется. Иначе давно бы заметили, что в файле настройки прописаны максимальные значения базы на 2016 год, а не 2017.
Скорее всего ставили, как и я , - на "полном автомате"!
Генерация кода аналитики
 
QUOTE]gabov пишет:
Попробую сам себе ответить.
Для Бэст4 вот так получилось:
Код
 FUNCTION CodeAnalit(_sch)
Local _CodeAnalit:="",aScope
   aScope:=_ANALIT->(setscope())
   _ANALIT->(ordsetfocus("CODE"))
  _ANALIT->(setscope("upper(SCHET+CODE)",upper(_sch),upper(_sch),{"CODE"}))
  _ANALIT->(DbGoBottom())
  _CodeAnalit:=Next(upper(_ANALIT->CODE))
  _ANALIT->(setscope(aScope))

return _CodeAnalit
  
Если кто подправит- буду благодарен!
[/QUOTE]
Изменено: gabov - 10.04.2017 14:00:08
Генерация кода аналитики
 
сбой при редактировании
Изменено: gabov - 10.04.2017 13:47:37
Генерация кода аналитики
 
Здравствуйте!
Существуют ли стандартные функции для генерация кода аналитики в процессе работы плагина как для БЭСТ4 ,так и для Бэст5?
Заранее спасибо.
Путь к каталогам разной глубины вложенности
 
Может кому интересно.
Несмотря на наличие параметра "D" Directory(cPath, 'D') , отбирает еще и файлы.
Поэтому пришлось переписать выражение вот так:
Код
aeval(aDir, {|x| if(x[1]<>'.' .and. x[1]<>'..' .and. substr(x[1],-4,1)<>'.', GetSubDir(cPath+x[1]+'\'),) })
 
Тогда все работает,т.е. отбирает только подкаталоги
Путь к каталогам разной глубины вложенности
 
Еще забыл спросить!
В каких случаях необходимо объявлять переменную как memvar ?
Выбор конкретной папки
 
Надо дать возможность в диалоговом окне пользователю выбрать конкретную папку.
Функция Select_Files( nT, nL, Path,cMaska) ,позволяет выбирать только файл.
Конечно, можно с помощью этой функции "выйти" на корневой каталог, но это в некоторых случаях может получиться как-то криво.
Путь к каталогам разной глубины вложенности
 
Большое Спасибо!
Путь к каталогам разной глубины вложенности
 
Цитата
Алексей Новиков пишет:
Чтобы было проще, предварительно составьте список всех каталогов, начиная с текущего.
Для этого напишите рекурсивную функцию, используя directory().
Вторым параметром в directory() можно передавать атрибут 'D', тогда функция будет возвращать только вложенные каталоги.
После получения списка всех каталогов перебирайте их и запрашивайте файлы.
Я так пробовал.
Но этот вариант работает когда заранее известно количество уровней вложенности.
Я как быть когда заранее не известно количество уровней вложенности?
Путь к каталогам разной глубины вложенности
 
Здравствуйте!
В плагине надо получить полный путь ко всем файлам ,находящихся как в корневой папке, так и во вложенных
в нее подкаталогах.
Попробовал "покрутить" функцию Directory(_Path_Schabl+'*.*','HSD'), где _Path_Schabl-путь к корневой папке.
Но она возвращает в виде массива только каталоги 1-го уровня вложенности. Дальше ничего не видит.
С помощью чего можно решить проблему?
Описание функции DBxEval и применение функции FormulParsBlock в БЭСТ5
 
Здравствуйте!
Стал переделывать свои плагины под БЭСТ5 и наткнулся ,что нет описания функции
DBxEval ( раньше я просто брал куски типовых кодов ,написанных разработчиком, и особо не вникал в эти функции )

Какого либо описания функции DBxEval я вообще не нашел!

В help есть описание функции FormulParsBlockk(cFormul, aPars)
преобразование строки символов в блок кода,
· cFormul – преобразуемая строка;
· aPars – массив параметров для блока кода.
Но из материалов форума следует ,что применение ее в БЭСТ 5 нецелесообразно ,т.к она устарела.
А как и чем ее заменять?
Лидирующие нули при экспорте в Excel
 
Еще раз спасибо!
Функция GetExcelRange - пользовательская ?
Т.е. Вы ее сами писали для выделения диапазона ячеек?

P.S.
У меня возник такой вопрос потому, что мне надо в цикле выделить определенные диапазоны ячеек и их объединить.
На выражение oRange:=oAS:Range(Cells(nachLine+1, 1), Cells(nLine,nCol)) программа ругается ,
т.е. придется ,наверное ,для этих целей писать пользовательскую функцию.
Изменено: gabov - 29.08.2016 13:13:40
Лидирующие нули при экспорте в Excel
 
Спасибо!
И еще возникла проблема:
oAS:cells(nLine,nCol):value:=File_col->Kol
oAS:Cells(nLine,nCol):NumberFormat:="###########0.0"
При компиляции все "Ок", а при выполнении плагина программа ругается на строку
oAS:Cells(nLine,nCol):NumberFormat:="###########0.0"

Причем на выражение oAS:Cells(nLine,nCol):NumberFormat:="@" ругани нет.
Как тогда задать числовой формат ячейки?
Лидирующие нули при экспорте в Excel
 
Здравствуйте!
Экспортирую данные в EXCEL.
Возникла проблема при экспорте номенклатурного номера "убиваются" лидирующие нули.
Проблему решил через апостроф : oAS:Cells(nLine,2):Value:="'"+OEMTOANSI(File_col->NNUM)
oAS:Cells(nLine,2):NumberFormat:="#############"
Есть еще метод TEXT ,но не понял как его "прикрутить ". Или есть еще способы сохранять лидирующие нули ?
Не работают функции разработчика в часности Dialog(), LoadPath() и т.д.
 
Цитата
nordk пишет:
вот человеку лень на форуме темы просмотреть - проше спросить заново ))))
Про диалог я уже отвечал
function DialogGr(cCaptionForm, aIniValue)
А вместо функции LoadPath() какую функцию нужно применять?
Отображение в initlist только записей, удовлетворяющих определенному условию
 
Здравствуйте!
Прописал 14 -м параметром

Код
aSortSeek:={;
{"- по коду/периоду",{"Код   ","Период"}, {'CODE','PERIOD'},'UPPER(aIn[1]+aIn[2])',,,,'TAG_CODE'};
} 
Если в MAKEREFER() задавать такой параметр ,то в подвале окна появлялась подсказка
по горячим клавишам F3 , F7 и сортировка и поиск работали.
В этом же плагине в подвале окна никаких подсказок не появилось ,но поиск по F7 заработал, а
вот сортировка не появилась ( нажатие на F3 вообще ни к каким последствиям не приводит).

В материалах форума для задания "горячих клавиш" нашел такой код для 30-го параметра:aHotKey:={;
Код
{;
{'Ctrl+F5 - Статус',K_CTRL_F5,{||myfunction()},1},;
{'Ctrl+F7 - Таблица расстояний',K_CTRL_F7,{||myfunction()},1};
},;
{},;
{};
}
Но отображение подсказок при этом идет только при нажатии клавиши CTRL.
А что нужно сделать чтобы,например,в подвале экрана отражались : F3- сортировка
F7-поиск?
Единственное ,что пришло в голову - это вывести в подвал экрана эти подсказки с помощью SAYSCREEN().
К тому же в этом примере к клавишам привязываются только свои функции.
Отображение в initlist только записей, удовлетворяющих определенному условию
 
Цитата
Алексей Новиков пишет:
28 - nTag - номер тега, по которому проверяется уникальность индекса
Спасибо!
Отображение в initlist только записей, удовлетворяющих определенному условию
 
Цитата
Алексей Новиков пишет:
У Вас переменная _codePartn объявлена как local
Да объявил как Private и проблема ушла. ( Вы когда-то мне на подобную проблему отвечали,но я не подумал и опять на те же грабли наступил.Извините). Спасибо.
Еще непонятно : 11 параметр nUniMode по какому ключу (индексу) определяет уникальность.
Т.е в каком параметре надо задать ключ (индекс) по которому nUniMode будет определяеть уникальность?
Отображение в initlist только записей, удовлетворяющих определенному условию
 
Здравствуйте!
Поставил перед Inilist DBSETFILTER()

Код
U_sheta->(ordsetfocus("TAG_CODE"))

U_sheta->(DBSETFILTER({|| field->CODE=_codePartn},"field->CODE=_codePartn") )

U_sheta->(INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,,aPic,aWhen,,;
,bDel,,,,;
,,,,,;
,,,,,;
,bPostGet,,,,))

U_sheta->(DbClearFilter())

Теперь отображает записи с учетом фильтра.
Но после попытки удаления записи вываливается ошибка "Переменная не существует".
Если закомментировать строку
Код
U_sheta->(DBSETFILTER({|| field->CODE=_codePartn},"field->CODE=_codePartn") )
то при удаление записи ошибка не выскакивает.
Полный текст :

Код
#include "inkey.ch"
Function Main()
LOCAL aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc
LOCAL bDel,_aHeads,aPic,nLeft,nUniMode,nTag,bPreGet,bPostGet,bPost,bScrPost,bScrInit
LOCAL _codePartn:="000001",_namePartn:=" "
//LOCAL _codePartn:=partner->code,_namePartn:=partner->SHORTNAME
aSet:=SAVESET()
aSetKey:=SAVESETKEY()            
NETUSE("U_sheta",LOADPATH()+"real\u_scheta.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")
SAYSCREEN(_codePartn+' '+_namePartn+"- ДАТА ПОЛУЧЕНИЯ СЧЕТ ФАКТУРЫ  ",2,5)

cColHead:={"  КОД  ПЕРИОД   ДАТА  "}
cCurProc:={||"2"}

aBlockCols:={{{||FIELD->code},0},{{||FIELD->period},7},{{||FIELD->date},16}}

aWhen:={{||aIn[1]:=_codePartn,.f.},,}


bDel:={||.T.} // удаление будет запрещено и наоборот соответственно разрешено
nLeft:=1
nUniMode:=2
nTag :='01'
_aHeads:={{"Код партнера.......................:","CODE",},;
          {"Период ............................:","PERIOD"},;
          {"Дата получения покупателем счета...:","DATE"}}
aPic:={,"9999.99",} // шаблон ввода данных

bPostGet:={{||myfunction(),.t.}}
bPost:={||myfunction()}

U_sheta->(ordsetfocus("TAG_CODE"))
U_sheta->(DBSETFILTER({|| field->CODE=_codePartn},"field->CODE=_codePartn") )



U_sheta->(INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
_aHeads,,aPic,aWhen,,;
,bDel,,,,;
,,,,,;
,,,,,;
,bPostGet,,,,))

U_sheta->(DbClearFilter())
U_sheta->( DBCLOSEAREA() )
RESTSETKEY(aSetKey)
RESTSET(aSet)
RETURN NIL
FUNCTION myfunction()
altd()
  SAYANDWAIT("OK")
RETURN 
 
Плагин запускается в справочнике партнеров.
Индекс
Код
U_sheta->(ordsetfocus("TAG_CODE"))
прописан в bases_05.dbf как upper(CODE+PERIOD)

Что-то еще надо прописать?
Страницы: 1 2 3 4 5 6 7 8 След.