home K2»Infoservis»Diskusní fórum»Univerzální formuláře - Příklad 105 - Sp...

Téma založil Kratochvíl Jan
Poslední příspěvek přidal Kratochvíl Jan 8. října 2025 12:19:38. Téma obsahuje 3 odpovědi.
Modul: Proces:
26. září 2025 12:03:55
Dobrý den,

existuje prosím aktulizace příkladu - Příklad 105 - Spuštění formuláře s výběrem -pro Univerzální formuláře?

Děkuji

Jan Kratochvíl
Příspěvek byl změněn: Kratochvíl Jan, dne: 26.09.2025 12:04:22.

26. září 2025 14:20:28
Původní skript

Nahradit // LExecutor: TxFormExecutor;

LExecutor: TUFFormExecutor;

Ještě zbývá kontrola nad jakou záložkou vlastně skript běží.

Děkuji za radu

Jan Kratochvíl
Příspěvek byl změněn: Kratochvíl Jan, dne: 26.09.2025 14:24:54.
Příspěvek byl změněn: Kratochvíl Jan, dne: 26.09.2025 14:40:12.

26. září 2025 14:40:23
Dobrý den,

pokud se Vám jedná o otevření datového modulu a po jeho zavření zpracování označených záznamů, mám pro to napsanou svou univerzální metodu, která zobrazí formulář a po jeho zavření zavolá předanou funkci. Potřebujete-li něco jiného, můžete čerpat alespoň inspiraci:

type
TCommandShowDataMExecuteFunction = procedure(ADataM: TDataM; AInstance: TObject = Nil; AParameters: VariantOpenArray = Nil);

class procedure TPemaCommand.CommandShowDataM( // Zobrazeni datoveho modulu a zavolani funkce pro oznacene zaznamy po jeho zavreni
ADataMNo: Integer; // Cislo datoveho modulu
AIndex: Integer; // Index datoveho modulu
APrimaryKeyRID: Int64 = 0; // Nastaveni primarniho klice
AFunction: TCommandShowDataMExecuteFunction = Nil; // Volana funkce
AInstance: TObject = Nil; // Instance predavana volane funkci
AParameters: VariantOpenArray = Nil; // Parametry predavane volane funkci, napr. datovy modul, do ktereho se ulozi oznacene zaznamy
AShowCommands: Boolean = True; // Zobrazovat vychozi commandy (tlacitka)
AViewMode: TUFViewMode = vwmLookup; // Mod zobrazeni
ATypeId: Integer = 0; // Typ pro zobrazeni DM ciselniku
ACaption: String = ''); // Nazev zobrazeneho modulu, pokud ma byt odlisny od vychoziho, napr. pro ciselniky
{$IFNDEF SCRIPTEX}
var
LVE: TViewExecutor;
LDataM: TDataM;
LField: TDataField;
begin
LVE := TUniFormManager.CreateViewExecutor;
LDataM := CreateDMByDataMNo(ADataMNo, True);
try
LDataM.SetState(tfNormal, AIndex, False);
if APrimaryKeyRID <> 0 then begin
LDataM.DoGetKeyBySingleSegmentPK(APrimaryKeyRID);
end;
if ATypeId > 0 then begin
LField := LDataM.FieldByProgName('TypeId');
if Assigned(LField) then begin
LField.AsLong := ATypeId;
LDataM.SetDataType;
end;
end;
LVE.Instance := LDataM;
LVE.ViewMode := AViewMode;
if ACaption <> '' then begin
LVE.Caption := ACaption;
end;
if AShowCommands then begin
LVE.DialogCommands := [cmdOKView, cmdCancelView];
end;
if (LVE.ShowInModalForm(True) In [ufvrYes, ufvrOK]) And Assigned(AFunction) then begin
if (LDataM.SelectionCount > 0) And (LDataM Is TBaseDataM) then begin
if (LDataM As TBaseDataM).SetFirstSelected then begin
while (LDataM As TBaseDataM).DoNextSelected do begin
AFunction(LDataM, AInstance, AParameters); // Provedeni funkce pro oznacene zaznamy
end;
end;
end else
if (LDataM.FilterType = tfFiltr) Or (LDataM.FilterType = tfMemorySet) then begin
LDataM.SetFirst;
while LDataM.DoNext do begin
AFunction(LDataM, AInstance, AParameters); // Provedeni funkce pro filtr nebo kontejner
end;
end else begin
AFunction(LDataM, AInstance, AParameters); // Provedeni funkce pro jeden (aktualni) zaznam
end;
end;
finally
LDataM.Free;
LVE.Free;
end;
{$ELSE}
begin
{$ENDIF}
end;


S pozdravem
Petr Adamovský

8. října 2025 12:19:38
Zdravím,

Děkuji je to perfektní.

V příkladech skriptu v K2 začíná být značný nepořádek, protože jich je spousta vytvořených pro šedé formuláře a pod modrými jsou nefunkční.

S pozdravem
Jan Kratochvíl

Příspěvek byl změněn: Kratochvíl Jan, dne: 08.10.2025 13:32:22.