Создание нового интерфейса
Модераторы: m0p3e, edward_K, Модераторы
Re: Создание нового интерфейса
В диалоге нельзя использовать Pickbutton (если не ошибаюсь, у диалогов нет обработки событий).
			
			
									
						
										
						Re: Создание нового интерфейса
Блин, это прискорбно. Спасибо. буду ковыряться в интерфейсах)Buddy писал(а):В диалоге нельзя использовать Pickbutton (если не ошибаюсь, у диалогов нет обработки событий).

под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
			
						Re: Создание нового интерфейса
Я сейчас простенький пример пришлю.
			
			
									
						
										
						Re: Создание нового интерфейса
Вот пример простого интерфейса:
Вот так он вызывается в отчете:
			
			
									
						
										
						Код: Выделить всё
interface REESTR_PAR 'Параметры выгрузки зарплатного реестра' doAccept
show at (,,62,7);
var
path,nodog,schet:string;
dateChanged:boolean;
_cschet:comp;
parameters path,nodog,schet
create view as select * from katbank where ((_cschet==katbank.nrec));
Screen main;
 fields
path: protect,pickButton;
nodog:noprotect;
katbank.schet1: protect,pickButton;
 buttons
  cmOk, default;
  cmCancel;
<<'Ввод параметров'
   Путь к файлу: .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 Номер договора: .@@@@@@@@@@@@@@@@@@@@@@@@
 Расчетный счет: .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
              <.  ОK  .>         <.Отмена.>
>>
end;
HandleEvent
  cmInit:
    {
     ReadMyDsk(Path,'zp_path',dateChanged);
     ReadMyDsk(nodog,'zp_nodog',dateChanged);
     ReadMyDsk(_cschet,'zp_cschet',dateChanged);
    }
  cmPick :
    {
      case CurField of
        #path     :
        {
         path:=GetDirName('Путь к файлу...')+'\'+'*.xml';
        }
        #katbank.schet1:
        {
         runinterface(L_KATORG::GETBANK,cogettune('MyOrg'),_cschet);
         schet:=katbank.schet1;
        }
      end;
      PutCommand(cmRefreshBDdata)
    }
  cmCancel:
    {
     closeinterface(cmCancel);
    }
  cmOk:
    {
     SaveMyDsk(path,'zp_path');
     SaveMyDsk(nodog,'zp_nodog');
     SaveMyDsk(_cschet,'zp_cschet');
     schet:=katbank.schet1;
     closeinterface(cmDefault);
    }
  cmDelOnProtect:
    {
    }
end;
end.                                        
Код: Выделить всё
 Runinterface(C_PARTNER::REESTR_PAR, path,nodog,schet);
 message(schet) 
Re: Создание нового интерфейса
Код: Выделить всё
interface DialogTest 'Dialog Test';
show at (0,3,45,8);
create view
var
 MCNrec    : comp;
 MCName    : string;
 PackPrice : double;
as select
 KatMC.Name
from
 KatMC
where
 (( MCNrec == KatMC.Nrec ));
Parameters
  PackPrice
, MCNrec
;
screen scrMain;
  noTableNavigation;
fields
  PackPrice ('Стоимость тары'):[18, '\2p[|-]3666`666`666`666`666`666.88'], noprotect;
  MCName     : Protect, PickButton;
buttons
  cmOk     ,default,,'Сформировать отчет', hcOplTrudhlp, sci1Esc;
  cmCancel ,,,'Отмена', hcOplTrudhlp, sci1Esc;
<<
`Стоимость Тары:`.@@@@@@@@@@@@@@@@@@@@
 Выберите МЦ:    .@@@@@@@@@@@@@@@@@@@@
<.Сформировать отчет.>   <.Отмена.>
>>
end; // screen
HandleEvent
cmPick:
{
  case CurField of
  #MCName:
  {
    if (RunInterface('L_MCU::GETMC', MCNrec) = cmDefault)
    {
      set MCNrec := MCNrec;
      set MCName := KatMC.Name;
    }
  }
  end; // case
}
end; //HandleEvent Interface
end.
Re: Создание нового интерфейса
Спасибо за помощь, вроде разобрался, что и как, но буду дальше развивать эту тему)
Так у меня получилось:
Код интерфейса:
Код вызова:
			
			
									
						
							Так у меня получилось:
Код интерфейса:
Код: Выделить всё
interface DialogTest 'Окно ввода данных';
show at (0,3,45,8);
create view
var
_Vnrec:Comp;
_Vtara:Double;
MCNrec    : comp;
MCName    : string;
PackPrice : double;
as select
KatMC.Name
from
KatMC
where
(( MCNrec == KatMC.Nrec ));
Parameters
  PackPrice
, MCNrec
;
screen scrMain;
  noTableNavigation;
fields
  PackPrice ('Стоимость тары'):[18, '\2p[|-]3666`666`666`666`666`666.88'], noprotect;
  MCName     : Protect, PickButton;
