A html dokumentum 1c mezője a paraméterek átadásához. Kezelt űrlapok: HTML dokumentummező és webkliens

Az 1C felügyelt űrlapokon alternatív felülettel való munkavégzés HTML-en keresztül érhető el. Alternatív interfészre lehet szükség, ha a szabványos 1C vezérlők nem elegendőek, de valami többre vágyik. Ez a cikk felsorolja a webes felülettel való munkavégzés titkait a felügyelt űrlapokon 8.2.

Html-oldal megjelenítése kezelt űrlapon 1C

Html oldal megjelenítéséhez be kell illesztenie a Html dokumentum mezőt az űrlapon, és el kell helyeznie a html kódot az adatforrásban. Ne feledje a következőket: vékony és webes kliens bekapcsolva internet böngésző különleges módon dolgozzon. Mindkét esetben az Internet Explorert IE 7 kompatibilitási módban használja.
Az első titok az vékony kliens kompatibilitási módba helyezhető az IE régebbi verziójával. Ehhez a meta X-UA-Compatible-t kell használni. Tehát a Windows 7-en a hozzáadása után


Használhat SVG objektumokat, például:

Az IE webklienst egy modernebb kompatibilitási verzióra válthatja, ha az 1C webklienst egy IFrame-be helyezi, és beállítja a kompatibilitási metacímkét a szülő html-ben. Itt látható egy példa, hogyan lehet ezt megtenni:
De ez nem garantált normál munkaés a webes kliens megjelenítése, mivel az 1C eredetileg az IE6 / 7-tel való kompatibilitás alapján tervezte a webklienst.
A második titok az, hogy a html-elrendezések elrendezése szöveges módban az 1C vizuális szerkesztő nélkül romlik, miután az elrendezést bezárják a konfigurátorban. Például, ha svg definíciókat szúrsz be a html elrendezésbe, akkor a konfigurátor újranyitása után sérült html fog megjelenni (ügyelj a fejlécre).

Ezért, ha az elrendezés bonyolultabb, mint a kép megjelenítése, akkor azt tanácsolom, hogy mentse el a html kódot egy másik helyre.

Mindent sorban tárolva közös képeken

Egy modern weboldal nem korlátozódik csupán a html-re. Ezen kívül vannak képek, js / css-fájlok. A hagyományos megközelítés lehetővé teszi a közös konfigurációs képekben elhelyezett képek tárolását és elérését, de az 1C fejlesztőknek js / css segítségével kell kitalálniuk. Szöveges fájlok vagy archiválva és kicsomagolva az oldal megjelenítése előtt, vagy teljes egészében html-ben elhelyezve. Ez a megközelítés nem használja szinte minden böngészőbe beépített gyorsítótárat a kérések lekéréséhez.
Az volt a tapasztalatom, hogy java szkriptet tettem az általános képek közé. Ez a tapasztalat részben sikeres volt; az IE kivételével minden böngésző és vékony kliens jQuery-t futtatott. Ha valaki ismeri a titkot, és ezt a módszert IE-n is működőképessé tudja tenni, kérem iratkozzon le. A műveleteket a következőképpen kell végrehajtani:
1. Hozzon létre egy általános képet, és tegyen bele bármilyen képet
2. Szerkesztési módban a html-elrendezésen jelöljön ki egy tetszőleges szöveget, és válasszon ki egy közös képet az Elements-Link menüből
3. Illessze be a hivatkozás szövegét a szkriptblokkba
4. Cserélje le a teljes képet JavaScript tartalommal

Beépített 1C keretrendszer webes klienshez

Kevesen tudják, hogy az 1C webes kliens tartalmaz egy keretrendszert, amely leegyszerűsíti az űrlapelemekkel való munkát. A keretrendszer JavaScripten fut. A parent.WebUI-n keresztül érhető el. funkciói további kutatást igényelnek, de tulajdonságai a következők:


Elméletileg ez a keret használható 1C szervereljárások meghívására. Ebben az esetben a html mező teljes mértékben integrálva lesz a kezelt űrlap többi elemével, ami platformfüggetlenséget von maga után. Most Visszacsatolás a WebBrowser Control segítségével érhető el, amely a Windowshoz kapcsolódik.

Kulcsszó __STYLE__

