Последняя версия DataExpress 3 beta от 18 февраля 2018 года. Скачать.

Перенос данных из формы в подчиненную таблицу

Все о том как сделать что-то с помощью скриптов.
Аватара пользователя
Ivan_Strelec
Интересующийся
Сообщения: 71
Зарегистрирован: Ср ноя 01, 2017 6:57 pm

Перенос данных из формы в подчиненную таблицу

Сообщение Ivan_Strelec » Чт янв 04, 2018 8:43 pm

Добрый день!
Имеется БД при тестовой эксплуатации которой потребовалось создать в одной из форм подчиненную таблицу и
переместить в нее часть данных.
Посмотрел пример ИМПОРТ ЭКСПОРТ ТАБЛИЦ. Вроде все просто и понятно.
Но, там показан пример для ОДНОЙ записи, а мне надо переделать все записи БД.
В БД есть форма
- Работа (Form4), а в ней подчиненная таблица
- Оплата (Form34)

Создал простую форму с выборкой всех записей и написал скрипт

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

procedure ButtonClick(Sender: TObject);
Var
  Fm: TdxForm;

begin

  dxQueryGrid1.DisableControls;
  dxQueryGrid1.MoveFirst;

  while not dxQueryGrid1.EOF do
  begin
    Self.Edit;
   
 ************************************************   
    Fm := Self.Forms['Оплата'];
************************************************   

    If Self.AsF['Получено'] <> 0 Then
    begin
      Fm.Append;
      Fm['Дата оплаты'] := Self.AsS['Дата бланка'];
      Fm['Сумма'] := Self.AsF['Получено'];
      Fm.Post;
    end;

    If Self['Выдано'] <> null Then
    begin
      Fm.Append;
      Fm['Дата оплаты'] := Self.AsS['Выдано'];
      Fm['Сумма'] := Self.AsF['Окончательный расчет'];
      Fm.Post;
    end;
    Self.Post;
    dxQueryGrid1.MoveNext;
  end;

end;
procedure Form_Create;
begin
   // Привязка к событию нажатия кнопки dxButton1 ("Экспорт").
  dxButton1.OnClick := @ButtonClick;
end;                                         


И естественно, в месте, отмеченном ******** получаю ошибку, что форма не найдена.
Понимаю, что надо использовать Findcomponent, как описано в инструкции по программированию, но не могу
правильно составить выражение.
Прошу помочь в этом вопросе.

Спасибо.

jurist23rus
Эксперт
Сообщения: 1905
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Перенос данных из формы в подчиненную таблицу

Сообщение jurist23rus » Чт янв 04, 2018 8:55 pm

Переменная Fm вами определена как TdxForm, но саму форму вы не создаёте, а просто пытаетесь пустой переменной что-то присвоить. Надо так:

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

Fm := TdxForm.Create ('Какая-то форма');
Fm.Open;
//и т.д.


Ну а вообще, желательно показывать всю базу, а не отдельно выдернутый код скрипта.

Там по вашему скрипту много вопросов, поэтому уверен моего ответа вам не хватит, показывайте всю базу.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
Ivan_Strelec
Интересующийся
Сообщения: 71
Зарегистрирован: Ср ноя 01, 2017 6:57 pm

Re: Перенос данных из формы в подчиненную таблицу

Сообщение Ivan_Strelec » Чт янв 04, 2018 9:07 pm

К сожалению в Вашем варианте аналогичная ошибка - Форма не найдена.
Если разместить кнопку и вызов скрипта на форме, которую надо переделать (ну и убрать цикл),
то алгоритм работает, т.к. подчиненная таблица Оплата находится в этой же форме.
Но когда пытаешься добраться до нее из другой формы, в которой отбираешь все записи БД,
то там, как я понимаю, надо искать эту подчиненную таблицу......

jurist23rus
Эксперт
Сообщения: 1905
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: Перенос данных из формы в подчиненную таблицу

