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

Функция RereadRecord

Добавлено: 18 окт 2017, 10:22
Espada
Доброго дня. столкнулся с такой ситуацией, что не могу обновить интерфейс счета фактуры. раньше, когда работал с Vip файлами использовал процедуру RereadRecord(#Basedoc), однако при использовании его в frm файле, пишет, что нет такой функции поля или метода. Подскажите пожалуйста как эту процедуру использовать в FRM, или может есть какие альтернативы? спасибо.

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 10:51
Den
Разумеется, данный метод нельзя использовать в FCOM

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 10:52
Espada
Den писал(а):Разумеется, данный метод нельзя использовать в FCOM
а есть альтернатива?)

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 12:17
RAJAH
Довольно странный вопрос... Какова цель?

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 12:20
Espada
RAJAH писал(а):Довольно странный вопрос... Какова цель?
в счет фактуру импортирую данные в спецификацию. данные заполняются нормально, но отображаются изменения только после того как перезайду в сам счет. так вот я и думал, мб есть возможность обновления интерфейса, что бы изменения отображались сразу?

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 12:31
m0p3e
Через докомпиляцию интерфейса можно попробовать.

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

HandleEvent
cmPrintDoc :
 {
   If inherited::HandleEvent(cmPrintDoc)<>heAbort
     RescanPanel(..);
 }
End;

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 12:55
Espada
m0p3e писал(а):Через докомпиляцию интерфейса можно попробовать.

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

HandleEvent
cmPrintDoc :
 {
   If inherited::HandleEvent(cmPrintDoc)<>heAbort
     RescanPanel(..);
 }
End;
я ещё не совсем разобрался с декомпиляцией) я так понимаю, это в свойство формы счета записывается, мол при выполнении функции печати обновляется интерфейс.

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 14:53
m0p3e

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

alter interface <interfacename>;
HandleEvent
cmPrintDoc :
{
   If inherited::HandleEvent(cmPrintDoc)<>heAbort
     RescanPanel(..);
}
End;
End.
После успешного вызова события cmPrintDoc будет выполнен RescanPanel. Нужно смотреть конкретный интерфейс на предмет своих заморочек, но общая идея такая.

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 16:18
Espada
m0p3e писал(а):

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

alter interface <interfacename>;
HandleEvent
cmPrintDoc :
{
   If inherited::HandleEvent(cmPrintDoc)<>heAbort
     RescanPanel(..);
}
End;
End.
После успешного вызова события cmPrintDoc будет выполнен RescanPanel. Нужно смотреть конкретный интерфейс на предмет своих заморочек, но общая идея такая.
что-то мне кажется, что проще код заполнения спецификации перенести в vip, создать кнопку "Заполнить" и использовать там RereadRecord)

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 16:58
Espada
у меня только вопросик ещё возник, при переносе кода) я использую create view но т.к. я их писал под прототип PRBDOC, я мог использовать системные переменные basedocnrec и PosNrec, для обращения к таблице basedoc и spstep соответственно. подскажите пожалуйста, как тут присвоить эти данные переменным, которые я сам создал)

Re: Функция RereadRecord

Добавлено: 18 окт 2017, 19:40
m0p3e
Espada писал(а):что-то мне кажется, что проще код заполнения спецификации перенести в vip, создать кнопку "Заполнить" и использовать там RereadRecord)
Насчет проще сомнительно, т.к. код в frm-ке уже написан и работает, но то что правильнее - однозначно.
В какой интерфейс/окно встраиваемся (GetIfcCurrentFieldName)?

Re: Функция RereadRecord

Добавлено: 19 окт 2017, 10:02
Espada
m0p3e писал(а):
Espada писал(а):что-то мне кажется, что проще код заполнения спецификации перенести в vip, создать кнопку "Заполнить" и использовать там RereadRecord)
Насчет проще сомнительно, т.к. код в frm-ке уже написан и работает, но то что правильнее - однозначно.
В какой интерфейс/окно встраиваемся (GetIfcCurrentFieldName)?
выстраиваемся в интерфейс Счет, ДО на продажу: window wvschet

Re: Функция RereadRecord

Добавлено: 19 окт 2017, 11:40
m0p3e

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

#component "L_BaseDoc"
alter interface VSchet_Release;
Create View as select SpStep AddSpStep; //На всякий случай используем свой синоним
window wVSchetZ;
HandleEvent
 cmValue50 :
{
 If UpdateTable
  {
   StartNewVisual ( vtRotateVisual,vfTimer,'Title',0 );
   ClearBuffer(#AddSpStep);
    AddSpStep.cStepDoc := StepDoc.nrec;
    ..............................................
   If Insert Current AddSpStep <> tsOk
     Message('Ошибка добавления спецификации!',Error);
   StopVisual( '',0 );
   RescanPanel($pStep); //или ReReadRecord(#SpStep);
  };
}; 
end;
end;
end.
Добавляем кнопку с вызовом cmValue50 (не используется в фейсе (по крайней мере в версии имеющихся у меня сырцов).
Если нужен цикл по спецификации, то

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

 cmValue50 :
{
 If UpdateTable
  {
   PushPos(#SpSTep);
   StartNewVisual ( vtRotateVisual,vfTimer,'Title',0 );
   _loop SpStep
     {
      ClearBuffer(#AddSpStep);
      AddSpStep.cStepDoc := StepDoc.nrec;
      ..............................................
      If Insert Current AddSpStep <> tsOk
        Message('Ошибка добавления спецификации!',Error);
      StopVisual( '',0 );
      PopPos(#SpStep);
     };
   RescanPanel(#$pStep); //или ReReadRecord(#SpStep);
  };
}; 

Re: Функция RereadRecord

Добавлено: 19 окт 2017, 13:21
Espada
m0p3e писал(а):

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

#component "L_BaseDoc"
alter interface VSchet_Release;
Create View as select SpStep AddSpStep; //На всякий случай используем свой синоним
window wVSchetZ;
HandleEvent
 cmValue50 :
{
 If UpdateTable
  {
   StartNewVisual ( vtRotateVisual,vfTimer,'Title',0 );
   ClearBuffer(#AddSpStep);
    AddSpStep.cStepDoc := StepDoc.nrec;
    ..............................................
   If Insert Current AddSpStep <> tsOk
     Message('Ошибка добавления спецификации!',Error);
   StopVisual( '',0 );
   RescanPanel($pStep); //или ReReadRecord(#SpStep);
  };
}; 
end;
end;
end.
Добавляем кнопку с вызовом cmValue50 (не используется в фейсе (по крайней мере в версии имеющихся у меня сырцов).
Если нужен цикл по спецификации, то

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

 cmValue50 :
{
 If UpdateTable
  {
   PushPos(#SpSTep);
   StartNewVisual ( vtRotateVisual,vfTimer,'Title',0 );
   _loop SpStep
     {
      ClearBuffer(#AddSpStep);
      AddSpStep.cStepDoc := StepDoc.nrec;
      ..............................................
      If Insert Current AddSpStep <> tsOk
        Message('Ошибка добавления спецификации!',Error);
      StopVisual( '',0 );
      PopPos(#SpStep);
     };
   RescanPanel(#$pStep); //или ReReadRecord(#SpStep);
  };
}; 
спасибо большое, разобрался. всё работает)