Создание нового интерфейса

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Buddy
Постоянный обитатель
Сообщения: 119
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Re: Создание нового интерфейса

Сообщение Buddy »

В диалоге нельзя использовать Pickbutton (если не ошибаюсь, у диалогов нет обработки событий).
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Создание нового интерфейса

Сообщение Espada »

Buddy писал(а):В диалоге нельзя использовать Pickbutton (если не ошибаюсь, у диалогов нет обработки событий).
Блин, это прискорбно. Спасибо. буду ковыряться в интерфейсах) :)
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Buddy
Постоянный обитатель
Сообщения: 119
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Re: Создание нового интерфейса

Сообщение Buddy »

Я сейчас простенький пример пришлю.
spark
Местный житель
Сообщения: 476
Зарегистрирован: 19 окт 2005, 13:38
Контактная информация:

Re: Создание нового интерфейса

Сообщение spark »

Вот пример простого интерфейса:

Код: Выделить всё

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) 
Buddy
Постоянный обитатель
Сообщения: 119
Зарегистрирован: 02 июн 2016, 15:18
Откуда: Галактика СПб

Re: Создание нового интерфейса

Сообщение Buddy »

Код: Выделить всё

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.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Создание нового интерфейса

Сообщение Espada »

Спасибо за помощь, вроде разобрался, что и как, но буду дальше развивать эту тему)
Так у меня получилось:
Код интерфейса:

Код: Выделить всё

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_
Местный житель
Сообщения: 545
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

Re: Создание нового интерфейса

Сообщение Irina_ »

Здравствуйте.
Вы ввели лишние переменные. _Vnrec и _Vtara не имеют смысла. И присвоение им значений в cmOk тоже лишнее. В Parameters Вы указываете имена переменных, которые будут возвращаться после нажатия ОК. И эти переменные действительно определяются при вводе пользователем.
Оператор set MCNrec := MCNrec тоже не имеет смысла. Вам RunInterface(...) уже возвращает значение MCNrec (Nrec выбранной МЦ).
Еще советы:
- задать действия на событие cmInit. Возможно здесь Вам это и не надо, но в других своих интерфейсах может понадобиться. Например, если Вам надо считать значения переменных, сохраненных ранее в DSK, подсчитать количество выбранных элементов в Pick или в маркере, задать значение по умолчанию в чек бокс и т.д.
- задать действия на событие cmCheckField. Считаю необходимым проверять введенные пользователем значения на допустимость. В данном случае, стоимость тары должна быть больше 0. Даты тоже надо проверять, особенно если в интерфейсе надо вводить диапазон дат. Без обработки данного события не обойтись, если какие-то реквизиты интерфейса должны быть доступны для заполнения при определенных условиях, например в зависимости от выбранного значения другого реквизита.
Espada
Местный житель
Сообщения: 336
Зарегистрирован: 07 май 2013, 17:32
Откуда: РБ, Минск

Re: Создание нового интерфейса

Сообщение Espada »

Irina_ писал(а):Здравствуйте.
Вы ввели лишние переменные. _Vnrec и _Vtara не имеют смысла. И присвоение им значений в cmOk тоже лишнее. В Parameters Вы указываете имена переменных, которые будут возвращаться после нажатия ОК. И эти переменные действительно определяются при вводе пользователем.
Оператор set MCNrec := MCNrec тоже не имеет смысла. Вам RunInterface(...) уже возвращает значение MCNrec (Nrec выбранной МЦ).
Еще советы:
- задать действия на событие cmInit. Возможно здесь Вам это и не надо, но в других своих интерфейсах может понадобиться. Например, если Вам надо считать значения переменных, сохраненных ранее в DSK, подсчитать количество выбранных элементов в Pick или в маркере, задать значение по умолчанию в чек бокс и т.д.
- задать действия на событие cmCheckField. Считаю необходимым проверять введенные пользователем значения на допустимость. В данном случае, стоимость тары должна быть больше 0. Даты тоже надо проверять, особенно если в интерфейсе надо вводить диапазон дат. Без обработки данного события не обойтись, если какие-то реквизиты интерфейса должны быть доступны для заполнения при определенных условиях, например в зависимости от выбранного значения другого реквизита.
супер, спасибо большое) убрал лишние переменные, и за cmCheckField отдельное спасибо, обязательно нужно применить, на проверку заполненности всех полей, и что бы Стоимость была больше нуля :cool:
под каждым красивым павлиньим хвостом, скрывается самая обычная куриная жопа!!! так что меньше пафоса господа!!!
Ответить