Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Вопросы по функции Dialog
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 20 Jun 2007 07:45    Post subject: Вопросы по функции Dialog Reply with quote

Какие параметры у функции Dialog()? В справочнике описаны первых 3 параметра. На форуме нашел, что всего восемь параметром и последний это справочник. А какие параметры с 4-го по 7-й?

Вопросы по шаблонам (возможно лучше дать ссылку, где про это хорошо написано) применительно к функции Dialog():

Как сделать «шаблон строки которая будет смещаться вправо (на экране скажем 40 символов одновременно, а набрать можно 250 со смещением символов)»?

Как сделать шаблон для даты с проверкой на корректность ввода?

Как правильно сделать шаблон для счета? Если делать, так:
Code:

aDialog := Dialog({'Корресп. счет'}, { 'XXXXXXXX '),{'70')

то поля для ввода будет только 2 символа. Можно сделать так:
Code:

aDialog := Dialog({'Корресп. счет'}, { 'XXXXXXXX '),{'      70')

А дальше AllTrim(aDialog[1]), но может есть более красивый вариант?
Back to top
View user's profile Send private message
Behemoth



Joined: 15 Mar 2002
Posts: 155
Location: Новиков Алексей Юрьевич
Occupation: ПБОЮЛ
Interests: Пермь

PostPosted: 20 Jun 2007 08:46    Post subject: Re: Вопросы по функции Dialog Reply with quote

Дениска wrote:
Какие параметры у функции Dialog()?

DIALOG(cMess,[cPict],cVar,[cZag],[cWhen],[cValid],[cColor],[cRef])
- функция выводит на экран запрос на ввод одного или нескольких
значений. Позволяет задать формат ввода, значения по умолчанию,
а также условия доступа в поле ввода и выхода из поля ввода.
Возвращает введенное значение (массив значений). Здесь:
cMess - текст запроса на ввод значения. Если функция вызывается для
ввода нескольких значений, в качестве данного параметра должен
быть передан массив из тестов запроса для каждого вводимого
значения.
cPict - маска (формат) ввода значения. При вводе нескольких значений
передается массив масок для ввода каждого значения. Параметр
является необязательным. При его отстуствии формат поля ввода
соответствует формату значения по умолчанию.
cVar - значение по умолчанию или массив значений по умолчанию в случае
ввода нескольких значений.
cZag - необязательный параметр, задает текст, выводимый в загловке окна
запроса.
cWhen - необязательный логический параметр, определяющий условие
доступа в поле ввода. Всегда задается в виде массива (даже
в случае определения только одного значения). Каждый элемент
массива может быть задан в виде выражения, в котором доступны
значения временного массива xVar[] - массива введенных значений.
Вычисление выражения выполняется непосредственно перед переходом в
поле ввода данного значения. Таким образом, при определении
возможности доступа в поле ввода, например, третьего значения,
можно использовать введенные перед этим первое и второе
значения xVar[1] и xVar[2].
cValid - необязательный логический параметр, определяющий условие
выхода из поля. Правила ввода аналогичны параметру cWhen. Значение
выражения вычисляется при выходе из поля ввода. В выражении могут
быть использованы также элементы массива введенных значений
xVar[]. Таким образом, параметр может быть использован для
контроля корректности введенного значения.
cColor - необязательный символьный параметр, определяющий цвет окна
запроса.
cRef - необязательный символьный параметр, определяющий используемый
при вводе справочник. Правила ввода аналогичны параметру cWhen.


Дениска wrote:

Как сделать «шаблон строки которая будет смещаться вправо (на экране скажем 40 символов одновременно, а набрать можно 250 со смещением символов)»?

@S40 - выведет 40 первых символов на экран, но сама переменная может быть любой длины. При редактировании она будет скроллироваться в строке 40 длиной символов.

Дениска wrote:

Как сделать шаблон для даты с проверкой на корректность ввода?

Посмотрите параметр cValid. Например, cValid:='xVar[1]>=scl_beg'

Дениска wrote:

aDialog := Dialog({'Корресп. счет'}, { 'XXXXXXXX '),{' 70')

Нет, другого пути нет. Но '70' лучше прижать к левому краю.
_________________
С уважением, Новиков Алексей.
Back to top
View user's profile Send private message Send e-mail
maestro_



Joined: 29 Jan 2003
Posts: 95



PostPosted: 20 Jun 2007 11:01    Post subject: Reply with quote

да отличная информация, только к сожалению, немного поздно....

PS у меня сложилось мнение (где-то читал, возможно на форуме), что параметры начиная с 4 являются не документированными и как следствие возможно не корректная их поддержка в последующих версиях, Это так?
PSS то Behemoth если не секрет поделитесь плиз источником столь интересной информаци
Back to top
View user's profile Send private message
Behemoth



Joined: 15 Mar 2002
Posts: 155
Location: Новиков Алексей Юрьевич
Occupation: ПБОЮЛ
Interests: Пермь

PostPosted: 20 Jun 2007 11:51    Post subject: Reply with quote

maestro_ wrote:
PS у меня сложилось мнение (где-то читал, возможно на форуме), что параметры начиная с 4 являются не документированными и как следствие возможно не корректная их поддержка в последующих версиях, Это так?

Да. В том виде, в котором я привёл описание оно было опубликовано в БЭСТ-4. Когда там был пункт меню "Информация для специалистов" и надо было вводить хитрый пароль, чтобы туда попасть. В дальнейшем, описание параметров сократилось до 3-х пунктов. Не знаю, с чем это связано. Функция DIALOG не является функцией, специально написанной для использования в plugins, поэтому при каких-то доработках её параметры могут быть изменены. Но, IMHO, вероятность того, что существующий функционал будет радикально изменён, минимальн
_________________
С уважением, Новиков Алексей.
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 20 Jun 2007 11:58    Post subject: Reply with quote

Вообще по описаниям функций - этот форум Ваш источник
Вы сюда пишите - я смотрю и размещаю что могу.
Что касается DIALOG то все параметры доступны (вот
только справочник не проверял...не было необходимости)
А про не поддерживаются мы писали про скоб в DBPUSH()
Вот с этим не рекомендовано. БОльше не припомню.
Back to top
View user's profile Send private message Send e-mail
itman



Joined: 05 Apr 2002
Posts: 1247
Location: Ильин Е.Ю.
Occupation: Cio
Interests: Кинель

PostPosted: 21 Jun 2007 07:32    Post subject: Reply with quote

maestro_ wrote:

PSS то Behemoth если не секрет поделитесь плиз источником столь интересной информации.


В инструментарии разработчика содержатся исходные коды различных функций для БЭСТ-4, включая dialog. Также имеется пример ее использования.
каталог - pll
файл - util1.prg
Back to top
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 22 Jun 2007 14:39    Post subject: Reply with quote

А можно пример с подключением справочника? В идеале с планом счетов. Я пробую так:
Code:

Function Main()
  Private aStru, aSetKey
  private aDialog
  aSetKey:=SaveSetKey()
  DBPUSH()
  altd()

  NetUse("F_plan_sch", LoadPath() + "plan_sch.dbf")
  aDialog := Dialog({'счет:'}, {replicate('X', 8)}, {Padr('70', 8, ' ')}, ' План счетов ',,, {'F_plan_sch'})

  IF LASTKEY()!=27
    SayAndWait("Счет " + AllTrim(aDialog[1]))
  EndIf
  F_plan_sch->(dbclosearea())
  DbPop()
  RestSetKey(aSetkey)
Return '1'


Не работает В файле util1.prg примера со справочником не нашел
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 22 Jun 2007 14:47    Post subject: Reply with quote

А где у Вас MakeRefer()
Справочник надо создать этой функцией и дать ему имя
которое Вы потом и используете в Dialog
Back to top
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 24 Jun 2007 14:12    Post subject: Reply with quote

С MakeRefer() тоже почему-то не получается
Code:

  NetUse("F_plan_sch", LoadPath() + "plan_sch.dbf")

   F_plan_sch->( MAKEREFER("m_plan_sch","План счетов",2 ;
  ,{" Счет  ","Наименование "},;
  {3,5,16}, "n/w,w+/n",{"SCHET"},,,;
  {{||FIELD->SCHET},{||FIELD->NAME_SCH}};
  ,,,,,,,,,,,,,,,,,'cFind$UPPER(SCHET)'))

  aRef:={"m_plan_sch"}

  aDialog := Dialog({'счет:'}, {replicate('X', 8)}, {Padr('70', 8, ' ')}, ' План счетов ',,, aRef)

Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 25 Jun 2007 14:35    Post subject: Reply with quote

Запятых маловато в функции DIALOG перед aRef
Вы кладете в параметр цвета окна диалог
Back to top
View user's profile Send private message Send e-mail
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 26 Jun 2007 06:20    Post subject: Reply with quote

nordk wrote:
Запятых маловато в функции DIALOG перед aRef
Вы кладете в параметр цвета окна диалога



Исправил (и добавил цвет). Все равно справочник не вызывается
Code:

  aDialog := Dialog({'счет:'}, {replicate('X', 8)}, {Padr('70', 8, ' ')}, ' План счетов ',,,'G+', aRef)
Back to top
View user's profile Send private message
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 26 Jun 2007 18:53    Post subject: Reply with quote

Тут дело вот в чем
справочник могет быть тока один и он не массив из-за
вот такой строки в исходном тексте функции
Code:
cRef := IIF(cRef!=NIL.AND.ValType(cRef) = "C",cRef,Nil)


Т.е. справочник работает только для диалога из одной строки

Исправьте у себя
Code:
aRef:={"m_plan_sch"}

на
Code:
aRef:="m_plan_sch"

и у Вас все заработает
Back to top
View user's profile Send private message Send e-mail
vla



Joined: 15 Mar 2005
Posts: 60
Location: Гаклин Владимир Ильич
Occupation: ООО БэстСиб, консультант
Interests: Новосибирск

PostPosted: 23 Oct 2007 17:02    Post subject: Reply with quote

Странно, а у меня справочник открывается, но выбранное значение из него не возвращается. Так и остается "70". В чем может быть дело ?

Function main()
local aRef,aDialog
altd()
NetUse("F_plan_sch", LoadPath() + "plan_sch.dbf")
F_plan_sch->( MAKEREFER("m_plan_sch","План счетов",2 ;
,{" Счет ","Наименование "},;
{3,5,16}, "n/w,w+/n",{"SCHET"},,,;
{{||FIELD->SCHET},{||FIELD->NAME_SCH}};
,,,,,,,,,,,,,,,,,'cFind$UPPER(SCHET)'))
aRef:="m_plan_sch"
aDialog := Dialog({'счет:'}, {replicate('X', }, {Padr('70', 8, ' ')}, ' План счетов ',,,, aRef)
f_plan_sch->( DBCLOSEAREA() )
return nil
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 23 Oct 2007 17:17    Post subject: Reply with quote

vla wrote:
Странно, а у меня справочник открывается, но выбранное значение из него не возвращается. Так и остается "70". В чем может быть дело ?



У MAKEREFER не заполнен параметр aDest
Back to top
View user's profile Send private message
Дениска



Joined: 26 Feb 2002
Posts: 649



PostPosted: 23 Oct 2007 17:39    Post subject: Reply with quote

Дениска wrote:
vla wrote:
Странно, а у меня справочник открывается, но выбранное значение из него не возвращается. Так и остается "70". В чем может быть дело ?



У MAKEREFER не заполнен параметр aDest


Вот так работает:
Code:

F_plan_sch->( MAKEREFER("m_plan_sch","План счетов",2,{" Счет  ","Наименование "},{3,5,16},;//5
                "n/w,w+/n",{"SCHET"},{"xVar[1]"},,{{||FIELD->SCHET},//10
                {||FIELD->NAME_SCH}},,,,,,,,,,,,,,,,,'cFind$UPPER(SCHET)'))


В InitList в качестве параметра aDest похоже обычно используется массив aIn, а здесь xVar
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru