Интерфейс выбора даты и МВЗ

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

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

Ответить
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Интерфейс выбора даты и МВЗ

Сообщение Marisha_P »

Здравствуйте! Помогите кто чем может:))
Сделала свой интерфейс такого вида

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

Screen ScrSpis;
Show At(,,,);
	Fields
     dfrom  : ['DD/MM/YYYY'],noprotect;
     dto    : ['DD/MM/YYYY'],noprotect;
     NameMVZ  (,,sci13Esc): pickbutton,protect;
     NameMOL  (,,sci13Esc): pickbutton,protect;
     Vyvod : noProtect;
	Buttons
	 cmOk;
<<

     `Период     с ` .@@@@@@@@@@ ` по ` .@@@@@@@@@@

     `МВЗ`           .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
     `МОЛ`           .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    `Включать в отчет списание `
    [.] Спецодежды`
    [.] Инструмента и спецоснастки`

                                       <.  Печать  .>
>>
End;                 
Далее

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

cmInit :												 { 
    delete all pick;
   dfrom:=date(01,month(Sub_Months(cur_date,1)),year(Sub_Months(cur_date,1)));
   dto:=date(last_day(Sub_Months(cur_date,1)),month(Sub_Months(cur_date,1)),year(Sub_Months(cur_date,1)));
   NameMVZ:='По всем подразделениям';
   NameMol:='По всем МОЛам';
  };// cmInit 
И для выбора подразделений такой код:

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

cmPick:
{                                                               //пики
  StartNewVisual(vtRotateVisual,vfTimer,'Отбор по параметрам...',0);
  {
   var kol:integer; kol:=0;

   if (CurField= #NameMVZ)
   {
     Delete pickPodr where ((word(11)==PickPodr.wList));
     kol:=0;
     MarkPodr:=0;
     MarkPodr  := InitMarker('MarkPodr' ,  8, 100, 10);
     if (RunInterface('GetSomePodr')<>cmCancel)
     { Message('интерфейс выбора подразделения');
      if (ViewVed.getfirst pickPodr where ((word(11) ==PickPodr.wList))=tsok) do
       {
         kol:=kol+1;
         Message(kol);
         InsertMarker(MarkPodr,PickPodr.crec);
       }while (ViewVed.getnext pickPodr where ((word(11) ==PickPodr.wList))=tsok)
       if kol = 1 then {NameMVZ:=KatPodrP.Name;}
       else  NameMVZ:='Вы выбрали '+kol+' подразделений';
      } //if runinterface<>cmcancel
      else
      {
        NameMVZ:='По всем подразделениям';
      }
      ReScanPanel(ScrSpis);
    }//curfield
  }//startNewVisual
  stopvisual('',0);
}//cmPick
    

Проблема в следующем - если я сначала выбираю подразделения и потом меняю даты - то всё отлично. Если сначала меняю даты, то он потом не видит какие подразделения выбраны. В интерфейс выбора заходит, но количество выбранных показывает ноль..При этом если снова запустить интерфейс, то прошлое выбранное будет помечено галочкой... в чем может быть причина такого странного поведения?
Dmitry_Sol
Постоянный гость
Сообщения: 76
Зарегистрирован: 07 июн 2007, 12:32
Откуда: Витебск
Контактная информация:

Re: Интерфейс выбора даты и МВЗ

Сообщение Dmitry_Sol »

Доброго времени суток.
1. Попробуйте после screen использовать ключевое слово notablenavigation;

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

Screen ScrSpis;
noTableNavigation;
Show At(,,,);
2. ReScanPanel(scrTable) в данном случае абсолютно неуместно, так как эта команда служит для перерисовывания записей корневой таблицы iTable.
а у вас,выбор сохраняется не в таблице, а в переменных. Попробуйте для тех переменных, которые будут отображаться в screen использовать функцию присваивания set. к примеру

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

set NameMVZ:=KatPodrP.Name;
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: Интерфейс выбора даты и МВЗ

Сообщение Marisha_P »

Без rescan не происходит обновления поля "МВЗ". set не помогает.. всё равно наступает момент, когда при изменении даты интерфейс выбора подразделений перестает показывать выбранные подразделения:(
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Интерфейс выбора даты и МВЗ

Сообщение Den »

notablenavigation не нужно (даже если указать этот атрибут то на самом деле все равно с чем то свяжется). Укажите у Sсreen явно узел

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

 Screen ScrSpis;
  table katpodr; // или pickpodr
и еще..у Вас код выбора

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

 StartNewVisual(vtRotateVisual,vfTimer,'Отбор по параметрам...',0);
  {
   var kol:integer; kol:=0;

   if (CurField= #NameMVZ)
т.е. переменная kol иницализируется до метки выбора if (CurField= #NameMVZ) . Т.е если Вы , например на датовом поле нажмете f3 или выберете пиктограммкой мышкой дату, то отработает CmPick и обнулится kol
Marisha_P
Местный житель
Сообщения: 232
Зарегистрирован: 10 ноя 2010, 13:49

Re: Интерфейс выбора даты и МВЗ

Сообщение Marisha_P »

переставила kol.. тоже ничего не изменилось.. получается из самого интерфейса

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

  if (RunInterface('GETSOMEMOLMY' )<>cmCancel)
   

ничего не возвращается.. т.е. запустила отчет, например, с интервалом 01/06-30/06. всё отлично сформировалось. после формирования документа в excel выполнила

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

   CloseInterface(cmDefault);   

Открываю данный интерфейс снова, выбираю дату 01/07-09/07 к примеру, открываю интерфейс выбора МВЗ и там уже стоит галочка, запомненная с прошлого выбора.. ее снимаю, ставлю новую, и интерфейс уже ее не обрабатывает и пишет, что выбрано 0 подразделений...

при этом при инициализации интерфейса

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

 delete all pick;
выполняю. откуда галочка в памяти остается не могу понять:(
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Интерфейс выбора даты и МВЗ

Сообщение edward_K »

1. delete all срабатывает все равно по текущему фильтру. Вот если бы написали delete pick where (( ??? == pick.wList))
2. Маркер на порядок шустрее
3. Есть объект pMarker , описан в vipprogr.chm
4. Разобраться без полного кода невозможно.
Ответить