Régóta vakarom a fejem, mit jelent kulcsszó __STYLE__, amelyet az 1C automatikusan behelyettesít az üres html elrendezéssablonba. A lekérdezések azonban azt mutatták, hogy a __STYLE__ nem cserélődik le semmivel, és a szerver 500-as hibát ad vissza ehhez a kéréshez: Belső szerverhiba.

Egy projekt megvalósítása során szükségessé vált a javascript (továbbiakban: JS) kód futtatása a HTML Document Field objektum vezérlése alatt, az 1C-ben kapott eredménnyel. A talált cikkekben szereplő példák használata nem tűnt túl kényelmesnek (pusztán személyes vélemény). Úgy döntöttek, hogy megpróbálnak más, egyszerűbb megoldást találni, a keresésre 1 napnál nem jutott több idő.

DIV.setAttribute("onclick", "alert("Koordináták");");

Hajtsa végre a szkriptet

DIV.click();

TA-DAH. minden működik

Eljárás ExecuteScript(TextScript) DIV = Elements.doc.Document.getElementById("TESZT"); DIV.setAttribute("onclick", TextScript); DIV.click(); Vége eljárás

Frissítés 2016.08.02

JS hívásának egy másik módja a megjegyzésekben volt javasolt (köszi), ha megvan a lehetőség a dokumentum HTML kódjának megváltoztatására, akkor írhat bele egy függvényt, majd meghívhatja. átadja neki a JS kódot.

majd 1C-ben:

Elements.DocumentHTMLField1.Document.parentWindow.exec("alert("OK")");

JS eredmény visszaadása 1C-ben

A szkript eredményének 1C-be történő átviteléhez a FieldHTMLDocument objektumból egy eseményt fogunk használni. Kössünk egy OnClick eseményt a HTMLDocument Fieldhez, amely 3 paramétert kap bemenetként:

  1. Az elem, amelyben az esemény történt (maga a HTML-dokumentum mezője)
  2. esemény objektum
  3. A standard viselkedés megvalósításának jele

Az esemény kattintáskor történő elindításához a következő js-kódot kell végrehajtania

Varevt = document.createEventObject(); // üres eseményobjektum létrehozása evt.propertyName = "function1"; // Azt javaslom, hogy az eredmény nevét a propertyName prop-ba írjuk be (olyan, mint egy típus, vagy annak a függvénynek a neve, amelyből az adatot kaptuk) evt.data = "156"; //az eredményadatokat átadjuk a prop document.body.fireEvent("onclick", evt) adatnak; // az esemény végrehajtása a clickHtmlDocumentField mezőben

Az eljárásban ennek a js kódnak a végrehajtása után a második paraméterre kattintva jön az általunk létrehozott eseményobjektum. Ami elég könnyen kezelhető.

Válasz elemzési példa.

&OnClient // az esemény nevének és eredményének lekérése Eljárás DocOnClick(Element, EventData, StandardProcessing) OperationName = EventData.Event.propertyName; OperationData = EventData.Event.data; If OperationName = "" Akkor //nem a mi eseményünk Return; EndIf; If OperationName = "Function1" Then // feldolgozási eredmény ElseIf OperationName = "function2" Akkor // feldolgozás eredménye //...... EndIf; Vége eljárás

Ez a módszer megszabadul a várakozáskezelők használatától, és kényelmes eseményazonosítót biztosít. Az azonosító alapján pontosan tudjuk, hogy milyen adatokat kaptunk, és hogyan kell azokat elemezni.

Kiegészítések 2016.03.26-tól

És ezen a helyen is félreértések történtek (a hiba csak a platformon reprodukálódik 8.3.5.1570, de az ilyen helyzetek jövőbeni megelőzése érdekében megoldást adok) Az ok - amikor az eljáráshíváskor újraindították az űrlapot a dokumentum HTML mezőjével, a HTML mezőre kattintva a platformhívás elakadt és a teljes COM objektumot lehozta (Kivétel történt (htmlfájl): Undefined error). A megoldás az volt, hogy letiltották a kattintási esemény szabványos végrehajtását, és letiltották az esemény buborékolási módját. Hogyan kell ezt megtenni, lásd alább.

// esemény buborékolás letiltása

Evt.cancelBubble = igaz;

// az alapértelmezett viselkedés letiltása

Evt.returnValue = false;

Ennek eredményeként egy olyan függvényt kapunk, amely adatokat továbbít az 1-ekbe a JS-ből.

