Последняя версия DataExpress 3 beta от 20 апреля 2018 года. Скачать. Энциклопедия DX.

Изменение записи объекта из другой формы

Вопросы о применении того или иного класса или функции.
drts
Интересующийся
Сообщения: 232
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Изменение записи объекта из другой формы

Сообщение drts » Пн апр 16, 2018 3:16 pm

Добрый день! Прошу помощи, туплю что-то.
В общем. Есть 2 формы. Первая- Главное меню
1.png
1.png (8.35 КБ) 119 просмотров

Сделал простенький action на кнопку:

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

{@action
Id=95B3321E-DFA8-4264-B81E-9915A3C88E53
OrigName=dr_OpenFormAndSelect
Name=Открыть форму и перейти к записи
Group=Свойства формы
UI=<ui>
  <divider caption="Объект для выбора формы" />
  <object name="objectName" caption="Объект:">
</ui>
Description=
@}
procedure dr_openform(strFrmName:string);
// проверяет наличие открытой вкладки нужной формы, если она открыта,
// то делает её активной, если нет- создает её
var i:integer;
    Tb:TTabSheet;
begin
if (Self.State=dsEdit) or (Self.State=dsInsert) then Self.Post;

for i:=0 to  MainWindow.Pages.PageCount-1 do
    begin
      if MainWindow.Pages.Pages[i].Caption=strFrmName then
      begin
        MainWindow.Pages.ActivePageIndex:=i;
        exit;
      end;
    end;
// создаем вкладку с заданным именем. Вид формы.
Tb := MainWindow.CreatePage(strFrmName, vtDefault);
// При указании активной закладки, данные читаются из базы автоматически
MainWindow.Pages.ActivePage := Tb;
end;


procedure dr_OpenFormAndSelect(objectName:String);
var comp:TdxLookupComboBox;
    objId:Integer;
    frmName:String;
begin
//работаем с комбобоксом
comp:=TdxLookupComboBox(self.FindComponentByFieldName(objectName));
//определяем форму- источник комбобокса
frmName:=(comp.SourceFormName);
// находим Id объекта комбобокса
objId:=(EvalExpr('['+objectName+']',Self));
// открываем форму
dr_openform(FrmName);
// переходим к записи с Id объекта
MainWindow.FormViews[MainWindow.Pages.TabIndex].Form.gotorecord(objId);
end;

При нажатии кнопки осуществляется переход на вкладку - формы источника объекта с 1-й формы.
Теперь нужно, чтобы при переходе от записи к записи во 2-й форме в объект 1-й формы записывался id записи 2-й формы. Вот тут я туплю, открытие программное формы 1( уже открытой) и запись значения recid в объект приводит к тому, что вылезает сообщение, что запись изменена другим пользователем, подтвердить? А хочу, чтобы отслеживалось прозрачно.
Зачем это нужно? Хочу, чтобы по кнопке переходило к выбранной таблице и переходило к последней просмотренной записи.
Спасибо.

Аватара пользователя
admin
Разработчик
Сообщения: 3445
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Изменение записи объекта из другой формы

Сообщение admin » Пн апр 16, 2018 4:05 pm

Когда появляется сообщение об изменении другим пользователем?

drts
Интересующийся
Сообщения: 232
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Re: Изменение записи объекта из другой формы

Сообщение drts » Пн апр 16, 2018 4:55 pm

Когда перехожу на вкладку первой формы и кликаю по объекту.
Запись изменяю таким вот скриптом:

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

const
  formName='Начальное меню';
  FieldName='Объект';
var
fmOldOnAfterScroll:TNotifyEvent;
procedure fmOnAfterScroll(Sender:TObject);
var Fm: TdxForm;
begin
if fmOldOnAfterScroll<> nil then fmOldOnAfterScroll(sender);
   try
    Fm := TdxForm.Create(formName);
    Fm.openrecord(1);
    if Fm[FieldName] <> Self.RecId then
    begin
      If (Fm.State <> dsInsert) and (Fm.State <> dsEdit) and (Fm.CanEdit = asOk)
        then Fm.Edit;

      Fm.fields[FieldName] := Self.RecId;
      Fm.Post;
      //fm.refresh;
      end;
    except
  debug ('ERROR');

  finally
    //if (Fm <> nil) and (Fm.State = dsEdit) then Fm.Cancel;
    if Fm <> nil then DestroyForm(Fm);
  end;

end;
procedure Form_Create;
begin
   fmOldOnAfterScroll:=self.OnAfterScroll;
   self.OnAfterScroll:=@fmOnAfterScroll;
end;

представление Форма1 - просто форма.
Вот.

Аватара пользователя
admin
Разработчик
Сообщения: 3445
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Изменение записи объекта из другой формы

Сообщение admin » Пн апр 16, 2018 8:24 pm

Ничего не понимаю. Такое сообщение может появляться только в случаях когда пользователь пытается редактировать запись или удаляет.

drts
Интересующийся
Сообщения: 232
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Re: Изменение записи объекта из другой формы

Сообщение drts » Вт апр 17, 2018 7:23 pm

admin писал(а):Ничего не понимаю.
Такое тоже бывает?)))
В принципе, я так понимаю, запись-то действительно редактируется при задании recid для объекта.
А нет идей, как организовать изменение в объекте без такой реакции?
1.png
1.png (16.83 КБ) 61 просмотр

Аватара пользователя
admin
Разработчик
Сообщения: 3445
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Изменение записи объекта из другой формы

Сообщение admin » Вт апр 17, 2018 7:29 pm

Мне непонятно, потому что нет примера базы.

drts
Интересующийся
Сообщения: 232
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Re: Изменение записи объекта из другой формы

Сообщение drts » Вт апр 17, 2018 7:52 pm

Простите, запамятовал:
TEST.zip
(45.85 КБ) 4 скачивания


Алгоритм следующий:
нажимаю на кнопку- перехожу на вкладку ТАБЛИЦА на запись из объекта.
Выбираю другую запись - в объекте на странице меню по идее должна поменяться запись. Но не меняется. Нажимаю на кнопку edit - выскакивает мессадж. Спасибо

Гocть
Интересующийся
Сообщения: 146
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Изменение записи объекта из другой формы

Сообщение Гocть » Вт апр 17, 2018 8:43 pm

drts писал(а):в объекте на странице меню по идее должна поменяться запись. Но не меняется

Меняется но не рефрешится. Надо процедуру обновления при активации закладки сделать.
Потому наверное и происходит "уже редактируется".

Какая конечная цель? Если нужно сделать "запоминатель" позиции, то есть ini для этих целей.
Фрилансер. Разработка на заказ. Консультирование.

drts
Интересующийся
Сообщения: 232
Зарегистрирован: Сб окт 29, 2016 11:35 pm
Откуда: Новороссийск

Re: Изменение записи объекта из другой формы

Сообщение drts » Вт апр 17, 2018 8:48 pm

ini не кошерно. Рефреш почему-то не помог. Я его закомментил. Идея именно в запоминании и переходе из главного меню. Я в командировке каждый раз задолбался искать последнюю запись для дополнения. Вот и созрел.

Аватара пользователя
admin
Разработчик
Сообщения: 3445
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Изменение записи объекта из другой формы

Сообщение admin » Вт апр 17, 2018 8:49 pm

Не ту форму рефрешите, надо ту, что в закладке.


Вернуться в «Вопросы по API DataExpress.»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя