DISKUSE

ŠKOLENÍ


REKLAMA


KOMENTÁŘE
Diskusní skupina: Programování


mhSkrytí přes vypočítané pole
30.06.2017
10:06:30

ID: 3678.0

mh
Ve formuli si zjistím název požadovaného pole a mám ho v pomocné proměnné. Nedaří se mi ale najít způsob, jak na základě hodnoty pole provést skrytí. Třeba @GetField(pom) funguje jen, pokud zadám přímo název pole v uvozovkách.
Dá se to nějak? Díky
VZ Podrobnosti?
01.07.2017
08:25:44

ID: 3678.1


Asi by to chtělo kousek kódu, kterým zjišťujete název pole a jak se ten název uloží do pomocné proměnné. Tzn. jestli je v té pomocné proměnné "pom" uložen opravdu název pole nebo jeho obsah, tedy hodnotu či hodnoty. Pokud to pole obsahuje více hodnot, tak @GetField vrátí jen první z nich - viz poznámka v designer helpu R8:
If the field specified in fieldName is marked to Allow multiple values, this function returns the first value only.
mpistora @GetField(pom) funguje
03.07.2017
14:17:19

ID: 3678.2


A kde je ta skrývací formule?
Záležet může na pořadí vyčíslení a na tom, zda se vůbec po nastavení proměnné provedl refresh, či alespoň refresh skrývačích formulí.
@GetField(pom) obecně normálně funguje. I když textové proměnně se ve formulích přenášejí nějakou referencí, takže pokud byla pom naplněna v nějakém divném kontextu, problém by nastat mohl.
mh pom obsahuje
04.07.2017
06:25:51

ID: 3678.3


textový řetězec, kterým je název pole ve formuláři. Skrytí pak proběhne podle toho, jestli je prázdné. Pokud zadám název pole natvrdo, tak to funguje.
mh Zjednodušeně:
04.07.2017
10:01:41

ID: 3678.4


pom:="pole";
Skrýt pokud: @GetField(pom)=""
VZ Verze LN?
04.07.2017
16:35:07

ID: 3678.5


Zkusil jsem to v R9.0.1 v lokální aplikaci notebook.nsf - nový dokument, nadpis, a 3 řádky textu, uložit. Pak na 2. řádku byla přidána skrývací formule:
pom := "Categories";
@GetField(pom) = "";

Když napíšu něco do pole Category a dám F5 (refresh), tak se 2. řádek skryje.
Po vymazání textu z pole Category a refresh se ten 2. řádek zase objeví.

Tzn. takový skrývací formule takhle zjednodušeně v R9 funguje, zkuste to samé pod svou verzí LN.
Když to pojede, tak bude chyba někde v tom složitějím kódu, tzn. bez něj nelze lépe poradit.
mh Výše popsané funguje,
11.07.2017
06:32:52

ID: 3678.6


ale tato konstrukce ne:
pom:=@Right(@ThisName;"_");
pom2:="pole_"+pom;
@GetField(pom2)=""
mh V helpu píšou,
11.07.2017
07:34:39

ID: 3678.7


že se @ThisName ke skrývání nedá použít, což je vysvětlením. Takže zřejmě neřešitelný problém.
VZ To je celkem logické
11.07.2017
10:16:39

ID: 3678.8


Skrývání platí pro celý odstavec (paragraph), což může být jeden nebo více zalamovaných řádků, případně buňka v tabulce. Ale v jednom řádku může být víc polí nebo také žádné pole, ale jen prostý text. A v tom případě @ThisName by pro každý znak v odstavci nemohla nic vrátit a pro každé pole v daném odstavci by vracela jiné jméno.
Zkrátka pro skrývání odstavce nelze použít funkci @ThisName, ale vždy jen jméno konkrétního pole. Nic menšího než celý odstavec nejde samostatně skrýt - ani jednotlivá pole, znaky, embedded prvky, hotspoty, objekty, sekce, Computed Text, atp..
mpistora Co je neřešitelný problém?
12.07.2017
16:39:11

ID: 3678.9


To že se skrývací formule zobrazuje i ve vlastnostech pole, ještě neznamená, že patří k tomu poli. Je to tatáž, co se zobrazuje ve vlastnostech textu.
@ThisName (a @ThisValue) funguje jen ve formulích polí jako je Input Validation a vždy je lze nahradit konkrétním názvem pole. Je to jen pomůcka usnadňující kopírování polí i s formulemi.
Stále nebylo přesně popsáno, co je cílem a co je tedy neřešitelný problém.
mh Podrobněji
14.07.2017
08:55:31

ID: 3678.10


Ve formuláři mám řádky s několika poli. Každá další obsahuje pole se stejnými jmény a koncovkou o jednu vyšší: _1, _2 atd. Řádka se mý skrýt, pokud je hodnota prvního pole prázdná. Skrývání explicitně podle jména pole je pracné. Problém je, jak zjistit, na které jsem řádce, a provést skrytí dle "pole_řádka".
mpistora Různé formule
14.07.2017
14:09:28

ID: 3678.11


Tak to problém není, jen ty formule musí být staticky různé. Na to musí být LN programátor zvyklý. Možná by formule šlo donastavit v DXL formátu.

Máme takový formulář, kde je tabulka s 6 sloupci a 80 řádky. V každém řádku je 6 x formule např. RowCount<9 dle počtu řádků, které mají být vidět a funguje to dobře.

Existuje sice funkce @GetFocusTable, která vrací řádek nebo sloupec buňky s fokusem, ale bohužel jen pro OnHelp event.
mh Nerozumím
15.07.2017
09:32:51

ID: 3678.12


Co je staticky různé? Různé formule dle řádku jsou právě pracné.
A jak použiju RowCount ke skrývání? To jde snad jen formulí?
VZ pracný, ale ne neřešitelný problém
15.07.2017
22:06:46

ID: 3678.13


Jesli to chápu správně, tak na každém řádku ve skrývací formuli je opravdu jiná formule, tzn. na prvním řádku žádná, na druhém RowCount < 2, na třetím RowCount < 3, atd. Někde na tom formuláři je zřejmě vypočítávané pole RowCount, které obsahuje číslo s počtem vyplněných řádků a při změně v každém poli na libovolném řádku je to nutné přepočítat?
Tzn. zjednodušeně asi něco jako
RowCount := @Elements(@Trim(Pole : Pole_1 : Pole_2 : Pole_3 ...));

To by ovšem mělo to omezení, že když je na formu třeba 20 řádků a vyplněná pole jen na prvních 15 řádcích (tj. posledních 5 řádků skrytých), a uživatel by vymazal hodnotu z Pole_1 na řádku 2, tak to schová 15. řádek, na kterém je ovšem Pole_14 vyplněno?

Pokud to tak bylo myšleno, tak je spolehlivější skrývání pomocí formulí Pole_1 = "", Pole_2 = "", Pole_3 = "" ...
A pokud je na řádku víc editovatelných polí, tak by ta skrývací formule měla hlídat z výše uvedených důvodů všechna pole na daném řádku. Jakmile bude totiž v nějakém poli na řádku hodnota a řádek se skryje jen proto, že hodnota v jiném poli na stejném řádku byla smazána uživatelem, tak je to špatně. Když se pak z těch hodnot třeba něco počítá, tak to započítá i ty skryté hodnoty a člověk pak netuší, proč to vychází zdánlivě špatně.

Zkrátka stačí do clipboardu nakopírovat Pole_ = "", nechat otevřené Properties a pak už jen klikat na jednotlivé řádky a dopisovat do Hide when čísla 1, 2, 3 ...
Zdá se to sice ze začátku pracné, ale většinou to zabere maximálně pár minut a vydrží to pak léta beze změn. Pokud takhle zvládnete nastavit skrývací formule u 10 řádků za minutu (1 řádek za 6 s), tak u 80 řádků to zabere jen 8 minut "manuální" práce.
mpistora Ano, je to tak, jak píše VZ
21.07.2017
11:19:24

ID: 3678.14


Je to trochu pracné, ale funguje to.
S RowCount to byl jen příklad. Je to tam zajištěno tak, že manipulace s řádky se provádí tlačítky, a při smazání řádku se zbytek posune k začátku.

Přidejte názor
Autor:
Profese:
E-mail: i
URL:
Phone:
Předmět:
Obsah příspěvku (i):

Kolikátý je den v měsíci ? (číslovkou bez tečky)