Függvény return1c(name,data)( var evt = document.createEventObject(); evt.propertyName = név; evt.data = adatok; evt.cancelBubble = igaz; evt.returnValue = hamis; document.fireEvent("onclick",evt ); );

Következtetés.

Ezen módszerek kombinálásával meglehetősen egyszerűen futtathatja a szükséges js-kódot, és adatokat fogadhat 1C-ben további feldolgozás céljából.

Megvalósítási példa itt

28
Az 1C webhelyekkel való integrálásakor mindig felmerül a kérdés, hogy bizonyos adatokat át kell-e vinni egy webszerverre. Legyen szó lekérdezési paraméterek átviteléről az adatok fogadásához a webszerverről az 1C-ben, vagy az adatok átviteléről az 1C-ből, amelyeket el kell menteni vagy valahogy 14
Az 1C platform fejlesztőinek néha az a feladatuk, hogy az 1C: Enterprise rendszerrel különféle email programokés protokollok. Az 1C Enterprise 8.0 meglehetősen kényelmes eszközökkel rendelkezik az üzenetek küldésére, levelek importálására a levélből 9
A webhelyekkel való adatcsere során gyakran használják a JSON formátumot. Sajnos az 1C-ben nincsenek szabványos eljárások ezzel a formátummal való munkához. Az egyik projekt megvalósítása során számos eljárást és funkciót dolgoztam ki, amelyek megkönnyítik a program életét. 8
A 8.3.6-os verzió előtti 1C JSON-formátum nincs implementálva, de az alábbiakban példákat mutatok be azokra a függvényekre, amelyek használhatók a JSON teljes működéséhez 1C-ben előző verziók. A JSON (JavaScript Object Notation) az szöveges formátum adatcsere, széles körben használják 5
Ebben a cikkben megpróbálom leírni a webhelyek elemzésének folyamatát az 1C használatával egy példán keresztül. Ez a cikk nem használati utasítás, hanem csak az 1C képességeit mutatja be. Amink van? 1. Weboldal az interneten, amely a termékek listáját tartalmazza

Az 1C platform egy meglehetősen hatékony eszköz, amelyet számos feladat megoldására terveztek. Ebben a cikkben egy objektumtípusról szeretnénk beszélni, amellyel:

  • Dolgozzon ActiveX komponensekkel;
  • Javascript hívása;
  • Hozzon létre és használjon hivatkozásokat különböző adatbázis-objektumokhoz.

Ezt az objektumot a HTML dokumentum 1C mezőjében hívják meg.

A HTMLDocumentField vezérlőnek van egy jelentős korlátozása a használatában – nem használható táblázatban található mezőkhöz.

Saját böngésző létrehozása 1C-ben

Próbáljunk meg ezzel a mezővel létrehozni egy olyan feldolgozást, amely egy internetes erőforrásra mutató hivatkozást nyit meg:

Nézzük meg, hogyan működik.. Készítsen képet (4. ábra)
4. ábra.

Elemezzük a látottakat:

  1. Megnyílt egy keresőablak az oldalra mutató hivatkozással, miközben a keresés a használatával történik keresőmotor alapértelmezés szerint hozzárendelve;
  2. Feldolgozási munkák, weboldalak megnyitása, hivatkozások kattintása;
  3. Szkripthiba történt az erőforrás hívásakor.

Mi a hiba? Azzal a ténnyel, hogy a HTMLDocumentField valójában egy tipikus Internet Explorer, és nem a legújabb verzió, amit a legtöbb modern forrás nem támogat. Így azok a webhelyek, amelyek nem támogatják a kompatibilitási módot, a szkript hibáival nyílnak meg.

A felhasználó kényelme érdekében lehetőség van az űrlapon "Előre" és "Vissza" navigációs parancsok létrehozására, amelyek leírják a megfelelő mozgásokat.

Hozzon létre egy hivatkozást egy adatbázis-objektumhoz

A feladat a következő:

  • Hozzon létre egy listát bármely objektumról, mondjuk az "Alkalmazott" könyvtár elemeiről;
  • Szerezzen linket mindegyikhez;
  • Nyissa meg őket közvetlenül a megfelelő hivatkozásra kattintva.

Készítsük el rajta a feldolgozásunkat és a formánkat.