Сообщение jurist23rus » Чт янв 04, 2018 9:08 pm

Вы хотите в гадалки поиграть или всё-таки выложите базу данных или хотя бы пример базы с ошибкой!?
Destiny is a very convenient word for those who never take decisions.

serjkabanov
Новичок
Сообщения: 13
Зарегистрирован: Пт июн 30, 2017 4:16 pm

Re: Перенос данных из формы в подчиненную таблицу

Сообщение serjkabanov » Чт янв 04, 2018 9:09 pm

Попробуйте что то вроде этого кода
procedure ButtonClick(Sender: TObject);
Var
Fm: TdxForm;

begin
dxQueryGrid1.DisableControls;
dxQueryGrid1.MoveFirst;
while not dxQueryGrid1.EOF do
begin
Fm := CreateForm('Работа');
Fm.OpenRecord(dxQueryGrid1.RecId);
Fm.edit;

With Self.Forms['Оплата'] do begin
If (State <> dsInsert) and (State <> dsEdit) and (CanEdit = asOk)
then Edit; begin
if Self.AsF['Получено'] <> 0 Then
begin
Append;
fields['Дата оплаты'] := Self.AsS['Дата бланка'];
fields['Сумма'] := Self.AsF['Получено'];
end;
If Self['Выдано'] <> null Then
begin
Append;
fields['Дата оплаты'] := Self.AsS['Выдано'];
fields['Сумма'] := Self.AsF['Окончательный расчет'];
end;
end;
end;
Fm.Post;
dxQueryGrid1.MoveNext;
end;
end;
procedure Form_Create;
begin
// Привязка к событию нажатия кнопки dxButton1 ("Экспорт").
dxButton1.OnClick := @ButtonClick;
end;

Аватара пользователя
Ivan_Strelec
Интересующийся
Сообщения: 71
Зарегистрирован: Ср ноя 01, 2017 6:57 pm

Re: Перенос данных из формы в подчиненную таблицу

Сообщение Ivan_Strelec » Чт янв 04, 2018 9:17 pm

Вот структура БД
Снимок3.JPG
Снимок3.JPG (16.64 КБ) 175 просмотров


Я пытаюсь из формы Работа перенести часть данных в подчиненную таблицу Оплата.
Для этого создал простую форму Переделка оплаты в которой по запросу выбираю все записи из Работы и вышеприведенным скриптом
пытаюсь заполнить таблицу Оплата.
Выложить базу немного проблематично, т.к. в ней куча персональных данных, которые надо
подчистить.

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

Re: Перенос данных из формы в подчиненную таблицу

Сообщение admin » Чт янв 04, 2018 9:25 pm

Вариант, предложенный serjkabanov, пробовали? Там почти правильно (без базы трудно определить, да и без форматирования).

Аватара пользователя
Ivan_Strelec
Интересующийся
Сообщения: 71
Зарегистрирован: Ср ноя 01, 2017 6:57 pm

Re: Перенос данных из формы в подчиненную таблицу

Сообщение Ivan_Strelec » Чт янв 04, 2018 9:38 pm

Попробовал.
В операторе

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

With Self.Forms['Оплата'] do begin

Форма Оплата не найдена. :(

serjkabanov
Новичок
Сообщения: 13
Зарегистрирован: Пт июн 30, 2017 4:16 pm

Re: Перенос данных из формы в подчиненную таблицу

Сообщение serjkabanov » Чт янв 04, 2018 9:44 pm

With Self.Forms['Оплата'] do begin

замени на With Fm.Forms['Оплата'] do begin

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

Re: Перенос данных из формы в подчиненную таблицу

Сообщение admin » Чт янв 04, 2018 9:47 pm

Self.Forms - это обращение к подчиненной форме. Чтобы обратиться к другой основной форме, ее надо создать - TdxForm.Create('...').


Вернуться в «Общие вопросы.»

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

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