buttons
  cmOk     ,default;
  cmCancel ,,,'Отмена', hcOplTrudhlp, sci1Esc;
<<
`Стоимость Тары:`.@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 Выберите МЦ:    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<.  OK  .>   <.Отмена.>
>>
end; // screen
HandleEvent
cmPick:
{
  case CurField of
  #MCName:
  {
    if (RunInterface('L_MCU::GETMC', MCNrec) = cmDefault)
    {
      set MCNrec := MCNrec;
      set MCName := KatMC.Name;
    }
  }
  end; // case
}
cmOk:
{
_Vnrec := MCNrec;
_Vtara := PackPrice;
closeinterface(cmDefault);
}
end; //HandleEvent Interface
end.
Код: Выделить всё
.begin
RunInterface(TehOtdel2019::DialogTest, _Vtara, Double_mc)
end. 
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
			
						- 
				Irina_
- Местный житель
- Сообщения: 557
- Зарегистрирован: 17 июл 2012, 11:56
- Откуда: Республика Беларусь, г.Могилев
Re: Создание нового интерфейса
Здравствуйте.
Вы ввели лишние переменные. _Vnrec и _Vtara не имеют смысла. И присвоение им значений в cmOk тоже лишнее. В Parameters Вы указываете имена переменных, которые будут возвращаться после нажатия ОК. И эти переменные действительно определяются при вводе пользователем.
Оператор set MCNrec := MCNrec тоже не имеет смысла. Вам RunInterface(...) уже возвращает значение MCNrec (Nrec выбранной МЦ).
Еще советы:
- задать действия на событие cmInit. Возможно здесь Вам это и не надо, но в других своих интерфейсах может понадобиться. Например, если Вам надо считать значения переменных, сохраненных ранее в DSK, подсчитать количество выбранных элементов в Pick или в маркере, задать значение по умолчанию в чек бокс и т.д.
- задать действия на событие cmCheckField. Считаю необходимым проверять введенные пользователем значения на допустимость. В данном случае, стоимость тары должна быть больше 0. Даты тоже надо проверять, особенно если в интерфейсе надо вводить диапазон дат. Без обработки данного события не обойтись, если какие-то реквизиты интерфейса должны быть доступны для заполнения при определенных условиях, например в зависимости от выбранного значения другого реквизита.
			
			
									
						
										
						Вы ввели лишние переменные. _Vnrec и _Vtara не имеют смысла. И присвоение им значений в cmOk тоже лишнее. В Parameters Вы указываете имена переменных, которые будут возвращаться после нажатия ОК. И эти переменные действительно определяются при вводе пользователем.
Оператор set MCNrec := MCNrec тоже не имеет смысла. Вам RunInterface(...) уже возвращает значение MCNrec (Nrec выбранной МЦ).
Еще советы:
- задать действия на событие cmInit. Возможно здесь Вам это и не надо, но в других своих интерфейсах может понадобиться. Например, если Вам надо считать значения переменных, сохраненных ранее в DSK, подсчитать количество выбранных элементов в Pick или в маркере, задать значение по умолчанию в чек бокс и т.д.
- задать действия на событие cmCheckField. Считаю необходимым проверять введенные пользователем значения на допустимость. В данном случае, стоимость тары должна быть больше 0. Даты тоже надо проверять, особенно если в интерфейсе надо вводить диапазон дат. Без обработки данного события не обойтись, если какие-то реквизиты интерфейса должны быть доступны для заполнения при определенных условиях, например в зависимости от выбранного значения другого реквизита.
Re: Создание нового интерфейса
супер, спасибо большое) убрал лишние переменные, и за cmCheckField отдельное спасибо, обязательно нужно применить, на проверку заполненности всех полей, и что бы Стоимость была больше нуляIrina_ писал(а):Здравствуйте.
Вы ввели лишние переменные. _Vnrec и _Vtara не имеют смысла. И присвоение им значений в cmOk тоже лишнее. В Parameters Вы указываете имена переменных, которые будут возвращаться после нажатия ОК. И эти переменные действительно определяются при вводе пользователем.
Оператор set MCNrec := MCNrec тоже не имеет смысла. Вам RunInterface(...) уже возвращает значение MCNrec (Nrec выбранной МЦ).
Еще советы:
- задать действия на событие cmInit. Возможно здесь Вам это и не надо, но в других своих интерфейсах может понадобиться. Например, если Вам надо считать значения переменных, сохраненных ранее в DSK, подсчитать количество выбранных элементов в Pick или в маркере, задать значение по умолчанию в чек бокс и т.д.
- задать действия на событие cmCheckField. Считаю необходимым проверять введенные пользователем значения на допустимость. В данном случае, стоимость тары должна быть больше 0. Даты тоже надо проверять, особенно если в интерфейсе надо вводить диапазон дат. Без обработки данного события не обойтись, если какие-то реквизиты интерфейса должны быть доступны для заполнения при определенных условиях, например в зависимости от выбранного значения другого реквизита.

под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!