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:![](https://i2.wp.com/habrastorage.org/getpro/habr/post_images/80c/12f/ebf/80c12febf8a61e799bb279f537ed95e8.gif)
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.![](https://i0.wp.com/habrastorage.org/getpro/habr/post_images/ae7/85c/6da/ae785c6dab6d0bc5b76fb4444f4ab731.gif)
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:
- Az elem, amelyben az esemény történt (maga a HTML-dokumentum mezője)
- esemény objektum
- 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:
- 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;
- Feldolgozási munkák, weboldalak megnyitása, hivatkozások kattintása;
- 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.
![](https://i0.wp.com/blog.it-terminal.ru/wp-content/uploads/2017/10/Screenshot_3-2.png)
Nézzük meg közelebbről, mit tettünk:
- Létrehozva Szöveges dokumentum, amely oldalunk "törzsét" tartalmazza;
- 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;
- Minden alkalmazottat rögzített benne;
- 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;
- 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:
- Először is tiltsuk le a szabványos hiperhivatkozás-kattintási feldolgozást;
- Kapjunk egy karakterláncot, amely az elemünket jellemzi, ehhez az EventData-ban megkapjuk az Element.id paraméter értékét;
- 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);
- Hivatkozás beszerzése az elemre a ReturnReference függvény segítségével;
- 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
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)
Válasz:
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 = "
Lehet, hogy nem megfelelően használom a címkéket a kompatibilitás érdekében.
Előre is köszönöm
Válasz:() Köszönöm, segített.
Nem található a win 10 rendszerleíró kulcsa.
Kérdés: HTML dokumentummező és kép
Ez hiba vagy...?
Vágólapról beillesztéskor kép helyett kereszt. A kép tulajdonságainál a cím a következőképpen jelenik meg: "cid:image001.jpg@01D0C0A8.FD63F6D0". Megpróbáltam másolni az outlook "a és böngészőből
Válasz: adjunk hozzá egy képet a képekhez, majd a html mezőben ..
Kérdés: Hogyan lehet hivatkozni a dokumentum táblázatos részének attribútumaira? (1C 8.3.11 kezelt űrlap)
Üdvözlök Mindenkit Az 1 C 8.3-ban egyelőre nem sok fejlesztési tapasztalat van, ezért tanácsot kérek. Van egy dokumentum táblázatos résszel Dimension Grid a részletekkel Csoportsablon (karakterlánc) és Méret (Nómenklatúra jellemzők könyvtára) A csoportsablon kitöltve kéréssel (az információs regiszter méretei kitöltve) a Méret oszlop mellett kézzel kell kitölteni ugyanazokat a méreteket csak a referenciakönyvből
A Méret oszlopot szeretném feltölteni egy ciklussal, főleg mivel a nevek teljesen megegyeznek, hogyan érhetem el a Dimension Grid táblázatos rész attribútumait?
Az Object.DimensionalGrid.Size azt mondja, hogy a mező nem található? meg tudná mondani, hogyan kell végrehajtani az eljárást?
Eljárás FillTemplateOnServer() Request = Új kérés; Query.Text = "KIVÁLASZT | MéretekAgeGroup.CharacteristicNomenclature.Name AS TemplateGroup | FROM | RegisterInformation.SizesAgeGroup AS SizesAgeGroup |HOL | AgeGroupSizes.TargetGroup = &Célcsoport | |RENDELÉS | DimensionsAgeGroup.OrderInList"; Query.SetParameter("Célcsoport", Object.NomenclatureGP.Composition.TargetGroup); Object.DimensionalGrid.Load(Query.Execute().Unload()); TK=Query.Execute().Unload() A TK minden oldalához a cycleTemplateValue=Page.GroupTemplate;Object.DimensionalGrid.Size=TemplateValue;EndCycle;EndProcedure Üdvözlettel Damir
Válasz: Minden remekül működött Köszönöm
Kérdés: Hiba történt egy táblázatos szakasz aktuális sorának összegének kiszámításakor egy kezelt dokumentum űrlapon
Mondd el mi a gond?
Miért nem működik a számítás?
(Document.Invoice.Form.DocumentForm.Form(5,23)): A változó nincs definiálva (FormElements)
StringTabularPart=<>>FormElements.Materials.CurrentData;
Válasz: Kód az űrlap modulban?
A felügyelt űrlapok a FormElements helyett elemeket használnak
Jó napot. A kérdés ezután merült fel. A dokumentum eljárásból meghívom a hivatkozási elem formáját, kitöltöm és felírom, és szükséges, hogy miután beírtam az eljárást, amit mindez hívott, kapjak egy hivatkozást a létrehozott elemre.
Az eljárás kódja a következő:
1C kód | ||
|
világos, hogy a referencia objektum formája megnyílik ebben a kódrészletben