Topic: Заполнение грида кнопкой с фильтром по комбобоксу

Добрый вечер!
Прошу помочь с запросом на заполнение грида на форме при помощи кнопки с выборкой из таблицы на основании данных в комбобоксе.
Попробывал через INSERT INTO SpeScore (id_score, id_nomenklature, number, price, NDS, sum, priceNDS, sumNDS) SELECT __, id_nomenklature, number, price, NDS, sum, priceNDS, sumNDS FROM SpecDog WHERE SpecDog.id_Dogovor=frmScore.Combobox2.SqlValue
не соображу как привязать id_score без записи формы перед выполнением запроса.

Post's attachments

Attachment icon Форма счета.png 16.35 kb, 55 downloads since 2022-11-05 

Re: Заполнение грида кнопкой с фильтром по комбобоксу

Сначала записывается id главной записи, затем добавляются дочерние записи.


По умолчанию этот функционал встроен в саму таблицу - если её разместить на форме редактирования, то у неё установится режим "Показать дочерние записи". Этот режим автоматически сохраняет содержимое формы редактирования, если вы создали новую запись, а затем пытаетесь что-то добавить в зависимую таблицу. И автоматически заполняет эту таблицу, если вы открыли форму в режиме редактирования.

Визуальное программирование: блог и телеграм-канал.

Re: Заполнение грида кнопкой с фильтром по комбобоксу

Все верно, но данная схема работает когда я начинаю ввод табличной части через новую форму. А в моем вопросе заполнение грида происходит через запрос (без вызова дополнительной формы). Поэтому полагаю не происходит сохранение формы счета и как следствие записи строки в таблице Score из которой мне надо вытянуть id_score для записи данных в столбец при копировании в таблицу номенклатуры счета.

Re: Заполнение грида кнопкой с фильтром по комбобоксу

INSERT INTO - это же создать запись

Re: Заполнение грида кнопкой с фильтром по комбобоксу

Да, но мне надо осуществить привязку табличной части формы к id счета, а его можно получить только при сохранении формы счета.

Re: Заполнение грида кнопкой с фильтром по комбобоксу

Как всегда, прикрепление вашего проекта прояснит возникшие у вас проблемы.
Derek.

7 (edited by k245 2022-11-22 07:27:59)

Re: Заполнение грида кнопкой с фильтром по комбобоксу

glkonst79 wrote:

Да, но мне надо осуществить привязку табличной части формы к id счета, а его можно получить только при сохранении формы счета.

Программное сохранение формы без закрытия формы. Кнопка сохранения в данном случае называется rbtOK, замените название на ваше.

function EditForm_SaveWithoutClose(AForm: TAForm;): integer;
// сохранение без закрытия формы, возвращает ID добавленной записи
// AForm - форма редактирования
// если результат -1, значит сохранить не удалось
var
  tmpButton: TdbButton;
  tmpEdit: TdbEdit;
begin
  FindC(AForm, 'rbtOK', tmpButton);
  // сохраняем
  tmpButton.dbCloseFormAfterSave := False;
  tmpButton.dbDontResetID := True;
  tmpButton.Click;
  tmpButton.dbCloseFormAfterSave := True;
  Result := tmpButton.dbGeneralTableId;
end;

procedure FindC(AForm: TAForm; AName: string; var AComponent: TComponent; ACheck: boolean = True);
// поиск компонента на форме с контролем
begin
  AComponent := AForm.FindComponent(AName);
  if ACheck and (AComponent = nil) then
    ErrMsg('FindC()', 'Не найден компонент ' + AForm.Name + '.' + AName);
end;
Визуальное программирование: блог и телеграм-канал.