Обновление данных в browse
Модераторы: m0p3e, edward_K, Модераторы
Re: Обновление данных в browse
если меняю запрос - то пишет, что нужен ключ cmatpropusk для таблицы spmatpropusk 
			
			
									
						
										
						- 
				Den
 - Местный житель
 - Сообщения: 1847
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
 - Контактная информация:
 
Re: Обновление данных в browse
Значит нужно добавить такой ключ
Пока, воспользуйтесь хинтом (noindex)
			
			
									
						
										
						Пока, воспользуйтесь хинтом (noindex)
Re: Обновление данных в browse
спасибо большое за помощь! наконец-то стали правильно отображаться привязанные данные! подскажите еще, пожалуйста, как правильно передавать данные из одного интерфейса в другой? т.е. как при попытке вставки записи в привязанном фейсе получить тип накладной из основного?
			
			
									
						
										
						Re: Обновление данных в browse
у меня не получается избежать дублирования ключа:( Если с нуля заполняю таблицу строчками, всё отлично. Если закрываю свой интерфейс и потом загружаю заново- новые строчки уже не добавляются:(
вставку делаю так:
При инициализации очистку делаю
			
			
									
						
										
						вставку делаю так:
Код: Выделить всё
 cmInsertRecord:{
       Case (CurTable) Of
         #matpropusk:{
           ResetTableSpec();
           insert current matpropusk;
            _loop Pick Where ((22==Pick.wList))
               {
                If GetFirst KatSopr Where ((Pick.cRec==KatSopr.nrec)) = tsOk
                 {
                   spmatpropusk.npp:= GetSpPropuskNppNext(matpropusk.nrec);
                   spmatpropusk.ckatsopr:=pick.crec;
                   spmatpropusk.cmatpropusk:=matpropusk.nrec;
                   insert current spmatpropusk;
                   ClearBuffer (#spmatpropusk);
                   delete all pick;
                };
              };
           rescanpanel(#spmatpropusk);
        }
       end;
   }             Код: Выделить всё
Cminit: {
    delete all pick;
}; Re: Обновление данных в browse
clearbuffer делается перед заполнением записи!
			
			
									
						
										
						Код: Выделить всё
Назначение
Очищает буфер записей для таблицы iTable с записью в буфер текущих ограничений на таблицу.
Описание
procedure ClearBuffer(iTable: integer);
Параметры
iTable: integer - номер таблицы.
Re: Обновление данных в browse
я именно так и думала, но если ставлю его до вставки, то вылетает ошибка при компиляции : нет такой функции, поля или метода
			
			
									
						
										
						Re: Обновление данных в browse
Должно быть так и никак иначе:Marisha_P писал(а):я именно так и думала, но если ставлю его до вставки, то вылетает ошибка при компиляции : нет такой функции, поля или метода
Код: Выделить всё
                   ClearBuffer (#spmatpropusk); //или ClearBuffer (tnspmatpropusk);
                   spmatpropusk.npp:= GetSpPropuskNppNext(matpropusk.nrec);
                   spmatpropusk.ckatsopr:=pick.crec;
                   spmatpropusk.cmatpropusk:=matpropusk.nrec;
                   insert current spmatpropusk;
Re: Обновление данных в browse
Заработало! Спасибо огромное:) как находясь на строчке вспомогательного интерфейса получить nrec позиции из главного?
			
			
									
						
										
						Re: Обновление данных в browse
Опять проблема с обновлением данных... На вкладке хочу обработать событие
Чтобы при возврате в основной browse эти данные отобразились. Он как раз построен по таблице matpropusk. Но обновления не происходит при вовзрате на строку. Надо с ней уйти и только потом..Как сделать обновление сразу по возврату? данные в табличку записывают еще при нахождении на вкладке..
			
			
									
						
										
						Код: Выделить всё
cmDefault:{
   matpropusk.ctranspr:=transp.nrec;
   matpropusk.CMARPUNKTPR:=marpunkt.nrec;
   matpropusk.CMARPUNKTPR1:=marpunkt1.nrec;
   if (matpropusk.ctidkpr=201 or matpropusk.ctidkpr=521 or matpropusk.ctidkpr=600 or matpropusk.ctidkpr=602)
       then matpropusk.CEXPEDITORDOVPR:=dovfio.nrec
   else matpropusk.CEXPEDITORVODPR:=kndriver.nrec;
   update current matpropusk;
   rereadrecord(#matpropusk);
 }   - 
				edward_K
 - Заслуженный деятель интернет-сообщества
 - Сообщения: 5189
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: SPB galaxy spb
 
Re: Обновление данных в browse
rereadrecord(#matpropusk); должно быть не в дочернем фейсе, а в основном после вызова дочернего. В дочке хватит ReScanPanel(#matpropusk) - это чутка быстрее.
			
			
									
						
										
						Re: Обновление данных в browse
Код: Выделить всё
 
cmChangeTabbedSheetFormat:{
        ResetTableSpec();
        rereadrecord(#matpropusk);
  }         - 
				edward_K
 - Заслуженный деятель интернет-сообщества
 - Сообщения: 5189
 - Зарегистрирован: 29 мар 2005, 17:49
 - Откуда: SPB galaxy spb
 
Re: Обновление данных в browse
а. у вас встроенный. Тогда нужно связывать события и запускать из дочки. В основном тогда в событии rereadrecords.
Самое простое отправить Notify в дочке а в родителе обработать cmNotify - но так не правильно
.
сложнее завязать события
чутка сложнее. чтобы обмен был двухстороний. Для этого нужен дополнительный объект который бы юзался и там и там и связывался и там и там.
			
			
									
						
										
						Самое простое отправить Notify в дочке а в родителе обработать cmNotify - но так не правильно
Код: Выделить всё
в дочке
       Notify(cmTableChanged, word(26009)); // укажите номер вашей таблы или неиспользуемый
в родителе
    cmTableChanged:
   {   if (word(GetNotificationInfoPtr) = 26009) 
      { ReReadRecord(#table)
      }
  }
Код: Выделить всё
в родителе 
procedure OnDataChanged;
{ ReReadRecord(#table)
} // procedure OnDataChanged
в cmInit
  BindEvent(OnDataChanged, DCN.OnDataChanged);
в vih дочки
event procedure OnDataChanged;
в записи данных
    OnDataChanged;