Nézzük meg közelebbről, mit tettünk:

  1. Létrehozva Szöveges dokumentum, amely oldalunk "törzsét" tartalmazza;
  2. A dokumentum elejét és végét, valamint HTML dokumentumunk törzsét a megfelelő címkék segítségével írtuk le;
  3. Minden alkalmazottat rögzített benne;
  4. Az alkalmazottak nyilvántartásában olyan információkat tartalmazunk, amelyekre a későbbiekben szükségünk lesz, amikor a dolgozók teljes nevére kattintva megnyitjuk az elemeket;
  5. A mezőnket a szerkezetet leíró szövegre állítjuk.

Ha most megpróbáljuk aktiválni az elérhető hiperhivatkozások bármelyikét, azzal a ténnyel találkozunk, hogy "Ez az oldal nem található" (8. ábra)
8. ábra

Folytassuk a kezelő leírását.

Hozzunk létre egy eljárást, amely kezeli az egérkattintást egy könyvtárelemre mutató hivatkozásra (9. ábra).

9. ábra

Nézzük meg részletesebben:

  1. Először is tiltsuk le a szabványos hiperhivatkozás-kattintási feldolgozást;
  2. Kapjunk egy karakterláncot, amely az elemünket jellemzi, ehhez az EventData-ban megkapjuk az Element.id paraméter értékét;
  3. A kapott karakterláncot bontsuk fel az általunk kialakított szabályoknak megfelelően (a könyvtár neve és az egyedi azonosító, kötőjellel elválasztva);
  4. Hivatkozás beszerzése az elemre a ReturnReference függvény segítségével;
  5. A kapott hivatkozással megnyitjuk az elemet.

Teszteljük a generált kód végrehajtását.

Mivel programunk beállításaiban a modális ablakok használata tilos, a fenti kód végrehajtása hibával zárult (10. ábra). Különben minden jól működne.

10. ábra

Menjünk a konfigurátorba a Szöveg->Refaktoring->Elavult szinkronhívások->Modulhívások átalakítása menüpontban. Egy idő után a modulunk szövege úgy fog kinézni, mint a 11. ábrán

11. ábra

Miután újra megpróbálta a feldolgozást, megbizonyosodhat arról, hogy minden rendben működik, és a hivatkozásra kattintva megnyílik a könyvtár megfelelő eleme.

Néhány magyarázat a kódhoz. A statisztikák szerint ugyanabban az adatbázisban nem valószínű, hogy léteznek azonos azonosítójú elemek, de a platform csak ugyanazon a táblán belül tudja garantálni az egyediséget. Ezért két részből alakítottunk ki egy linket.

Néhány szó a Javascriptről

A program korábbi verzióiban a JS függvények hívása a document.parentWindow.MyFunk() mezőparaméteren keresztül történt, azonban modern böngészők ez a lehetőség elveszett. Az eval()-on keresztüli hívások sem működnek.

A kiút a speciális fireEvent funkció használata, amely egy univerzális mechanizmus az 1C és a Javascript közötti adatcseréhez.

Kérdés: A HTML kód nem jelenik meg a 1C dokumentum kezelt űrlapjainak HTML mezőjében


Jó nap! Valaki mondja meg, én alkotok külső feldolgozás, létrehozott egy űrlapot, létrehozott egy Mezőt az űrlapon, létrehoztam egy Kötelezettséget az űrlapon (Típus: Unlimited String), adatútvonal: Requisite (Nézet: HTML dokumentummező), a Modulba programozottan írtam:

&AtClient
Eljárási mező 1. dokumentum generált (elem)
ThisObject.Props = "

üdv

"; EndProcedure Ennek eredményeként a HTML-dokumentum mezőben (üres) semmi sem jelenik meg, bár elméletileg a Wellcome-nak kellene megjelennie, ahogyan a fórumon olvasottakból megértem.

Mit csináltam rosszul?

Válasz: Akinek kell ez az ötlet, vigye, kész működő és stabil lánc, 1C-ben tesztelve: Retail 8/2.2 menedzselt formák !!!

Kérdés: HTML dokumentummező FormElements.IE.Document.getElementsByClassName()


A történet a FormElements.IE.Document.getElementsByClassName("loginform__input-border") általában a kívánt elemet adja vissza, de itt
Az ElementsForm.IE.Document.getElementsByClassName("loginform__input-field ng-dirty ng-valid ng-touched") nem találja a módját

