Страница 2 из 2

Re: Обновление данных в browse

Добавлено: 29 дек 2014, 15:02
Marisha_P
если меняю запрос - то пишет, что нужен ключ cmatpropusk для таблицы spmatpropusk :(

Re: Обновление данных в browse

Добавлено: 29 дек 2014, 15:32
Den
Значит нужно добавить такой ключ
Пока, воспользуйтесь хинтом (noindex)

Re: Обновление данных в browse

Добавлено: 30 дек 2014, 10:33
Marisha_P
спасибо большое за помощь! наконец-то стали правильно отображаться привязанные данные! подскажите еще, пожалуйста, как правильно передавать данные из одного интерфейса в другой? т.е. как при попытке вставки записи в привязанном фейсе получить тип накладной из основного?

Re: Обновление данных в browse

Добавлено: 30 дек 2014, 11:35
Marisha_P
у меня не получается избежать дублирования ключа:( Если с нуля заполняю таблицу строчками, всё отлично. Если закрываю свой интерфейс и потом загружаю заново- новые строчки уже не добавляются:(
вставку делаю так:

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

 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

Добавлено: 30 дек 2014, 11:47
m0p3e
clearbuffer делается перед заполнением записи!

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

Назначение
Очищает буфер записей для таблицы iTable с записью в буфер текущих ограничений на таблицу.
Описание
procedure ClearBuffer(iTable: integer);
Параметры
iTable: integer - номер таблицы.

Re: Обновление данных в browse

Добавлено: 30 дек 2014, 13:00
Marisha_P
я именно так и думала, но если ставлю его до вставки, то вылетает ошибка при компиляции : нет такой функции, поля или метода

Re: Обновление данных в browse

Добавлено: 30 дек 2014, 13:27
m0p3e
Marisha_P писал(а):я именно так и думала, но если ставлю его до вставки, то вылетает ошибка при компиляции : нет такой функции, поля или метода
Должно быть так и никак иначе:

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

                   ClearBuffer (#spmatpropusk); //или ClearBuffer (tnspmatpropusk);
                   spmatpropusk.npp:= GetSpPropuskNppNext(matpropusk.nrec);
                   spmatpropusk.ckatsopr:=pick.crec;
                   spmatpropusk.cmatpropusk:=matpropusk.nrec;
                   insert current spmatpropusk;
Таблица SpMatPropusk в селекте присутствует?

Re: Обновление данных в browse

Добавлено: 31 дек 2014, 08:11
Marisha_P
Заработало! Спасибо огромное:) как находясь на строчке вспомогательного интерфейса получить nrec позиции из главного?

Re: Обновление данных в browse

Добавлено: 22 янв 2015, 10:19
Marisha_P
Опять проблема с обновлением данных... На вкладке хочу обработать событие

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

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);
 }   
Чтобы при возврате в основной browse эти данные отобразились. Он как раз построен по таблице matpropusk. Но обновления не происходит при вовзрате на строку. Надо с ней уйти и только потом..Как сделать обновление сразу по возврату? данные в табличку записывают еще при нахождении на вкладке..

Re: Обновление данных в browse

Добавлено: 22 янв 2015, 10:54
edward_K
rereadrecord(#matpropusk); должно быть не в дочернем фейсе, а в основном после вызова дочернего. В дочке хватит ReScanPanel(#matpropusk) - это чутка быстрее.

Re: Обновление данных в browse

Добавлено: 22 янв 2015, 11:42
Marisha_P

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

 
cmChangeTabbedSheetFormat:{
        ResetTableSpec();
        rereadrecord(#matpropusk);

  }         
здесь нужно обновлять?

Re: Обновление данных в browse

Добавлено: 22 янв 2015, 12:00
edward_K
а. у вас встроенный. Тогда нужно связывать события и запускать из дочки. В основном тогда в событии rereadrecords.
Самое простое отправить 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;
чутка сложнее. чтобы обмен был двухстороний. Для этого нужен дополнительный объект который бы юзался и там и там и связывался и там и там.