azok. nem működik, ha szóköz van a névben...

Miért?

Válasz:() Sok űrlap van az oldalon? Ha nem, akkor szerezzen be egy sor űrlapot, és válassza ki a kívánt űrlapot.

Kérdés: a form attribútum törlése folyamatban van (a html dokumentum mezője)


Létrehozok egy oldalt egy html dokumentummezővel. A felhasználó rákattint a hiperhivatkozásokra, amelyek a generált oldalakon nyílnak meg html dokumentummezőkkel.
Ekkor a felhasználó bezárja (programozottan) az eredeti oldalt, az biztonságosan bezár, de a származtatott oldalakon a html dokumentumok összes mezője valamiért törlődik (reset), vagyis kiürül.
Senki nem fogja megmondani, talán mi miatt? Hogyan kerüljük el

Válasz:

Ez tényleg egy ötlet!

Kérdés: Hogyan kell dolgozni a HTML-dokumentum mezőjével?


Mondja el, hogyan hajthatja végre a következő műveleteket, vagy adjon linket az anyaghoz.
A webhely űrlapján programozottan ki kell tölteni a mezőket, be kell jelentkezni és programozottan ki kell tölteni a következő mezőket az oldalon.
???

Hozzáadva 5 óra 9 perc után
Programozottan ki kell töltenie az "s" bevitelt, és kattintson a gombra ..

Hozzáadva 16 óra 29 perc után
Hogyan kell kitölteni a kitalált mezőket. Van ötleted, hogyan kell a gombra kattintani?

1 óra 17 perc után hozzáadva
Mindent értett. A szál lezárható/törölhető

Válasz: com-on keresztül. Most nincs idő. Délután vagy este postázom.

Kérdés: HTML dokumentummező (nem megint, hanem megint)


Sziasztok.
kezelt űrlapok. Saját írású konf. "Szkripthibákat" kaptam, amikor egy weboldalt HTML dokumentummezőben jelenített meg. Nem, nem próbálok teljes értékű böngészőt készíteni az 1C-n belül (hivatkozás az általános "Böngésző" űrlapra a szabványosoknál), de néhány elemi űrlapot, például egy jogosultsági űrlapot a Google-on meg kell jeleníteni. És szeretném emberi módon kiadni, hogy a felhasználó ne lepődjön meg a scriptekkel kapcsolatos átkokon.

Mi történt:
Beállítottam az IE-t a Windowsban, hogy figyelmen kívül hagyja a szkripteket. Segített. A megállapodás azonban nem ment át az egyes kliensszámítógépek beállításával járó kellemetlenségek miatt.
A szkriptek ki lettek dobva a dokumentum generált esemény bekövetkeztekor a címre érkezett oldal tartalmából. Nem segített. Az átkok még azelőtt kiugranak a félelmetes felhasználó orra elé, mielőtt kidobnák a szkripteket.
A dokumentum elküldve a szerveren való formálásra. Ezután a HTML kódot megfosztották a szkriptektől, és elküldték a kliensnek a HTML dokumentum mezőjében. Segített. A gombokra kattintás és egyéb űrlapmunka azonban nehéz volt az ügyfélen – sok művelethez olyan kontextus szükséges, amelyet a szerveren hagytak (cookie-k). És még ha meg is hagyja a szükséges gombok szkriptjeit, és sütiket húz a szerverről a kliensre, akkor is irreális követni az "idegen" oldalak tartalmának minden lehetséges átmenetét és változatát, valamint az esetlegesen előforduló mindenféle átirányítást. Lehetséges hack észlelve.
Tipikusan kiválasztott valaki más HTML-kódja kimenetének megvalósításához. Nem segített. Vagy nincs még minden "csavarva", vagy a gyártó fejlesztői nem veszik fel a kapcsolatot az ismeretlen HTML-lel, vagy leállítják a kimenetet a webkliensben, és figyelmen kívül hagyják a szkriptekkel kapcsolatos fennmaradó problémákat.

Segítség....

Válasz:() értékes információ, köszönöm

Kérdés: Segítség a webhely megnyitásához a HTML dokumentum mezőjén keresztül


Jó napot. Van egy weboldal
Ami nem támogatja a régebbi böngészőket.

Meg kell nyitni a HTML dokumentum mezőben.
Kipróbáltam a kompatibilitási módot:

Weboldal = "

";

Még mindig át